Daten mit Offset in Slave schreiben
Mit diesem Befehl schreiben Sie Daten mit dem Protokoll MEWTOCOL-COM oder Modbus-RTU von einem Master in einen Slave wie in den Systemregistern der verwendeten Kommunikationsschnittstelle definiert. Stellen Sie sicher, dass für Master und Slave das gleiche Protokoll eingestellt ist. Master und Slave müssen übereinstimmende Speicherbereiche haben.
Bei Datenübertragungen unter Verwendung des Modbus-Protokolls erzeugt der Compiler Modbus-Befehle auf der Grundlage der Modbus-Referenznummern.Eingang
Legt die Kommunikationsschnittstellen fest (je nach SPS-Typ):
COM-Schnittstelle z.B. SYS_COM0_PORT
Ethernet-Schnittstelle z.B. SYS_ETHERNET_USER_CONNECTION_1
MCU/SCU z.B. 16#xx01 (xx = Steckplatznummer) in COM01
Teilnehmeradresse des Slaves (MEWTOCOL: 1–99,MODBUS: 1–247)
Einstellen auf 1, wenn ein SYS_ETHERNET_USER_CONNECTION_xx auf Eingang Port angewandt wird
Wortdatenbereich auf dem Mastermodul für die Daten, die in den Slave geschrieben werden sollen.
Anzahl der zu übertragenden Wortdaten (Bits).
Entweder:
Anzahl der Worte
für Modbus RTU: 16#001–16#07F
für MEWTOCOL-COM: 16#001–16#1FD oder 16#001–16#1B (FP0, FP-e)
Oder:
Steuerwort für die Bitübertragung: 16#8T0F mit T für eine Bitübertragung zum Master und F für eine Bitübertragung zum Slave (gilt nicht für FP7).
Speicherbereich auf dem Slave, in dem die Daten gespeichert werden sollen (Ziel = SlaveMemoryArea + SlaveMemoryOffset).
Speicherbereichstyp |
Systemvariable |
---|---|
Interne Merker |
|
Koppelmerker |
|
Externe Eingänge |
|
Externe Ausgänge |
|
Interne Merker |
|
Einstellwert für Zeitgeber/Zähler |
|
Istwert für Zeitgeber/Zähler |
|
Datenregister |
|
Koppelmerker |
|
Koppeldatenregister |
|
File-Register |
|
Eingangsregister |
|
Ausgangsregister |
Offset des Speicherbereichs, in dem die Daten im Slave gespeichert werden sollen (Ziel = SlaveMemoryArea + SlaveMemoryOffset).
Ausgang
Nur für FP7: Eine Beschreibung aller Fehlercodes finden Sie in der Tabelle der Modbus/MEWTOCOL-Kommunikationsfehler-Codes.
Für andere SPS: auf 0 gesetzt
Beim Senden: Sendemerker Master-Kommunikation ist TRUE
Senden abgeschlossen: Sendemerker Master-Kommunikation ist FALSE
Normaler Abschluss: FALSE
Abschluss mit Fehler: TRUE
wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich
wenn die durch Words_Bits angegebene Anzahl der gesendeten Daten falsch ist.
wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich
wenn die durch Words_Bits angegebene Anzahl der gesendeten Daten falsch ist.
Im POE-Kopf werden alle Ein- und Ausgangsvariablen deklariert, die für die Programmierung dieser Funktion verwendet werden. Für alle Programmiersprachen wird der gleiche POE-Kopf verwendet.
VAR
bSetParameters: BOOL:=FALSE;
wWriteToSlaveResult: WORD:=0;
(*result of write to slave instruction*)
iSlaveStationNumber: INT:=0;
(*slave station number*)
arrParameters: ARRAY [0..15] OF DINT;
(*Array of parameters to be send to slave station*)
iSlaveMemoryOffset: INT:=100;
bBool: BOOL:=FALSE;
END_VAR
VAR CONSTANT
iSlaveMemoryArea_Bool: INT:=10000;
(*memory Area in slave station*)
iSlaveMemoryArea_Word: INT:=5;
(*memory Area in slave station*)
END_VAR
VAR
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 9 ;
NETWORK_BODY
B(B_VARIN,,SYS_COM1_PORT,18,2,20,4,);
B(B_VARIN,,iSlaveStationNumber,18,3,20,5,);
B(B_VARIN,,arrParameters,11,4,13,6,);
B(B_CONTACT,,bSetParameters,4,1,6,3,);
B(B_VAROUT,,wWriteToSlaveResult,36,2,38,4,);
B(B_F,Size_Of_Var!,,13,5,20,7,,?D?C);
B(B_F,FP_WRITE_TO_SLAVE_AREA_OFFS!,,20,0,36,9,,?DEN?DnPort?DStationNumber?DSource?DWords_Bits?HSlaveMemoryArea?DSlaveMemoryOffset?AENO?CResult);
B(B_VARIN,,SYS_MEMORY_AREA_DT,18,6,20,8,);
B(B_VARIN,,iSlaveMemoryOffset,18,7,20,9,);
L(13,5,13,6);
L(1,2,4,2);
L(13,5,20,5);
L(6,2,20,2);
L(1,0,1,9);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bSetParameters) then
FP_WRITE_TO_SLAVE_AREA_OFFS(Port := SYS_COM1_PORT,
StationNumber := iSlaveStationNumber,
Source := arrParameters[0],
Words_Bits := Size_Of_Var(arrParameters[0]),
SlaveMemoryArea := SYS_MEMORY_AREA_DT,
SlaveMemoryOffset := iSlaveMemoryOffset,
Result => wWriteToSlaveResult);
end_if;