デルタDVPシリーズPLC Modbus RTUレジスタアドレスマッピング完全ガイド

無料無料技术资料

这篇内容可直接阅读,适合用于基础学习和検索引流。

1. 概要

デルタ(Delta)DVPシリーズPLC(DVP-ES2/EX2/SS2/SA2/SX2/SE、EH3など)はCOM2 RS-485ポートを内蔵し、標準のModbus ASCII/RTUをネイティブでサポートします。インバータ、温度調節計、計器などのスレーブを能動的に読み書きするマスター(Master)としても、タッチパネル・SCADA・他のPLCからの読み書き要求を受動的に応答するスレーブ(Slave)としても動作できます。本稿は、デルタ公式の『DVP-PLC応用マニュアル(プログラム編/通信編)』『DVPシリーズPLC通信プロトコル(Communication Protocol)』『DVP-ES2操作マニュアル』に厳密に基づいて作成しており、すべてのデバイスアドレス、命令のオペランド、特殊リレー/特殊レジスタは公式マニュアルに準拠しています。

DVPシリーズPLCの2つのModbus動作モード:

  • Modbusマスター:専用命令 MODRD(API 100、読出)、MODWR(API 101、書込)、MODRW(API 150、汎用読み書き)の3命令を使って通信を能動的に起動します。
  • Modbusスレーブ:通信フォーマットと局番を設定するだけでよく、PLCは内蔵プロトコルに従って自動応答するため、通信プログラムは不要です。

最初に明確にしておくべき重要点:Modbusの通信電文上、DVPの内部デバイス(X/Y/M/S/T/C/D)は固定の16進数通信アドレスを使用します(例:X0=0400H、Y0=0500H、M0=0800H、D0=1000H)。一部のネット解説で流布している「上位バイトにデバイス種別コード(H1/H3/H4/H10)、下位ワードに番号を入れる」として H100064 や H100100 のような24ビットアドレスを作る方式は、デルタ公式マニュアルには存在しません。MODRW/MODRDのアドレスオペランドは16ビットであり、H100064はそれ自体が不正な値です。第3章・第4章で公式のアドレス体系を徹底的に解説します。

2. Modbus機能コードとアクセス可能なデバイス

DVPスレーブがサポートする機能コードと、それでアクセスできる内部デバイスを下表に示します(出典:デルタ『DVPシリーズPLC通信プロトコル』)。

機能コード(10進/16進)名称アクセス可能なDVPデバイスデータ型読/書
01(H01)コイル状態読出 Read Coil StatusS、Y、M、T(接点)、C(接点)ビット読出
02(H02)離散入力読出 Read Input StatusS、X、Y、M、T、Cビット読出
03(H03)保持レジスタ読出 Read Holding RegistersT(現在値)、C(現在値)、Dワード読出
05(H05)単一コイル書込 Force Single CoilS、Y、M、T、Cビット書込
06(H06)単一レジスタ書込 Preset Single RegisterT、C、Dワード書込
15(H0F)複数コイル書込 Force Multiple CoilsS、Y、M、T、Cビット書込
16(H10)複数レジスタ書込 Preset Multiple RegistersT、C、Dワード書込
17(H11)スレーブID通知 Report Slave ID—(スレーブ状態を返す)—読出

「標準Modiconアドレスモデル」との2つの重要な違い:

  • DVPは機能コード04(入力レジスタ読出)を使用しません。入力リレーXは機能コード02で読み出します(デルタでは02がS/X/Y/M/T/Cのすべてのビットデバイスにアクセス可能)。
  • ビットデバイス(S/Y/M/T/Cの接点)は機能コード01/02/05/15、ワードデバイス(T/C/Dの現在値)は03/06/16を使用します。タイマTとカウンタCは「接点(ビット)」と「現在値(ワード)」の両方のアドレス領域を占有します。

3. DVPをスレーブとして使う:内部デバイス通信アドレス対応表(核心)

DVPがModbusスレーブとして動作するとき、外部マスター(タッチパネル、SCADA、他のPLC、Modbus Pollなど)は下表の16進数通信アドレス(0ベースのPDUアドレス)を使って内部デバイスにアクセスする必要があります。

