タイムアウトによる「受信完了」条件の確認
このファンクションブロックは、終端コードを含まないデータ列(例:バイナリデータの転送時)の受信完了を検出するためにタイムアウト状態を確認します。
入力
通信ポートの指定(PLC機種による):
COMポート、例:SYS_COM0_PORT
Ethernetポート 例: SYS_ETHERNET_USER_CONNECTION_1
MCU/SCU、例:16#xx01 (xx =スロット番号) COM01
データが受信されなくなってから、IsDoneがTRUEになるまでの時間
受信バッファの先頭アドレスに割り付けます。このアドレスには、受信したバイト数が格納されます。(CPUのみ)
出力
1つ以上のバイトを受信し、受信したバイト数が、TimeOutForCPUまたは"MCU設定"ダイアログボックスで指定した時間内に変化しなかった場合に、TRUEにセットされます。
CPUの通信ポートの場合、受信バッファの最初のワードをNoOfBytesReceived(受信バイト数)に割り付ける必要があります。受信バイト数がTimeOutForCPUで指定された時間内に変化しなかった場合、IsDoneがTRUEになります。
MCUおよびFP7の場合、"受信完了"フラグが確認されます。タイムアウトは、「MCU設定」ダイアログボックスを使用してPROGモード時に、あるいはF159_MWRT_PARA (FP2のみ)を使用してRUNモード時に設定する必要があります。
"受信完了"フラグの確認
指定した時間内に追加の受信バイトがなかった場合、または命令ClearReceiveBufferを実行した場合、出力IsDoneはTRUEになります。次のデータの受信が禁止されます。F159_MTRNまたはClearReceiveBufferによって"IsDone"フラグがFALSEになります。
受信データの終端は、受信バッファの内容(受信バイト数など)を確認することによって、判断することもできます。受信バイト数は、スキャンタイム内にも変化します。例えば、受信バイト数が2回以上読み出された場合、1スキャン内で異なる状態が存在することがあります。
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
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
IsReceptionDone1(Port := wPort,
TimeOutForCPU := T#20ms,
NoOfBytesReceived := g_awReceiveBuffer[0],
IsDone => bIsRecDone1);