FP_MC_PROTOCOL_WRITE

MCプロトコルによる外部デバイスへのデータの書き込み

PLCは、マスター通信の送信権限を持っています。通信は、MCプロトコルをサポートし、応答を受信するデバイスにコマンドを送信することによって実行されます。 ユーザープログラムでメモリアドレスを指定し、書き込み命令を実行することにより、PLCはプロトコルに従ったメッセージを自動的に生成します。

パラメータ

入力

Port (WORD, INT, UINT)

Ethernetポート 例:SYS_ETHERNET_USER_CONNECTION_1

Source (ANY)

スレーブに書き込むデータのマスターユニットのワードエリアまたはレジスタ

Words_Bits (WORD, INT, UINT)
  • 受信データの数を指定します。受信データの数は、ワード送信ではワード単位で、ビット送信ではビット単位です(入力Words_Bitsに適用されるデータ型によって異なる)

  • 転送方法とWords_Bitsに指定された送信データ数は、Sourceのデータタイプによって変わります。

Sourceに指定されたメモリエリア

転送方式

送信されたデータの数Words_Bits

解説

16ビットメモリエリア

WXWYWRWLDTLD

ワード送信

1~960ワード

1ビットメモリエリア

X,Y,R,L,DT,n,LD,n

ビット送信

1~7168ビット

送信データの数が奇数の場合、4ビットダミーコード16#0が追加されます。

DestMemoryArea (WORD, INT, UINT)

データが書き込まれるスレーブのメモリエリア。

単位

メモリエリアタイプ

システム変数

ビット

入力

X

16進数

SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X

出力

Y

16進数

SYS_MC_PROTOCOL_MEMORY_AREA_OUTPUT_Y

リンクリレー

B

16進数

SYS_MC_PROTOCOL_MEMORY_AREA_LINK_RELAY_B

内部リレー

M

10進

SYS_MC_PROTOCOL_MEMORY_AREA_INTERNAL_RELAY_M

ラッチリレー

L

10進

SYS_MC_PROTOCOL_MEMORY_AREA_LATCH_RELAY_L

ワード

データレジスタ

D

10進

SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D

ファイルレジスタ

R

10進

SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_R
ZR

16進数

SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_ZR

リンクレジスタ

W

16進数

SYS_MC_PROTOCOL_MEMORY_AREA_LINK_REGISTER_W
DestMemoryOffset (DWORD, DINT, UDINT)

データが書き込まれるスレーブのメモリエリアのオフセット。

範囲16#016#F7FFFF (0~16252927)

出力

Result (WORD, INT, UINT)

実行結果コードを格納するマスターユニットのメモリエリアを指定します(エリアWXWYXRWLDTLD内の1ワード)

  • 0:正常完了

  • 1:通信ポートがマスタ通信に使用されている

  • 2:通信ポートがスレーブ通信で使用されている

  • 3:同時に実行できるマスタ通信命令数を超えている

  • 4:送信タイムアウト

  • 5:レスポンス受信タイムアウト

  • 6:受信データエラー

タイムチャート

  1.  (1) マスター通信送信可フラグ、例:sys_bIsEthernetUserConnection1MasterCommunication
  2.  (2) マスター通信の送信可フラグがTRUEであることを確認し、マスター通信の送信フラグがFALSEであることを確認します。
  3.  (3) マスター通信の送信フラグ、例:sys_bIsEthernetUserConnection1MasterCommunicationActive

    送信時マスター通信の送信フラグTRUEです

    送信完了時マスター通信の送信フラグFALSEです

  4.  (4) この命令の実行
  5.  (5) マスター通信の送信完了フラグ、例:sys_bIsEthernetUserConnection1CommunicationError

    正常完了FALSE

    異常完了TRUE

  6.  (6) データ送信
  7.  (7) レスポンス受信処理

エラーフラグ

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

  • パラメータに指定された値が許容範囲外の場合。

  • Ethernetポートが正しくないか、Ethernetポートが閉じている場合。

  • Words_Bitsに指定された送信データ数が正しくないとき

  • Sourceにより指定されたマスターユニットのワードエリアまたはレジスタが正しくないか、許容範囲外の場合。

  • 実行結果コードが格納されるメモリエリアが正しくない場合。

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

  • パラメータに指定された値が許容範囲外の場合。

  • Ethernetポートが正しくないか、Ethernetポートが閉じている場合。

  • Words_Bitsに指定された送信データ数が正しくないとき

  • Sourceにより指定されたマスターユニットのワードエリアまたはレジスタが正しくないか、許容範囲外の場合。

  • 実行結果コードが格納されるメモリエリアが正しくない場合。