3.1 デバイス通信アドレス総覧(公式表)

デバイス型番号体系通信アドレス(16進)デバイス範囲機能コード
S(ステップリレー)ビット10進0000H~03FFHS0~S1023(256点ごとに1ブロック)01/02/05/0F
X(入力リレー)ビット8進0400H~04FFHX0~X377(8進、256点)02
Y(出力リレー)ビット8進0500H~05FFHY0~Y377(8進、256点)01/02/05/0F
T(タイマ)ビット/ワード10進0600H~06FFHT0~T255(接点は01/02、現在値は03)01/02/03/05/06/0F/10
M(補助リレー)ビット10進0800H~0DFFH;B000H~B9FFHM0~M1535;M1536~M409501/02/05/0F
C(カウンタ)ビット/ワード10進0E00H~0EFFHC0~C199(16ビット);C200~C255(32ビット)01/02/03/05/06/0F/10
D(データレジスタ)ワード10進1000H~1FFFH;9000H~A70FHD0~D4095;D4096~D999903/06/10

備考:0700H、0F00H~0FFFHなどの領域は予約済みでアクセスできません。実際のデバイス点数は機種(ES2/SS2/SA2/EH3)によって異なります。各機種のマニュアルを確認してください。

3.2 ビットデバイスのアドレス換算

  • X(8進番号):アドレス = 0400H + 8進番号に対応する10進での順序。X0=0400H、X7=0407H、X10=0408H(X8、X9は欠番)、X377=04FFH。
  • Y(8進番号):アドレス = 0500H + 順序。公式通信例では Y0 = H0500 と明記、Y17(8進、10進で15点目)= 050FH。
  • M(10進番号):M0~M1535はアドレス = 0800H + n。例:M0=0800H、M100=0864H。M1536~M4095は B000H~B9FFH にマッピング。
  • S(10進番号):アドレス = 0000H + n。例:S0=0000H、S100=0064H。
デバイス番号通信アドレス(16進)機能コード
入力X0 / X7 / X100400H / 0407H / 0408H02
出力Y0 / Y17(8進)0500H / 050FH01/02/05/0F
補助リレーM0 / M100 / M15350800H / 0864H / 0DFFH01/02/05/0F
ステップリレーS0 / S1000000H / 0064H01/02/05/0F

3.3 ワードデバイス(T/C/D)のアドレス換算

  • タイマ現在値 Tn:0600H + n。例:T0=0600H(公式の単一レジスタ書込例がまさに 06H 00H)。
  • カウンタ現在値 Cn:0E00H + n。例:C0=0E00H、C232=0EE8H(公式例 0EH E8H)。C0~C199は16ビットカウンタ、C200~C255は32ビット高速カウンタ(ダブルワード長を占有)。
  • データレジスタ Dn(n=0~4095):1000H + n。例:D0=1000H、D10=100AH、D100=1064H、D1000=13E8H(いずれも公式マニュアルの実例)。D4096~D9999は9000Hから再マッピングされ、アドレス = 9000H +(n − 4096)。
デバイス番号通信アドレス(16進)公式電文例(FC06 単一レジスタ書込)
タイマT00600H01 06 06 00 12 34 …
カウンタC0 / C2320E00H / 0EE8H01 06 0E 00 … / 01 06 0E E8 …
データレジスタD10100AH01 06 10 0A 12 34 …
データレジスタD100013E8H01 06 13 E8 12 34 …

3.4 サードパーティ製マスターソフト(Modbus Poll / SCADA / タッチパネル)とのアドレス対照

Modbus電文で伝送されるのは上記の0ベースPDUアドレス(16進通信アドレス)です。ただし多くの上位ソフトやHMIは1ベースの「参照番号」(4xxxx / 0xxxx / 1xxxx)の入力を求めます。換算式は次のとおりです:

  • 保持レジスタ参照番号 = 40001 + 16進アドレスの10進値。例:D0のアドレス1000H = 10進4096、参照番号 = 40001 + 4096 = 44097。D100のアドレス1064H = 4196、参照番号 = 44197。
  • コイル参照番号 = 1 + アドレス値、離散入力参照番号 = 10001 + アドレス値。例:M0(0800H=2048)のコイル参照番号 = 2049、X0(0400H=1024)の離散入力参照番号 = 11025。
  • ソフトが「0ベース/PLCアドレス」モードを備えている場合、16進アドレスの10進値を直接入力する(D0なら4096)のが最も誤りにくい方法です。
