|
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 |
Deklaration |
Datentyp |
Standard |
Beschreibung |
|
|---|---|---|---|---|---|
|
S7- |
S7- |
||||
|
REQ |
IN |
Bool |
FALSE |
FALSE = Keine Anforderung |
|
|
MB_ADDR |
IN |
UInt |
Word |
‑ |
Modbus-RTU-Stationsadresse: Standard-Adressierungsbereich (1 bis 247 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: |
|
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 |
‑ |
|
|
|
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.
|
|
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.
|
|
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 |
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, |
- |
- |
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.
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.