スレーブへのデータ書き込み(タイプ、オフセット付き)
この命令は、使用するポートのシステムレジスタで定義されたMEWTOCOL-COMまたはModbus RTUプロトコルを使用する通信ポートを介したマスターからスレーブへのデータの書き込みに使用します。 Modbusプロトコルを使用したデータ転送では、コンパイラは、Modbus参照番号に基づいてModbusコマンドを生成します。
入力
通信ポートの指定(PLC機種による):
COMポート、例:SYS_COM0_PORT
Ethernetポート 例: SYS_ETHERNET_USER_CONNECTION_1
MCU/SCU、例:16#xx01 (xx =スロット番号) COM01
スレーブの局番 (MEWTOCOL: 1~99、MODBUS:1~255、ブロードキャスト: 0)
SYS_ETHERNET_USER_CONNECTION_xxを入力Portに割り付けるには、1をセットします。
スレーブに書き込まれるデータのマスター側のソースアドレス
スレーブ側格納先のアドレス型。ゼロのオフセットを指定します(例: DT0またはWL0)。
データが書き込まれるスレーブの先頭アドレスのオフセット。アドレス型はSlaveWordAddressTypeで定義されます。
転送されるワード(ビット)数
以下のいずれかを指定:
ワード数
Modbus RTUの場合: 16#001–16#07F
MEWTOCOL-COMの場合:16#001–16#1FDまたは16#001–16#1B (FP0、FP-e)
または:
ビット転送用の制御ワード:16#8T0FでTは「to bit」の意でマスター側のビット、Fは「from bit」の意でスレーブのビット番号を示します(FP7には適用されません)。
F命令を使用する代わりに、対応するFP7命令を使用することをおすすめします。 FP_WRITE_TO_SLAVE_AREA_OFFS.
F145またはF146命令は、いずれの命令もアクティブでない場合にのみ実行することができます。プログラム上で"F145/F146命令実行不可"フラグを確認し、命令の状態をチェックします。
F145命令は、データをスレーブに送信することのみ要求します。実際の処理は、スキャンの最後に行われます。
"F145/F146エラー"フラグを確認し、転送が正常に完了したか、あるいはエラーが発生したかどうかをチェックします。
ブロードキャストを行うときには(SlaveAddressを0に設定)、最大スキャンタイムが経過した後でのみ転送が実行されることを確認してください。
格納先アドレスが特殊内部フラグ(R9000~)、特殊データレジスタ(DT9000/DT90000~)、またはファイルレジスタFLの場合には、F145またはF146命令を実行することはできません。
スレーブまたはマスターデータが、アドレスの有効範囲を超えているとき
SlaveWordAddressType:オフセット¹0のとき
通信モードがMEWTOCOL-COMマスター/スレーブまたはModbus RTUマスター/スレーブに設定されていないとき
選択されたCOMポートが、装着されていない通信カセットを必要としているとき
スレーブまたはマスターデータが、アドレスの有効範囲を超えているとき
SlaveWordAddressType:オフセット¹0のとき
通信モードがMEWTOCOL-COMマスター/スレーブまたはModbus RTUマスター/スレーブに設定されていないとき
選択されたCOMポートが、装着されていない通信カセットを必要としているとき
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。
VAR
bBool1: BOOL:=FALSE;
bRead1: BOOL:=FALSE;
bWrite1: BOOL:=FALSE;
Bool16_OverlappingDut_1: BOOL16_OVERLAPPING_DUT;
END_VAR
VAR_EXTERNAL
Printer: WORD:=0;
END_VAR
VAR
END_VAR
システム変数sys_bPulse1sは、bBool1とBool16_OverlappingDut_1.b0にコピーされます。bWrite1とsys_bIsComPort1F145F146NotActiveがTRUEにセットされている場合、bBool1は、Bool16_OverlappingDut_1.b0を介して、スレーブ2の出力Y38に書き込まれます。
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,15,1,17,3,);
L(5,2,15,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 := 3 ;
NETWORK_BODY
B(B_CONTACT,,bBool1,3,1,5,3,);
B(B_COIL,,Bool16_OverlappingDut_1.b0,15,1,17,3,);
L(5,2,15,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 := 13 ;
NETWORK_BODY
B(B_CONTACT,,sys_bIsComPort1F145F146NotActive,8,1,10,3,);
B(B_CONTACT,,bWrite1,18,1,20,3,);
B(B_COIL,,bRead1,46,1,48,3,S);
B(B_VARIN,,2,23,3,25,5,);
B(B_VARIN,,Bool16_OverlappingDut_1.w0,23,4,25,6,);
B(B_VARIN,,WY0,23,5,25,7,);
B(B_VARIN,,3,23,6,25,8,);
B(B_VARIN,,16#8800,23,7,25,9,);
B(B_F,F145_WRITE_DATA_TYPE_OFFS!,Instance,25,0,40,9,,?DEN?DPort?DSlaveAddress?DMasterWordData?DSlaveWordAddressType?DSlaveWordAddressOffs?DNumberOfWords_BitsInWords?AENO);
B(B_VARIN,,SYS_COM1_PORT,23,2,25,4,);
B(B_COIL,,bWrite1,42,1,44,3,E);
L(1,2,8,2);
L(10,2,18,2);
L(20,2,25,2);
L(44,2,46,2);
L(40,2,42,2);
L(1,0,1,13);
END_NETWORK_BODY
END_NET_WORK
END_BODY
bBool1 := sys_bPulse1s;
Bool16_OverlappingDut_1.b0 := bBool1;
if (bWrite1 and sys_bIsComPort1F145F146NotActive) then
F145_WRITE_DATA_TYPE_OFFS(Port := SYS_COM1_PORT,
SlaveAddress := 2,
MasterWordData := Bool16_OverlappingDut_1.w0,
SlaveWordAddressType := WY0,
SlaveWordAddressOffs := 3,
NumberOfWords_BitsInWords := 16#8800);
bRead1 := true;
bWrite1 := false;
end_if;