スレーブへのデータ書き込み(オフセット指定)
この命令は、使用するポートのシステムレジスタで定義された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~247)
SYS_ETHERNET_USER_CONNECTION_xxを入力Portに割り付けるには、1をセットします。
スレーブに書き込むデータのマスターユニットのワードエリアまたはレジスタ
転送されるワード(ビット)数
以下のいずれかを指定:
ワード数
Modbus RTUの場合:16#001–16#07F
MEWTOCOL-COMの場合:16#001–16#1FDまたは16#001–16#1B (FP0、FP-e)
または:
ビット転送用の制御ワード:16#8T0Fで、マスタへのビット転送にはT、スレーブへのビット転送にはFを使用します(FP7には適用されません)。
データを格納するスレーブのメモリエリア(格納先= SlaveMemoryArea + SlaveMemoryOffset)。
メモリエリアタイプ |
システム変数 |
---|---|
内部リレー |
|
リンクリレー |
|
外部入力 |
|
外部出力 |
|
内部リレー |
|
タイマ/カウンタ設定値 |
|
タイマ/カウンタの経過値 |
|
データレジスタ |
|
リンクリレー |
|
リンクレジスタ |
|
ファイルレジスタ |
|
入力レジスタ |
|
出力レジスタ |
スレーブにデータを格納するメモリエリアのオフセット(格納先= SlaveMemoryArea + SlaveMemoryOffset)。
出力
FP7のみ: 全エラーコードについては、Modbus/MEWTOCOL通信エラーコード表を参照してください。
他のPLC機種: 0に設定
送信時:マスター通信の送信フラグはTRUEです
送信完了時:マスター通信の送信フラグはFALSEです
正常完了:FALSE
異常完了:TRUE
インデックス修飾時にエリアを超えたとき
Words_Bitsに指定された送信データ数が正しくないとき
インデックス修飾時にエリアを超えたとき
Words_Bitsに指定された送信データ数が正しくないとき
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。
VAR
bSetParameters: BOOL:=FALSE;
wWriteToSlaveResult: WORD:=0;
(*result of write to slave instruction*)
iSlaveStationNumber: INT:=0;
(*slave station number*)
arrParameters: ARRAY [0..15] OF DINT;
(*Array of parameters to be send to slave station*)
iSlaveMemoryOffset: INT:=100;
bBool: BOOL:=FALSE;
END_VAR
VAR CONSTANT
iSlaveMemoryArea_Bool: INT:=10000;
(*memory Area in slave station*)
iSlaveMemoryArea_Word: INT:=5;
(*memory Area in slave station*)
END_VAR
VAR
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 9 ;
NETWORK_BODY
B(B_VARIN,,SYS_COM1_PORT,18,2,20,4,);
B(B_VARIN,,iSlaveStationNumber,18,3,20,5,);
B(B_VARIN,,arrParameters,11,4,13,6,);
B(B_CONTACT,,bSetParameters,4,1,6,3,);
B(B_VAROUT,,wWriteToSlaveResult,36,2,38,4,);
B(B_F,Size_Of_Var!,,13,5,20,7,,?D?C);
B(B_F,FP_WRITE_TO_SLAVE_AREA_OFFS!,,20,0,36,9,,?DEN?DnPort?DStationNumber?DSource?DWords_Bits?HSlaveMemoryArea?DSlaveMemoryOffset?AENO?CResult);
B(B_VARIN,,SYS_MEMORY_AREA_DT,18,6,20,8,);
B(B_VARIN,,iSlaveMemoryOffset,18,7,20,9,);
L(13,5,13,6);
L(1,2,4,2);
L(13,5,20,5);
L(6,2,20,2);
L(1,0,1,9);
END_NETWORK_BODY
END_NET_WORK
END_BODY
if (bSetParameters) then
FP_WRITE_TO_SLAVE_AREA_OFFS(Port := SYS_COM1_PORT,
StationNumber := iSlaveStationNumber,
Source := arrParameters[0],
Words_Bits := Size_Of_Var(arrParameters[0]),
SlaveMemoryArea := SYS_MEMORY_AREA_DT,
SlaveMemoryOffset := iSlaveMemoryOffset,
Result => wWriteToSlaveResult);
end_if;