Modbus 在主流 PLC 中的プログラミング実践ガイド:シーメンス、三菱、台達、インバーター全系列

freeFree Technical Resource

This content is free to read, suitable for basic learning and search traffic.

Modbus 在主流 PLC 中的プログラミング実践ガイド(シーメンス、三菱、台達、インバーター全系列)

在工业自動化领域,Modbus PLC プログラミング是每一位自動化エンジニア必须掌握的核心技能。无论是シーメンス S7-1200/1500 的专用通信指令,まだ三菱 FX5U 的 ADPRW 指令,亦或是台達 DVP 系列的 MODRW 指令和インバーター H3U 的自由口プログラミング,不同ブランド的 PLC 在 Modbus 通信的実装方式上存在显著差异。本記事作为 modbus.cn 系列チュートリアル的重要组成部分,将系统性地对比四大主流 PLC ブランド的 Modbus プログラミング方法,提供完全的ラダー図サンプル和アドレスマッピング关系,帮助エンジニアスピードマスター。跨ブランド PLC 的 Modbus 通信开发。

ブランド別のブランド PLC Modbus 実装方式对比总览

Modbus 在主流 PLC 中的プログラミング実践ガイド:シーメンス、三菱、台達、インバーター全系列イラスト
▲ 图1:主流 PLC Modbus 通信配線トポロジ及ブランド別のブランド通信ポートは設定对照。

在深入具体プログラミング之前,我们先理解一个关键区别:不同ブランド的 PLC 对 Modbus protocol的サポート方式分为"专用指令"和"自由口プログラミング"两大类。专用指令方式由 PLC 厂商封装好 Modbus protocol栈,エンジニア只需调用指令并設定参数即可完成通信;而自由口プログラミング方式则需要エンジニア手动构建 Modbus 报文フレーム,経由シリアルポート逐バイト收发来実装协议。两种方式各有优劣,下表给出了直观对比。

ブランド/系列実装方式核心指令/机制开发难度灵活性
シーメンス S7-1200/1500专用指令MB_COMM_LOAD / MB_MASTER / MB_SLAVE
三菱 FX5U专用指令ADPRW
三菱 FX3U专用指令ADPRW(需适配器)
台達 DVP 系列专用指令MODRW
台達 AS 系列专用指令MODRW / M_MODRW
インバーター H3U自由口プログラミングRS 指令 + CRC verification
インバーター AM600专用指令Modbus 機能ブロック

从上表可以看出,シーメンス Modbus RTU三菱 Modbus Communication 均采用专用指令方案,开发门槛较低;而 インバーター Modbus プログラミング 中的 H3U 系列则需要自由口プログラミング,对エンジニア的协议理解能力要求更高。台達 PLC Modbus 的 MODRW 指令则以其简洁易用著称。

シーメンス S7-1200/1500 Modbus プログラミング详解

シーメンス博途(TIA Portal)プラットフォーム为 S7-1200 和 S7-1500 系列 PLC 提供了完全的 Modbus 通信库,包含三个核心指令:MB_COMM_LOAD(通信の初期化)、MB_MASTER(マスター通信)和 MB_SLAVE(スレーブ通信)。这些指令位于"Communication"指令组的"其它"→"Modbus"路径下。

MB_COMM_LOAD — 通信モジュール初期化

Modbus 在主流 PLC 中的プログラミング実践ガイド:シーメンス、三菱、台達、インバーター全系列イラスト1
▲ 图2:シーメンス/三菱/台達/インバーター四ブランド PLC 与 Modbus 標準アドレス完全に。マッピング关系。

在使用任何 Modbus 通信之前,まず必要です。调用 MB_COMM_LOAD 指令对通信モジュール进行設定。该指令的功能类似于设定シリアルポート的ボーレート、check digit、データ·ビット和ストップ·ビット等基本参数,同时指定 Modbus 的工作モード(RTU 或 ASCII)。

