上期我們學習了,第一篇MODBUS協議基本介紹,今天我們來研究第二篇MODBUS RTU傳輸模式介紹。
第二篇 MODBUS RTU傳輸模式介紹
當設備使用 RTU(Remote Terminal Unit)模式在Modbus串行鏈路通信,消息中每個8位域都是由兩個十六進制字符組成。該模式的主要優點是較高的數據密度,在相同的波特率下比ASCII模式有更高的吞吐率。RTU模式的每個報文必須以連續的字符流傳送。
RTU模式每個字節(11位)的格式
- 編碼系統:8 位二進制,報文中每個 8 位字節含有兩個 4 位十六進制字符(0-9,A-F)。
- 每字節 bit 流:1 起始位、8 數據位,首先發送最低有效位、1 位奇偶檢驗、1 停止位。
偶校驗是要求的,其它模式(奇校驗、無校驗)也可以使用,為了保證兼容性,同時支持無校驗模式是建議的。默認校驗模式必須為偶校驗。
字符如何串行傳送:
每個字符或字節均由此順序發送(從左到右),最低有效位(LSB)…最高有效位(MSB)。
RTU模式位序列
設備配置為奇校驗、偶校驗或無校驗都可以接受,如果無奇偶校驗,就傳送一個附加的停止位以填充字符幀。
RTU模式位序列(無校驗的特殊情況)
幀檢驗域: 循環冗余檢驗(CRC)。
幀描述:
RTU報文幀
Modbus報文RTU幀
由發送設備將 Modbus 報文構造為帶有已知起始和結束標記的幀。這使設備可以在報文的開始接收新幀,并且知道何時報文結束。不完整的報文必須能夠被檢測到,而錯誤標志必須作為結果被設置。
在 RTU 模式中,報文幀由時長至少為 3.5 個字符時間的空閑間隔區分。在后續部分,這個時間區間被稱為 t3.5。
整個報文幀必須以連續的字符流發送。
如果兩個字符直接的空閑間隔大于 1.5 個字符時間,則報文被認為不完整應該被接收設備丟棄,如圖:
非正常報文幀
注:RTU 接受驅動程序的實現,由于 t1.5 和 t3.5 的定時,隱含了大量的對中斷的管理。在高速通信速率下,這導致 CPU 負擔加重。因此,在通信速率等于或低于 19200bps 時,這兩個定時必須嚴格遵守;對于波特率大于 19200bps 的情形,應該使用 2 個定時的固定值:建議的字符間超時時間(t1.5)位 750us,幀間的超時時間(t1.5)位 1.750ms。
下圖表示了對 RTU 傳輸模式狀態圖的描述。“主設備”和“從設備”的不同角度均在相同的圖中表示:
1.從“初始”態到“空閑”態轉換需要 t3.5 定時超時:這保證幀間延遲。
2.“空閑”態是沒有發送和接收報文要處理的正常狀態。
3.在 RTU 模式,當沒有活動的傳輸的實際間隔打達 3.5 個字符長時,通信鏈路被認為在“空閑”態。
4.在鏈路空閑時,在鏈路上檢測到的任何傳輸的字符都被識別為幀起始。鏈路變為“活動”狀態。然后,當鏈路上沒有字符傳輸的時間間隔達到 t3.5 后,被識別為幀結束。
5.檢測到幀結束后,完成 CRC 計算和校驗。然后,分析地址域以確定幀是否發往此設備,如果不是,則丟棄此幀。為了減少接收處理時間,地址域可以在一接到就分析,而不需要等到整個幀結束。這樣,CRC 計算只需要在幀尋址到該節點(包括廣播幀)時進行。
CRC計算
在 RTU 模式包含一個對全部報文內容執行的,基于循環冗余校驗(CRC-Cyclical Redundancy Checking)算法的錯誤檢驗域。CRC域檢驗整個報文的內容。不管報文有無奇偶校驗,均執行此檢驗。
CRC 包含由兩個 8 位字節組成的一個 16 位值。
CRC 域作為報文的最后的域附加在報文之后。計算后,首先附加低字節。然后是高字節。CRC 高字節為報文發送的最后一個字節。
附加在報文后面的 CRC 的值由發送設備計算。接收設備在接收報文時重新計算 CRC 的值,并將計算結果于實際接收到的 CRC 值相比較,如果兩個值不相等,則為錯誤。
CRC 的計算,開始對一個 16位寄存器預裝全“1”,然后將報文中連續的 8位字節對其進行后續的計算。只有字符中的 8 個數據位參與到生成 CRC 的運算,起始位、停止位和校驗位不參與 CRC 計算。
CRC 生成的過程中,每個 8 位字符與寄存器中的值異或,然后結果向最低有效位(LSB)方向移動 1 位,而最高有效位(MSB)置 0.然后提取并檢查 LSB:如果LSB 為 1,則寄存器中的值與一個固定的預置值異或;如果LSB 為 0,則不進行異或操作。
這個過程將重復直到執行完 8 次移位,完成最后一次(第八次)移位及相關操作后,下一個 8 位字節與寄存器的當前值異或,然后又同上面描述過的一樣重復 8 次。當所有報文中字節都預算之后得到的寄存器中的最終值,就是 CRC。
簡單代碼如下:
-
二進制
+關注
關注
2文章
761瀏覽量
41476 -
MODBUS
+關注
關注
28文章
1718瀏覽量
76425 -
ASCII
+關注
關注
5文章
171瀏覽量
34949 -
RTU
+關注
關注
0文章
384瀏覽量
28547 -
傳輸模式
+關注
關注
0文章
9瀏覽量
7001
發布評論請先 登錄
相關推薦
評論