渐进式解決Modbusコミュニケーションの問題的方法

freeFree Technical Resource

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

渐进式解決Modbusコミュニケーションの問題的方法

Source: Modbus Chinese Network(modbus.cn) —— China leadingModbuscommunication protocol technical community

本記事:渐进式解決Modbusコミュニケーションの問題:从物理層は到应用完全に。排マニュアルを参照。 · Author:modbus Technical Team · 发布于 2026-07-01

摘要:Modbus RS-485 通信通信不可怎么办?本記事从物理層は到アプリケーション層,経由真实报文分析和トラブルシューティング工具演示,给出完全的渐进式排障方法。关键词:Modbus 通信故障トラブルシューティング、RS-485 排障、Modbus デバッグ方法、Modbus RTU 応答なし。、CRC verificationError。


在工业自動化领域,Modbus 通信出問題是最让人头疼的事——ではない因为它复杂,而是因为故障点太分散。物理層は、データ链路层、アプリケーション層,任何一个环节出問題,现象可能一样:マスター发リクエスト,スレーブ不回

这件の記事ではない教你 Modbus protocol基础。我假设你已经在用 Modbus,现在的問題是「通信不可」,你需要一份能照着操作的排障清单。我们就从最底层开始,一层一层往上查。

核心关键词:Modbus 通信故障トラブルシューティング、RS-485 排障、Modbus RTU 応答なし。、CRC verificationError。More Modbus テクニカル記事一覧ご訪問ください。 modbus.cn。


一、典型的現場での障害长什么样

先看三个真实场景,もし你遇到过类似的,这件の記事就是写给你的。

Scenarios 1:某污水処理站,16 个 Modbus RTU スレーブ挂在一条 RS-485 バス上。每天下午三点准时すべて掉线,十分后自动恢复。查了三个星期,最后发现是隔壁泵房的PVインバータ每天下午三点启动,EMI 干渉耦合到 485 线上,把信号淹了。

Scenarios 2:一台三菱周波数変換器経由 RS-485 接入ゲートウェイ,マスター发機能コード 03 读频率,偶尔能读到,偶尔报 CRC Error。ボーレート是 9600。折腾了两天最后发现是 A/B ライン·リバース了——マスター的 A 接到了スレーブ的 B。但なぜか。偶尔还能读到データ?因为 RS-485 收发器有一定的共模容限,在信号质量好的时候真通信可能,一有干渉就 CRC 报错。

Scenarios 3:产线上新加了一台サーモスタット,アドレス设成 05,挂上去之后 05 号没反应,但原来的一台 07 号也通信不可了。拔掉新デバイス,07 号恢复正常。查到最后,新デバイスデフォルト設定了 120Ω 終端抵抗,バス上一共挂了三个終端抵抗——阻抗不マッチング,信号の反射导致すべての駅から。时断时续。

这三个场景指向同一个道理:Modbus 通信不可,不能猜,要一层一层排除。 下面就是这个トラブルシューティング完全に。路径。


二、トラブルシューティング综述:从物理層は到アプリケーション層的四层模型

Modbus コミュニケーションの問題的トラブルシューティング路径,按层次从低到高:

┌────────────────────────────────────────────┐
│  第四层:アプリケーション層                             │
│  slave address、Register Mapping、function code、endianness       │
│  现象:スレーブ回異常コード。,或データ值明显正しくない       │
├────────────────────────────────────────────┤
│  第三层:データ链路层                         │
│  Baud rate、check digit、CRC/LRC check               │
│  现象:CRC Error、フレーム不完全、偶发性丢フレーム       │
├────────────────────────────────────────────┤
│  第二层:电气层                             │
│  A/B 线接法、終端抵抗、バイアス抵抗体、接地       │
│  现象:全く通じない、データ全是乱码、断続的な断连   │
├────────────────────────────────────────────┤
│  第一层:物理连接                           │
│  线缆通断、接头氧化、シールド層、布线路径       │
│  现象:マスター发データ,スレーブ完全无反应           │
└────────────────────────────────────────────┘

