WRITE_READ_VARWRITE_READ_VAR: Lesen und Schreiben interner Register in ein Modbus-Gerät
Diese Funktion liest und schreibt interne Register (nur vom Typ MW) in einem externen Gerät im Modbus-Protokoll. Die Lese- und Schreiboperationen finden im Rahmen derselben Transaktion statt.
Die Schreiboperation wird zuerst durchgeführt. Anschließend kann die Funktion WRITE_READ_VAR folgende Aufgaben ausführen:
oAufeinander folgende interne Register schreiben und deren Werte zur Überprüfung sofort zurücklesen
oEinige aufeinander folgende interne Register schreiben und andere lesen – beides in einem einzigen, eindeutigen Request
Beschreibung der WRITE_READ_VAR-spezifischen Parameter
Eingang |
Typ |
Kommentar |
---|---|---|
ObjType |
ObjType ist der Typ des zu schreibenden und zu lesenden Objekts (nur MW). |
|
FirstWriteObj |
DINT |
FirstWriteObj ist der Index des ersten zu schreibenden Objekts. |
WriteQuantity |
UINT |
WriteQuantity ist die Anzahl der zu schreibenden Objekte: o1 bis 121: Register (Typ MW) |
WriteBuffer |
POINTER TO BYTE |
Adresse des Zeigers zu dem Array mit den Daten, die in das Zielgerät geschrieben werden sollen. Das Array muss mindestens der Größe der zu schreibenden Daten entsprechen. Sie müssen die ADR-Funktion heranziehen, um die Adresse des ersten Bytes des Arrays zu übergeben (siehe das CFC-Diagramm im Beispiel). |
FirstReadObj |
DINT |
ReadFirstObj ist der Index des ersten zu lesenden Objekts. |
ReadQuantity |
UINT |
ReadQuantity ist die Anzahl der zu lesenden Objekte: o1...125: Register (Typ MW) |
ReadBuffer |
POINTER TO BYTE |
Adresse des Zeigers zu dem Array, in dem die empfangenen, aus dem Zielgerät ausgelesenen Daten enthalten sind. Das Array muss mindestens der Größe der zu lesenden Daten entsprechen. Sie müssen die ADR-Funktion heranziehen, um die Adresse des ersten Bytes des Arrays zu übergeben (siehe das CFC-Diagramm im Beispiel). |
HINWEIS: Um eine Zugriffsverletzung aufgrund eines ungültigen Zeigerzugriffs (außerhalb der Grenzen) auf den Speicher zu verhindern, müssen Sie sicherstellen, dass die Größe des mit dem Eingang Buffer verknüpften Arrays mindestens dem Umfang der Daten entspricht, die in das Zielgerät geschrieben bzw. vom Zielgerät empfangen werden sollen. Es hat sich als vorteilhaft erwiesen, die definierte Menge (Quantity) der schreibenden bzw. zu lesenden Daten mit der Pufferdeklaration zu verknüpfen, wie in nachstehendem Beispiel gezeigt.
Das Beispiel zeigt die Implementierung des Funktionsbausteins WRITE_READ_VAR in Verbindung mit dem Funktionsbaustein ADDM zum Schreiben von zwei Registern ab Adresse 11 und zum Lesen von zwei Registern ab Adresse 1 eines Modbus-Slaves. Der Modbus-Slave wird mit Adresse 8 angegeben und muss über die serielle Leitungsschnittstelle 1 erreichbar sein. Vorbedingung ist die Konfiguration des Modbus Managers als Master unter der seriellen Leitungsschnittstelle 1.