F146_READ_DATA

Daten von Slave lesen

Mit diesem Befehl lesen Sie Daten von einem Slave mit dem Protokoll MEWTOCOL-COM oder Modbus-RTU Daten wie in den Systemregistern der verwendeten Schnittstelle 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 F146_READ_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: 1–99, MODBUS: 1–255)

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

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

Quelladresse auf dem Slave, von dem die Daten angefordert werden.

Ausgang

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

Wortbereich oder Register auf dem Mastermodul, in das die angeforderten Daten geschrieben werden.

Anmerkungen

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

  • Prüfen Sie anhand des Merkers "Kommunikationsfehler mit F145/F146“, ob die Übertragung erfolgreich war oder zu einem Fehler geführt hat.

  • 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
		bBool2: BOOL:=FALSE;
		bRead1: BOOL:=FALSE;
		bWrite2: BOOL:=FALSE;
	END_VAR
	VAR_EXTERNAL
		Slave2_g_bY38: BOOL:=FALSE;
	END_VAR
	VAR 
	END_VAR

POE-Rumpf

Wenn bRead1 und sys_bIsComPort1F145F146NotActiveauf TRUE gesetzt sind, wird die globale Variable Slave2_g_bY38, die Y38 von Slave 2 zugewiesen ist, in bBool2 gelesen und gespeichert.

KOP-Rumpf

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    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,,bWrite2,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,,Slave2_g_bY38,21,4,23,6,);
B(B_VAROUT,,bBool2,33,2,35,4,);
B(B_COIL,,bWrite2,36,1,38,3,E);
B(B_COIL,,bRead1,42,1,44,3,S);
B(B_F,F146_READ_DATA!,Instance,23,0,33,6,,?DEN?DPort?DSlaveAddress?DSlaveData?AENO?CMasterData);
L(1,2,8,2);
L(10,2,18,2);
L(38,2,42,2);
L(33,2,36,2);
L(20,2,23,2);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST-Rumpf

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

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