排障铁律:永远从第一层开始トラブルシューティング,確認没問題再往上走。 不知道有多少人在第三层(改ボーレート、改タイムアウト時間)上浪费了三天,最后发现是第一层的 A/B ライン·リバース了。もし你只记住一句话,记住这句。


三、第一层:物理连接チェック

3.1 マルチメータ打线——最基本的最初のステップ

先把全装備。停電。マルチメータ调到抵抗レンジ或通断ファイル,测:

- A 线从マスター到最も遠い端。スレーブ是否导通(电阻应 < 10Ω,取决于线长和线径) - B 线同样 - A 和 B 之间不能ショート(电阻应为无穷大或接近无穷大) - A/B 分别对 GND 不能ショート

もし通断都正常,再把电送上,マルチメータ调到DC電圧レベル:

渐进式解決Modbusコミュニケーションの問題的方法イラスト

- A 对 GND:静止ステータス下约 2.5V ~ 3.5V(取决于偏置电路) - B 对 GND:静止ステータス下约 1.5V ~ 2.5V - A-B 差動電圧:静止ステータス下约 0.2V ~ 2V,A 应高于 B

もし A-B 差動電圧接近 0V,甚至 A 低于 B,你的偏置电路有問題。 很多廉价 USB-485 変換器です。ない内置バイアス抵抗体,挂在一根长バス上工作时,空闲ステータス下 A-B 差分会漂移到不確かなことステータス,导致スレーブ的 UART 收到随机垃圾データ。

3.2 A/B 线到底怎么接——这个坑踩的人最多

RS-485 的 A/B 配線ない统一的業界タグ標準。不同デバイス厂商对 A 和 B 的定义可能是反的。以下是你可能会遇到的标记方式和它们的对应关系:

常见标记另一种标记空闲电压説明
A / + / D+ / TX+ / 正Non-Inverting高于 B同相端
B / - / D- / TX- / 负Inverting低于 A反相端

快速判定方法:停電ステータス下用マルチメータダイオードレンジ测。 红表笔接 GND,黑表笔接 A——大多数 RS-485 收发器芯片(如 MAX485、SN75176)的 A 脚对 GND 有一个反向保护二极管,会测出正向压降约 0.6V。B 脚对 GND 也一样。もし测不出来,换个极性再测。

还有一个更暴力的方法:もし接了通信不可,把 A 和 B 交換一下试试。ではない笑话——这在现场是最もよく使われる「排障手段」。因为很多周波数変換器的 RS-485 端子标注就是反的。

渐进式解決Modbusコミュニケーションの問題的方法イラスト1

3.3 終端抵抗——什么时候接、接在哪

終端抵抗 120Ω,接在バス的最两端。这句话每个人都听过。但实际工程中这些细节才决定成败:

什么时候必须接。 バスの長さ超过 50 米,或ボーレート ≥ 19200。判断標準ではない長さ,是你用オシロスコープを参照。信号波形——もし有明显的过冲或反射台阶,加終端抵抗。

什么时候可以不接。 测试台上,一米短线,Baud rate 9600。这时候加終端抵抗反而可能因为ドライブ能力。不足导致信号幅值下降。

一个容易被忽略的坑。 很多 RS-485 デバイス内部已经集成了終端抵抗,経由跳线或拨码开关有効。もし你不知道这一点,在バス上手动加了 120Ω,而デバイス上也开着 120Ω,等于并联成了 60Ω——信号幅度大幅下降,反而更通信不可了。这就是前面的场景 3。

トラブルシューティング方法:全装備。停電,マルチメータ抵抗レンジ测 A-B 之间的直流电阻。正常应该是几 kΩ 到几十 kΩ(バイアス抵抗体决定)。もし测出来是 60Ω 或 120Ω,説明至少有一个終端抵抗在起作用。逐个拔デバイス,看哪个デバイス拔掉后阻抗变了。

