F145F146_MODBUS_MASTER

スレーブへのデータ書き込みまたはスレーブからのデータの読み出し

指定できるファンクションコードとプログラム例

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

この命令は、使用するポートのシステムレジスタで定義されたModbus RTUプロトコルを使用して、通信ポートを介したマスターからスレーブへのデータの書き込みまたはスレーブからのデータの読み出しに使用します。 マスターとスレーブに同じプロトコルが設定されていることを確認してください。

パラメータ

入力

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)

スレーブの局番(0~255)。

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

FunctionCode* (WORD, INT, UINT)

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

StartRegister (WORD, INT, UINT)

先頭アドレス(0~65535)。FunctionCode*で指定されたコマンドによるアドレスタイプ。

NumberOfRegisters* (WORD, INT, UINT)

送信ビット数または送信ワード数

  • 1–2040(ファンクションコード01、02の場合)

  • 2–2040(ファンクションコード15の場合)

  • 1–127(ファンクションコード03、04の場合)

  • 2–127(ファンクションコード16の場合)

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

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

解説

  • 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:該当マニュアルをご参照ください。マニュアルは、インターネット上のダウンロードセンターにあります。

エラーフラグ

sys_bIsOperationErrorHold (TRUEになり、TRUEを保持)
  • スレーブまたはマスターデータが、アドレスの有効範囲を超えているとき

  • 通信モードがMEWTOCOL-COMマスター/スレーブまたはModbus RTUマスター/スレーブに設定されていないとき

  • 選択されたCOMポートが、装着されていない通信カセットを必要としているとき

sys_bIsOperationErrorNonHold (1回のスキャンに対してTRUE)
  • スレーブまたはマスターデータが、アドレスの有効範囲を超えているとき

  • 通信モードがMEWTOCOL-COMマスター/スレーブまたはModbus RTUマスター/スレーブに設定されていないとき

  • 選択されたCOMポートが、装着されていない通信カセットを必要としているとき

SYS_MODBUS_01_READ_COIL

この定数を入力パラメータFunctionCode*に適用すると、対応するModbusコマンドが実行されます。

接続するスレーブがシステムレジスタでModbus RTUスレーブに設定している当社PLCの場合は、1ビットまたは複数ビットを読み出します。

  • Y (出力)

  • R (内部リレー)

Modbusコマンド01の実行:Modbusスレーブの先頭レジスタ56 (変数StartRegisterで指定)から1ビットを読み出します。次にそのコマンドは、その1ビットをマスターに格納します(変数bBool2で設定されたアドレスから開始)。 スレーブの先頭アドレスは、各デバイス毎のModbus仕様に従って、デバイス固有のアドレスに変換されます。

接続されているスレーブが当社PLCの場合は、先頭レジスタ56は、出力Y38 (3*16+8=56)に対応します。

SYS_MODBUS_02_READ_INPUT

この定数を入力パラメータFunctionCode*に適用すると、対応するModbusコマンドが実行されます。

接続するスレーブがシステムレジスタでModbus RTUスレーブに設定している当社PLCの場合は、1ビットまたは複数ビットを読み出します。

  • X (入力)

Modbusコマンド02の実行:Modbusスレーブの先頭レジスタ66 (変数StartRegisterで指定)から1ビットを読み出します。次にその1ビットを変数bBool2に指定されたマスターのアドレスに格納します。スレーブの先頭アドレスは、各デバイス毎のModbus仕様に従って、デバイス固有のアドレスに変換されます。

接続されているスレーブが当社PLCの場合は、先頭レジスタ66は、入力X42(4*16+2=66)に対応します。

SYS_MODBUS_03_READ_HOLDING_REGISTER

この定数を入力パラメータFunctionCode*に適用すると、対応するModbusコマンドが実行されます。

接続するスレーブがシステムレジスタでModbus RTUスレーブに設定している当社PLCの場合は、1ビットまたは複数ビットを読み出します。

  • DT (データレジスタ)

Modbusコマンド03の実行:Modbusスレーブの先頭レジスタ100 (変数StartRegisterで指定)から2ワードを読み出します。Modbusマスター2のアドレス(変数rCount2)から2ワードを格納します。スレーブの先頭アドレスは、各デバイス毎のModbus仕様に従って、デバイス固有のアドレスに変換されます。

接続されているスレーブが当社PLCの場合は、先頭レジスタ100は、データレジスタDT100に対応します。

最大レジスタ数: 127

SYS_MODBUS_04_READ_INPUT_REGISTERS

この定数を入力パラメータFunctionCode*に適用すると、対応するModbusコマンドが実行されます。

接続するスレーブがシステムレジスタでModbus RTUスレーブに設定している当社PLCの場合は、1ビットまたは複数ビットを読み出します。

  • WL0–WL127 (リンクリレー)

  • LD0–LD256 (リンクレジスタ)

Modbusコマンド04の実行:Modbusスレーブの先頭レジスタ2018 (変数StartRegisterで指定)から7ワードを読み出します。マスターのアドレスLD25(変数MasterDataで指定)から7ワードを格納します。スレーブの先頭アドレスは、各デバイス毎のModbus仕様に従って、デバイス固有のアドレスに変換されます。

接続されているスレーブが当社PLCの場合は、先頭レジスタ2018は、データレジスタLD18に対応します。

最大レジスタ数: 127

SYS_MODBUS_05_FORCE_COIL

この定数を入力パラメータ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

SYS_MODBUS_06_PRESET_REGISTER

この定数を入力パラメータFunctionCode*に適用すると、対応するModbusコマンドが実行されます。

Modbus RTUモードで接続されているスレーブが当社PLCの場合、1ビットまたは複数ビットを書き込みます。

  • DT (データレジスタ)

Modbusコマンド 06の実行:Modbusスレーブへ1ワードを書き込みます。先頭アドレスDT14は変数MasterDataで設定されます。次にそのコマンドは、その1ワードをModbusスレーブに格納します(変数StartRegisterで設定された先頭レジスタ21)。 スレーブの先頭アドレスは、各デバイス毎のModbus仕様に従って、デバイス固有のアドレスに変換されます。

接続されているスレーブが当社PLCの場合は、先頭レジスタ21は、データレジスタDT21に対応します。

複数ビットデータを書き込むときは、SYS_MODBUS_15_FORCE_COILS定数を使用してください。

最大レジスタ数:1

SYS_MODBUS_15_FORCE_COILS

この定数を入力パラメータ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)に対応します。

SYS_MODBUS_16_PRESET_REGISTERS

この定数を入力パラメータFunctionCode*に適用すると、対応するModbusコマンドが実行されます。

Modbus RTUモードで接続されているスレーブが当社PLCの場合、1ビットまたは複数ビットを書き込みます。

  • DT (データレジスタ)

Modbusコマンド16の実行:Modbusスレーブへ書き込みます。先頭アドレスは変数rCount1で設定されます。Modbusスレーブ2にデータを格納します。先頭レジスタは100、変数StartRegisterにセットします。スレーブの先頭アドレスは、各デバイス毎のModbus仕様に従って、デバイス固有のアドレスに変換されます。

接続されているスレーブが当社PLCの場合は、先頭レジスタ100は、データレジスタDT100に対応します。

最大レジスタ数: 127

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