デバイス通信アドレス(16進)10進オフセット1ベース参照番号機能コード領域
D01000H409644097保持レジスタ 4xxxx
D1001064H419644197保持レジスタ 4xxxx
M00800H204802049コイル 0xxxx
X00400H102411025離散入力 1xxxx
Y00500H128001281コイル 0xxxx

8進の問題を再度:X、Yのデバイス番号は8進(X8/X9は存在しない)ですが、通信アドレスは連番です。X7(0407H)の直後はX10(0408H)であり、0408Hが「X8」に対応するわけではありません。

4. DVPをマスターとして使う:MODRD / MODWR / MODRW命令

4.1 3つの通信命令の一覧

命令API番号用途サポート機能コード
MODRDAPI 100スレーブからデータを読み出すH02(ビット読出)、H03(ワード読出)など
MODWRAPI 101スレーブへデータを書き込むH05/H06/H0F/H10
MODRWAPI 150汎用読み/書き(最も多機能、推奨)H01~H06、H0F、H10、H17

4.2 MODRW(API 150)オペランド定義(公式)

命令形式:MODRW S1 S2 S3 S n

オペランド意味設定値/備考
S1スレーブ局番(通信アドレス)K0~K254。K0はブロードキャスト(読出 H02/H03/H04/H17 ではK0不可)
S2機能コードH01 複数ビット読出 / H02 離散ビット読出 / H03 複数ワード読出 / H04 入力ワード読出 / H05 単一ビット書込 / H06 単一ワード書込 / H0F 複数ビット書込 / H10 複数ワード書込 / H17 複数ワード読書
S3読み書きするデバイスの先頭アドレス相手デバイスの16進通信アドレス。例:H0500(Y0)、H1064(D100)、H2100(インバータ状態)
Sデータレジスタ読出データ/書込データを格納する自機の先頭D(D0、D50など)。H17使用時はSが読出データ先頭、S+1が書込データ先頭
nデータ長H01/H02/H0Fはビット単位、H03/H04/H10はワード単位。H05ではn=0でON、n=1でOFF。H17ではnが読出ワード数、n+1が書込ワード数

オペランド位置に特に注意:S2は常に機能コード、S3がデバイスアドレスです。ネット上の一部解説では「デバイス種別コード」をMODRDの第2オペランド(S2)に入れていますが、これは誤りです。

4.3 公式プログラム例(そのまま流用可能)

例1:別のDVP(局番1)の Y0~Y17(16点、ビット)を読み出す — 出典:デルタ『DVP-ES2操作マニュアル』MODRW Program Example 1。

命令S1局番S2機能コードS3アドレスSデータn長さ
MODRWK1K2(H02 ビット読出)H0500(Y0)D0K16(16ビット)

ASCII要求電文:01 02 0500 0010。RTU要求電文:01 02 05 00 00 10 79 0A。マニュアルには Data address Y0 = H0500 と明記されています。

例2:別のDVP(局番1)の D100(1ワード)を読み出す

命令S1局番S2機能コードS3アドレスSデータn長さ
MODRWK1K3(H03 ワード読出)H1064(D100 = 1000H + 100)D0K1(1ワード)

M100を読み出す場合は、S3を H0864(M100 = 0800H + 100)に変更し、機能コードをH01にします。

例3:デルタ製インバータ(局番1)の状態/周波数など6ワードを読み出す — 出典:デルタ『DVP-PLC応用マニュアル』公式MODRW例。

命令S1局番S2機能コードS3アドレスSデータn長さ
MODRWK1K3(H03)H2100D0K6(6ワード)

ASCII要求電文:01 03 2100 0006。2100H~2105Hの6レジスタを読み出します。

例4:デルタ製インバータ(局番1)の2000Hへ運転指令ワードを1つ書き込む

命令S1局番S2機能コードS3アドレスSデータn長さ
MODRWK1K6(H06 単一ワード書込)H2000D50(書込データ)K1(1ワード)

