Modbus_Master: Als Modbus-Master kommunizieren (S7-1200, S7-1500) - STEP 7

MODBUS (RTU) (S7-1200, S7-1500)

ft:publication_title
MODBUS (RTU) (S7-1200, S7-1500)
Product
STEP 7
Version
V20
Publication date
11/2024
Language
de-DE
Modbus_Master: Als Modbus-Master kommunizieren

Hinweis

Einsatz mit CM1241

Der Einsatz dieser Anweisung mit einem CM1241 ist erst ab einem Firmware-Stand V2.1 des Moduls möglich.

Beschreibung

Die Anweisung Modbus_Master kommuniziert als Modbus-Master über einen Port, der mit der Anweisung Modbus_Comm_Load konfiguriert wurde. Wenn Sie die Anweisung Modbus_Master in Ihr Programm einfügen, wird automatisch ein Instanz-Datenbaustein zugewiesen. Der Parameter MB_DB der Anweisung Modbus_Comm_Load muss mit dem (statischen) Parameter MB_DB der Anweisung Modbus_Master verschaltet werden.

Hinweis

Sie dürfen für einen Instanz-DB der Anweisung Modbus_Master keine Remanenz (Retain) aktivieren.

Parameter

Parameter

Deklaration

Datentyp

Standard

Beschreibung

S7-
1200/1500

S7-
300/400/
WinAC

REQ

IN

Bool

FALSE

FALSE = Keine Anforderung
TRUE = Anforderung, Daten an den Modbus-Slave zu senden

MB_ADDR

IN

UInt

Word

Modbus-RTU-Stationsadresse:

Standard-Adressierungsbereich (1 bis 247 sowie 0 für Broadcast)
Erweiterter Adressierungsbereich (1 bis 65535 sowie 0 für Broadcast)

Der Wert 0 ist für den Broadcast des Telegramms an alle Modbus-Slaves reserviert. Für den Broadcast werden nur die Modbus-Funktionscodes 05, 06, 15 und 16 unterstützt.

MODE

IN

USInt

Byte

0

Auswahl Modus: Gibt die Art der Anforderung an (Lesen, Schreiben oder Diagnose). Weitere Informationen finden Sie in der Tabelle der Modbus-Funktionen unten.

DATA_ADDR

IN

UDInt

DWord

0

Anfangsadresse im Slave: Gibt die Anfangsadresse der Daten an, auf die im Modbus-Slave zugegriffen werden soll. Die gültigen Adressen finden Sie in der Tabelle der Modbus-Funktionen unten.

DATA_LEN

IN

UInt

Word

0

Datenlänge: Gibt die Anzahl der Bits oder Wörter an, auf die diese Anforderung zugreifen soll. Die gültigen Längen finden Sie in der Tabelle der Modbus-Funktionen unten.

COM_RST

IN/OUT

---

Bool

FALSE

Initialisierung der Anweisung Modbus_Master

Mit TRUE wird die Anweisung initialisiert. Anschließend wird COM_RST von der Anweisung wieder auf FALSE gesetzt.

Hinweis:
Der Parameter ist nur für S7-300/400-Anweisungen verfügbar.

DATA_PTR

IN/OUT

Variant

Any

Daten-Pointer: Zeigt auf die Merker- oder DB-Adresse für die zu schreibenden oder zu lesenden Daten.

Ab Anweisungsversion V3.0:

Der Parameter darf auf einen optimierten Speicherbereich zeigen. Im optimierten Speicherbereich ist ein Single-Element oder ein Array erlaubt mit folgenden Datentypen: Bool, Byte, Char, Word, Int, DWord, DInt, Real, USInt, UInt, UDInt, SInt, WChar. Jeder andere Datentyp führt zur Fehlermeldung 16#818C.

DONE

OUT

Bool

FALSE

Das Bit DONE ist einen Zyklus lang TRUE, nachdem die letzte Anforderung fehlerfrei ausgeführt wurde.

BUSY

OUT

Bool

  • FALSE – Keine Auftrag für Modbus_Master aktiv

  • TRUE – Auftrag für Modbus_Master in Bearbeitung

ERROR

OUT

Bool

FALSE

Das Bit ERROR ist einen Zyklus lang TRUE, nachdem die letzte Anforderung mit Fehler beendet wurde. Der Fehlercode im Parameter STATUS ist nur in dem einen Zyklus gültig, in dem ERROR = TRUE ist.

STATUS

OUT

Word

0

Fehlercode (siehe Fehlermeldungen)

Variablen im Datenbaustein des Modbus-Master

