下表是modbus ascii協議和rtu協議的比較:
協議開始標記
結束標記
校驗傳輸效率
程式處理
ascii
:(冒號)
cr,lf
lrc低
直觀,簡單,易除錯
rtu無
無crc
高稍複雜
從上表的比較我們可以看到,modbus的ascii協議和rtu協議相比,modbus ascii協議擁有開始和結束標記,而modbus rtu卻沒有,所以ascii協議的程式中對資料報的處理能更加方便。modbus ascii協議的data域傳輸的都是可見的ascii字元,因此在除錯階段就顯得更加直觀,另外它的lrc校驗程式也比較容易編寫,這些都是modbus ascii的優點。modbus ascii的主要缺點是傳輸效率低,因為它傳輸的都是可見的ascii字元,原來用rtu傳輸的資料每乙個位元組,用ascii的話都要把這個位元組拆分兩個位元組,比如rtu傳輸乙個十六進製制數0xf9,ascii就需要傳輸字元'f'和字元'9',對應的ascii碼0x46和0x39兩個位元組,這樣它的傳輸的效率肯定就比rtu低。所以一般來說,如果所需要傳輸的資料量較小可以考慮使用ascii協議,如果所需傳輸的資料量比較大,最好能使用rtu協議。
另外,由於ascii協議有開始標誌和結束標誌,所以乙個資料報之間的各位元組間的傳輸間隔時間可以大於1秒,而modbus rtu方式下,由於沒有規定開始和結束標記,所以協議規定每兩個位元組之間傳送或者接收的
時間間隔不能超過3.5倍字元傳輸時間。如果兩個字元時間間隔超過了3.5倍的字元傳輸時間,就認為一幀資料已經接收,新的一幀資料傳輸開始,所以rtu方式下兩個位元組間傳輸間隔有時間要求。modbus 的ascii和rtu兩種協議的這一區別可能決定某些應用場合只能選用其中一種協議。
所選的ascii或rtu方式僅適用於標準的modbus網路,它定義了在這些網路上連續傳輸的訊息段的每一位,以及決定怎樣將資訊打包成訊息域和如何解碼。在其它網路上(象map和modbus plus)modbus訊息被轉成與序列傳輸無關的幀。
1、ascii模式
當控制器設為在modbus網路上以ascii(美國標準資訊交換**)模式通訊,在訊息中的每個8bit位元組都作為兩個ascii字元傳送。這種方式的主要優點是字元傳送的時間間隔可達到1秒而不產生錯誤。
**系統
• 十六進製制,ascii字元0...9,a...f
• 訊息中的每個ascii字元都是乙個十六進製制字元組成
每個位元組的位
• 1個起始位
• 7個資料位,最小的有效位先傳送
• 1個奇偶校驗位,無校驗則無
• 1個停止位(有校驗時),2個bit(無校驗時)
錯誤檢測域
• lrc(縱向冗長檢測)
2、rtu模式
當控制器設為在modbus網路上以rtu(遠端終端單元)模式通訊,在訊息中的每個8bit位元組包含兩個4bit的十六進製制字元。這種方式的主要優點是:在同樣的波特率下,可比ascii方式傳送更多的資料。
**系統
• 8位二進位制,十六進製制數0...9,a...f
• 訊息中的每個8位域都是乙個兩個十六進製制字元組成
• 每個位元組的位
• 1個起始位
• 8個資料位,最小的有效位先傳送
• 1個奇偶校驗位,無校驗則無
• 1個停止位(有校驗時),2個bit(無校驗時)
錯誤檢測域
• crc(迴圈冗長檢測)
modbus ascii報文轉換
在現有專案中增加modbus ascii報文的支援,因為專案中已經有了rtu和tcp報文的支援,所以想講ascii報文轉換成類似rtu的報文格式,利用rtu的函式處理,節省 量.根據rtu報文和ascii報文的特點,從該博文可以看出 所以我是用乙個函式處理相鄰2個位元組,轉換成rtu報文格式.即實現...
MODBUS ASCII 通訊協議例項
在ascii傳輸模式下,訊息幀以英文冒號 3a 開始,以回車 0d 和換行 0a 結束,允許傳輸的字符集為十六進製制的0 9和a f。在ascii模式下,每個8位的位元組被拆分成兩個ascii字元進行傳送,比如十六進製制0x28 0010 1000 會被分解成 ascii字元 2 0011 0010...
RTU的任務規劃
rtu的頂層任務分布及任務間通訊方式 0 開始任務,建立以下幾個任務後,掛起本身 1 資料採集任務 建立連線於rtu的各個介面的資料採集任務。建立完畢後,進入死迴圈中,被訊息郵箱em1阻塞,等待各個採集任務採集完畢或者超時 訊息郵箱em1中的訊息某位置位,表示某個採集任務完畢 1 各個任務被 採集任...