FP_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)

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

出力

Result (WORD, INT, UINT)
  • FP7のみ:
    • 0: 正常完了

    • 1: 通信ポートがマスタ通信に使用されている

    • 2: 通信ポートがスレーブ通信で使用されている

    • 3: 同時に実行できるマスタ通信命令数を超えている

    • 4: 送信タイムアウト

    • 5:レスポンス受信タイムアウト

    • 6:受信データエラー

  • 他のPLC機種: 0に設定

相手局の仕様

通信モード

SCUまたはET-LANの使用時

MODBUS

1-247

注記

Modbusでの接続の場合は"1"を指定してください。宛先はIPアドレスによって決まります。

転送元データエリアの先頭アドレスの仕様

通信モード

アドレス範囲

MODBUS

0~65535 (16#FFFF)

受信するデータ量の仕様

転送方式

送信データ数

使用するコマンド

ワード送信

1~127ワード

  • WYとWRを読み取るには、SYS_MODBUS_01_READ_COILを使用します。

  • WXを読み取るには、SYS_MODBUS_02_READ_INPUTを使用します。

  • DTを読み取るには、SYS_MODBUS_03_READ_HOLDING_REGISTERを使用します。

  • WLとLDを読み取るには、SYS_MODBUS_04_READ_INPUT_REGISTERSを使用します。

ビット送信

1~2040ビット

  • YとRを読み取るには、SYS_MODBUS_01_READ_COILを使用します。

  • Xを読み取るには、SYS_MODBUS_02_READ_INPUTを使用します。

SCUを使用するサンプルプログラム

  • CPUユニットのCOM1ポートからコマンドを送信して、外部デバイス(局番1)のデータエリアDT400–DT401からデータを読み取り、PLCのデータレジスタDT100–DT101に書き込みます。

  • マスター通信の送信可フラグがTRUE (XC)であり、同じポート(YC)で送信が進行中でないことを確認し、SEND命令を実行します。

  • RECV命令を実行するには、相手局番号(U1)、開始アドレス(DT400)、データ量(U2)、およびデータを格納するためのPLCの開始アドレス(DT100)を指定します。

プログラム上のご注意

  • マスター通信は、MEWTOCOLまたはMODBUSが選択されているときにのみ有効です。マスター通信の送信可フラグ(XC–XE)が、対応するチャンネルについてTRUEであることを確認し、SEND/RECV命令を実行します。

  • マスター通信が進行中の通信ポートに対して、別のSEND/RECV命令を実行することはできません。マスター通信の送信フラグ(YC–YE)がFALSEであることを確認し、命令を実行します。

  • スレーブ通信が進行中のポートに対して、SEND/RECV命令を実行することはできません。

  • レスポンスがない場合、CPUコンフィグレーションで設定されたタイムアウト時間の間、マスター通信の送信フラグ(YC–YE)はTRUEのままになります。

  • 各COMポートに対して、最大16個のSEND/RECV命令を同時に実行することができます。

I/O割り付け

COMポート番号

名前

説明

1

2

0

XC

XD

XE

マスター通信送信可フラグ

MEWTOCOL-COMMEWTOCOL7またはMODBUS-RTUが通信モードとして設定され、PLCがRUNモードになっている場合にTRUEになります。

YC

YD

YE

マスター通信の送信フラグ

SENDおよびRECV命令によってデータが送信されている間、TRUEになります。送信が完了するとFALSEになります。

Y0

Y1

Y2

マスター通信の送信完了フラグ

プログラム制御通信またはマスター通信による送信が正常に完了したときにTRUEになり、送信が異常終了したときにFALSEになります。

注記

接点を使用して動作ステータスを読み出します。ユーザプログラムによる書き込みは行わないでください。

Ethernetを使用したサンプルプログラム

  • CPUユニットのLANポートからコマンドを送信して、外部デバイスのデータエリアDT400–DT401からデータを読み取り、PLCのデータレジスタDT100–DT101に書き込みます。

  • コネクション1のマスター通信の送信可フラグがTRUE (X90)であり、同じポート(Y90)で送信が進行中でないことを確認し、送信命令を実行します。

  • RECV命令を実行するには、相手局番号(U1)、開始アドレス(DT400)、データ量(U2)、およびデータを格納するためのPLCの開始アドレス(DT100)を指定します。

プログラム上のご注意

  • マスター通信は、MEWTOCOLまたはMODBUSが選択されているときにのみ有効です。マスター通信の送信可フラグ(X90–X9F)が、対応する接続についてTRUEであることを確認し、SEND/RECV命令を実行します。

  • マスター通信が進行中の接続に対して、別のSEND/RECV命令を実行することはできません。マスター通信の送信フラグ(Y90–Y9F)がFALSEであることを確認して、命令を実行します。

  • スレーブ通信が進行中の接続に対して、SEND/RECV命令を実行することはできません。

  • 各ポートに対して、最大16個のSEND/RECV命令を同時に実行することができます。

  • FP7のLANポート間の通信では、相手局番号に「U1」を指定します。宛先はIPアドレスによって決定されます。

タイムチャート

  1.  (1) マスター通信送信可フラグ、例:sys_bIsEthernetUserConnection1MasterCommunication
  2.  (2) マスター通信の送信可フラグがTRUEであることを確認し、マスター通信の送信フラグがFALSEであることを確認します。
  3.  (3) マスター通信の送信フラグ、例:sys_bIsEthernetUserConnection1MasterCommunicationActive

    送信時マスター通信の送信フラグTRUEです

    送信完了時マスター通信の送信フラグFALSEです

  4.  (4) この命令の実行
  5.  (5) マスター通信の送信完了フラグ、例:sys_bIsEthernetUserConnection1CommunicationError

    正常完了FALSE

    異常完了TRUE

  6.  (6) データ送信
  7.  (7) レスポンス受信処理

I/O割り付け

I/O番号

名称

説明

X90–X9F

マスター通信送信可フラグ

MEWTOCOL-COMMEWTOCOL7またはMODBUS-RTUが通信モードとして設定され、PLCがRUNモードになっている場合にTRUEになります。

Y90–Y9F

マスター通信の送信フラグ

SENDおよびRECV命令によってデータが送信されている間、TRUEになります。送信が完了するとFALSEになります。

Y70–Y7F

マスター通信の送信完了フラグ

プログラム制御通信またはマスター通信による送信が正常に完了したときにTRUEになり、送信が異常終了したときにFALSEになります。

注記

接点を使用して動作ステータスを読み出します。ユーザプログラムによる書き込みは行わないでください。

エラーフラグ

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ワードを読み出します。次にそのコマンドは、その2ワードをModbusマスター2に格納します(変数rCount2で設定されたアドレスから開始)。 スレーブの先頭アドレスは、各デバイス毎のModbus仕様に従って、デバイス固有のアドレスに変換されます。

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

最大レジスタ数: 127

SYS_MODBUS_04_READ_INPUT_REGISTERS

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

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

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

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

Modbusコマンド04の実行:Modbusスレーブの先頭レジスタ2018 (変数StartRegisterで指定)から7ワードを読み出します。次にそのコマンドは、その7ワードをマスターに格納します(変数MasterDataで設定されたLD25から開始)。 スレーブの先頭アドレスは、各デバイス毎の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で設定されます。次にそのコマンドは、その64ビットをModbusスレーブに格納します(変数StartRegisterで設定された先頭レジスタ48から開始)。 スレーブの先頭アドレスは、各デバイス毎の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に格納します(変数StartRegisterで設定された先頭レジスタ100から開始)。 スレーブの先頭アドレスは、各デバイス毎のModbus仕様に従って、デバイス固有のアドレスに変換されます。

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

最大レジスタ数: 127

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