Modbus-Tools
C++20 | Qt6 | Industrial Protocols
本文基於 Modbus-Tools 最新版本撰寫,更新於 2026-04-21
在工業自動化與嵌入式開發中,Modbus 幾乎是日常的一部分。真正進入現場聯調後,時間通常花在重複操作:手動組幀、反覆核對日誌、逐筆做倍率換算。
開發 Modbus-Tools 的目標很明確:把「發幀、看日誌、解幀」三件高頻操作做順手。它不追求功能堆疊,而是以調試效率和可用性為優先。實作上採用 channel / transport / session / parser 分層設計,並配套 CI/CD、多語言與自動更新能力,方便工具持續迭代。
以下依照實際使用順序,快速介紹核心操作方式。
1. 快速連線與報文建立
打開軟體後,不論使用 Modbus RTU(串口)或 Modbus TCP(網路),連線參數都集中在左側面板,設定很直觀。

在聯調時,最需要的是快速驗證。Modbus-Tools 將參數與功能碼拆分得清楚易用:
- 一鍵發送常用功能碼:填入
從站地址 (Slave ID)、起始地址、數量/資料,點選01/02/03/04/05/06/0F/10等按鈕即可發送。底層自動組幫並計算 CRC/LRC。功能碼涵蓋 0x01–0x04(讀)、0x05–0x06(單寫)、0x0F–0x10(多寫)。 - HEX / DEC 智慧識別:
Slave ID與起始地址支援 HEX(如0x10、10H)與 DEC(如16)兩種格式輸入,由parseSmartInt()統一解析並做範圍校驗。 - 寫入格式可切換(HEX / DEC / Binary):在
Write Data旁透過Format下拉選單切換Hex、Decimal或Binary,可依專案習慣輸入。 - Raw 模式增強:需要發送自定義 Hex 報文時,可直接切換 Raw 輸入並發送,適合非標流程測試。Raw 模式內建兩個輔助按鈕:
- Append CRC (RTU):自動計算並追加 CRC16 校驗值至輸入框。
- Add MBAP (TCP):自動封裝 Modbus TCP 主站報頭(Transaction ID / Protocol ID / Length / Unit ID)至輸入框。

線圈 (Coils) 二進位下發互動
針對位元操作場景,工具提供了直覺的 Binary 輸入模式:
- Binary 輸入:支援直接輸入位元串(如
1 0 1 1),系統自動編碼並配合0x05(單線圈寫入)或0x0F(多線圈寫入)功能碼下發。 - 位元級讀取:配合
0x01/0x02讀取指令,實現對遠端設備線圈與離散輸入狀態的高效驗證。
2. 看日誌與一鍵複製 (Traffic Monitor)
問題定位通常從日誌開始。Traffic Monitor 的設計重點是可讀性與可分享性。
- TX/RX 分離顯示:發送與接收資料分色呈現,並附毫秒級時間戳,時序關係更清楚。
- 一鍵複製:可快速複製關鍵報文,用於問題回報、團隊溝通與測試記錄。
- 方向過濾:支援僅顯示 TX 或 RX,面對高頻輪詢時更容易聚焦。
- 日誌可匯出保存:可將當前通訊記錄保存,方便現場問題留痕與測試歸檔。
3. 幀解析器 (Frame Analyzer):把 Hex 變成可讀資料
Frame Analyzer 是日常使用頻率很高的模組。將 Hex 報文貼上後點擊解析,即可看到結構化欄位與可讀表格。


在現場最實用的是以下幾個能力:
解碼模式切換 (Unsigned / Signed)
解析器工具列提供 Decode Mode,可在 Unsigned 與 Signed 間切換。切換後會立即刷新解析結果,十進位、Hex、二進位與換算值都會同步更新,查看有符號量更直觀。
倍率換算 (Multiplier Scaling)
許多設備會將浮點值放大後再傳輸(例如 220.5V -> 2205)。
在表格中可針對寄存器設定 Scale(如 0.1、0.01),系統會即時顯示換算後的工程值。
多維位元序分析 (Byte Order)
不同廠商的 PLC 和儀表可能採用不同的資料排列方式。解析器支援 四種位元組/字序模式:
- ABCD (Big Endian):大端模式,高位在前。
- CDAB (Little Endian Byte Swap):小端位元組交換。
- BADC (Big Endian Byte Swap):大端位元組交換。
- DCBA (Little Endian):小端模式,低位在前。
切換位元序後,寄存器值會重新計算並顯示。
寄存器功能註解 (Description)
可為寄存器地址補上說明,例如「A 相電壓」「電機轉速」。
數值與語意同時呈現,減少來回查表時間。

