Modbus协议在串行链路上的实现
目錄
1、串行鏈路通信簡介
2、串行鏈路通信協議原理
3、串行鏈路通信幀描述
4、RTU、ASCII串行傳輸模式
4.1、RTU傳輸模式
4.2、ASCII傳輸模式
1、串行鏈路通信簡介
Modbus協議標準定義了 OSI 模型第 7 層上的應用層報文傳輸協議,它在連接至不同類型總線或網絡的設備之間提供客戶機/服務器通信。它還將串行鏈路上的協議標準化,以便在一個主站和一個或多 個從站之間交換 Modbus 請求。 本博文的目的是表述串行鏈路上的 Modbus 協議,實現設備之間的互通。
Modbus 串行鏈路協議是一個主/從協議,該協議位于 OSI 模型的第二層,主/從協議系統:有一個向某個“子”節點發出顯式命令并處理響應的節點(主節點)。典型的子節點在沒有收到主節點的請求時并不主動發送數據,也不與其它子節點通信。Modbus 協議和 ISO/OSI 模型如下圖所示:
在物理層,Modbus 串行鏈路系統可以使用不同的硬件物理接口(RS485、RS232)。最常用的是TIA/EIA-485 (RS485) 兩線制接口。作為附加的選項,也可以實現 RS485 四線制接口。當只需要短距離的點到點通信時,TIA/EIA-232-E (RS232) 串行接口也可以使用。
2、串行鏈路通信協議原理
Modbus串行鏈路協議是一個主/從協議。 在同一時刻,只有一個主節點連接于總線,一個或多個子節點 (最大編號為 247 ) 連接于同一個串行總線。Modbus 通信總是由主節點發起,子節點在沒 有收到來自主節點的請求時,從不會發送數據。子節點之間從不會互相通信。主節點在同一時刻只會發起一個 Modbus 事務處理。
主節點有兩種模式對子節點發出 Modbus 請求,一種是單播模式,另一種是廣播模式。
單播模式主節點以特定地址訪問某個子節點,子節點接到并處理完請求后,子節點向主節點返回一個報文(一個 '應答')。 在這種模式, 一個 Modbus 事務處理包含 2 個報文: 一個來自主節點的請求, 一個來自子節點的應答。 每個子節點必須有唯一的地址 (1 到 247),這樣才能區別于其它節點被獨立的尋址。如下圖所示:
廣播模式主節點向所有的子節點發送請求,對于主節點廣播的請求沒有應答返回。,廣播請求一般用于寫命令,所有設備必須接受廣播模式的寫功能,地址 0 是專門用于表示廣播數據的。如下圖所示:
Modbus尋址空間有 256 個不同地址,地址 0 保留為廣播地址,?所有的子節點必須識別廣播地址。 Modbus主節點沒有地址, 只有子節點必須有一個地址。 該地址必須在 Modbus 串行總線上唯一。地址規則如下所示:
3、串行鏈路通信幀描述
串行鏈路上的 Modbus結構必須符合通用Modbus幀協議要求,具體如下所示:
具體解析如下所示:
- 地址域:在 Modbus串行鏈路,地址域只含有子節點地址。合法的子節點地址為十進制 0 – 247。 每個子設備被賦予 1 – 247 范圍中的地址。主節點通過將子節點的地址放到報文的地址域對子節點尋址。當子節點返回應答時, 它將自己的地 址放到應答報文的地址域以讓主節點知道哪個子節點在回答;
- 功能碼:功能碼指明服務器要執行的動作。功能碼后面可跟有表示含有請求和響應參數的數據域;
- 數據:收、發數據信息;
- 校驗:錯誤檢驗域是對報文內容執行 "冗余校驗" 的計算結果,通常用CRC或者LRC校驗,根據不同的傳輸模式 (RTU or ASCII)使用兩種不同的計算方法。
4、RTU、ASCII串行傳輸模式
Modbus串行鏈路傳輸數據有兩種模式,RTU 模式和 ASCII模式,定義了報文域的位內容在線路上串行的傳送,確定了信息如何打包為報文和解碼,Modbus上所有設備的傳輸模式 (和串行口參數) 必須相同方可實現正常通信。
4.1、RTU傳輸模式
當設備使用 RTU (Remote Terminal Unit) 模式在 Modbus 串行鏈路通信, 報文中每個 8 位字節含有兩個 4 位十六進制字符。這種模式的主要優點是較高的數據密度,在相同的波特率下比 ASCII 模式有更高的吞吐率,每個報文必須以連續的字符流傳送。
RTU 模式每個字節 ( 11 位 ) 的格式如下所示:
編碼系統: 8–位二進制報文中每個8位字節含有兩個 4 位十六進制字符(0–9, A–F)Bits per Byte: 1 起始位8 數據位, 首先發送最低有效位1 位作為奇偶校驗1 停止位
為了保證與其它產品的最大兼容性,默認RTU校驗模式必須為偶校驗,每個字符或字節均從左到右順序發送,由發送設備將 Modbus 報文構造為帶有已知起始和結束標記的幀。這使設備可以在報文的開始接收 新幀,并且知道何時報文結束。不完整的報文必須能夠被檢測到而錯誤標志必須作為結果被設置。 在 RTU 模式,報文幀由時長至少為 3.5 個字符時間的空閑間隔區分。在后續的部分,這個時間區間被稱作 t3.5。RTC報文幀如下所示:
整個報文幀必須以連續的字符流發送,如果兩個字符之間的空閑間隔大于 1.5 個字符時間,則報文幀被認為不完整應該被接收節點丟棄。
4.2、ASCII傳輸模式
當 Modbus 串行鏈路的設備被配置為使用 ASCII (American Standard Code for Information Interchange) 模式通信時, 報文中的每個 8 位子節以兩個 ASCII 字符發送,當通信鏈路或者設備無法符合 RTU 模式的定時管理時使用該模式,只不過由于一個子節需要兩個字符,此模式比 RTU 效率低。例 : 數值?0X5B 會被編碼為兩個字符 : 0x35 和 0x42 ( ASCII 編碼 0x35 ="5", 0x42 ="B" )。
ASCII 模式每個字節 ( 10 位 ) 的格式如下所示:
編碼系統: 十六進制,ASCII 字符 0-9, A-F報文中每個 ASCII 字符含有 1 個十六進制字符Bits per Byte: 1 起始位7 數據位, 首先發送最低有效位1 位作為奇偶校驗1 停止位
為了保證與其它產品的最大兼容性,默認ASCII校驗模式必須為偶校驗,每個字符或字節均從左到右順序發送,由發送設備將 Modbus 報文構造為帶有已知起始和結束標記的幀。這使設備可以在報文的開始 接收新幀,并且知道何時報文結束。不完整的報文必須能夠被檢測到而錯誤標志必須作為結果被設置。報文幀的地址域含有兩個字符,在 ASCII 模式, 報文用特殊的字符區分幀起始和幀結束。一個報文必須以一個‘冒號’ ( : ) (ASCII 十六進制 3A )起始,以 ‘回車-換行’ (CR LF) 對 (ASCII 十六進制 0D 和 0A) 結束。對于所有的域,允許傳送的字符為十六進制 0–9, A–F (ASCII 編碼)。 設備連續的監視總線 上的 ‘冒號’ 字符。 當收到這個字符后,每個設備解碼后續的字符一直到幀結束。 報文中字符間的時間間隔可以達一秒。如果有更大的間隔,則接受設備認為發生了錯誤。ASCII 報文幀如下圖所示:
總結
以上是生活随笔為你收集整理的Modbus协议在串行链路上的实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一文看懂Modbus协议
- 下一篇: Modus串行链路系统电气特性:2线-M