POUヘッダ

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

	VAR
		bEnable: BOOL:=FALSE;
		awValues: ARRAY [0..2] OF WORD:=[3(0)];
		diMemoryOffset: DINT:=0;
		iResult: INT:=0;
		abValues: ARRAY [0..2] OF BOOL:=[3(FALSE)];
		iPort: INT:=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 := 6 ;
        NETWORK_BODY
B(B_COMMENT,,Bit transfer,2,0,10,1,);
B(B_COMMENT,,Memory Areas:	SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X ^SYS_MC_PROTOCOL_MEMORY_AREA_OUTPUT_Y ^SYS_MC_PROTOCOL_MEMORY_AREA_LINK_RELAY_B ^SYS_MC_PROTOCOL_MEMORY_AREA_INTERNAL_RELAY_M ^SYS_MC_PROTOCOL_MEMORY_AREA_LATCH_RELAY_L,13,0,39,6,);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_VARIN,,iPort,26,2,28,4,);
B(B_VARIN,,abValues,18,3,20,5,);
B(B_VARIN,,SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X,26,5,28,7,);
B(B_VARIN,,diMemoryOffset,26,6,28,8,);
B(B_VAROUT,,iResult,41,2,43,4,);
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,FP_MC_PROTOCOL_WRITE!,,28,0,41,8,,?DEN?DPort?DSource?DWords_Bits?HDestMemoryArea?DDestMemoryOffset?AENO?CResult);
B(B_F,Size_Of_Var!,,21,4,28,6,,?D?C);
L(1,2,5,2);
L(7,2,28,2);
L(20,4,28,4);
L(21,4,21,5);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_COMMENT,,Memory Areas:	 ^SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D ^SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_R ^SYS_MC_PROTOCOL_MEMORY_AREA_FILE_REGISTER_ZR ^SYS_MC_PROTOCOL_MEMORY_AREA_LINK_REGISTER_W,13,0,39,5,);
B(B_COMMENT,,Word Transfer,2,0,10,1,);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 8 ;
        NETWORK_BODY
B(B_VARIN,,iPort,26,2,28,4,);
B(B_VARIN,,awValues,18,3,20,5,);
B(B_VARIN,,SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D,26,5,28,7,);
B(B_VARIN,,diMemoryOffset,26,6,28,8,);
B(B_VAROUT,,iResult,41,2,43,4,);
B(B_CONTACT,,bEnable,5,1,7,3,);
B(B_F,FP_MC_PROTOCOL_WRITE!,,28,0,41,8,,?DEN?DPort?DSource?DWords_Bits?HDestMemoryArea?DDestMemoryOffset?AENO?CResult);
B(B_F,Size_Of_Var!,,21,4,28,6,,?D?C);
L(1,2,5,2);
L(7,2,28,2);
L(20,4,28,4);
L(21,4,21,5);
L(1,0,1,8);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 5 ;
        NETWORK_BODY
B(B_COMMENT,,only valid for ethernet ports! ^--> Valid Ports:	SYS_ETHERNET_USER_CONNECTION_1 - SYS_ETHERNET_USER_CONNECTION_216,3,1,52,4,);
L(1,0,1,5);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

STボディ

(*Bit transfer*)
If (bEnable) then
    FP_MC_PROTOCOL_WRITE(Port := iPort,
                         Source := abValues,
                         Words_Bits := Size_Of_Var(abValues), 
                         DestMemoryArea := SYS_MC_PROTOCOL_MEMORY_AREA_INPUT_X,
                         DestMemoryOffset := diMemoryOffset,
                         Result => iResult);
End_if;
(*Word transfer*)
If (bEnable) then
    FP_MC_PROTOCOL_WRITE(Port := iPort,
                         Source := awValues,
                         Words_Bits := Size_Of_Var(awValues), 
                         DestMemoryArea := SYS_MC_PROTOCOL_MEMORY_AREA_DATA_REGISTER_D,
                         DestMemoryOffset := diMemoryOffset,
                         Result => iResult);
End_if;

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