F145_WRITE_DATA

Schreibt Daten in Slave

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. Wenn die Slave-Daten im Anwenderbereich des Masters nicht verfügbar sind, verwenden Sie F145_WRITE_DATA_TYPE_OFFS oder F145F146_MODBUS_MASTER.

Bei Datenübertragungen unter Verwendung des Modbus-Protokolls erzeugt der Compiler Modbus-Befehle auf der Grundlage der Modbus-Referenznummern.

Parameter

Eingang

Port (WORD, INT, UINT)

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

SlaveAddress (WORD, INT, UINT)

Teilnehmeradresse des Slaves (MEWTOCOL: 0–99, MODBUS: 0–255, 0: Rundruf)

Einstellen auf 1, wenn ein SYS_ETHERNET_USER_CONNECTION_xx auf Eingang Port angewandt wird

MasterData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

Quelladresse auf dem Master für die Daten, die in den Slave geschrieben werden sollen.

Ausgang

SlaveData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)
  • Zieladresse auf dem Slave, in den die Daten geschrieben werden.

  • MasterData und SlaveData müssen vom gleichen Datentyp sein.

  • Um einen externen Datenzugriff vom Master auf die Slave-Daten zu ermöglichen, müssen Sie in der globalen Variablenliste feste Benutzeradressen (gleiche Adressen wie die Slave-Daten) vergeben.

Anmerkungen

  • Wir empfehlen, anstelle von diesem F-Befehl den flexibelsten 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.

Fehleralarmmerker

sys_bIsOperationErrorHold (wird auf TRUE gesetzt und bleibt TRUE)
  • Wenn Slave-Daten oder Master-Daten den verfügbaren Adressbereich überschreiten.

  • 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.

sys_bIsOperationErrorNonHold (wird für einen Zyklus auf TRUE gesetzt)
  • Wenn Slave-Daten oder Master-Daten den verfügbaren Adressbereich überschreiten.

  • 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.

Beispiel

Globale Variablen

In der globalen Variablenliste können Sie Variablen festlegen, die von allen POEs des Projekts verwendet werden können.

POE-Kopf

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;
	END_VAR
	VAR_EXTERNAL
		Slave2_g_bY38: BOOL:=FALSE;
	END_VAR

POE-Rumpf

Die Systemvariable sys_bPulse1s wird in bBool1 kopiert. Wenn bWrite1 und sys_bIsComPort1F145F146NotActive auf TRUE gesetzt sind, wird bBool1 in den Ausgang Y38 von Slave 2 geschrieben.

KOP-Rumpf

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,24,1,26,3,);
L(5,2,24,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 := 6 ;
        NETWORK_BODY
B(B_CONTACT,,sys_bIsComPort1F145F146NotActive,8,1,10,3,);
B(B_CONTACT,,bWrite1,18,1,20,3,);
B(B_VARIN,,SYS_COM1_PORT,21,2,23,4,);
B(B_VARIN,,2,21,3,23,5,);
B(B_VARIN,,bBool1,21,4,23,6,);
B(B_F,F145_WRITE_DATA!,Instance,23,0,33,6,,?DEN?DPort?DSlaveAddress?DMasterData?AENO?CSlaveData);
B(B_VAROUT,,Slave2_g_bY38,33,2,35,4,);
B(B_COIL,,bWrite1,36,1,38,3,E);
B(B_COIL,,bRead1,42,1,44,3,S);
L(1,2,8,2);
L(10,2,18,2);
L(20,2,23,2);
L(33,2,36,2);
L(38,2,42,2);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST-Rumpf

bBool1 := sys_bPulse1s;
if (bWrite1 and sys_bIsComPort1F145F146NotActive) then
    F145_WRITE_DATA(Port := SYS_COM1_PORT, 
                    SlaveAddress := 2, 
                    MasterData := bBool1, 
                    SlaveData => Slave2_g_bY38);    
    bRead1 := true;
    bWrite1 := false;
end_if;

Letzte Änderung: 2024-03-14Feedback zu dieser SeitePanasonic Hotline