F161_MRCV

Daten von MCU-Schnittstelle lesen

Mit diesem Befehl kopieren Sie die Daten, die das MCU-Modul vom externen Gerät empfangen hat, in den Empfangspuffer der CPU. Die Schnittstelle des MCU-Moduls wird durch s_Port festegelegt. Der Empfangspuffer wird durch d1_Start und d2_End festgelegt.

Parameter

Eingang

s_Port (WORD, INT, UINT)

Steckplatznummer (höherwertiges Byte) und Schnittstellennummer (niederwertiges Byte) des MCU-Moduls, an das die Daten übertragen werden.

16#xx01: COM1 an MCU-Modul in Steckpatz 16#xx

16#xx02: COM2 an MCU-Modul in Steckpatz 16#xx

d1_Start (WORD, INT, UINT)

Anfangsadresse des Empfangspuffers

d2_End (WORD, INT, UINT)

Startaddresse des Empfangspuffers

Anmerkungen

  • Führen Sie F161_MRCV nicht aus, bevor der Empfang durch die Auswertung des Merkers "Empfangen beendet" bestätigt wird. Eine zyklische Abfrage mit dem Befehl F161_MRCV ist nicht möglich! Der Merker "Empfangen beendet" lässt sich mit den Funktionen IsReceptionDone und IsReceptionDoneByTimeOut auswerten oder anhand der Eingangs-Merker X0 und X2 auswerten.

  • Die Anzahl der empfangenen Bytes wird in der mit d1_Start spezifizierten Anfangsadresse des Empfangspuffers gespeichert. Überschreiten die empfangenen Daten die mit b2_End spezifizierte Endadresse, wird ein Operationsfehler ausgegeben. Alle bis d2_End empfangenen Daten werden gespeichert. Mit F161_MRCV wird außerdem der Empfangspuffer gelöscht und der Merker "Empfangen beendet" zurückgesetzt, so das weitere Daten empfangen werden können.

  • F161_MRCV wird von allen SPS-Typen unterstützt: Wenn anstelle von Merkern passende Funktionen verwendet werden, lassen sich SPS-unabhängige Programme erstellen, die die Kommunikation zwischen den Kommunikationsschnittstellen der CPU als auch den MCU-Schnittstellen regeln. SPS-Typen ohne MCU-Schnittstellen übersetzen den Befehl F161_MRCV einfach nicht. Für ein leichter lesbares Programm wird empfohlen, die Funktionen ReadData oder ReadCharacters zu verwenden.

Fehleralarmmerker

sys_bIsOperationErrorHold (wird auf TRUE gesetzt und bleibt TRUE)
  • wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich

  • wenn das MCU-Modul sich nicht im angegebenen Steckplatz befindet oder null Byte gesendet werden sollen.

  • wenn die angegebene Kommunikationsschnittstelle nicht vorhanden ist

sys_bIsOperationErrorNonHold (wird für einen Zyklus auf TRUE gesetzt)
  • wenn der mit dem Index-Modifizierer definierte Bereich größer ist als der zulässige Bereich

  • wenn das MCU-Modul sich nicht im angegebenen Steckplatz befindet oder null Byte gesendet werden sollen.

  • wenn die angegebene Kommunikationsschnittstelle nicht vorhanden ist

Beispiel

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
		ReadReceivedData: BOOL:=FALSE;
		ReceiveBuffer: ARRAY [0..10] OF INT:=[11(0)];
	END_VAR

KOP-Rumpf

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_F,F161_MRCV!,,17,2,24,8,,?DEN?Ds_Port?Dd1_Start?Dd2_End?AENO);
B(B_VARIN,,ReadReceivedData,15,3,17,5,);
B(B_VARIN,,16#0201,15,4,17,6,);
B(B_VARIN,,ReceiveBuffer[0],15,5,17,7,);
B(B_VARIN,,ReceiveBuffer[10],15,6,17,8,);
B(B_COMMENT,,The received data of port 1 of the MCU in slot 2 are read:,2,1,32,2,);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_F,F161_MRCV!,,17,0,24,6,,?DEN?Ds_Port?Dd1_Start?Dd2_End?AENO);
B(B_VARIN,,ReadReceivedData,15,1,17,3,);
B(B_VARIN,,16#0301,15,2,17,4,);
B(B_VARIN,,ReceiveBuffer,6,4,8,6,);
B(B_F,Adr_Of_Var_I!,,10,3,17,5,,?D?C);
B(B_F,AdrLast_Of_Var_I!,,8,4,17,6,,?D?C);
L(1,0,1,6);
L(8,4,8,5);
L(8,4,10,4);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

Letzte Änderung: 2024-07-18Feedback zu dieser SeitePanasonic Hotline