Die folgende Tabelle zeigt die öffentlichen statischen Variablen im Instanz-DB von Modbus_Master, die in Ihrem Programm verwendet werden können.

Statische Variablen im Instanz-DB

Variable

Datentyp

Standard

Beschreibung

Blocked_Proc_Timeout

Real

3.0

Zeitdauer (in Sekunden), die auf eine blockierte Modbus-Master-Instanz gewartet werden soll, bevor diese Instanz als AKTIV entfernt wird. Dies kann beispielsweise vorkommen, wenn eine Master-Anforderung ausgegeben wurde und das Programm dann aufhört, die Masterfunktion aufzurufen, bevor es die Anforderung vollständig beendet hat. Der Zeitwert muss größer als 0 und kleiner als 55 Sekunden sein, ansonsten tritt ein Fehler auf.

Siehe hierzu auch Abschnitte "Regeln für die Kommunikation des Modbus-Master" und "Aufruf der Anweisung Modbus_Master mit verschienenen Parametereinstellungen".

Extended_Addressing

Bool

FALSE

Konfiguriert die Slave-Stationsadresse als einzelnes oder doppeltes Byte.

  • FALSE = Ein-Byte-Adresse; 0 bis 247

  • TRUE = Zwei-Byte-Adresse (entspricht der erweiterten Adressierung);
    0 bis 65535

Compatibility_Mode 1)

Bool

FALSE

Kompatibilitätsmodus mit CP 341, CP 441-2 und ET 200S 1SI mit Treiber für Modbus RTU und mit ET 200S 1SI für Modbus.
Der Standardwert ist 0.

  • FALSE = nach Modbus-Spezifikation, nicht kompatibel

  • TRUE = kompatibel

    • Bei FC1 und FC2 gilt: Die aus dem Empfangstelegramm gelesenen Daten werden wortweise in den adressierten Speicher der CPU geschrieben und dabei byteweise ausgetauscht.
      Falls die Anzahl zu übertragender Bits nicht ein Vielfaches von 16 ist, werden die nicht relevanten Bits im letzten Wort auf Null gesetzt.

    • Bei FC15 gilt: Die zu übertragenden Worte werden wortweise aus dem adressierten Speicher gelesen und byteweise in das Sendetelegramm geschrieben.
      Falls die Anzahl zu übertragender Bits nicht ein Vielfaches von 8 ist, werden die nicht relevanten Bits im letzten Byte unverändert aus dem adressierten Speicher gelesen und im Sendetelegram eingetragen.

MB_DB

MB_BASE

-

Der Parameter MB_DB der Anweisung Modbus_Comm_Load muss mit diesem Parameter MB_DB der Anweisung Modbus_Master verschaltet werden.

Ihr Programm kann in die Variablen Blocked_Proc_Timeout und Extended_Addressing Werte schreiben, um die Modbus-Master-Operationen zu steuern.

Regeln für die Kommunikation des Modbus-Master

  • Modbus_Comm_Load muss ausgeführt werden, um einen Port zu konfigurieren, damit die Anweisung Modbus_Master mit diesem Port kommunizieren kann.

  • Wenn ein Port als Modbus Master verwendet werden soll, darf dieser Port nicht von Modbus_Slave verwendet werden. Eine oder mehrere Instanzen von Modbus_Master 1) können mit diesem Port verwendet werden. Doch alle Ausführungen von Modbus_Master müssen den gleichen Instanz-DB für den Port verwenden.

  • Die Modbus-Anweisungen nutzen keine Kommunikations-Alarmereignisse zum Steuern des Kommunikationsprozesses. Ihr Programm muss die Anweisung Modbus_Master auf abgeschlossene Aufträge abfragen (DONE, ERROR).

  • Es wird empfohlen, alle Ausführungen von Modbus_Master für einen bestimmten Port aus einem Programmzyklus-OB aufzurufen. Modbus-Master-Anweisungen können nur in jeweils einem Programmzyklus oder in jeweils einer zyklischen/zeitgesteuerten Bearbeitungsebene ausgeführt werden. Sie dürfen nicht in verschiedenen Bearbeitungsebenen bearbeitet werden. Die Vorrangunterbrechung einer Modbus-Master-Anweisung durch eine andere Modbus-Master-Anweisung in einer Bearbeitungsebene mit höherer Priorität führt zu nicht ordnungsgemäßem Betrieb. Die Modbus-Master-Anweisungen dürfen nicht in Anlauf-, Diagnose- oder Zeitfehlerebenen bearbeitet werden.

