之前也有寫過基於 Modbus 通訊協議的控制遠程監控程序,但是由於當時時間趕、人手少(軟硬件前后台都是在下一人😂),所以也就沒系統的去學習,只是在串口通訊的基礎上自己解析串口數據。並且那是 lua 語言實現的。
現在的項目,想要用 Python 寫個桌面端的 Modbus 測試用程序,於是,重拾 Modbus 協議的學習。
簡介
Modbus 是一種串行通信協議,於1979年為使用PLC(可編程邏輯控制器)通信而發表,現在已經成為工業領域通信協議的業界標准,是現在工業電子設備之間常用的通信連接方式。
Modbus 允許多個(240)設備連接在同一個網絡中進行通信。通常在數據采集與監視控制系統(SCADA)中被廣泛使用。
協議版本
Modbus 協議目前存在用於串口、以太網以及其他支持互聯網協議的網絡版本。
本文主要討論 Modbus RTU(串口)和 Modbus TCP(網口)版本。
通訊和設備
Modbus 協議是一個 master/slave 架構的協議。采用主從機通訊模式。Modbus 協議網絡中,有一個 master 節點,以及多個 slave 節點。在 Modbus 網絡中,只有被指定為 master 節點的節點可以啟動一個指令(任何一個設備都可以發送一個 Modbus 指令,但是通常只有 master 節點設備啟動指令)。
上段內容什么意思呢?
簡而言之:
- Modbus 是主從通訊模式,需要有一個 master(發起端)和多個 slave(響應端)
- Modbus 網絡中,只有發起端可以發起指令,由響應端響應。
一個 Modbus 命令包含了打算執行的設備的 Modbus 地址。所有的設備都會受到命令,但只有指定的設備會執行及回應指令。(地址0除外,指令地址為0的命令是廣播地址,所有收到指令的設備都會執行,但是不回應指令)。
所有的 Modbus 命令包含了檢查碼,以確定到達的命令沒有被破壞。基本的 Modbus 指令能控制一個 RTU(遠程終端控制系統)改變它的寄存器的某個值,控制或者讀取一個 I/O 端口,以及指揮設備回送一個或者多個其寄存器中的數據。
干貨介紹
上面的內容取材自 Modbus 通信協議 的度娘百科內容。可能沒接觸過的老鐵會看的一頭霧水。
再簡而言之,Modbus 是串口通信的一種協議方式。也就是一次性發送多個字節的串口數據。
軟件測試
工欲善其事,必先利其器。在研究如何寫代碼,如何理解 Modbus 協議理論之前,我們可以使用 Modbus Tools 模擬 Modbus 通訊過程,並分析報文。
1. 03 命令 (Read Holding Register)讀取保持寄存器
2. 04 命令 (Read Input Register)讀取輸入寄存器
3. 06 命令(寫單一寄存器)
4. 16 命令 (寫多個寄存器)