ASCII要求電文:01 06 2000 [データ](公式例でD50=H1770のとき電文は旧VFD-Sアドレス定義で 01 06 0100 1770。新機種の指令ワードアドレスは2000H)。

「H100064」のようなアドレスについての最終結論:S3には相手デバイスの連続した16進通信アドレスを直接記入します(D100ならH1064であり、H100100やH100064ではありません)。MODRWのアドレスオペランドは16ビットであり、H100064やH40100のような16ビットを超える値や自己矛盾するコードはデルタ命令では不正です。一部ネット資料にある「上位バイト・デバイス種別表(X=H1、Y=H3、M=H4、D=H10)」はデルタ公式定義ではなく、現場で使用すべきではありません。

4.4 MODRW使用上の注意(公式注意事項)

  • 各MODRW命令の直後には、対応する「送信リクエストの送信」フラグ(SET M1122)を必ず隣接して設定します。ポートは COM1 → COM3 → COM2 の順に判定され、データの取り違えを防ぎます。
  • 同一通信ポートで同時に実行できるMODRWは1命令だけです。次の命令は送受信完了フラグM1127のONを待ってから発行してください(ポーリングではM1127を歩進条件にします)。
  • 読出機能コードH01~H04、H17の駆動接点には LDP/ANDP/ORP/LDF/ANDF/ORF などの立上がり/立下がりパルス接点を使用できません。受信データが不正になるため、通常のLD接点を使用してください。
  • ASCIIモードでは、受信データは先頭DからASCII形式で格納された後、PLCが自動的にhexへ変換して特殊レジスタ D1296~D1311 に格納します(変換中はM1131がON)。送信データは D1256~D1295 に置きます。RTUモードではデータは直接hexで格納されます。

5. 通信パラメータ、特殊レジスタとフラグの設定(COM2 RS-485)

5.1 ハードウェア配線

  1. DVPのCOM2はRS-485ポートで、端子は D+(SG+)と D-(SG-)です。D+をバスのA線、D-をB線に接続し、複数台を数珠つなぎ(デイジーチェーン)にします。
  2. バスの両端にそれぞれ120Ωの終端抵抗を取り付けます。シールド付きツイストペア線を使い、シールドは片端で接地し、動力線から離します。
  3. すべてのマスター/スレーブでボーレート、データビット、パリティ、ストップビットを一致させ、局番の重複を避けます。

5.2 D1120 通信フォーマット設定(公式値)

D1120設定値通信フォーマット標準的な用途
H869600 bps、7データビット、偶数パリティ、1ストップビット(9600,7,E,1)工場出荷時、Modbus ASCII
H879600 bps、8データビット、偶数パリティ、1ストップビット(9600,8,E,1)Modbus RTUで最も多用

D1120の上位ニブルがボーレート選択(H8=9600、H9=19200、HA=38400、HB=57600、HC=115200)、下位ニブルがデータビット/パリティ/ストップビットを選択します。設定後はフォーマット保持のため M1120をSET する必要があります。公式のインバータ通信例では一貫して MOV H87 D1120 + SET M1120 を使用します。

5.3 D1121 通信局番

  • D1121は自機(スレーブ時)または相手の局番を設定します。範囲1~254、0はブロードキャストアドレスです。
  • 例:MOV K1 D1121 は局番1を意味します。工場出荷時の局番は1です。

5.4 RTU/ASCII選択と送受信フラグ(重要な訂正)

特殊リレー / 特殊レジスタCOM2(RS-485)の働き
M1143プロトコル選択:OFF=ASCIIモード、ON=RTUモード(RTU/ASCIIはM1143で決定し、D1130ではありません)
M1120ONでD1120に設定した通信フォーマットを保持
M1122送信リクエストの送信フラグ。ONでMODRD/MODWR/MODRW通信を1回起動
M1127データ送受信完了フラグ(完了時にON、プログラムでRST)
M1140受信データエラーフラグ(チェックサム/フォーマットエラー時にON)
M1141通信アドレス不正 / データ応答エラーフラグ
D1130通信エラーコードレジスタ:M1141 ON時にエラーコードを格納(相手が「不正データアドレス」を返すとD1130=2など)。プロトコルモード用レジスタではありません
D1129通信タイムアウト設定(公式例 K100 = 100ms)

