IsReceptionDoneByTimeOut

タイムアウトによる「受信完了」条件の確認

このファンクションブロックは、終端コードを含まないデータ列(例:バイナリデータの転送時)の受信完了を検出するためにタイムアウト状態を確認します。

パラメータ

入力

Port (WORD, INT, UINT)

通信ポートの指定(PLC機種による):

  • COMポート、例:SYS_COM0_PORT

  • Ethernetポート 例: SYS_ETHERNET_USER_CONNECTION_1

  • MCU/SCU、例:16#xx01 (xx =スロット番号) COM01

TimeOutForCPU (TIME)

データが受信されなくなってから、IsDoneTRUEになるまでの時間

NoOfBytesReceived (WORD, INT, UINT)

受信バッファの先頭アドレスに割り付けます。このアドレスには、受信したバイト数が格納されます。(CPUのみ)

出力

IsDone (BOOL)

1つ以上のバイトを受信し、受信したバイト数が、TimeOutForCPUまたは"MCU設定"ダイアログボックスで指定した時間内に変化しなかった場合に、TRUEにセットされます。

解説

CPUの通信ポートの場合、受信バッファの最初のワードをNoOfBytesReceived(受信バイト数)に割り付ける必要があります。受信バイト数がTimeOutForCPUで指定された時間内に変化しなかった場合、IsDoneTRUEになります。

MCUおよびFP7の場合、"受信完了"フラグが確認されます。タイムアウトは、「MCU設定」ダイアログボックスを使用してPROGモード時に、あるいはF159_MWRT_PARA (FP2のみ)を使用してRUNモード時に設定する必要があります。

"受信完了"フラグの確認

指定した時間内に追加の受信バイトがなかった場合、または命令ClearReceiveBufferを実行した場合、出力IsDoneTRUEになります。次のデータの受信が禁止されます。F159_MTRNまたはClearReceiveBufferによって"IsDone"フラグがFALSEになります。

受信データの終端は、受信バッファの内容(受信バイト数など)を確認することによって、判断することもできます。受信バイト数は、スキャンタイム内にも変化します。例えば、受信バイト数が2回以上読み出された場合、1スキャン内で異なる状態が存在することがあります。

POUヘッダ

POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。

	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

LDボディ

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ボディ

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

最終修正日: 2022-04-21このページに関するフィードバックお問い合わせ窓口