配置持久化與 JSON / CSV 模板
配置可保存並重複利用。
- 自動保存:保留最近使用的倍率與註解。
- JSON / CSV 匯入/匯出:可依設備建立專屬模板,切換機型時直接套用。
其他實用細節
- Format Hex 按鈕:可一鍵清理並規範 Hex 輸入格式,貼上長報文後更易閱讀。
- 回應起始位址可設定:可透過
Start Address配合回應幀解析,對齊寄存器點位表。 - 協議模式可選:支援
Auto Detect / Modbus TCP / Modbus RTU,方便混合抓包場景快速判斷。
強制解析 (Force Parse)
現場抓包時,報文可能因截斷、中間設備修改等原因導致校驗不通過。當使用者在 Protocol 下拉選單中手動指定 TCP 或 RTU(而非 Auto Detect)時,解析器進入強制模式:
- RTU 強制模式:CRC 不匹配時不再直接報錯終止,而是標記
checksumValid = false並在 warnings 中記錄"CRC Mismatch (Forced)",同時繼續解析 PDU 資料欄位。 - TCP 強制模式:MBAP length 欄位異常或幀尾有多餘位元組時,記錄對應 warning 後仍按實際位元組長度提取 PDU。
此機制適用於分析被閘道器/中繼修改過、或從串口抓包工具截取的不完整報文。Auto Detect 模式下校驗嚴格,適合正常通訊場景的精確驗證。
Link to Analyzer (即時聯動)
除手動貼上 Hex 報文外,Frame Analyzer 也支援從 Traffic Monitor 接收即時資料:
- 自動推送:在 Modbus TCP / RTU 視圖中開啟 Linkage 開關後,RX 回應報文的 PDU 會自動送入解析器,無需手動複製。
- 暫停 / 恢復:點擊
Pause Refresh可駐留當前幀,方便編輯 Scale 或 Description;再次點擊Resume Refresh恢復自動重新整理。 - 停止聯動:點擊
Stop Link中斷資料流,解析器恢復為手動模式。 - 非同步執行:解析邏輯運行於
QThread背景執行緒,不阻塞 Traffic Monitor 的列表捲動。
如果你同時維護多種型號設備,依設備或專案儲存獨立模板後,切換調試物件時可直接匯入,減少重複配置。
4. 補充工具
除 Modbus 主流程外,也內建兩個輕量模組,方便臨時調試:
- TCP Client:快速驗證自定義網路報文。
- Serial Port:基本串口收發測試(ASCII/Hex)。
5. 工程品質與測試保障
作為持續迭代的開源專案,Modbus-Tools 在程式碼品質方面投入了相當精力:
自動化測試
專案採用 Google Test (GTest) 與 Google Mock (GMock) 框架進行自動化品質檢測,覆蓋以下核心模組:
- 會話管理:連線/斷線邏輯、請求逾時重試及異常狀態恢復。
- 協議傳輸:TCP/RTU 報文封裝/解包、校驗和計算及完整性驗證。
- 解析邏輯:針對多種有效指令及畸形報文的魯棒性驗證。
- 資料處理:位元序轉換、工程量縮放及格式化演算法的計算準確性。
目前全量 42 個自動化測試案例(TEST + TEST_F),覆蓋會話管理、協議傳輸、解析邏輯、資料處理及格式化等模組,每次 Release 發布均執行迴歸測試。
CI/CD 整合
- GitHub Actions 流水線整合 MSVC AddressSanitizer (ASan),用於記憶體損壞與洩漏的自動化監測。
- 支援自動建置、測試及 Release 解析包分發。
自動更新 (OTA)
工具整合了基於 GitHub Releases 的自動更新機制:啟動時靜默偵測新版本 + 功能表列手動檢查。更新包透過 SHA256 校驗後執行替換,支援 UpdateOnly(增量)和 Full Package 兩種模式。
結語
Modbus-Tools 的設計目標是將高頻調試操作(發幀、看日誌、解幀)封裝為可複用的工作流,使開發者能更專注於業務邏輯與問題定位。
功能概要:
- 快速組幀:HEX/DEC 智慧識別(
parseSmartInt)+ Raw 模式 CRC/MBAP 輔助計算。 - 即時聯動:Link to Analyzer 支援 RX 報文自動推送至解析器。
- 深度分析:倍率換算(Scale Factor)+ 四種位元序(ABCD/BADC/CDAB/DCBA)+ 寄存器描述。
- 位元級控制:線圈 Binary 輸入模式,支援 0x05/0x0F 功能碼。
- 品質保障:42 個自動化測試 + CI/CD 整合 MSVC AddressSanitizer。
若你正在做嵌入式或上位機開發,歡迎前往 GitHub 倉庫 體驗並提出建議。