3.4 屏蔽和接地——主に。人做错的地方

RS-485 シールド層应该シングルエンド接地,在マスター或ゲートウェイ侧接大地。もし两端都接地,地電位差会在シールド層上形成环流,反而把干渉引入信号线。

另外,不要用ネットワークケーブル的空闲线对做 RS-485。ネットワークケーブル是 100Ω 特性インピーダンス,RS-485 电缆是 120Ω 特性インピーダンス,不マッチング会导致高速率下信号の反射严重。ショート·ディスタンス(< 10 米)凑合能用,但不要作为正式工程方案。正规的 RS-485 电缆是一对ツイストペア加シールド層,特性インピーダンス 120Ω,比如 Belden 3105A 或等效型号。


四、第二层:电气层チェック

物理连接確認没問題之后,もしまだ意味がない或有误码,进入电气层。

4.1 用オシロスコープを参照。波形

オシロスコープ探头挂在 A 线对 GND 和 B 线对 GND,观察:

- 空闲ステータス下 A 和 B 的电压值是否稳定(A 应高于 B 至少 200mV) - 有データ传输时,A 和 B 是否呈现標準的差動信号です(A 和 B 镜像对称) - 波形アップサイド·エッジ和ダウン·エッジ是否干净(不应该有明显的台阶或圆弧)

もし波形边缘很圆,可能是线缆电容太大(線が長すぎる或线径太细),或者ドライブ能力。不足。ボーレートの低下通常能缓解。

4.2 バイアス抵抗体(Fail-Safe 偏置)

RS-485 標準要求差分入力电压 ≥ 200mV 时判定为逻辑 1,≤ -200mV 时判定为逻辑 0。但在バス空闲(全装備。都不驱动)时,差分電圧かもしれない落在 -200mV to +200mV 的不確かなこと区间内,导致受信器出力随机データ。

这就是なぜか。需要バイアス抵抗体:在バス的某一个位置(通常在マスター或偏置电路所在处)用2つ电阻把 A 上拉到 VCC、B 下拉到 GND,保证空闲ステータス下 A > B 且差值 > 200mV。

常见的バイアス抵抗体取值是 680Ω 或 560Ω(上拉和下拉各一个)。但要注意:バイアス抵抗体和終端抵抗是并联关系。もし你的終端抵抗是 120Ω,バイアス抵抗体各 680Ω,实际的空闲差動電圧是:

V_diff = VCC × R_term / (R_term + R_pullup + R_pulldown)
       = 5V × 120 / (120 + 680 + 680) ≈ 0.405V = 405mV

这个值 > 200mV,满足要求。但もし你把終端抵抗换成了 60Ω(2つ 120Ω 并联),差動電圧就只剩约 210mV,卡在临界点上。所以終端抵抗的数量和位置是规划バイアス抵抗体的前提。


五、第三层:データ链路层チェック

电气层没問題,但通信まだ正しくない——进入协议本身的排障。这一层需要シリアルポート抓包工具。

5.1 確認スレーブ是否サポート Modbus

这里ではない让你看デバイス説明书——説明书写了サポート不代表固件真的开了。Serial Assistantとは发一条最简单的リクエストフレーム,看スレーブ回不回。

以 Modbus RTU 为例,发機能コード 03(read holding registers):

slave address: 01
function code:   03
starting address: 00 00(register 40001)
レジスタの数: 00 01(读 1 个)
CRC:      84 0A

完全フレーム:   01 03 00 00 00 01 84 0A

把你的 USB-485 変換器です。接駅から。的 RS-485 口上,シリアルアシスタント设好ボーレート/data bit/check digit/stop bit,发上面这フレーム。もしスレーブ回了:

01 03 02 00 2A 39 9B

