調試 Modbus RTU 時,為確保通信正常並且穩定,需要確認並遵守以下關鍵規範和參數:
1. 基本通信參數
這些參數必須在主機和從機設備中配置一致:1.1. 波特率(Baud Rate)
• 常見值:4800、9600、19200、38400、57600、115200等。
• 波特率過高可能導致長距離傳輸不穩定。
1.2. 數據位(Data Bits)
• 常見值:8 位(RTU 通常固定為 8 位)。
1.3. 停止位(Stop Bits)
• 常見值:1 或 2。
• 需根據設備要求配置。
1.4. 校驗位(Parity Bit)
• 選項:None(無校驗)、Odd(奇校驗)、Even(偶校驗)。
• 主從設備需保持一致。
1.5. 從機地址(Slave Address)
• 每個從機必須有唯一的地址(範圍 1-247)。
• 在同一條 RS485 線路上不可有地址衝突。
2. Modbus 功能碼
不同功能碼對應不同的數據操作,確保主機調用的功能碼正確:
2.1. 常見功能碼:
• 01:讀取線圈狀態(Read Coils)。
• 02:讀取離散輸入(Read Discrete Inputs)。
• 03:讀取保持寄存器(Read Holding Registers)。
• 04:讀取輸入寄存器(Read Input Registers)。
• 05:寫單個線圈(Write Single Coil)。
• 06:寫單個寄存器(Write Single Register)。
• 16:寫多個寄存器(Write Multiple Registers)。
2.2. 檢查數據地址範圍:
• 確保主機請求的寄存器地址在設備支持的範圍內。
3. 通信協議細節
3.1. 數據幀結構
Modbus RTU 的數據幀組成:
• 設備地址:1 字節。
• 功能碼:1 字節。
• 數據段:可變長度。
• 校驗碼(CRC):2 字節,檢查數據完整性。
3.2. CRC 校驗
• 確保主機生成和從機驗證的 CRC 一致。
• CRC 使用 多項式 0xA001(即反轉的 x^16 + x^15 + x^2 + 1)。
3.3. 數據打包間隔時間(Silent Interval)
• 主從通信之間需要一定的靜默時間。
• 一般規定為 至少 3.5 個字符的時間間隔。
4. RS485 硬件規範
4.1. 布線規範:
• 建議使用雙絞屏蔽線(如 BELDEN 9841)。
• 兩線式接線:A(D+)、B(D-),需要接對。
4.2. 終端電阻(Termination Resistor):
• 確保在 RS485 線路的兩端加裝 120Ω 的終端電阻,減少反射干擾。
4.3. 接地(Grounding):
• RS485 需要正確接地,避免因地電位差造成通信錯誤。
4.4. 最多設備數量:
• RS485 理論上支持最多 32 台設備,但實際數量會受總線長度和波特率影響。
5. 常見調試工具與方法
5.1. 工具:
• Modbus 調試軟件(如 ModScan、Modbus Poll)。
• RS485-USB 轉換器,用於將 RS485 信號連接到電腦。
5.2. 檢查項目:
• 確認波形是否穩定(使用示波器檢測 A/B 信號)。
• 使用主機軟件測試功能碼,確認是否能正常讀取寄存器數據。
• 在多從機環境下,逐一測試單個設備通信,排除設備地址或連接問題。
6. 其他注意事項
6.1. 從機超時:
• 設置適當的主機輪詢超時時間,避免頻繁超時錯誤。
6.2. 串口衝突:
• 確保主從設備的串口僅供 Modbus 通信,不被其他應用程序占用。
6.3. 錯誤代碼診斷:
• 主機應能處理從機返回的 Modbus 錯誤代碼(如非法地址、非法數據值等)。
7. 文檔參考
• 取得設備的 Modbus 寄存器表,確認每個地址對應的功能和數據類型。