標準初期化プログラム(RTU 9600,8,E,1、局番1):電源投入後の最初のスキャンでM1002がONの間に実行:

LD   M1002
MOV  H87   D1120   // フォーマット 9600,8,E,1
SET  M1120          // 通信フォーマットを保持
MOV  K100  D1129   // 通信タイムアウト 100ms
SET  M1143          // RTUモード選択(OFFならASCII)
MOV  K1    D1121   // 自局番 1(スレーブ時)

通信が必要なとき SET M1122 で要求を送信し、M1127 のON(完了)を待って受信データを処理し、RST M1127 します。

6. デルタ製インバータの読み書き(VFD-E / MS300 / C2000などの汎用アドレス)

デルタ製インバータは概ね下表の通信アドレスを使用します(正確な単位・ビット定義は該当機種の『通信プロトコルマニュアル』に従ってください):

監視/制御項目通信アドレス機能コード説明
運転/停止指令2000H06 / 10(書込)ビット指令ワード:bit0-1 運転/停止/非常停止/JOG、bit2-3 正転/逆転。ビット定義はインバータ・マニュアル参照
周波数指令2001H06 / 10(書込)周波数設定値。多くは0.01Hz単位(50.00Hzなら5000)
運転状態ワード2100H03(読出)運転/回転方向/故障などの状態ビット
出力周波数2101H03(読出)実出力周波数、0.01Hz
出力電流2102H03(読出)出力電流、0.01A(デルタVFD-B公式例は2102Hを読出)
出力電圧 / DC母線電圧2103H03(読出)シリーズにより定義が若干異なる

対応するMODRW命令:

  • 状態/周波数/電流など6ワードを連続読出:MODRW K1 K3 H2100 D0 K6
  • 運転指令を書込(正転運転。機種のビット定義に従いデータワードを事前にD50へ格納):MODRW K1 K6 H2000 D50 K1
  • 周波数指令50.00Hzを書込(D51=K5000):MODRW K1 K6 H2001 D51 K1

インバータ側でも通信局番・ボーレート・通信フォーマットをPLCと一致させ、運転指令/周波数指令の入力ソースを通信に設定する必要があります。シリーズ(VFD-E、MS300、C2000、MH300)によってアドレスと単位が異なるため、実装前に必ず該当インバータの通信プロトコルマニュアルを確認してください。

7. よくある問題とトラブルシューティング

7.1 まったく通信しない

  • 配線確認:D+(SG+)/D-(SG-)が逆でないか、A/Bが対応しているか。複数台が数珠つなぎで、分岐配線になっていないか。
  • フォーマット確認:D1120がH87(RTU 8E1)またはH86(ASCII 7E1)か、両者が一致しているか。M1120をSETしたか。
  • プロトコルモード確認:RTUならM1143をSET、ASCIIならRST。両者が一致している必要があります(「つながらない」最頻原因の1つ)。
  • 局番確認:D1121が対象スレーブと一致し、バス上で局番が重複していないか。
  • 終端抵抗確認:両端に120Ωがあるか。無通信時の差動バス電圧は数百mV程度が目安です。

7.2 通信はできるがデータが読めない / 不正アドレス

  • エラーフラグ確認:M1141がONでD1130にコード(例=2)があればS3のデバイスアドレスが不正です。第3章のhex表で照合してください。
  • 機能コードとデバイス種別:Xは02、Dは03、Y/Mの書込は05/0F、Dの書込は06/10。混同しないでください。
  • 8進の確認:X/Y番号は8進でX10はX7の直後、アドレスは連番で換算します。
  • H100064系アドレスを使わない:D100ならH1064、M100ならH0864です。
  • タイミング確認:SET M1122後にM1127を待っているか。同一ポートで複数のMODRWを同時に出していないか。

7.3 データが正しくない・文字化けする

  • データ幅:C200~C255は32ビットカウンタで2レジスタ/ダブルワードを占有します。ダブルワードで読み出してください。
  • バイト/ワード順:32ビットデータの上位/下位バイト、上位/下位ワードの順序が相手機器と一致するか確認します。
  • スケーリング:周波数0.01Hz、電流0.01Aなどはマニュアルに従って倍率で実量に戻します。
  • RTU/ASCII混在:モード不一致はフレーム崩れや文字化けの原因です。M1143の状態を確認してください。

