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.
Eingang
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
Anfangsadresse des Empfangspuffers
Startaddresse des Empfangspuffers
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.
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
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
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
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