
楊更更
Modbus是工業自動化領域使用最廣泛的通信協議之一,隨着電子、計算機和通信技術的不斷發展,特別是物聯網以及“互聯網+”等概念的興起,Modbus通信技術也從串行總線發展到了Modbus TCP,方興未艾。爲了讓廣大在校學生、工業控制和自動化工程師、技術人員瞭解Modbus協議的內涵,特別是徹底掌握Modbus通信技術的軟件開發方法,作者從初學者的角度,由淺入深,循循善誘,以文字和畫面相結合的方式撰寫了本書。本書分爲11章,依次介紹了Modbus協議,特別是功能碼消息幀的定義,然後從軟件開發的角度,詳細介紹了輔助調試工具、軟件開發環境的構築,重點介紹和解析了libmodbus開發庫的源代碼,以及使用libmodbus在不同語言環境下的開發技巧。閱讀本書,可快速入門並精通Modbus軟件開發技術。作爲一本軟件技術開發指南的書籍,本書不僅僅侷限於Modbus通信協議,對其他通信協議的軟件開發也有很強的參考價值。本書可作爲各大中專院校、工程設計院、系統集成商和工廠企業的Modbus通信協議開發人員的軟件設計和開發的入門指導書籍,也可作爲工業自動化領域及物聯網開發的參考資料,還可供廣大自動化及通信專業的教師、學生及物聯網開發愛好者閱讀。
難得的 modbus 中文學習資料,結合軟件實操及 AI 導師有助於更快掌握。 讀到 24%,發現華爲閱讀 APP 上有 2022 年出版的本書第 2 版,希望微信讀書也能早日更新上架。
《Modbus軟件開發實戰指南》讀書筆記 思維導圖:https://www.processon.com/view/63eee59abcd4c21f5c55b87a#pc · 基本信息 o 是什麼? § 是一種應用於電子控制器上的通用語言 § 此協議定義了一個控制器能夠認識使用的消息結構,描述了控制器請求訪問其他設備的過程,以及符合應答來自其他設備的請求、怎樣偵測錯誤並記錄,制定了統一的消息域的結構和內容 o 行業地位? § 已成爲一種通用的工業標準 o 有什麼用? § 通過此協議,可以實現控制器相互之間、控制器經=由網絡和其他設備之間的通信 § 使用它,不同廠商生產的控制設備可以連接工業網絡,進行幾種監控 o 使用Modbus在網絡上進行通信,需要什麼? § 每個控制器需要知道: · 設備的地址 · 識別按地址發來的消息決定要產生何種行爲 · 如果需要回應,控制器將生成什麼反饋信息發送 o 有什麼特點? § 標準開發,公開發表,無版稅要求,可免費免責使用 § 支持多種電器接口,如RS232 RS485 TCP/IP 等;還可以在各種介質上傳輸,如雙絞線 光纖 紅外 無線等 § 消息幀格式簡單 緊湊 通俗易懂;用戶理解使用簡單 廠商容易開發和集成 · 模擬軟件 o 虛擬串口軟件 Visual Serial Port Driver(VSPD) § 模擬多串口,支持所有的設置和信號線;通過操作虛擬串口,寫入到一個虛擬COM端口的數據可以從另外一個COM端口讀取,通過這種方式實現兩個串口程序之間交換數據 § https://www.eltima.com/cn/products/vspdxp/ o 模擬 Modbus § Modbus 主站設備 · Modbus Poll § Modbus 從站設備 · Modbus Slave § https://www.modbustools.com/download.html · 參考 o 《Modbus軟件開發實戰指南》 o 《開放式IEC 61131 控制系統設計》 · 應用場景 o 在工業場景下使用 § 介質連接 · 使用 Modbus 協議,僅需要一根對絞線就可以連接很多現場設備,將所有數據傳送到 Modbus 主站設備 § 網絡方式連接 · 使用 Modbus 可以把現場設備連接到一個 DCS 過程控制系統,PLC(PLC 可編程邏輯控制器,Programmable Logic Controller)設備或工業計算機系統 · 整個工廠的連接都能夠從對絞線控制室直連的方式轉變成爲 Modbus 的網絡連接方式 o 網關設備支持 § Modbus 協議簡單且容易複製,與複雜的使用有線、無線通信甚至短消息等的GPRS(General Packet Radio Service)的設計不同,這些設備要簡單的多,但是需要克服高延遲和時許等問題 · 數據傳輸 o 基本信息 § 通信模式 · 串行鏈路(Serial Communication)連接 o 兩個變種(傳輸數據的字節表示上的不同) § RTU(Remote Terminal Unit)模式 · 一種緊湊的,採用二進制表示數據的方式 · 確保數據傳輸的完整性和準確性 o 循環冗餘校驗的校驗和 § ASCII(American Standard Code for Information Interchange,美國標準信息交換碼)模式 · 一種人類可讀的,冗長的表示方式 · 確保數據傳輸的完整性和準確性 o 縱向冗餘校驗的校驗和 § 兩種類型是互斥的,被配置爲RTU模式的節點不能與配置爲 ASCII 模型的節點通信,反之亦然 · TCP/IP (例如以太網)物理層連接 o 存在多個 Modbus/TCP 變種 o 不需要校驗和的計算 · 數據模型和功能調用上都是相同的,只有傳輸報文封裝方式不同 · Modbus RTU 和 Modbus TCP o 相同點 § 本質都是 Modbus 協議,都是依靠 Modbus 寄存器地址來交換數據 o 差異 § 使用硬件不同 · Modbus RTU 一般採用串口 RS-232 或 RS-485 · Modbus TCP 一般採用以太網口 § 數據 · 數據校驗 o Modbus 需要對數據進行校驗,鏟形協議中除了奇偶校驗,ASCII模式採用LRC校驗,RTU模式採用16位CRC校驗 o Modbus TCP 模式沒有額外規定校驗,因爲TCP協議是一個面向可靠連接的協議,所以不需要CRC校驗碼 · 數據結構 o TCP和RTU協議非常類似,只要在RTU協議的開始加上5個 "00"和 1個"06",然後把RTU協議的最後兩個CRC校驗碼去掉,並通過TCP/IP網絡發送出去即可 · 擴展版本 o Modbus PLUS(Modebus+ 或 MB+) § MODICON 專有 § 通信結構 · 單主/多從(Master/Slave) o 結構 § 一個節點是Master § 一個或多個設備是 Slave · 使用 Modbus 協議參與通信的節點是 Slave 節點,每個設備都有一個唯一的地址 o 特點 § 總線上只能有一個主設備,可以有1~247個從設備(地址範圍從1~247),剩下值是保留位 § Modbus 通信總是由主設備發起,當從設備沒有收到來自該主設備的請求時,不會主動發送數據 § 從設備之間不能相互通信,主設備同時只能啓動一個 Modbus 訪問事務處理 o 通信模式區別 § 串行和MB+網絡中 · 主節點纔可以啓動一個命令 § 以太網 · 任何一個設備都能發送一個 Modbus 命令,但通常也只有一個主節點設備用以引導指令 o 消息發送方式 § 主設備 · 單播模式 o 對指定單個從設備發送請求報文 · 廣播模式 o 對線路上所有從設備發送請求報文,此模式下,Master請求指令必須是 Modbus 標準功能的寫指令 § 從設備 · 被動接受請求報文給出響應報文 · 單播模式 o 應答,返回一個響應報文 · 廣播模式 o 僅進行相關指令的事務處理,不要求返回應答 o 通信模式要求 § Modbus ASCII § Modbus RTU · 客戶端/服務器(Client/Server) o 通信模式要求 § Modbus TCP o 沒有額外規定校驗,因爲 TCP 協議是一個面向可靠連接的協議 o TCP 默認端口是 502 o 工作方式 § 請求/應答,每次通信都是主站先發送指令,可以是廣播,也可以是向特定從站的單播 § 當主站不發送請求時,從站不會自己發出數據,從站與從站之間不能直接通信 o 幀結構 § 地址域 § 功能碼 · 有效碼字 o 十進制 1 ~ 255 · 異常響應保留 o 十進制 128~255 § 數據 § 差錯校驗 · 錯誤校驗碼 o 作用 § 確定到達的命令是否完整 · 注意 o 在 Modbus TCP 模式下,不存在差錯校驗字段 o 在某些特殊場合,如 串行 Modbus 協議轉 Modbus TCP 的情況下,串行協議數據完整張載到 Modbus TCP 協議的數據字段,此時CRC或者是LRC差錯校驗字段仍然存在 § § Modbus RTU · 地址碼 o 1字節 · 功能碼 o 1字節 · 起始地址 o 2字節 o RTU協議採用3.5個字符的停頓時間作爲指令的起始和結束 · 數據 o n字節 o 組成 § 數據長度 · 2字節,表示寄存器的個數 § 數據正文 · 數據長度 * 2字節 · 校驗碼 o 2字節 § Modbus TCP · 在RTU協議前面添加了MBAP報文頭,共7個字節 · MBAP報文頭 o 事務處理標識箱 § 2字節 o 協議標識符 § 2字節 o 長度 § 2字節 o 單元標識符 § 1字節 § Modbus RTU 和 Modbus TCP 報文結構 · Modbus RTU 和 Modbus TCP 數據幀結構 o · Modbus TCP 相比 RTU o 取消了校驗位 o 地址域換成了協議標識符 § 當網絡中的設備全部使用 TCP/IP 協議時,此地址沒有意義,因爲IP就能完成路由尋址 § 若網絡裏還有串行通信的設備,則需要網關來實現 Modbus TCP 到 Modbus RTU 或 ASCII 之間的協議轉換,此時就可以用標識符標識網關後見每個串行通信設備 o 新增長度,指後面數據的字節數 § 爲了應對某些情況下,TCP/IP 協議會對應用層的數據拆包傳輸 o 發送指令 § 命令結構 · 目標設備的 Modbus 地址 · 指令 § 流程 · 響應指令 o 只有指定地址的設備會執行並回應指令 · 其他 o 地址0例外,指定地址0的指令是廣播指令,所有收到指令的設備都會運行,不過不用回應指令 § 當Modbus協議用於更高級的網絡時,改革寧波方式可能不被允許或以其他方式替代 · 寄存器 o 存放所有數據;非具體的物理寄存器,也可能是一塊內存地址 o 分類 § 根據存放數據類型和讀寫特性,分爲4個部分(可不連續) · 線圈狀態(Coil Status) o 輸出端口;可設定端口的輸入狀態,也可以讀取該位的輸出狀態 o 可分爲兩種不同的執行狀態,例如保持型或邊沿觸發型 · 電磁閥輸出 MOSFET輸出 LED顯示等 · 撥碼開關 接近開關 等 · 模擬量輸出設定值 PID運行參數 變量閾輸出大小 傳感器報警上線 下限 · 模擬量輸入 · 離散輸入狀態(Input Status) o 輸入端口,通過外部設定改變輸入狀態 o 可讀但不可寫 · 保持寄存器(Holding Register) o 輸出參數或保持參數,控制器運行時被設定的某些參數 o 可讀可寫 · 輸入寄存器(Input Register) o 輸入參數,控制器運行時從外部設備獲得的參數 o 可讀但不可寫 · 與PLC類比 o 線圈狀態 - DO 數字量輸出 o 離散輸入狀態 - DI(數字量輸入) o 保持寄存器 - AO (模擬量輸出) o 輸入寄存器 - AI (模擬量輸入) o 地址 § 地址分配 § 寄存器 Modbus 協議地址 · 通信時使用的寄存器尋址地址 MBAP報文頭地址分配
從串口通信到modbus協議都講的很清楚,後面圍繞libmodbus庫的源碼解析和幾種編程語言中的開發應用都很好,可惜沒有涉及python,有點遺憾!
工控互聯用過modbus通信協議也開發過modbus通信調試工具,不管是調試應用還是封裝開發,學習協議底層原理是永恆的真理