7.4 通信がときどき失敗する

  • シールド付きツイストペア線を使い、シールドは片端接地。通信線をインバータ出力線などの動力線から離します。
  • バス長と台数を管理し(必要ならボーレートを下げる)、両端を終端します。
  • D1129のタイムアウトとリトライを適切に設定し、M1127/M1140/M1141で完了・エラーを判定して命令の滞留を防ぎます。

8. 他ブランドPLCとの違い

比較項目デルタDVP三菱FX3UシーメンスS7-200 SMART
X/Yアドレス体系8進8進10進
内部デバイスアドレス固定hex対応(X0400/Y0500/M0800/D1000)FX3U-MB固定対応+割当可HoldStart/MaxHoldで保持レジスタ領域を設定
マスター命令MODRD/MODWR/MODRW(API 100/101/150)ADPRW(FNC276)、機能コードで読み書きする1命令ライブラリ命令 MBUS_CTRL/MBUS_MSG
RTU/ASCII選択M1143(OFF=ASCII、ON=RTU)通信パラメータで設定ライブラリ命令のModeパラメータ(RTUのみ)
通信ポートCOM2内蔵(RS-485)外付けFX3U-485ADP-MBが必要RS-485ポート基板搭載
主な設定レジスタD1120(フォーマット)/D1121(局番)/M1143(モード)D8120/D8121などの特殊レジスタライブラリ命令パラメータ(ボード/パリティ/タイムアウト)

9. まとめ

デルタDVPシリーズPLCのModbus通信は次のように要約できます:

  • スレーブのデバイスアドレス(hex):S=0000H、X=0400H、Y=0500H、T=0600H、M=0800H、C=0E00H、D=1000H。X/Yは8進番号・連続アドレス、D0~D4095は1000H~1FFFHに対応。
  • 機能コード:ビットデバイスは01/02/05/0F(Xは02)、ワードデバイスT/C/Dは03/06/10。デルタは機能コード04を使用しません。
  • マスター命令:MODRW S1(局番)S2(機能コード)S3(hexデバイスアドレス)S(データD)n(長さ)。S2が機能コード、S3がアドレスで、hexを直接記入(D100=H1064)。
  • 通信設定:D1120=H87(RTU 9600,8,E,1)/H86(ASCII 7E1)、M1120をSET、M1143でRTU/ASCII選択、D1121で局番、M1122で送信、M1127で完了、M1140/M1141/D1130でエラー診断。
  • 必ず避けること:「H1/H4/H10+番号」で作るH100064のような24ビットアドレス、S2へのデバイスコード記入、D1130をプロトコルモード用レジスタと誤認すること。

実装前には、Modbus PollなどのマスターツールをDVPスレーブに接続し、本稿のhex表に従って各領域を検証することを推奨します(D0を読むならアドレス4096/参照番号44097)。アドレス・機能コード・データ形式がすべて正しいことを確認してから、MODRWマスタープログラムを作成してください。

10. 関連リンク

  • Modbus RTU通信基礎チュートリアル
  • デルタDVP PLC Modbus通信設定例
  • デルタ製インバータ(VFD-E/MS300/C2000)Modbus制御ガイド
  • 三菱FX3U / シーメンスS7-200 SMART Modbusレジスタ対応ガイド
  • RS-485バス配線と終端抵抗の規格
この資料を実際のプロジェクトに活用しませんか?

ツールセンターで電文解析、CRCチェック、デバイスデバッグを行うか、要件を送信して選定と接続のアドバイスを受けましょう。

エンジニア会員

この記事を実行可能なデバッグ資料に

登録すると、高度な電文解析、資料パックのダウンロード、コード例、エンジニアリングケース、優先技術サポートが利用可能に。実際のプロジェクト納品に最適です。

高度なツール無制限
資料パックとコードパック
完全なエンジニアリングケースライブラリ
優先技術サポート窓口

发表回复

あなたのメールアドレスアドレス不会被公开。 必須項目已用 * 标注