1) Mit "Instanz von Modbus Master" ist hier ein Aufruf der Anweisung Modbus_Master mit gleicher Verschaltung mit einer Anweisung Modbus_Comm_Load und gleicher Einstellung für die Parameter MB_ADDR, MODE, DATA_ADDR und DATA_LEN gemeint.

Beispiel.

Modbus_Master wird aufgerufen mit MODE=0 und DATA_ADDR=10

Dieser Auftrag ist nun aktiv, bis er mit DONE=1 oder ERROR=1 beendet wird oder bis die am Parameter Blocked_Proc_Timeout parametrierte Zeitüberwachung abgelaufen ist. Wird nach Ablauf der Zeitüberwachung ein neuer Auftrag gestartet, bevor der vorherige Auftrag beendet ist, so wird der vorherige Auftrag ohne Fehlermeldung abgebrochen.

Falls nun, während dieser Auftrag läuft, ein zweiter Aufruf der Anweisung mit den gleichen Instanzdaten, aber anderen Einstellungen der Parameter MODE und DATA_ADDR erfolgt, so wird dieser zweite Aufruf mit ERROR=1 und STATUS=8200 beendet.

Aufruf der Anweisung Modbus_Master mit verschienenen Parametereinstellungen

Sollen mehrere Aufrufe der Anweisung Modbus_Master mit unterschiedlichen Einstellungen für MB_ADDR, MODE, DATA_ADDR oder DATA_LEN im Ihrem Programm platziert werden, müssen Sie sicherstellen, dass zu einer Zeit nur einer dieser Aufrufe aktiv ist, anderenfalls wird die Fehlermeldung 16#8200 (die Schnittstelle ist durch eine laufende Anfrage belegt) ausgegeben.

Falls ein Aufruf nicht fertig bearbeitet werden kann, wird die Zeitüberwachung über den Parameter Blocked_Proc_Timeout aktiv und beendet den laufenden Auftrag.

Parameter REQ

FALSE = Keine Anforderung; TRUE = Anforderung, Daten an den Modbus-Slave zu senden

Freigabe der angeforderten Übertragung. Dadurch wird der Inhalt des Puffers zur Punkt-zu-Punkt-Kommunikationsschnittstelle übertragen.

Über die Parameter DATA_ADDR und MODE wählen Sie den Modbus-Funktionscode aus.

DATA_ADDR (Modbus-Anfangsadresse im Slave): Gibt die Anfangsadresse der Daten an, auf die im Modbus-Slave zugegriffen werden soll.

Die Anweisung Modbus_Master nutzt statt eines Funktionscodeeingangs einen Eingang MODE. Die Kombination aus MODE und DATA_ADDR legt den Funktionscode fest, der im eigentlichen Modbus-Telegramm verwendet wird. Die folgende Tabelle zeigt die Zuordnung zwischen dem Parameter MODE, dem Modbus-Funktionscode und dem Modbus-Adressbereich in DATA_ADDR.

Modbus-Funktionen

MODE

DATA_ADDR (Modbus-Adresse)

DATA_LEN
(Länge der Daten)

Modbus-Funktionscode

Operation und Daten

0

 

Bits pro Anforderung

01

Ausgangsbits lesen:

1

bis

9999

1

bis

2000/1992 1

0

bis

9998

0

 

Bits pro Anforderung

02

Eingangsbits lesen:

10001

bis

19999

1

bis

2000/1992 1

0

bis

9998

0

 

Wörter pro Anforderung

03

Halteregister lesen:

40001

bis

49999

1

bis

125/124 1

0

bis

9998

400001

bis

465535

1

bis

125/124 1

0

bis

65534

0

 

Wörter pro Anforderung

04

Eingangswörter lesen:

30001

bis

39999

1

bis

125/124 1

0

bis

9998

1

 

Bit pro Anforderung

05

Ein Ausgangsbit schreiben:

1

bis

9999

1

   

0

bis

9998

1

 

1 Wort pro Anforderung

06

Ein Halteregister schreiben:

40001

bis

49999

1

   

0

bis

9998

400001

bis

465535

1

   

0

bis

65524

1

 

Bits pro Anforderung

15

Mehrere Ausgangsbits schreiben:

1

bis

9999

2

bis

1968/1960 1

0

bis

9998

1

 

Wörter pro Anforderung

16

Mehrere Halteregister schreiben:

40001

bis

49999

2

bis

123/122

0

bis

9998

400001

bis

465534

2

bis

123/122 1

0

bis

65534

2 2

Bits pro Anforderung

15

Ein oder mehrere Ausgangsbits schreiben:

1