説明スレーブサポート Modbus,register 40001 里的值是 0x002A(decimal 42)。もしない任何レスポンス,继续查下面几项。

5.2 ボーレート和フレーム形式

Modbus RTU 的デフォルトフレーム形式通常是:9600-8-N-1(Baud rate 9600,8 data bit,検証なし。,1 stop bit)。但很多老デバイス用 9600-8-E-1(even parity)或 19200-8-N-1。还有一些国产デバイスデフォルト 4800。

もし你的 USB-485 変換器です。ボーレート设对了,スレーブ会回应。もしボーレート正しくない,スレーブ会收到乱码。スレーブ看到乱码后的行为取决于其固件実装——有的デバイス直接丢弃,有的デバイス会尝试解析の失敗后复位受信バッファ。,表现为完全沉默。

不要猜ボーレート。 もし手头ないデバイス手册,用一个笨办法:USB ロジックアナライザ(几十块钱的那种就行)挂在 A、B 线上,看スレーブ上电后有ない发データ。一部の駅からスタート。后会主动发一段标识信息,测量这段データ的位宽就能逆推論ボーレート。

5.3 check digit、stop bit、data bit

9600-8-N-1 vs 9600-8-E-1 違いはありません不仅是一个チェックビット。フレーム总長さ变了:

- 8-N-1:1 スタート地点。 + 8 data bit + 1 stop bit = 10 位/byte - 8-E-1:1 スタート地点。 + 8 data bit + 1 check digit + 1 stop bit = 11 位/byte

もし你用 8-N-1 发,スレーブ用 8-E-1 收,スレーブ会把你的ストップ·ビット当チェックビット来验证。反之亦然。这会导致偶发性的検証エラー而非すべてエラー——因为ストップ·ビット是固定的逻辑 1,有 50% 的概率碰巧「検証済み。」。

这就是なぜか。ボーレート、check digit、ストップ·ビット的配列组合要从デバイス手册里確認,而ではない凑出来。 16 个スレーブ,7 种ボーレート × 3 种チェック × 2 种ストップ·ビット = 42 种组合。凑出来纯粹是折磨自己。

5.4 バッグの分析。——区分「送信しない。去」「没回应」「回了エラー」

用シリアルポートモニタリング软件(比如 Device Monitoring Studio、Serial Port Monitor,或者简单粗暴地用2つ USB-485 変換器です。背靠背接在バス上)抓实际的收发データ。

看三个关键指标:

マスター发出的フレーム是否正确。 用 CRC calculation器验证你发出的フレーム内の CRC そうですね。。一个よくある間違い是 CRC high低バイト数反了——Modbus RTU 规定 CRC lowバイト前に,ハイバイト在后。比如フレーム 01 03 00 00 00 01 的 CRC 是 0x840A,フレーム里应该是 84 0A 而ではない 0A 84

スレーブ有没応答がある。。 もしマスターフレーム正确发出但在合理的时间内(比如 200ms)ない任何データ回来,チェック駅からの住所一致するかどうか、バス上是否只有一台デバイスオンライン(加另一台后可能アドレス冲突)、スレーブ是否处于「监听」モード。

スレーブレスポンス了什么。 もしスレーブ回了異常フレーム,機能コード最高位置 1 再加異常コード。(比如 01 83 02 C0 F1,83 = 03 + 0x80,Exception Code 02 = Illegal data address),那至少链路层是通的,問題在アプリケーション層。

5.5 CRC verificationエラー的正確トラブルシューティング

CRC verificationエラー是最も一般的な的链路层問題,可能的原因有这些,按频率从高到低:

1. A/B ライン·リバース。 差分極性は逆。,すべてのデータ·ビット反转,CRC 大概率正しくない。但有共模容限时偶尔能对——这就是场景 2。 2. ボーレート偏差。 2つデバイス的时钟偏差导致采样点漂移。もしボーレート偏差超过 ±2%,受信端 UART 会采样到エラー的位值。特别是在高温环境下,MCU 内部 RC 振荡器的温漂可能达到 ±5%。 3. 配線松动或接触不良。 一个位的丢失会导致后续すべてのバイト移位,CRC 必错。 4. 電磁干渉による干渉。 周波数変換器启动瞬间、電気溶接機工作时的强 EMI 会直接改变传输线上的电平,导致位エラー。もし CRC エラーのみ特定デバイス启动时出现,基本可以锁定干渉源。


六、第四层:アプリケーション層チェック

链路层通了(スレーブ応答がある。且 CRC correct),但戻る的データは間違ってる或功能不如预期。

6.1 slave address

Modbus RTU フレーム的第一个byteは駅からの住所。アドレス範囲 1-247。

address 0 是放送アドレス——マスター用 0 发写命令,すべての駅から。执行但不回应。もし你用アドレス 0 发了读命令,不会有任何スレーブレスポンス。

很多新デバイス出厂デフォルトアドレス是 1。もし你バス上已经有了一台アドレス 1 equipment,又加上一台出厂デフォルトアドレス也是 1 的新デバイス,两台デバイス会在マスター寻址 1 时同时レスポンス——バス冲突,マスター收到的データ是两路信号的叠加,表现为 CRC エラー或乱码。

トラブルシューティング方法:一次只往バス上接一个スレーブ,逐个测试。 这是最笨但最有效的方法。一次测通了再加下一个。

6.2 レジスタアドレスオフセット

Modbus 的レジスター·アドレス有2つ概念,搞混了就会读到エラー的データ:

- プロトコルアドレス: フレーム里填的 16 位数值,从 0 开始。function code 03 Read the hold register时,プロトコルアドレス 0 对应的是第 1 レジスタを保持する。。 - PLC address: 厂商在手册里写的编号,可能从 1 开始,也可能从 40001 开始。

举例:デバイス手册写「频率设定值在レジスタ 40003」。这个 40003 可能有三种含义:

厂商习惯プロトコルアドレス你在フレーム里填的值
40003 就是プロトコルアドレス4000340003(超出单バイト範囲,看厂商怎么処理)
40003 表示レジスタを保持する。区第 3 个200 02
40003 表示レジスタを保持する。区第 3 个(从 0 开始)300 03

もし你不確かなこと,从プロトコルアドレス 0 开始,读 10 个连续レジスタ。看哪アドレスはこちら。戻る了你认识的值(比如デバイス型号编码、固件版本号、或者当前频率这些已知データ),逆推論厂商的编址方式。

6.3 功能和機能コード

Modbus 標準関数コードと对应的データ区:

- 01:リードコイルを読む(0xxxx) - 02:read discrete inputs(1xxxx) - 03:read holding registers(4xxxx) - 04:read input registers(3xxxx) - 05:シングルコイルを書く。 - 06:単一書き込みレジスタを保持する。 - 15:マルチコイルを書く - 16:複数書き込みレジスタを保持する。

但并ではない每个スレーブ都実装了すべての機能コード。一台简单的サーモスタット可能只サポート 03 和 06——你发 16(マルチレジスタの書き込み)它不认识,回異常コード。 01(違法な機能コード)。

もしスレーブ回了異常コード。,異常コード。含义如下:

Exception Code含义常见原因
01Illegal functionスレーブサポートなし。这个機能コード
02Illegal data addressレジスター·アドレス超出範囲
03Illegal data value写入的值不可接受(超出量程等)
04Substation equipment malfunctionスレーブ自检失敗
05Confirm命令已受信但需要时间処理
06The slave station equipment is busy処理中です。上一个命令

異常コードを受信是好事——説明链路层通了,物理層は没問題,你可以把注意力集中在アプリケーション層。

6.4 bytes序(ビッグエンディアン/リトルエンディアン)

Modbus protocol规定多Bytesのデータ以ビッグエンディアン序传输(前の高さ。)。但 32 ビット浮動小数点数怎么传?標準里ない定义。于是各家厂商各搞一套:

