スレーブへのデータ書き込みまたはスレーブからのデータの読み出し
指定できるファンクションコードとプログラム例
SYS_MODBUS_03_READ_HOLDING_REGISTER
SYS_MODBUS_04_READ_INPUT_REGISTERS
SYS_MODBUS_16_PRESET_REGISTERS
この命令は、使用するポートのシステムレジスタで定義されたModbus RTUプロトコルを使用して、通信ポートを介したマスターからスレーブへのデータの書き込みまたはスレーブからのデータの読み出しに使用します。 マスターとスレーブに同じプロトコルが設定されていることを確認してください。
入力
通信ポートの指定(PLC機種による):
COMポート 例:SYS_COM0_PORT
Ethernetポート 例: SYS_ETHERNET_USER_CONNECTION_1
MCU/SCU、例:16#xx01 (xx =スロット番号) COM01
スレーブの局番(0~255)。
SYS_ETHERNET_USER_CONNECTION_xxを入力Portに割り付けるには、1をセットします。
SYS_MODBUS_01_READ_COIL
SYS_MODBUS_02_READ_INPUT
SYS_MODBUS_03_READ_HOLDING_REGISTER
SYS_MODBUS_04_READ_INPUT_REGISTERS
SYS_MODBUS_05_FORCE_COIL
SYS_MODBUS_06_PRESET_REGISTER
SYS_MODBUS_15_FORCE_COILS
SYS_MODBUS_16_PRESET_REGISTERS
先頭アドレス(0~65535)。FunctionCode*で指定されたコマンドによるアドレスタイプ。
送信ビット数または送信ワード数
1–2040(ファンクションコード01、02の場合)
2–2040(ファンクションコード15の場合)
1–127(ファンクションコード03、04の場合)
2–127(ファンクションコード16の場合)
スレーブに書き込まれるデータのマスター側のソースアドレス
F命令を使用する代わりに、対応するFP7命令を使用することをおすすめします。FP_MODBUS_MASTER
この命令では、使用するModbusコマンドをパラメータFunctionCode*に直接的に表示することができます。
F145またはF146命令は、いずれの命令もアクティブでない場合にのみ実行することができます。プログラム上で"F145/F146命令実行不可"フラグを確認し、命令の状態をチェックします。
F145命令は、データをスレーブに送信することのみ要求します。実際の処理は、スキャンの最後に行われます。
"F145/F146エラー"フラグを確認し、転送が正常に完了したか、あるいはエラーが発生したかどうかをチェックします。
ブロードキャストを行うときには(SlaveAddressを0に設定)、最大スキャンタイムが経過した後でのみ転送が実行されることを確認してください。
格納先アドレスが特殊内部フラグ(R9000~)、特殊データレジスタ(DT9000/DT90000~)、またはファイルレジスタFLの場合には、F145またはF146命令を実行することはできません。
マスターでサポートされるコマンド:
ファンクションコード |
システム定数 |
先頭レジスタ |
レジスタ数 |
参照番号(Modbusスレーブによる) |
---|---|---|---|---|
01 |
SYS_MODBUS_01_ READ_COIL |
0–65535 |
1–2040 |
000001–065536 |
02 |
SYS_MODBUS_02_ READ_INPUT |
0–65535 |
1–2040 |
100001–165536 |
03 |
SYS_MODBUS_03_ READ_HOLDING_ REGISTER |
0–65535 |
1–127 |
400001–465536 |
04 |
SYS_MODBUS_04_ READ_INPUT_ REGISTERS |
0–65535 |
1–127 |
300001–365536 |
5 |
SYS_MODBUS_05_ FORCE_COIL |
0–65535 |
1 |
000001–065536 |
6 |
SYS_MODBUS_06_ PRESET_REGISTER |
0–65535 |
1 |
400001–465536 |
15 |
SYS_MODBUS_15_ FORCE_COILS |
0–65535 |
2–2040 |
000001–065536 |
16 |
SYS_MODBUS_16_ PRESET_REGISTERS |
0–65535 |
2–127 |
400001–465536 |
Modbusの仕様と当社PLCの対応:
Modbusエリアアドレス |
Modbusメモリ名 |
メモリタイプ |
当社PLCのアドレス |
---|---|---|---|
000001 … |
COIL |
1ビット |
Y0 … |
002049 … |
R0 … |
||
100001 … |
INPUT |
1ビット |
X0 … |
400001 … |
HOLDING_REGISTER |
16ビット |
DT0 … |
300001 … |
INPUT_REGISTERS |
16ビット |
WL0 … |
302001 … |
LD0 … |
各PLCがサポートしている参照番号とアドレスエリアについては、各PLCのユーザーズマニュアルを参照してください。参照番号がサポートしている範囲外の場合は、エラーとなります。
FP-X0、MCU:該当マニュアルをご参照ください。マニュアルは、インターネット上のダウンロードセンターにあります。
スレーブまたはマスターデータが、アドレスの有効範囲を超えているとき
通信モードがMEWTOCOL-COMマスター/スレーブまたはModbus RTUマスター/スレーブに設定されていないとき
選択されたCOMポートが、装着されていない通信カセットを必要としているとき
スレーブまたはマスターデータが、アドレスの有効範囲を超えているとき
通信モードがMEWTOCOL-COMマスター/スレーブまたはModbus RTUマスター/スレーブに設定されていないとき
選択されたCOMポートが、装着されていない通信カセットを必要としているとき
この定数を入力パラメータFunctionCode*に適用すると、対応するModbusコマンドが実行されます。
接続するスレーブがシステムレジスタでModbus RTUスレーブに設定している当社PLCの場合は、1ビットまたは複数ビットを読み出します。
Y (出力)
R (内部リレー)
Modbusコマンド01の実行:Modbusスレーブの先頭レジスタ56 (変数StartRegisterで指定)から1ビットを読み出します。次にそのコマンドは、その1ビットをマスターに格納します(変数bBool2で設定されたアドレスから開始)。 スレーブの先頭アドレスは、各デバイス毎のModbus仕様に従って、デバイス固有のアドレスに変換されます。
接続されているスレーブが当社PLCの場合は、先頭レジスタ56は、出力Y38 (3*16+8=56)に対応します。
この定数を入力パラメータFunctionCode*に適用すると、対応するModbusコマンドが実行されます。
接続するスレーブがシステムレジスタでModbus RTUスレーブに設定している当社PLCの場合は、1ビットまたは複数ビットを読み出します。
Modbusコマンド02の実行:Modbusスレーブの先頭レジスタ66 (変数StartRegisterで指定)から1ビットを読み出します。次にその1ビットを変数bBool2に指定されたマスターのアドレスに格納します。スレーブの先頭アドレスは、各デバイス毎のModbus仕様に従って、デバイス固有のアドレスに変換されます。
接続されているスレーブが当社PLCの場合は、先頭レジスタ66は、入力X42(4*16+2=66)に対応します。
この定数を入力パラメータFunctionCode*に適用すると、対応するModbusコマンドが実行されます。
接続するスレーブがシステムレジスタでModbus RTUスレーブに設定している当社PLCの場合は、1ビットまたは複数ビットを読み出します。
Modbusコマンド03の実行:Modbusスレーブの先頭レジスタ100 (変数StartRegisterで指定)から2ワードを読み出します。Modbusマスター2のアドレス(変数rCount2)から2ワードを格納します。スレーブの先頭アドレスは、各デバイス毎のModbus仕様に従って、デバイス固有のアドレスに変換されます。
接続されているスレーブが当社PLCの場合は、先頭レジスタ100は、データレジスタDT100に対応します。
最大レジスタ数: 127
この定数を入力パラメータFunctionCode*に適用すると、対応するModbusコマンドが実行されます。
接続するスレーブがシステムレジスタでModbus RTUスレーブに設定している当社PLCの場合は、1ビットまたは複数ビットを読み出します。
WL0–WL127 (リンクリレー)
LD0–LD256 (リンクレジスタ)
Modbusコマンド04の実行:Modbusスレーブの先頭レジスタ2018 (変数StartRegisterで指定)から7ワードを読み出します。マスターのアドレスLD25(変数MasterDataで指定)から7ワードを格納します。スレーブの先頭アドレスは、各デバイス毎のModbus仕様に従って、デバイス固有のアドレスに変換されます。
接続されているスレーブが当社PLCの場合は、先頭レジスタ2018は、データレジスタLD18に対応します。
最大レジスタ数: 127
この定数を入力パラメータFunctionCode*に適用すると、対応するModbusコマンドが実行されます。
Modbus RTUモードで接続されているスレーブが当社PLCの場合、1ビットまたは複数ビットを書き込みます。
Y (出力)
R (内部リレー)
Modbusコマンド05の実行:1ビットをModbusスレーブに書き込みます。先頭アドレスWY1は変数MasterDataで設定されます。次にそのコマンドは、その1ビットをModbusスレーブに格納します(変数StartRegisterで設定された先頭レジスタ35)。 スレーブの先頭アドレスは、各デバイス毎のModbus仕様に従って、デバイス固有のアドレスに変換されます。
接続されているスレーブが当社PLCの場合は、アドレス35は、出力Y23(2*16+3=35)に対応します。
複数ビットデータを書き込むときは、SYS_MODBUS_15_FORCE_COILS定数を使用してください。
最大レジスタ数:1
この定数を入力パラメータFunctionCode*に適用すると、対応するModbusコマンドが実行されます。
Modbus RTUモードで接続されているスレーブが当社PLCの場合、1ビットまたは複数ビットを書き込みます。
Modbusコマンド 06の実行:Modbusスレーブへ1ワードを書き込みます。先頭アドレスDT14は変数MasterDataで設定されます。次にそのコマンドは、その1ワードをModbusスレーブに格納します(変数StartRegisterで設定された先頭レジスタ21)。 スレーブの先頭アドレスは、各デバイス毎のModbus仕様に従って、デバイス固有のアドレスに変換されます。
接続されているスレーブが当社PLCの場合は、先頭レジスタ21は、データレジスタDT21に対応します。
複数ビットデータを書き込むときは、SYS_MODBUS_15_FORCE_COILS定数を使用してください。
最大レジスタ数:1
この定数を入力パラメータFunctionCode*に適用すると、対応するModbusコマンドが実行されます。
Modbus RTUモードで接続されているスレーブが当社PLCの場合、1ビットまたは複数ビットを書き込みます。
Y (出力)
R (内部リレー)
Modbusコマンド15の実行:64ビットをModbusスレーブに書き込みます。先頭アドレスWY1は変数MasterDataで設定されます。Modbusスレーブに64ビットを格納します。先頭レジスタは48、変数StartRegisterにセットします。スレーブの先頭アドレスは、各デバイス毎のModbus仕様に従って、デバイス固有のアドレスに変換されます。
接続されているスレーブが当社PLCの場合は、アドレス48は、出力Y30(3*16=48)に対応します。
この定数を入力パラメータFunctionCode*に適用すると、対応するModbusコマンドが実行されます。
Modbus RTUモードで接続されているスレーブが当社PLCの場合、1ビットまたは複数ビットを書き込みます。
Modbusコマンド16の実行:Modbusスレーブへ書き込みます。先頭アドレスは変数rCount1で設定されます。Modbusスレーブ2にデータを格納します。先頭レジスタは100、変数StartRegisterにセットします。スレーブの先頭アドレスは、各デバイス毎のModbus仕様に従って、デバイス固有のアドレスに変換されます。
接続されているスレーブが当社PLCの場合は、先頭レジスタ100は、データレジスタDT100に対応します。
最大レジスタ数: 127