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)

転送方法は、Sourceのデータ型によって異なります。

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

転送方式

転送データ数

解説

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#0~16#F7FFFF (0~16252927)

出力

Result (WORD, INT, UINT)

FP7のみ:

  • 0: 正常完了

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

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

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

  • 4: 送信タイムアウト

  • 5: 応答待ちタイムアウト

  • 6: 受信データのエラー

    このエラーは、異常なデータを受信した場合に発生します。例:ヘッダにフォーマットエラーがある場合。この場合、受信データは破棄されます。

  • 7: I/Oマップに確保されたエリアの不足

    このエラーは、Ethernetコネクション数が16を超えると発生します(拡張Ethernet通信)。通信制御フラグ用のワードエリアが、Ethernetコネクション数に十分な大きさであるかを確認します。

  • 8: 現在使用中の送信バッファ

    このエラーは、ファームウェアバージョン4.57以降のFP7 PLCで発生する可能性があります。

通信エラーが発生したとき、MCプロトコル特有の他のエラーコードが設定されることがあります。詳細については、ご使用PLCのマニュアルを参照してください。

他のPLC機種: 0に設定

タイムチャート

  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に指定された送信データ数が正しくないとき

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

  • スレーブまたはマスターデータが、アドレスの有効範囲を超えているとき
  • Ethernetポートが正しくないか、Ethernetコネクションが閉じているとき

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

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;

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