今天給大家分享一個基于 Python + Web 的 Modbus 寄存器查詢與解析工具。
核心功能:

安裝 openpyxl:
pip install openpyxlstart.bat(Windows)直接雙擊工作目錄下的 start.bat,腳本會自動查找 Python 并啟動服務,同時打開瀏覽器。
cd 工具目錄
python modbus_server.py啟動后在瀏覽器訪問 http://localhost:8080。
工具目錄/
├── start.bat # Windows 一鍵啟動腳本
├── modbus_server.py # Python HTTP 服務端(實時解析 Excel)
├── modbus_app.html # Web 前端界面
└── *Modbus*.xlsx # 寄存器定義文檔(文件名需含 Modbus)工具通過解析 Excel 文件獲取寄存器定義。Excel 需包含名為「寄存器地址說明」的工作表(或自動使用第 3 個工作表),列定義如下:
設備信息 | ||||
| 是 | 01000102--0103 | |||
| 是 | Wind_Speed_Instant | |||
瞬時風速 | ||||
| 是 | U16 | |||
0.01 | ||||
m/s | ||||
0 | ||||
7500 | ||||
| 是 | R | |||
原始值x0.01=實際風速 |
U16 | ||
I16 | ||
U32 | ||
I32 | ||
U64 | ||
ASCII | ||
BCD16 |
0100 — 表示 1 個寄存器,起始地址 0x01000102--0103 — 表示 2 個連續寄存器(如 U32 類型)原始寄存器值 × 增益 = 實際物理值。例如:
頁面加載后自動展示全部寄存器。頂部工具欄支持:

點擊任意寄存器的「指令」按鈕,彈出指令詳情窗口:
只讀寄存器 (R) — 生成 0x03 讀取指令:
01 03 01 00 00 01 84 46
│ │ └─┬─┘ └─┬─┘ └─┬─┘
│ │ 地址 數量 CRC16
│ 功能碼(讀保持寄存器)
設備地址讀寫寄存器 (RW) — 可切換「讀取」和「寫入」兩個 Tab:
注意:工具統一使用 0x10 功能碼寫入,不區分單寄存器和多寄存器,確保兼容性。
每條指令均標注各字節含義,并以帶色塊的字節序列展示(藍色=設備地址/功能碼,紅色=CRC 校驗)。

這是工具最強大的功能之一。在頁面底部的解析器輸入框中,粘貼兩行 HEX 數據(第一行請求,第二行應答),點擊「解析」即可。
支持的格式:
01 03 01 00 00 01 84 46 | |
0103010000018446 | |
[01][03][01][00][00][01][84][46] | |
<01><03><01><00><00><01><84><46> | |
00 00 00 00 00 06 01 03 01 00 00 01 |
支持混合輸入:請求用 RTU 格式,應答用 TCP 格式;工具自動檢測每種格式的協議類型。

解析結果展示:
| 12.34 m/s | |||||||
| -15.0 ℃ |
頁面內置了一個輕量 HEX → DEC 轉換器:
0x 前綴、空格分隔)標準 RTU 幀格式,末尾含 2 字節 CRC16 校驗。工具在生成指令和解析應答時均自動計算并驗證 CRC。
讀取請求幀:
設備地址 | 功能碼(0x03) | 起始地址(2B) | 寄存器數量(2B) | CRC16(2B)寫入請求幀(0x10):
設備地址 | 功能碼(0x10) | 起始地址(2B) | 寄存器數量(2B) | 字節數 | 數據(NB) | CRC16(2B)TCP 幀在 PDU 前附加 7 字節 MBAP 頭:
事務標識(2B) | 協議標識(2B, 固定為 0x0000) | 長度(2B) | 單元標識(1B) | PDU(NB)替換工作目錄下的 Excel 文件后,刷新瀏覽器頁面即可。服務端通過檢測文件的修改時間(mtime)自動重新解析。
工具目錄下提供了 Modbus寄存器定義模板-風速傳感器示例.xlsx,可直接作為參考模板修改為自己的設備協議。
https://download.csdn.net/download/Psyduck_ing/93012544?spm=1011.2124.3001.6210

END
作者:Psyducking