F145_WRITE_DATA

スレーブへのデータ書き込み

この命令は、使用するポートのシステムレジスタで定義されたMEWTOCOL-COMまたはModbus RTUプロトコルを使用する通信ポートを介したマスターからスレーブへのデータの書き込みに使用します。マスターとスレーブに同じプロトコルが設定されていることを確認してください。マスターとスレーブのメモリエリアが一致している必要があります。マスターのユーザーエリアでスレーブデータが利用できない場合は、F145_WRITE_DATA_TYPE_OFFSまたはF145F146_MODBUS_MASTERを使用します。

Modbusプロトコルを使用したデータ転送では、コンパイラは、Modbus参照番号に基づいてModbusコマンドを生成します。

パラメータ

入力

Port (WORD, INT, UINT)

通信ポートの指定(PLC機種による):

  • COMポート、例:SYS_COM0_PORT

  • Ethernetポート 例: SYS_ETHERNET_USER_CONNECTION_1

  • MCU/SCU、例:16#xx01 (xx =スロット番号) COM01

SlaveAddress (WORD, INT, UINT)

スレーブの局番 (MEWTOCOL: 0–99、MODBUS: 0–2550: ブロードキャスト)

SYS_ETHERNET_USER_CONNECTION_xxを入力Portに割り付けるには、1をセットします。

MasterData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)

スレーブに書き込まれるデータのマスター側のソースアドレス

出力

SlaveData (BOOL, INT, UINT, WORD, DINT, UDINT, DWORD, REAL, DATE, TOD, DT, STRING)
  • データが書き込まれるスレーブ側の格納先アドレス

  • MasterDataSlaveDataはすべて同じデータ型にしてください。

  • マスターからスレーブデータへの外部データアクセスを確立するためには、グローバル変数リストで固定ユーザーアドレス(スレーブデータと同じアドレス)を割り付ける必要があります。

解説

  • F命令を使用する代わりに、最も柔軟性の高い次の命令を使用することをおすすめします: FP_WRITE_TO_SLAVE_AREA_OFFS

  • F145またはF146命令は、いずれの命令もアクティブでない場合にのみ実行することができます。プログラム上で"F145/F146命令実行不可"フラグを確認し、命令の状態をチェックします。

  • F145命令は、データをスレーブに送信することのみ要求します。実際の処理は、スキャンの最後に行われます。

  • "F145/F146エラー"フラグを確認し、転送が正常に完了したか、あるいはエラーが発生したかどうかをチェックします。

  • ブロードキャストを行うときには(SlaveAddressを0に設定)、最大スキャンタイムが経過した後でのみ転送が実行されることを確認してください。

  • 格納先アドレスが特殊内部フラグ(R9000~)、特殊データレジスタ(DT9000/DT90000~)、またはファイルレジスタFLの場合には、F145またはF146命令を実行することはできません。

エラーフラグ

sys_bIsOperationErrorHold (TRUEになり、TRUEを保持)
  • スレーブまたはマスターデータが、アドレスの有効範囲を超えているとき
  • 通信モードがMEWTOCOL-COMマスター/スレーブまたはModbus RTUマスター/スレーブに設定されていないとき
  • 選択されたCOMポートが、装着されていない通信カセットを必要としているとき
sys_bIsOperationErrorNonHold (1回のスキャンに対してTRUE)
  • スレーブまたはマスターデータが、アドレスの有効範囲を超えているとき
  • 通信モードがMEWTOCOL-COMマスター/スレーブまたはModbus RTUマスター/スレーブに設定されていないとき
  • 選択されたCOMポートが、装着されていない通信カセットを必要としているとき

グローバル変数リスト

グローバル変数リストでは、プロジェクト内のすべてのPOUからアクセスできる変数を宣言します。

POUヘッダ

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

	VAR
		bBool1: BOOL:=FALSE;
		bRead1: BOOL:=FALSE;
		bWrite1: BOOL:=FALSE;
	END_VAR
	VAR_EXTERNAL
		Slave2_g_bY38: BOOL:=FALSE;
	END_VAR

POUボディ

システム変数sys_bPulse1sは、bBool1にコピーされます。bWrite1sys_bIsComPort1F145F146NotActiveTRUEに設定されている場合、bBool1はスレーブ2の出力Y38に書き込まれます。

LDボディ

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 3 ;
        NETWORK_BODY
B(B_CONTACT,,sys_bPulse1s,3,1,5,3,);
B(B_COIL,,bBool1,24,1,26,3,);
L(5,2,24,2);
L(1,2,3,2);
L(1,0,1,3);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_CONTACT,,sys_bIsComPort1F145F146NotActive,8,1,10,3,);
B(B_CONTACT,,bWrite1,18,1,20,3,);
B(B_VARIN,,SYS_COM1_PORT,21,2,23,4,);
B(B_VARIN,,2,21,3,23,5,);
B(B_VARIN,,bBool1,21,4,23,6,);
B(B_F,F145_WRITE_DATA!,Instance,23,0,33,6,,?DEN?DPort?DSlaveAddress?DMasterData?AENO?CSlaveData);
B(B_VAROUT,,Slave2_g_bY38,33,2,35,4,);
B(B_COIL,,bWrite1,36,1,38,3,E);
B(B_COIL,,bRead1,42,1,44,3,S);
L(1,2,8,2);
L(10,2,18,2);
L(20,2,23,2);
L(33,2,36,2);
L(38,2,42,2);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

STボディ

bBool1 := sys_bPulse1s;
if (bWrite1 and sys_bIsComPort1F145F146NotActive) then
    F145_WRITE_DATA(Port := SYS_COM1_PORT, 
                    SlaveAddress := 2, 
                    MasterData := bBool1, 
                    SlaveData => Slave2_g_bY38);    
    bRead1 := true;
    bWrite1 := false;
end_if;

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