parameterdata type説明典型值
REQBool上昇エッジトリガー設定M0.0
PORTUInt通信モジュールハードウェア識別子269(CM1241 RS485)
BAUDUIntBaud rate9600 / 19200 / 38400 / 115200
PARITYUIntcheck digit:0=无 1=奇 2=偶2(even parity)
FLOW_CTRLUIntフロー制御制:0=无 1=RTS/CTS0
RTS_ON_DLYUIntRTS 开启延时(ms)0
RTS_OFF_DLYUIntRTS 关闭延时(ms)0
RESP_TOUIntレスポンス·タイムアウト(ms)1000
MB_DBVariantMB_MASTER/SLAVE その背景はデータ块对应指令的 DB No.
DONEBool設定完了フラグ
ERRORBoolエラーフラグ
STATUSWordステータス码(16#0000=エラーなし。)

MB_MASTER — Modbus マスター通信指令

MB_MASTER 指令使 S7-1200/1500 作为 Modbus RTU master,向スレーブデバイス読み取りおよび書き込み要求の送信。该指令サポート機能コード 01(リードコイルを読む)、02(read discrete inputs)、03(read holding registers)、04(read input registers)、05(シングルコイルを書く。)、06(単一レジスタの書き込み)、15(マルチコイルを書く)和 16(マルチレジスタの書き込み)。

// MB_MASTER ラダー図参数説明(SCL 表示)
"MB_MASTER_DB"(
    REQ    := #Start_Read,        // 上昇エッジトリガー
    MB_ADDR:= 1,                  // From station address (1-247)
    MODE   := 0,                  // 0=读 1=写
    DATA_ADDR := 40001,           // スレーブデータ開始アドレス
    DATA_LEN  := 10,              // データ長さ(字数)
    DATA_PTR  := P#DB1.DBX0.0 WORD 10  // 本地データストア区指针
);

// 常见モード:
// MODE=0, DATA_ADDR=40001 → function code 03 Read the hold register
// MODE=1, DATA_ADDR=40001 → function code 06/16 写レジスタを保持する。

MB_SLAVE — Modbus スレーブ通信指令

MB_SLAVE 指令使 S7-1200/1500 作为 Modbus RTU slave,レスポンスマスター的読み書きリクエスト。该指令允许マスターアクセス PLC 内部的特定データエリア(コイル、ショップ型入力、入力レジスタ。、レジスタを保持する。)。

// MB_SLAVE ラダー図参数説明(SCL 表示)
"MB_SLAVE_DB"(
    MB_ADDR    := 1,              // 本駅からの住所
    MB_HOLD_REG := P#DB2.DBX0.0 WORD 100  // レジスタマップを保持区
);

完全ラダー図サンプル:读温湿度センサー

以下是一个完全的シーメンス S7-1200 read Modbus 温湿度センサー的程序サンプル。センサーは駅からの住所为 1,温湿度分别存储在レジスタを保持する。 40001 和 40002 中,Baud rate 9600,even parity。

网络 1:初期化通信モジュール(首次扫描调用)
┌──────────────────────────────┐
│  M0.0    MB_COMM_LOAD        │
│──┤P├────┤EN              DONE├──M0.1
│         │PORT:  269   ERROR├──M0.2
│         │BAUD:  9600  STATUS├──MW2
│         │PARITY:2           │
│         │FLOW_CTRL:0        │
│         │RESP_TO:1000       │
│         │MB_DB:MB_MASTER_DB │
└──────────────────────────────┘

网络 2:周期性読み取りセンサーはデータ(每 500ms)
┌──────────────────────────────┐
│  M0.5    MB_MASTER           │
│──┤P├────┤EN              DONE├──M1.1
│         │MB_ADDR:1    ERROR├──M1.2
│         │MODE:0       STATUS├──MW4
│         │DATA_ADDR:40001     │
│         │DATA_LEN:2          │
│         │DATA_PTR:P#DB3.DBX0.0 WORD 2
└──────────────────────────────┘
// 読み取り结果:
// DB3.DBW0 = 温度值(需要除以 10 得到实际温度)
// DB3.DBW2 = 湿度值(需要除以 10 得到实际湿度)

についてシーメンス博途プラットフォーム更详细的 Modbus 設定,请参照 modbus.cn 上についてシーメンス通信モジュール硬件选型的関連記事。也可以表示我们的シーメンス Modbus RTU 完全な構成チュートリアル

三菱 FX5U Modbus プログラミング详解

三菱 Modbus Communication在 FX5U 系列上経由 ADPRW 专用命令の実装,相比 FX3U 时代需要额外适配器的方案有了质的飞跃。FX5U 内置的 RS-485 ポート直接サポート Modbus RTU Protocol,无需额外硬件投入。ADPRW 指令的强大之处在于一条指令即可完成 Modbus 機能コード的指定和データ的收发。

ADPRW 指令详解

操作数説明设定範囲example
S1slave addressH1-HF7(1-247)H1
S2function codeH1-H6, HF, H10H3(read holding registers)
S3Modbus addressH0-HFFFFH0(对应 40001)
S4データ点数H1-H7D0(字)K2
D1send/受信データ起始软元件位/字软元件D100

ADPRW 指令在执行时,PLC 自动构建 Modbus 报文フレーム、result CRC verification码、送信报文并待機中スレーブ回复。对于書き込み操作。(function code H6/H10),D1 指定的软元件エリア存储待送信的データ;对于読み取り操作。(function code H1-H4),D1 指定的软元件エリア存储受信到的データ。

ADPRW 关键注意事項について

  • アドレス偏移ルール:Modbus protocolアドレス从 0 开始编号,但ドキュメント中的アドレス(如 40001)从 1 开始。在 ADPRW 的 S3 操作数中,レジスタを保存する H0 开始对应 40001,コイル从 H0 开始对应 00001。
  • function code H3(read holding registers)1回限り。読み取り 125 个字(H7D)。
  • function code H10(マルチレジスタの書き込み)1回限り。写入 123 个字(H7B)。
  • ADPRW 指令为実行完了の完了型指令,需要连续多个スキャンサイクル才能完成一次通信。
  • 必须経由特殊继电器 SM 和特殊レジスタ SD 进行通信ステータス判断。

ラダー図サンプル:FX5U 読み取り周波数変換器参数

// 网络 1:通信パラメータ設定(経由 PLC 参数設定,无需ラダー図)
// 通道 1(CH1):内置 RS-485
// Protocol:Modbus RTU
// Baud rate:19200 bps
// data bit:8
// stop bit:1
// Verification:even parity

// 网络 2:読み取り周波数変換器動作頻度は和出力電流は
┌──────────────────────────────┐
│ M0               [ADPRW    ]│
│──┤├──────────────┤S1: H1    │  // slave address 1
│                  │S2: H3    │  // function code:read holding registers
│                  │S3: H100  │  // starting address:40101(频率)
│                  │S4: K2    │  // read 2 个字
│                  │D1: D100  │  // データストア到 D100-D101
└──────────────────────────────┘

// 网络 3:データの処理
// D100 = 動作頻度は(単位 0.01Hz,需要除以 100)
// D101 = 出力電流は(単位 0.1A,需要除以 10)

// 网络 4:写入動作頻度は设定
┌──────────────────────────────┐
│ M1               [ADPRW    ]│
│──┤├──────────────┤S1: H1    │  // slave address 1
│                  │S2: H6    │  // function code:単一レジスタの書き込み
│                  │S3: H200  │  // 目标アドレス:40201
│                  │S4: K0    │  // 書き込み操作。时忽略
│                  │D1: D200  │  // 写入的データ
└──────────────────────────────┘

三菱 FX5U 的 Modbus 通信速度可达 115200 bps,在多站ポーリング场景下表现出色。について三菱 Modbus 通信的更深入内容,请参照 modbus.cn 上的三菱 Modbus 通信完全チュートリアル

台達 DVP/AS 系列 Modbus プログラミング详解

台達 PLC Modbus 通信在 DVP 和 AS 系列上有非常优雅的実装。MODRW 指令是台達 PLC 进行 Modbus 通信的核心指令,其设计理念是"一条指令解決すべての問題"——无论是読み取りまだ写入、コイルまだレジスタ,都経由这条命令の完了。AS 系列更是提供了增强版的 M_MODRW 指令,サポートもっと見る機能コード。

MODRW 命令パラメータ説明

parameter含义DVP 系列AS 系列
S联机装置アドレスK1-K254K1-K254
S1function codeK1/K2/K3/K4/K5/K6/K15/K16同上+扩展
S2目标装置アドレス0-99990-65535
S3データ長さ1-1271-200
D本机データ起始レジスタD registerD register

ラダー図サンプル:台達 DVP 読み取りスマートメーター

// 台達 DVP-ES2 経由 COM2(RS-485)読み取りスマートメーターデータ
// 電気メーター駅からの住所:1,Baud rate 9600,検証なし。

// 网络:触发読み取り電気メーターデータ
┌───────────────────────────────┐
│ M1002             [ SET  M0 ]│  // 電気の初期化
└───────────────────────────────┘

┌───────────────────────────────┐
│ M1013             [ MODRW   ]│  // 1 秒时钟脉冲触发
│──┤├───────────────┤S:  K1    │  // slave address 1
│                   │S1: K3    │  // function code:read holding registers
│                   │S2: K0    │  // starting address:040001
│                   │S3: K6    │  // read 6 个字
│                   │D:  D0    │  // 存储到 D0-D5
└───────────────────────────────┘

// 読み取り结果マッピング(某ブランドスマートメーター):
// D0 = 电压(単位 0.1V → D0/10 = 实际电压)
// D1 = 电流(単位 0.01A → D1/100 = 实际电流)
// D2 = 有効なパワー(単位 1W)
// D3 = 無効なパワー(単位 1Var)
// D4 = 力率は(単位 0.001 → D4/1000)
// D5 = 频率(単位 0.01Hz → D5/100)

台達 AS 系列 M_MODRW 增强功能

台達 AS 系列 PLC(如 AS228T-A)在 MODRW 基础上提供了 M_MODRW 指令,主要增强包括:サポート 32 ビット·データ読み書き、サポートストリング·ストリング传输、サポート位写入、通信タイムアウト可設定,以及最多可同时激活 8 条通信指令。这些增强使得 AS 系列在复杂 Modbus 通信场景下具有明显优势。

// 台達 AS 系列 M_MODRW example:read 32 位电能累计值
┌───────────────────────────────────┐
│ M0                  [ M_MODRW   ]│
│──┤├────────────────┤S:  K1       │  // slave address
│                    │S1: K3       │  // function code:读レジスタ
│                    │S2: K100     │  // starting address
│                    │S3: K2       │  // read 2 个字(含 32 ビット·データ)
│                    │D:  D100     │  // 存储到 D100(低字)、D101(高字)
│                    │Mode: D200   │  // モード设定
└───────────────────────────────────┘

台達 PLC 的 Modbus プログラミング体验在国产ブランド中堪称一流,MODRW 指令的简洁性大幅降低了开发门槛。もっと見る台達 PLC Modbus 通信的技术细节,ご訪問ください。 modbus.cn 查阅台達 PLC Modbus 通信完全ガイド

インバーター H3U Modbus 自由口プログラミング详解

インバーター Modbus プログラミング在 H3U 系列上有独特之处。不同于其他ブランド提供专用 Modbus 指令的做法,H3U 采用自由口通信の形態,エンジニア需要手动构建 Modbus 报文フレーム并経由 RS 命令を送る。。这种方式虽然增加了开发难度,但给予了エンジニア对通信过程的完全控制权,在非標準プロトコル或特殊需求场景下非常有用。

H3U 自由口通信基本原理

インバーター H3U 的シリアル通信基于 RS 指令(データ送信指令)和 RC 指令(データ受信指令)。要実装 Modbus RTU Communication,需要按照 Modbus protocol specification手动构建报文フレーム,包括駅からの住所、function code、データ域和 CRC verification码。

CRC-16 チェック算法実装

Modbus RTU 的 CRC verification码是自由口プログラミング中最关键的部分。以下是在 H3U 上実装 CRC-16 チェック的ラダー図逻辑説明(チェック多項式:0xA001)。

// CRC-16 計算流程(Modbus RTU 標準算法)
// 入力:待チェックデータストア在 D100-D105(6 byte,不含 CRC),Bytesの数存于 D0
// 出力:CRC16 结果ハイバイト存于 D200,低バイト数存于 D201
//
// 算法伪代码:
// 1. 预置 16 位 CRC レジスタ为 0xFFFF
// 2. 将第一个 8 ビット·データ与 CRC レジスタ低バイト数异或,结果存入 CRC register
// 3. CRC レジスタ右移一位,最高位补 0
// 4. 移出位もし为 1,则 CRC レジスタ与 0xA001 XOR
// 5. 重复步骤 3-4 共 8 次
// 6. 処理下一バイト単位。,重复步骤 2-5
// 7. すべてのバイト処理完成后,CRC レジスタ的值即为 CRC16 checksum

// H3U ラダー図中的実装(使用循环指令)
// 注意:H3U 内置了 CRC verification指令(CRC),可将チェックコード追加到送信データ末尾
// CRC D100 D106 K6
// Function:对 D100 始まりました。 6 Bytesのデータ計算 CRC,结果存入 D106-D107

完全自由口 Modbus RTU マスターサンプル

// インバーター H3U 自由口通信実装 Modbus RTU master
// 目标:読み取り駅からの住所 1 保持レジスタです。 40001(2 个字)

// 网络 1:构建 Modbus リードホールドレジスタ报文
// メッセージ形式:[slave address][function code][開始アドレス高][開始アドレス低][字数高][字数低][CRC低][CRC高]
//
// 送信报文データ准备:
// D100 = H0103    // slave address 01 + function code 03
// D101 = H0000    // starting address 0000(对应 40001)
// D102 = H0002    // read 2 个字
// CRC verification放入 D103

// 网络 2:設定シリアルパラメータ(経由特殊レジスタ)
// D8120 = H0C81   // 8ビット·データ+even parity+1ストップ·ビット+9600bps
// M8161 = ON      // 8位データの処理モード

// 网络 3:送信データ
┌──────────────────────────────┐
│ M0               [ RS     ]│
│──┤├──────────────┤D100      │  // 送信起始レジスタ
│                  │K8        │  // send 8 バイト単位。(含 CRC)
│                  │D200      │  // 受信起始レジスタ
│                  │K9        │  // receive 9 バイト単位。(含 CRC)
└──────────────────────────────┘

// 网络 4:受信データの処理
// D200 = slave address(应为 H01)
// D201 = function code(应为 H03)
// D202 = byte count(应为 04)
// D203 = 第一字ハイバイト
// D204 = 第一字低バイト数
// D205 = 第二字ハイバイト
// D206 = 第二字低バイト数
// D207 = CRC lowbyte
// D208 = CRC highbyte

インバーター AM600 系列(Codesys プラットフォーム)则提供了更现代化的 Modbus 通信の形態,経由专用機能ブロックの実装,与シーメンス方案更为接近。についてインバーター全系列 PLC 的 Modbus プログラミング对比,请参照 modbus.cn 上的インバーター Modbus プログラミング全系列指导

ブランド別のブランドアドレスマッピング关系对照表

Modbus 通信中最容易出错的环节之一就是アドレスマッピング。不同ブランド的 PLC 对 Modbus アドレス的表示方式各不相同,而且在プログラミング时アドレス偏移ルール也有差异。下表整理了四大ブランド PLC 的 Modbus アドレスマッピング关系,カバー超过 2000 条アドレスマッピングルール的核心逻辑。

Modbus アドレス区プロトコルアドレスシーメンス三菱 FX5U台達 DVPインバーター H3U
コイル 00001-099990-9998Q0.0-Qx.yM0-MxM0-MxM0-Mx
ショップ型入力 10001-199990-9998I0.0-Ix.yX0-XxX0-XxX0-Xx
入力レジスタ。 30001-399990-9998IW0-IWxSD 特殊レジスタ
レジスタを保持する。 40001-499990-9998DBx.DBW0+D0-D7999D0-D9999D0-D7999
レジスタを保持する。 400001-4655350-65534需扩展寻址D0-D7999 / R0+D0-D9999 / 扩展D0-D7999 / 扩展

アドレス偏移ルール详解

理解アドレス偏移是避免 Modbus 通信エラー的基石。Modbus protocol定义的アドレス从 0 开始编号,但アプリケーション層编号(如 40001)从 1 开始。不同ブランド的 PLC 在指令で使用する。的アドレス通常是プロトコルアドレス(0-based),这导致了一个常见的"difference 1"Error。

Scenariosドキュメントのアドレスプロトコルアドレス(指令中用)オフセットの量
read holding registers 40001400010x0000(H0/K0)-1
read holding registers 40100401000x0063(H63/K99)-1
リードコイルを読む 00001000010x0000(H0/K0)-1
単一レジスタの書き込み 40010400100x0009(H9/K9)-1
read input registers 30050300500x0031(H31/K49)-1

よくある間違い与陷阱

在实际工程中,Modbus 通信的デバッグ往往占据了大量开发时间。以下是著者整理了数百个实际项目中最も一般的な的エラー和陷阱,帮助读者少走弯路。

1. アドレス偏移エラー

这是最も一般的な的エラーない之一。デバイス手册上写的レジスター·アドレス是"40001",エンジニア在 PLC 指令中将開始アドレス填写为"1"或"40001"都是エラー的。正确做法是填入"0"(プロトコルアドレス = アプリケーションのアドレス - 1)。シーメンス MB_MASTER 的 DATA_ADDR 参数填入 40001 是正确的(シーメンス做了封装),但三菱 ADPRW 的 S3 参数应填入 H0,台達 MODRW 的 S2 参数应填入 K0。

2. endianness(Endianness)問題

当 Modbus 传输 32 ビット·データ(如浮動小数点数、双字整数)时,バイトオーダー問題会导致データの解析エラー。常见的バイトオーダー组合有四种:Big-Endian endianness + Big-Endian 字序(標準 Modbus)、Big-Endian endianness + Little-Endian 字序、Little-Endian endianness + Big-Endian 字序,以及 Little-Endian endianness + Little-Endian 字序。シーメンス PLC 采用 Big-Endian,三菱和台達采用 Little-Endian,跨ブランド通信时必须注意バイトオーダー変換。

3. タイムアウトの設定不当

Modbus RTU 的フレーム間の間隔標準为 3.5 个文字の時間(在 9600 bps 下约 3.6ms)。もしマスター的タイムアウトの設定过短,会因普通のためにフレーム間の間隔而误判タイムアウト;もし过长,则在デバイス掉线时会浪费大量扫描时间。建议将レスポンスタイムアウトの設定为「(最大レスポンス文字数 × 文字の時間)+ デバイス処理時間 + 余量」,例如 9600 bps 下読み取り 10 Registers,合理的タイムアウトの設定为 200-500ms。

4. 多マスター冲突

Modbus RTU 是单マスター协议,同一バス上不允许存在多个マスター。当 HMI タッチパネル和 PLC 同时作为マスターアクセス同一デバイス时,会产生バス冲突。ソリューション是让 HMI 経由 PLC 的透過的な伝送功能间接アクセスデバイス,或者使用 Modbus TCP ゲートウェイ进行プロトコル変換。

5. 通信パラメータ不一致

Baud rate、data bit、stop bit、チェックビット必须与スレーブ完全一致。注意:某些デバイス声称サポート"9600,8,N,1",但实际データ·ビット为 9 位(8 data bit + 1 check digit),通信时会因为バイト長さ不マッチング而失敗。建议使用 Modbus debugging tool機器の確認的实际通信パラメータ。

与 SCADA 系统的集成

PLC 経由 Modbus protocol与 SCADA(モニタリング与データの収集)システム統合是工业自動化中最も一般的な的架构之一。以下介绍几种典型的集成方式和ベストプラクティス。

典型集成架构

  • 直连モード:SCADA 経由 Modbus RTU/TCP 驱动直接连接 PLC。適用される小型系统(1-5 台 PLC),优点是架构简单、延迟低;缺点是扩展性差、SCADA 负担重。
  • OPC サーバー·サーバー中转モード:PLC → OPC Server(如 Kepware、Matrikon)→ SCADA。適用される中大型系统,优点是协议解耦、多クライアント側はサポート;缺点是增加了中间层和维护成本。
  • データゲートウェイモード:PLC → Modbus データゲートウェイ → SCADA/MES/ERP。適用されるエンタープライズレベル系统,优点是统一データ出口、サポートデータ缓存和转发。

SCADA 组态要点

在 SCADA 中設定 Modbus 驱动时,最关键的是正确設定レジスター·アドレスマッピング。常见的 SCADA プラットフォーム(如 WinCC、キング·ビュー、力控、Intouch)对 Modbus アドレス的表示方式各不相同。例如,WinCC 使用 "4x0001" 表示レジスタを保持する。,而キング·ビュー使用 "4-1" 的格式。必须查阅各プラットフォーム的 Modbus 驱动ドキュメント,確認アドレス格式后再进行設定。

デバッグスキル与工具おすすめ

高效的デバッグ是 Modbus 通信开发成功的关键。以下是著者おすすめ的工具和方法论。

必备デバッグツール

工具名称Type適用可能なシーンおすすめ理由
Modbus Poll桌面软件マスター模拟界面直观,サポートすべての機能コード,可定时ポーリング
Modbus Slave桌面软件ステーションからのシミュレーション可与 Poll 配对使用,仿真スレーブ行为
QModMaster开源软件マスターデバッグ無料开源,サポート RTU/TCP,跨プラットフォーム
ModScan桌面软件マスター扫描批量扫描スレーブレジスタ,快速建立アドレスマッピングテーブル
シリアルポートモニタリング工具硬件/软件バス监听USB 转 485 的监听モード,记录元の报文
Wireshark网络抓包Modbus TCP 分析サポート Modbus TCP 协议解析,Powerful Features

デバッグ方法论

  • 分层验证法:先用電気メーター確認物理層は(线缆、終端抵抗、バイアス抵抗体),再用 Modbus Poll 確認链路层(Baud rate、check),最后用 PLC 程序確認アプリケーション層(address、data format)。
  • 最小化测试:先用最简单的機能コード(03 単一読み込みレジスタ)进行通信测试,確認基本链路正常后再测试复杂功能。
  • 报文记录法:使用シリアルポートモニタリング工具记录完全报文,経由人工分析报文フレームポジショニング問題。Modbus 报文構造简单,通常一眼就能识别問題所在。
  • タイムアウト递进法:从较长的タイムアウト(如 3000ms)开始デバッグ,確認通信は正常后逐步缩短タイムアウト,找到最佳值。

四大ブランド Modbus プログラミング包括的对比

对比维度シーメンス S7-1200/1500三菱 FX5U台達 AS 系列インバーター H3U
実装方式专用指令(库)专用指令专用指令自由口プログラミング
核心指令MB_COMM_LOAD/MB_MASTER/MB_SLAVEADPRWMODRW/M_MODRWRS+CRC
プログラミング难度★★☆☆☆★★☆☆☆★★☆☆☆★★★★☆
機能コードのサポート01/02/03/04/05/06/15/1601/02/03/04/05/06/15/1601/02/03/04/05/06/15/16All(手动)
最多スレーブ数247247254247(受スキャンサイクル限制)
最大のシングル。データの量125 字(读)/123 字(写)125 字(读)/123 字(写)127 字(读)/123 字(写)无限制(手动)
アドレス容错自动処理偏移需手动偏移(-1)需手动偏移(-1)需手动偏移(-1)
多指令并行サポートなし。(需排队)サポートなし。(需排队)サポート(最多8条)手动管理
エラー诊断STATUS 详细ステータス码SM/SD registerエラーフラグ位手动判断
TCP サポートMB_CLIENT/MB_SERVER内置イーサネット(イーサネット)口内置イーサネット(イーサネット)口需扩展モジュール
浮動小数点数サポート需バイトオーダー変換需バイトオーダー変換需バイトオーダー変換需バイトオーダー変換
开发环境TIA PortalGX Works3ISPSoft/DIAStudioAutoShop
学习リソース丰富较丰富中等较少
典型通信速率19200-1152009600-1152009600-1152009600-19200
适合场景大型系统/標準化项目中小型デバイス/快速开发国产替代/性价比优先定制化需求/深度控制

FAQ common problems

Q1:シーメンス S7-1200 的 Modbus 通信需要额外的ハードウェアモジュール吗?

はい。S7-1200 CPU 本体通常只有イーサネット(イーサネット)口和普通的 RS-232/RS-485(部分型号),需要进行 Modbus RTU 通信时,Recommended for use CM1241 RS485 通信モジュール(硬件标识号 269)或 CB1241 信号板。对于 Modbus TCP Communication,CPU 自带的イーサネット(イーサネット)口即可サポート,无需额外硬件。S7-1500 类似,使用 CM PtP 通信モジュール。

Q2:三菱 FX5U 的 ADPRW 指令一次可以读複数書き込み少个デバイス?

ADPRW 指令每次只能与一个スレーブデバイス进行通信。もし需要ポーリング多个スレーブ,需要在程序で使用する。多组 ADPRW 指令,并确保同一时间只有一条指令在激活ステータス。可以経由上一个指令的完了フラグ来触发下一个指令,実装串行ポーリング。典型的多站ポーリング周期 = 站点数 × (リクエスト时间 + 応答時間 + フレーム間の間隔)。

Q3:台達 MODRW 指令通信失敗如何排错?

首先チェック通信パラメータ是否一致(Baud rate、check digit、data bit、stop bit)。然后確認 RS-485 的 A/B 线是否接反——这是最も一般的な的硬件問題。使用台達 PLC 内置的特殊レジスタ可以表示通信エラー·コード。最后,确保 MODRW 指令的目标アドレス与スレーブ实际アドレスマッチング。台達 PLC 的 COM2 ポートデフォルト是 Modbus 駅からのモデル,如需作为マスター使用,需要在程序中将 M1143 設定为 ON。

Q4:インバーター H3U 自由口プログラミング実装 Modbus 的可靠性如何?

インバーター H3U 的自由口 Modbus 通信在ボーレート不超过 19200 bps 时非常可靠。为了保证通信稳定性,建议在程序中加入以下机制:タイムアウト重试(建议 3 次)、CRC verification结果验证、受信データ長さチェック、レスポンスアドレスチェック(確認回复駅からの住所与リクエスト一致),以及通信失敗后的エラー计数和报警。もしそうなら大规模批量项目,建议使用インバーター AM600 系列(Codesys プラットフォーム),其 Modbus 機能ブロック更为成熟稳定。

Q5:如何解決 Modbus 通信中 32 ビット浮動小数点数的バイトオーダー問題?

32 ビット浮動小数点数在 Modbus で使用する。2つ连续的 16 位レジスタ传输,バイトオーダー由デバイス决定。シーメンス和シュナイダー通常使用 Big-Endian 字序(register N 存高 16 位,N+1 存低 16 位),而三菱、台達、インバーター通常使用 Little-Endian 字序(register N 存低 16 位,N+1 存高 16 位)。解決方法是在受信端进行バイトスワップ:シーメンス可使用 SWAP 指令,三菱可使用 SWAP 命令または直接进行言葉の交換,台達可使用 XCH 指令,インバーター可使用循环移位。

结语

Modbus PLC プログラミング是工业自動化エンジニア的核心竞争力之一。从シーメンス Modbus RTU 的 MB_MASTER 指令到三菱 Modbus Communication的 ADPRW 指令,从台達 PLC Modbus 的 MODRW 指令到インバーター Modbus プログラミング的自由口実装,不同ブランド各有其设计哲学和ベストプラクティス。掌握跨ブランド PLC 的 Modbus 通信能力,不仅能够应对各种项目需求,更能够深入理解工业通信プロトコル的本质。

本記事作为 modbus.cn Modbus 技术系列的重要篇章,与プラットフォーム上的其他文章形成了完全的技术体系。建议读者结合以下几件の記事深入学习:

工控之路,道阻且长。愿本記事能成为你 Modbus プログラミング路上的可靠伴侣。

Put this resource to use in a real project?

Go to the Tool Center for message parsing, CRC verification and device debugging, or submit your requirements for selection and integration advice.

Engineer Membership

Turn this article into actionable debugging resources

After activation, you can use advanced message parsing, resource pack downloads, code examples, engineering cases and priority technical support, suitable for real project delivery.

Unlimited Advanced Tools
Resource & Code Packs
Complete Engineering Case Library
Priority Technical Support

Leave a Reply

Your email address will not be published. Required fields are marked *.