- 一些厂商用 ABCD 序(最前の高さ。) - 一些厂商用 CDAB 序(2つ言葉の交換位置,每个字内部仍然ビッグエンディアン) - 一些厂商用 BADC 或 DCBA

もし你读2つ连续保持レジスタです。拼成一个 32 ビット浮動小数点数,读到的值和期待値は差好几个数量级,大概率是バイトオーダー反了。用已知值——比如把频率设成 50.0Hz(IEEE 754 表示是 0x42480000)——读回来,看十六进制配列顺序,逆推論厂商的バイトオーダー。


七、逐步追加スレーブ的正确方法

现在假设你トラブルシューティング完了一个スレーブ,通信は正常。接下来要加もっと見るスレーブ——这是最容易出幺蛾子的环节。

正确做法:

1. バス上只留一个スレーブ(slave A),Confirm A 通信は正常。 2. 断开スレーブ A,只接スレーブ B,Confirm B 通信は正常。 3. A 和 B 同时接上,確認两者都通信は正常。 4. もし A+B 正常,断开すべての,只接スレーブ C,Confirm C 正常。 5. A+B+C 同时接上,確認三者都正常。 6. 以此类推。

もし在第 3 步 A+B 同时接上后出問題,チェック这两件事:

- アドレス冲突: A 和 B 駅からの住所是ではない相同。 - 終端抵抗累积: A 和 B 是ではない都内部有効了 120Ω 終端抵抗。参见 3.3 节。

もし在第 5 步 A+B+C 同时接上后出問題(前两步都正常),大概率是:

- バス駆動能力の不足。 每个スレーブ的 RS-485 收发器在受信ステータス下都有一个入力阻抗(標準 ≥ 12kΩ)。按照 RS-485 標準,一条バス上最多 32 个単位負荷。もし你用的是 1/4 或 1/8 負荷的收发器,数量可以もっと見る。但もし用最便宜的 MAX485 级别芯片,挂 30 个スレーブ后信号の減衰会很明显。ソリューション:选 1/4 或 1/8 負荷的收发器,或者加 RS-485 リピーター。 - バス·トポロジの問題。 RS-485 必须是菊花链(Daisy Chain),不能星星形分支。星形トポロジー会产生信号の反射,反射位置刚好在分支点。もし现场布线已经星星形了且没法改,加 RS-485 Hub 或リピーター来絶縁各分支。


八、メインステーションのポーリング策略与タイムアウトの設定

8.1 タイムアウト時間怎么算

Modbus RTU 的タイムアウト分2つ层面:

文字间タイムアウト(t1.5): 2つ连续バイト之间的最大允许間隔,设为传输 1.5 个文字的时间。用来判断一フレーム是否结束。在 9600 ボーレートで,一个文字(11 位)约 1.15ms,t1.5 ≈ 1.75ms。

フレーム间タイムアウト(t3.5): 2つ连续フレーム之间的最小間隔,设为传输 3.5 个文字的时间。在 9600 ボーレートで,t3.5 ≈ 4ms。

もし你的マスター发完リクエスト后等 30ms 还ない收到レスポンス,不能简单地认为スレーブ坏了。一部のスレーブ(尤其是低速 MCU 驱动的サーモスタット、Energy Meter)処理一个リクエスト需要 50-100ms。把这个值设成至少 200ms 作为起始值,確認通信は正常后再根据实际応答時間调短。

8.2 先读后写

在尝试写任何レジスタ之前,先读一个已知的レジスタ(比如デバイス型号、固件版本号、或者一个你已知当前值的レジスタ)。確認読み取り操作。正常后,再尝试写。

不要一上来就往コイル里写 1。 你不知道那1つのコイル控制的是什么——可能是急停信号。用 06 機能コード写レジスタを保持する。同理,先想清楚你写的レジスタ是干什么的。