bis

9999

1

bis

1968/1960 1

0

bis

9998

2 2

 

Wörter pro Anforderung

16

Ein oder mehrere Halteregister schreiben:

40001

bis

49999

1

bis

123

0

bis

9998

400001

bis

465535

1

bis

122 1

0

bis

65534

11

Beide Operanden DATA_ADDR und DATA_LEN von Modbus_Master werden bei dieser Funktion ignoriert.

11

Statuswort und Ereigniszähler der Slave-Kommunikation lesen. Das Statuswort zeigt beschäftigt an (0 – nicht beschäftigt, 0xFFFF - beschäftigt). Der Ereigniszähler wird bei jeder erfolgreichen Abarbeitung eines Telegramms inkrementiert.

80

 

1 Wort pro Anforderung

08

Slave-Zustand über Daten-Diagnosecode 0x0000 prüfen (Prüfschleifentest – Slave gibt ein Echo der Anforderung zurück)

-

   

1

   

-

   

81

 

1 Wort pro Anforderung

08

Slave-Ereigniszähler über Daten-Diagnosecode 0x000A zurücksetzen

-

   

1

   

-

   

104 3

 

Wörter pro Anforderung

04

Eingangswörter lesen

0

bis

65535

1

bis

125/124 1

0

bis

65535

3 bis 10,
12 bis 79,
82 bis 103, 105 bis 255

-

   

-

   

Reserviert

Parameter DATA_PTR

Der Parameter DATA_PTR zeigt auf die DB- oder M-Adresse, in die geschrieben oder aus der gelesen wird. Wenn Sie einen Datenbaustein verwenden, müssen Sie einen globalen Datenbaustein anlegen, der den Datenspeicher für Lese- und Schreibvorgänge auf Modbus-Slaves bereitstellt.

Hinweis

S7-1200/1500 - Der über DATA_PTR adressierte Datenbaustein muss die direkte Adressierung zulassen

Der Datenbaustein muss die direkte (absolute) und die symbolische Adressierung zulassen.

Hinweis

Verwendung von Funktionscode 5

Mit Funktionscode 5 kann ein einzelnes Bit gesetzt oder gelöscht werden.

Zum Setzen eines Bits muss im ersten Wort des über DATA_PTR adressierten DB- oder Merkerbereichs der Wert "16#FF00" vorgegeben werden.

  • Bei S7-1200 kann zum Setzen eines Bits auch der Wert "16#0100" vorgegeben werden.

  • Zum Rücksetzen eines Bits muss im ersten Wort des über DATA_PTR adressierten DB- oder Merkerbereichs der Wert "16#0000" vorgegeben werden.

Alle anderen Werte werden mit der ERROR = TRUE und STATUS = 16#8384 abgewiesen.

Datenbausteinstrukturen für den Parameter DATA_PTR

  • Diese Datentypen gelten für das Lesen von Wörtern des Modbus-Adressbereichs (DATA_PTR) 30001 bis 39999, 40001 bis 49999 und 400001 bis 465535 sowie für das Schreiben von Wörtern des Modbus-Adressbereichs (Parameter DATA_PTR) 40001 bis 49999 und 400001 bis 465535.

    • Standard-Array der Datentypen WORD, UINT oder INT

    • Benannte Struktur vom Typ WORD, UINT oder INT, bei der jedes Element einen eindeutigen Namen und einen 16-Bit-Datentyp hat.

    • Benannte komplexe Struktur, bei der jedes Element einen eindeutigen Namen und einen 16- oder 32-Bit-Datentyp hat.

  • Zum Lesen und Schreiben von Bits für den Modbus-Adressbereich (Parameter DATA_PTR) 00001 bis 09999 und zum Lesen von Bits von 10001 bis 19999.

    • Standardfeld aus Bool'schen Datentypen.

    • Benannte Bool'sche Struktur aus eindeutig benannten Bool'schen Variablen.

  • Es wird empfohlen, dass jede Anweisung Modbus_Master einen eigenen getrennten Speicherbereich hat, um das Risioko für Datenschäden zu verringern.

  • Es ist nicht erforderlich, dass die Datenbereiche für DATA_PTR in demselben globalen Datenbaustein liegen. Sie können einen Datenbaustein mit mehreren Bereichen für Modbus-Lesevorgänge, einen Datenbaustein für Modbus-Schreibvorgänge oder einen Datenbaustein für jede Slave-Station anlegen.

Anweisungsversionen

Die Version 3.0 ist funktional identisch zur Version 2.4 und wurde aufgrund interner Maßnahmen erhöht.