MCUポートからのデータ読み出し
この命令は、MCUが外部機器から受信したデータをCPUの受信バッファにコピーするときに使用します。MCUの通信ポートはs_Portで指定します。受信バッファは、d1_Startとd2_Endによって指定します。
入力
データを転送するMCUのスロット番号(上位バイト)とポート番号(下位バイト)の指定
16#xx01: スロット16#xxにあるMCUのCOM1ポート
16#xx02: スロット16#xxにあるMCUのCOM2ポート
受信バッファの先頭アドレス
受信バッファの最終アドレス
"受信完了"フラグによって、受信の完了を確認せずに、F161_MRCV命令を実行しないでください。F161_MRCV命令を使ったデータのポーリングは正しく働きません。「受信完了」フラグは、IsReceptionDoneとIsReceptionDoneByTimeOutファンクション、または入力(X)フラグX0とX2を使用して確認することができます。
受信されたバイト数は、d1_Startで指定された受信バッファの先頭アドレスに格納されます。受信データがb2_Endで指定された終端アドレスを超えると、演算エラーが検出されます。d2_Endで指定されたアドレスまで、受信データが格納されます。また、F161_MRCVは、受信バッファをクリアし、”受信完了フラグ”をリセットしてデータを再受信できるようにします。
F161_MRCV命令は、すべてのPLCでサポートされています。適切なファンクションをフラグの代わりに使えば、CPUの通信ポートやMCUポートの通信を処理する(PLCに依存しない)プログラムを作成することができます。MCUポートを使えないPLCは、F161_MRCV命令を単純に変換できません。プログラムを読みやすくするために、ReadData命令またはReadCharacters命令を使用することをおすすめします。
インデックス修飾時にエリアを超えたとき
MCUユニットが指定されたスロットに存在しないとき、または0バイトを送信する必要があるとき
指定された通信ポートが存在しないとき
インデックス修飾時にエリアを超えたとき
MCUユニットが指定されたスロットに存在しないとき、または0バイトを送信する必要があるとき
指定された通信ポートが存在しないとき
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。
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