九、トラブルシューティング清单クイックチェック·テーブル

在工控现场,你可能ない条件一步一步按本記事顺序来。把这张表拍照存手机里,デバッグ时对着查。

Serial numberチェック项Tools経由標準
1A/B 线通断マルチメータ抵抗レンジA 线导通,B 线导通
2A/B 线不ショートマルチメータ抵抗レンジA-B 电阻 > 1kΩ
3空闲电压マルチメータ DC 电压档A > B,差值 > 200mV
4終端抵抗マルチメータ抵抗レンジ(デバイス停電)A-B 电阻 120Ω 或 > 1kΩ(取决于是否有効)
5バイアス抵抗体マルチメータ抵抗レンジ(デバイス停電)A-VCC 和 B-GND 各约 680Ω
6Baud rate/check/stop bitデバイス手册与スレーブ手册一致
7发空フレーム测试シリアルアシスタントスレーブ对 01 03 00 00 00 01 84 0A 答えがあります
8CRC correctCRC calculation器マスター发出的 CRC 与計算一致
9Response CRC correctCRC calculation器スレーブレスポンス的 CRC 与計算一致
10駅からの住所唯一逐个接入测试バス上ない重复アドレス
11レジスター·アドレス正确从 0 読み始めました连续 10 个戻るデータ含已知值
12バイトオーダー正确读已知值对照32 位值解析符合厂商规范

十、FAQ:高频排障問題

Q1:マスター发データ,スレーブ偶尔回偶尔不回,Baud rate 9600。なぜか。?

A:偶尔性問題最も一般的な的原因是 A/B ライン·リバース、終端抵抗設定不当、或电源干渉。先查 A/B 极性,再查終端抵抗の位置和数量,最后用オシロスコープを参照。波形。

Q2:USB-485 変換器です。在测试台上正常,一到现场就不行。换了好几个変換器です。都一样。

A:2つ可能。一是现场的 RS-485 线路上有强コモンモード干渉,普通 USB-485 変換器です。的共模抑制比不够。换一个孤立している。工业级 USB-485 Converters(比如宇泰 UT-890A 或同等产品)。二是现场的电脑 USB 口接地和 RS-485 デバイス的地之间有电位差,経由変換器です。形成回路。絶縁型変換器です。能解決这个問題。

Q3:多个スレーブポーリング时,第一个总是通,后面几个经常通信不可。

A:チェックマスター的ポーリング間隔。もし你在发完上一个リクエスト后立即发下一个,而バス上的上一个レスポンス还没传完,就会发生冲突。确保两次ポーリング之间的間隔 ≥ スレーブ数量 ×(リクエスト时间 + 応答時間 + t3.5)。在 9600 ボーレートで,もし每个スレーブ的平均応答時間是 15ms,10 个スレーブ的ポーリング間隔至少设 200ms。

Q4:CRC 总是报错,チェック了 A/B 极性和ボーレート都没問題。

A:用ロジックアナライザ或オシロスコープチェック信号质量。看アップサイド·エッジ和ダウン·エッジ的斜率,もし过于平缓(> 30% 位宽),可能是线容太大或ドライブ能力。不足。ボーレートを下げる。 4800 试试。もし通信可能,説明信号质量确实是問題根源。

Q5:怎么知道スレーブ到底支サポートなし。 Modbus?

A:发 01 03 00 00 00 01 84 0A 过去。もし不回,再用 9600/19200/4800 三种ボーレート各试一遍(8-N-1 和 8-E-1 各一遍)。もし全都不回,チェック以下可能——デバイス根本没通电、RS-485 接口未使能需要跳线或設定、device RS-485 只サポート ASCII モード、デバイス需要特殊的唤醒序列。


有問題再聊。オンサイトデバッグ这种事,文字能说清楚八成,剩下两成靠你自己去试。不过只要按这个顺序来,不走回头路,一个下午足够把大多数 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 *.