IsReceptionDoneByTimeOut

Einstellung "Empfangen beendet“ durch Zeitüberschreitung auswerten

Wenn in dem empfangenen Datenstrom kein Endezeichen erwartet wird (z.B. bei der Übertragung binärer Daten), kann mit diesem Funktionsbaustein das Ende des Datenempfangs über eine Zeitsteuerung erkannt werden.

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

TimeOutForCPU (TIME)

Zeitspanne ohne weiteren Datenempfang nach der IsDone auf TRUE gesetzt wird.

NoOfBytesReceived (WORD, INT, UINT)

Gilt für die Anfangsadresse des Empfangspuffers.. Diese Adresse enthält die Anzahl der empfangenen Bytes. (Nur CPU)

Ausgang

IsDone (BOOL)

Wird auf TRUE gesetzt, wenn ein oder mehrere Bytes emfangen wurden und sich die Anzahl der empfangenen Bytes in der durch TimeOutForCPU oder im Dialogfeld "MCU-Einstellungen" festgelegten Zeit nicht geändert hat.

Anmerkungen

Handelt es sich um die Kommunikationsschnittstelle einer CPU, muss das erste Wort des Empfangspuffers an NoOfBytesReceived (Anzahl der empfangenen Bytes) angelegt werden. Wenn sich die Anzahl der empfangenen Bytes in der durch TimeOutForCPU angegebenen Zeit nicht ändert, wird IsDone auf TRUE gesetzt.

Bei einem MCU-Modul und FP7 wird der Merker "Empfangen beendet" ausgewertet. Die Wartezeit wird im PROG-Modus im Dialogfeld “MCU-Einstellungen” oder im RUN-Modus mit dem Befehl F159_MWRT_PARA eingestellt (nur FP2).

Auswertung des Merkers "Empfangen beendet"

Wenn für die angegebene Zeit keine weiteren Bytes empfangen werden oder der Befehl ClearReceiveBuffer ausgeführt wird, wird der Ausgang IsDone auf TRUE gesetzt. Weiterer Datenempfang ist unmöglich. Mit F159_MTRN oder ClearReceiveBuffer wird der Merker "IsDone" auf FALSE gesetzt.

Das Empfangsende lässt sich auch durch Auswertung des Empfangspufferinhalts feststellen (z.B. die Anzahl der empfangenen Bytes). Die Anzahl der empfangenen Bytes kann sich innerhalb eines Zyklus ändern. Zum Beispiel, wenn die Anzahl der empfangenen Bytes mehr als einmal gelesen wurde, existieren eventuell verschiedene Status innerhalb eines Zyklus.

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
		IsReceptionDone1: IsReceptionDoneByTimeOut;
	END_VAR
	VAR_EXTERNAL
		g_awReceiveBuffer: ARRAY [0..10] OF WORD;
	END_VAR
	VAR 
		bIsRecDone1: BOOL:=FALSE;
		wPort: WORD:=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_FB,IsReceptionDoneByTimeOut!,IsReceptionDone1,11,1,24,6,,?BPort?BTimeOutForCPU?BNoOfBytesReceived?AIsDone);
B(B_VARIN,,wPort,9,2,11,4,);
B(B_VARIN,,T#20ms,9,3,11,5,);
B(B_VAROUT,,IsRecDone1,24,2,26,4,);
B(B_VARIN,,g_awReceiveBuffer[0],9,4,11,6,);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

ST-Rumpf

IsReceptionDone1(Port := wPort,
                 TimeOutForCPU := T#20ms,
                 NoOfBytesReceived := g_awReceiveBuffer[0],
                 IsDone => bIsRecDone1);

Letzte Änderung am: 2022-04-19Feedback zu dieser SeitePanasonic Hotline