F161_MRCV

MCUポートからのデータ読み出し

この命令は、MCUが外部機器から受信したデータをCPUの受信バッファにコピーするときに使用します。MCUの通信ポートはs_Portで指定します。受信バッファは、d1_Startd2_Endによって指定します。

パラメータ

入力

s_Port (WORD, INT, UINT)

データを転送するMCUのスロット番号(上位バイト)とポート番号(下位バイト)の指定

16#xx01: スロット16#xxにあるMCUのCOM1ポート

16#xx02: スロット16#xxにあるMCUのCOM2ポート

d1_Start (WORD, INT, UINT)

受信バッファの先頭アドレス

d2_End (WORD, INT, UINT)

受信バッファの最終アドレス

解説

  • "受信完了"フラグによって、受信の完了を確認せずに、F161_MRCV命令を実行しないでください。F161_MRCV命令を使ったデータのポーリングは正しく働きません。「受信完了」フラグは、IsReceptionDoneIsReceptionDoneByTimeOutファンクション、または入力(X)フラグX0X2を使用して確認することができます。

  • 受信されたバイト数は、d1_Startで指定された受信バッファの先頭アドレスに格納されます。受信データがb2_Endで指定された終端アドレスを超えると、演算エラーが検出されます。d2_Endで指定されたアドレスまで、受信データが格納されます。また、F161_MRCVは、受信バッファをクリアし、”受信完了フラグ”をリセットしてデータを再受信できるようにします。

  • F161_MRCV命令は、すべてのPLCでサポートされています。適切なファンクションをフラグの代わりに使えば、CPUの通信ポートやMCUポートの通信を処理する(PLCに依存しない)プログラムを作成することができます。MCUポートを使えないPLCは、F161_MRCV命令を単純に変換できません。プログラムを読みやすくするために、ReadData命令またはReadCharacters命令を使用することをおすすめします。

エラーフラグ

sys_bIsOperationErrorHold (TRUEになり、TRUEを保持)
  • インデックス修飾時にエリアを超えたとき

  • MCUユニットが指定されたスロットに存在しないとき、または0バイトを送信する必要があるとき

  • 指定された通信ポートが存在しないとき

sys_bIsOperationErrorNonHold (1回のスキャンに対してTRUE)
  • インデックス修飾時にエリアを超えたとき

  • MCUユニットが指定されたスロットに存在しないとき、または0バイトを送信する必要があるとき

  • 指定された通信ポートが存在しないとき

POUヘッダ

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

	VAR
		ReadReceivedData: BOOL:=FALSE;
		ReceiveBuffer: ARRAY [0..10] OF INT:=[11(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_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

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