前面2期我們學(xué)習(xí)了,第一篇MODBUS協(xié)議基本介紹,第二篇MODBUS RTU傳輸模式介紹,今天我們來研究第三篇MODBUS ASCII傳輸模式介紹。
第三篇 MODBUS ASCII傳輸模式介紹
當(dāng) Modbus 串行鏈路的設(shè)備被配置為使用 ASCII(American Standard Code For Information Interchange)模式通信時(shí),報(bào)文中的每個(gè) 8 位字節(jié)以兩個(gè) ASCII 字符發(fā)送。當(dāng)通信鏈路或者設(shè)備無法符合 RTU 模式的定時(shí)管理時(shí)使用該模式。
注:由于一個(gè)字節(jié)需要兩個(gè)字符,此模式比 RTU 效率低。
例:字節(jié) 0x5B 會(huì)被編碼為兩個(gè)字符:0x35 和 0x42(ASCII 編碼 0x35=”5”,0x42=”B”)。
ASCII模式每個(gè)字節(jié)(10位)的格式
1.編碼系統(tǒng):十六進(jìn)制,ASCII字符 0-9,A-F,報(bào)文中每個(gè) ASCII 字符含有 1 個(gè)十六進(jìn)制字符。
2.每字節(jié) bit 流:1 起始位、7 數(shù)據(jù)位,首先發(fā)送最低有效位、1 位奇偶檢驗(yàn)、1 停止位。
奇偶校驗(yàn)是要求的,其它模式(奇校驗(yàn),無校驗(yàn))也可以使用。為了保證與其它產(chǎn)品最大的兼容性,同時(shí)支持無校驗(yàn)?zāi)J绞墙ㄗh的。默認(rèn)校驗(yàn)?zāi)J奖仨殲榕夹r?yàn)。
字符是如何串行傳送的:
每個(gè)字符或字節(jié)均由此順序發(fā)送(從左到右):最低有效位(LSB)…最高有效位(MSB)。
ASCII模式位序列
設(shè)備配置為奇校驗(yàn)、偶校驗(yàn)或無校驗(yàn)都可以接受。如果是無奇偶校驗(yàn),將傳送一個(gè)附加的停止位以填充字符幀:
ASCII模式位序列(無校驗(yàn)的特殊情況)
幀檢驗(yàn)域:
縱向冗余校驗(yàn)(LRC-Longitudinal Redundancy Checking)。
Modbus ASCII報(bào)文幀
由發(fā)送設(shè)備將 Modbus 報(bào)文構(gòu)造為帶有已知起始和結(jié)束標(biāo)記的幀。這使設(shè)備可以在報(bào)文的開始接收新幀,并且知道何時(shí)報(bào)文結(jié)束。不完整的報(bào)文必須能夠被檢測到而錯(cuò)誤標(biāo)志必須作為結(jié)果被設(shè)置。
報(bào)文幀的地址域含有兩個(gè)字符。
在ASCII模式,報(bào)文用特殊的字符區(qū)分幀起始和幀結(jié)束。一個(gè)報(bào)文必須以一個(gè)‘冒號’(:)(ASCII 十六進(jìn)制 3A)起始,以‘回車-換行’(CR LF)對(ASCII十六進(jìn)制0D和0A)結(jié)束。
注:LF 字符可以通過特定的 Modbus 應(yīng)用命令改變。
對于所有的域,允許傳送的字符為十六進(jìn)制 0-9,A-F(ASCII 編碼)。設(shè)備連續(xù)的監(jiān)視總線上‘冒號’字符。當(dāng)收到這個(gè)字符后,每個(gè)設(shè)備解碼后續(xù)的字符一直到幀結(jié)束。
報(bào)文中字符間的時(shí)間間隔可以達(dá)1秒。如果有更大的間隔,則接收設(shè)備認(rèn)為發(fā)生了錯(cuò)誤。
ASCII報(bào)文幀
注:每個(gè)字符字節(jié)需要用兩個(gè)字符編碼。因此,為了確保ASCII 模式和 RTU模式在 Modbus 應(yīng)用級兼容,ASCII 數(shù)據(jù)域最大長度為(2x252)是 RTU 數(shù)據(jù)域(252)的兩倍。
必然的,Modbus ASCII 幀的最大尺寸為 513 個(gè)字符。
ASCII 報(bào)文幀的要求在下面的狀態(tài)圖中綜合。“主設(shè)備”和“從設(shè)備”的不同角度均在相同的圖中表示。
ASCII傳輸模式狀態(tài)圖
1.“空閑”態(tài)是沒有發(fā)送和接收報(bào)文要處理的正常狀態(tài)。
2.每次接收到“:”字符表示新的報(bào)文的開始。如果在一個(gè)報(bào)文的接收過程中收到該字符。則當(dāng)前地報(bào)文被認(rèn)為不完整并被丟棄。而一個(gè)新的接收緩沖區(qū)被重新分配。
3.檢測到幀結(jié)束后,完成LRC 計(jì)算和校驗(yàn),然后分析地址域以確定幀是否發(fā)往此設(shè)備,如果不是,則丟棄此幀。為了減少接收處理時(shí)間,地址域可以在一接到就分析,而不需要等到整個(gè)幀結(jié)束。
LRC校驗(yàn)
在 ASCII 模式,包含一對全部報(bào)文內(nèi)容執(zhí)行的,基于縱向冗余校驗(yàn)(LRC-Longitudinal Redundancy Checking)算法的錯(cuò)誤檢驗(yàn)域。LRC 域檢驗(yàn)不包括起始“冒號”和結(jié)尾 CRLF 對的整個(gè)報(bào)文的內(nèi)容。不關(guān)報(bào)文有無奇偶校驗(yàn),均執(zhí)行此檢驗(yàn)。
LRC 域?yàn)橐粋€(gè)字節(jié),包含一個(gè)8 位二進(jìn)制值。LRC 值由發(fā)送設(shè)備計(jì)算,然后將 LRC 附在報(bào)文后面。接收設(shè)備在接收報(bào)文時(shí)重新計(jì)算 LRC 的值,并將計(jì)算結(jié)果于實(shí)際接收到的 LRC 值相比較,如果兩個(gè)值不相等,則為錯(cuò)誤。
LRC 的計(jì)算,對報(bào)文中的所有的連續(xù) 8 位字節(jié)相加,忽略任何進(jìn)位,然后求出其二進(jìn)制補(bǔ)碼。執(zhí)行檢驗(yàn)針對不包括起始“冒號”和結(jié)尾 CRLF 對的整個(gè) ASCII報(bào)文域的內(nèi)容。在 ASCII 模式,LRC 的結(jié)果被ASCII 編碼為兩個(gè)字節(jié)并放置于 ASCII模式報(bào)文幀的結(jié)尾,CRLF 之前。
簡單代碼如下:
-
MODBUS
+關(guān)注
關(guān)注
28文章
1939瀏覽量
78556 -
編碼
+關(guān)注
關(guān)注
6文章
963瀏覽量
55309 -
ASCII
+關(guān)注
關(guān)注
5文章
172瀏覽量
35536 -
RTU
+關(guān)注
關(guān)注
0文章
427瀏覽量
29111 -
傳輸模式
+關(guān)注
關(guān)注
0文章
9瀏覽量
7055
發(fā)布評論請先 登錄
相關(guān)推薦
Modbus ASCII的設(shè)計(jì)與實(shí)現(xiàn)

esp32 idf支持modbus ascii協(xié)議的主機(jī)模式嗎?
modbus三種通訊方式的字符介紹
Modbus-RTU協(xié)議模式學(xué)習(xí)下載
臺(tái)達(dá)PLC在使用Modbus通訊時(shí)的兩種模式
Modbus協(xié)議的理解
LTE的幾種傳輸模式介紹
modbus常用功能碼解讀

評論