Daten mit Type und 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. 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–255, Rundruf: 0)
Einstellen auf 1, wenn ein SYS_ETHERNET_USER_CONNECTION_xx auf Eingang Port angewandt wird
Quelladresse auf dem Master für die Daten, die in den Slave geschrieben werden sollen.
Zieladresstyp im Slave. Geben Sie einen Offset von Null an, z.B. DT0 oder WL0.
Offset der Anfangsadresse auf dem Slave, in den die Daten geschrieben werden. Der Adresstyp wird definiert durch SlaveWordAddressType.
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).
Wir empfehlen, anstelle von diesem F-Befehl den entsprechenden FP7-Befehl zu verwenden: FP_WRITE_TO_SLAVE_AREA_OFFS.
Die F145 oder F146-Befehle können nur ausgeführt werden, wenn keine der Befehle aktiv ist. Verwenden Sie den Merker "F145/F146 nicht aktiv" in Ihrem Programm, um den Status der Befehle zu prüfen.
Der Befehl F145 beauftragt nur, dass Daten an den Slave gesendet werden. Der tatsächliche Verarbeitung erfolgt am Ende des SPS-Zyklus.
Prüfen Sie anhand des Merkers "Kommunikationsfehler mit F145/F146“, ob die Übertragung erfolgreich war oder zu einem Fehler geführt hat.
Beim Rundruf (SlaveAddress auf 0 einstellen) stellen Sie sicher, dass die Übertragung erst nach Ablauf der maximalen SPS-Zykluszeit erfolgt.
Die Befehle F145 oder F146 können nicht ausgeführt werden, wenn die Zieladresse ein spezieller interner Merker (ab R9000), ein spezielles Datenregister (ab DT9000/DT90000) oder ein Dateiregister FL ist.
Wenn Slave-Daten oder Master-Daten den verfügbaren Adressbereich überschreiten.
Wenn SlaveWordAddressType: Offset ¹ 0
Wenn als Kommunikationsart nicht MEWTOCOL-COM Master/Slave oder Modbus-RTU-Master/Slave eingestellt ist.
Wenn der ausgewählte COM-Port eine Kommunikationskassette erfordert, die nicht installiert ist.
Wenn Slave-Daten oder Master-Daten den verfügbaren Adressbereich überschreiten.
Wenn SlaveWordAddressType: Offset ¹ 0
Wenn als Kommunikationsart nicht MEWTOCOL-COM Master/Slave oder Modbus-RTU-Master/Slave eingestellt ist.
Wenn der ausgewählte COM-Port eine Kommunikationskassette erfordert, die nicht installiert 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
bBool1: BOOL:=FALSE;
bRead1: BOOL:=FALSE;
bWrite1: BOOL:=FALSE;
Bool16_OverlappingDut_1: BOOL16_OVERLAPPING_DUT;
END_VAR
VAR_EXTERNAL
Printer: WORD:=0;
END_VAR
VAR
END_VAR
Die Systemvariable sys_bPulse1s wird in bBool1 undBool16_OverlappingDut_1.b0 kopiert. Wenn bWrite1 und sys_bIsComPort1F145F146NotActive auf TRUE gesetzt sind, wird bBool1 über Bool16_OverlappingDut_1.b0 in den Ausgang Y38 von Slave 2 geschrieben.
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 3 ;
NETWORK_BODY
B(B_CONTACT,,sys_bPulse1s,3,1,5,3,);
B(B_COIL,,bBool1,15,1,17,3,);
L(5,2,15,2);
L(1,2,3,2);
L(1,0,1,3);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 3 ;
NETWORK_BODY
B(B_CONTACT,,bBool1,3,1,5,3,);
B(B_COIL,,Bool16_OverlappingDut_1.b0,15,1,17,3,);
L(5,2,15,2);
L(1,2,3,2);
L(1,0,1,3);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 13 ;
NETWORK_BODY
B(B_CONTACT,,sys_bIsComPort1F145F146NotActive,8,1,10,3,);
B(B_CONTACT,,bWrite1,18,1,20,3,);
B(B_COIL,,bRead1,46,1,48,3,S);
B(B_VARIN,,2,23,3,25,5,);
B(B_VARIN,,Bool16_OverlappingDut_1.w0,23,4,25,6,);
B(B_VARIN,,WY0,23,5,25,7,);
B(B_VARIN,,3,23,6,25,8,);
B(B_VARIN,,16#8800,23,7,25,9,);
B(B_F,F145_WRITE_DATA_TYPE_OFFS!,Instance,25,0,40,9,,?DEN?DPort?DSlaveAddress?DMasterWordData?DSlaveWordAddressType?DSlaveWordAddressOffs?DNumberOfWords_BitsInWords?AENO);
B(B_VARIN,,SYS_COM1_PORT,23,2,25,4,);
B(B_COIL,,bWrite1,42,1,44,3,E);
L(1,2,8,2);
L(10,2,18,2);
L(20,2,25,2);
L(44,2,46,2);
L(40,2,42,2);
L(1,0,1,13);
END_NETWORK_BODY
END_NET_WORK
END_BODY
bBool1 := sys_bPulse1s;
Bool16_OverlappingDut_1.b0 := bBool1;
if (bWrite1 and sys_bIsComPort1F145F146NotActive) then
F145_WRITE_DATA_TYPE_OFFS(Port := SYS_COM1_PORT,
SlaveAddress := 2,
MasterWordData := Bool16_OverlappingDut_1.w0,
SlaveWordAddressType := WY0,
SlaveWordAddressOffs := 3,
NumberOfWords_BitsInWords := 16#8800);
bRead1 := true;
bWrite1 := false;
end_if;