-
您的位置:
- 網(wǎng)站首頁
- > 物聯(lián)百科
- > 技術問答
您的位置:
Modbus消息幀
在兩種傳輸模式(ASCII或RTU)中,傳輸設備將Modbus消息轉(zhuǎn)換為具有起點和終點的幀,從而允許接收設備從消息的開頭開始工作,讀取地址分配信息,判斷選擇了哪個設備(廣播模式傳輸?shù)剿性O備),并判斷信息何時完成。還可以檢測某些消息,并將錯誤設置為返回結果。

3.1ASCII幀
使用ASCII模式,消息以冒號(:)字符(ASCII代碼3ah)開頭,以回車換行符(ASCII代碼0dh,0ah)結尾。
可以在其他字段中使用的傳輸字符是十陸進制09,A。。F.網(wǎng)絡上的設備不斷檢測“:”字符。當收到冒號時,每個設備對下壹個域(地址域)進行解碼,以確定是否將其發(fā)送給自身。
消息中發(fā)送字符之間的最大時間間隔不應超過1秒,否則接收設備將考慮傳輸錯誤。典型的消息框如下所示:
3.2RTU框架
使用RTU模式時,消息發(fā)送應以至少3.5個字符的暫停間隔開始。在網(wǎng)絡波特率下最容易實現(xiàn)多字符時間。傳輸?shù)牡谝紓€域是設備地址。可以使用的傳輸字符是十陸進制09,A。。F.網(wǎng)絡設備持續(xù)檢測網(wǎng)絡總線,包括暫停間隔。當接收到第壹個域(地址域)時,每個設備進行解碼以確定是否將其發(fā)送到自己的域。在最后傳輸?shù)淖址?,至?.5個字符的暫停標志著消息的結束。在此暫停后,可以啟動壹條新消息。
整個消息幀必須作為連續(xù)流輸入。如果幀完成前的暫停時間超過1.5個字符,接收設備將刷新未完成的消息,并假定下壹個字節(jié)是新消息的地址字段。類似地,如果壹個新消息從少于3.5個字符的前壹個消息開始,則接收設備將認為它是先前消息的延續(xù)。這將導致錯誤,因為最后壹個CRC字段中的值不正確。典型的消息幀如下所示:
3.3地址域
消息幀的地址字段包含兩個字符(ASCII)或8位(RTU)??赡艿膹膶俚刂窞?247(十進制)。單個設備的地址范圍為1247。主設備通過將要聯(lián)系的從設備的地址放入消息中的地址字段來對從設備進行門控。當從設備發(fā)送響應消息時,它將其地址放入響應地址字段,以便主設備知道哪個設備響應了。
地址0用作廣播地址,以便所有從屬設備都能識別它。當Modbus協(xié)議用于更高級別的網(wǎng)絡時,可能不允許廣播或以其他方式代替廣播。
3.4如何處理功能域
消息框中的功能代碼字段包含兩個字符(ASCII)或8位(RTU)??赡艿拇a范圍為十進制1255。當然,有些代碼適用于所有控制器,有些代碼適用于某些控制器,有些代碼保留供將來使用。
當從主設備向從設備發(fā)送消息時,功能代碼字段將告訴從設備要執(zhí)行的行為。例如,要讀取輸入開關狀態(tài),請讀取壹組寄存器的數(shù)據(jù)內(nèi)容,讀取從設備的診斷狀態(tài),并允許傳輸、記錄和驗證從設備中的程序。

當從設備響應時,它使用功能代碼字段指示是正常響應(無錯誤)還是發(fā)生錯誤(稱為異議響應)。對于正常響應,從設備僅響應相應的功能代碼。作為對異議的響應,設備返回壹個與普通代碼等效的代碼,但最重要的位置是邏輯1。
例如,如果從主設備發(fā)送到從設備的消息需要讀取壹組保持寄存器,則將生成以下功能代碼:011(十陸進制03h)
對于正常響應,從設備僅響應相同的功能代碼。作為對異議的響應,它返回:10011(十陸進制83h)
除了由于異議錯誤而修改功能代碼外,從設備還在響應消息的數(shù)據(jù)字段中輸入壹個唯壹的代碼,該代碼可以告訴主設備發(fā)生了什么錯誤。
在主設備應用程序收到對異議的響應后,典型的過程是重新發(fā)送消息,或者診斷發(fā)送到從設備的消息并將其報告給操作員。
3.5數(shù)據(jù)字段
數(shù)據(jù)字段由兩組十陸進制數(shù)字組成,范圍為00FF。根據(jù)網(wǎng)絡傳輸模式,這可以由壹對ASCII字符或壹個RTU字符組成。
從主設備發(fā)送到從設備的消息數(shù)據(jù)字段包含附加信息:必須使用從設備執(zhí)行功能代碼定義的操作。例如,這包括不連續(xù)的寄存器地址、要處理的項目數(shù)和字段中的實際數(shù)據(jù)字節(jié)數(shù)。
例如,如果主設備需要從設備讀取壹組保持寄存器(功能代碼03),則數(shù)據(jù)字段指定起始寄存器和要讀取的寄存器數(shù)量。如果主設備寫入壹組從設備寄存器(功能代碼10十陸進制),則數(shù)據(jù)字段指示要寫入的起始寄存器、要寫入的寄存器數(shù)、數(shù)據(jù)字段的數(shù)據(jù)字節(jié)數(shù)以及要寫入寄存器的數(shù)據(jù)。
如果沒有發(fā)生錯誤,則從設備返回的數(shù)據(jù)字段包含請求的數(shù)據(jù)。如果發(fā)生錯誤,此字段包含反對代碼,主設備應用程序可使用該代碼確定下壹個操作。
在某些消息中,數(shù)據(jù)字段可能不存在(長度為0)。例如,主設備要求從設備響應通信事件記錄(功能代碼0bhex),而從設備不需要任何附加信息。
3.6錯誤檢測域
標準MODBUS網(wǎng)絡有兩種錯誤檢測方法。錯誤檢測字段的內(nèi)容取決于所選的檢測方法。
ASCII碼
當選擇ASCII模式作為字符幀時,錯誤檢測字段包含兩個ASCII字符。這是使用LRC(縱向冗余檢測)方法從消息內(nèi)容計算得出的,不包括起始冒號和回車換行符。LRC字符追加到回車換行符之后。
遠程終端
當選擇RTU模式作為字符幀時,錯誤檢測字段包含16位值(由兩個8位字符實現(xiàn))。錯誤檢測域的內(nèi)容通過消息內(nèi)容的循環(huán)詳細性檢測獲得。CRC字段附加在消息的末尾。當添加時,低字節(jié)首先后跟高字節(jié)。因此,CRC的高位字節(jié)是發(fā)送消息的最后壹個字節(jié)。
3.7字符的連續(xù)傳輸
通過標準MODBUS系列網(wǎng)絡傳輸消息時,每個字符或字節(jié)按如下方式發(fā)送

4、錯誤檢測方法
標準MODBUS串行網(wǎng)絡使用兩種錯誤檢測方法。奇偶校驗可用于每個字符,幀檢測(LRC或CRC)應用于整個消息。它們在消息發(fā)送之前由主設備生成,從設備在接收過程中檢測每個字符和整個消息幀。
用戶應為主設備配置預定義的超時時間間隔,該時間間隔應足夠長,以便任何從設備都能正常響應。如果從設備檢測到傳輸錯誤,則不會接收消息,也不會響應主設備。這樣,超時事件將觸發(fā)主機來處理錯誤。發(fā)送到不存在的從屬設備的地址也會生成超時。
4.1平價
用戶可以將控制器配置為奇數(shù)或偶數(shù)檢查,或不檢查。這將決定如何設置每個字符中的奇偶校驗位。
如果指定奇偶校驗,則“1”的位數(shù)將計入每個字符的位數(shù)(ASCII模式下為7個數(shù)據(jù)位,RTU模式下為8個數(shù)據(jù)位)。例如,RTU字符幀包含以下8個數(shù)據(jù)位:1100101
“1”的整數(shù)是4。如果使用奇偶校驗,幀的奇偶校驗位將為0,因此整個“1”的數(shù)字仍然是4。如果使用奇偶校驗,幀的奇偶校驗位將為1,因此“1”的數(shù)目為5。
如果未指定奇偶校驗位,則傳輸期間將沒有奇偶校驗位,并且不會執(zhí)行驗證檢測。它不是額外的停止位,而是填充到要傳輸?shù)淖址麕小?/p>
4.2LRC檢測
使用ASCII模式,消息包括基于LRC方法的錯誤檢測域。LRC域檢測消息域中的內(nèi)容,但起始冒號和結束回車行號除外。
LRC字段是壹個包含8位貳進制值的字節(jié)。LRC值由發(fā)送設備計算并放入消息幀中。接收設備在接收消息的過程中計算LRC,并將其與接收消息中LRC域中的值進行比較。如果兩個值不相等,則存在錯誤。
LRC方法是連續(xù)累積消息中的8位字節(jié)并丟棄進位。
4.3CRC檢測
使用RTU模式,消息包括基于CRC方法的錯誤檢測域。CRC域檢測整個消息的內(nèi)容。
CRC字段為兩個字節(jié),包含壹個16位貳進制值。它由傳輸設備計算并添加到消息中。接收設備重新計算接收到的消息的CRC,并將其與接收到的CRC域中的值進行比較。如果兩個值不同,則存在錯誤。
CRC首先放入壹個值均為“1”的16位寄存器,然后調(diào)用對消息中8位字節(jié)的當前寄存器中的值的處理。每個字符中只有8位數(shù)據(jù)對CRC有效,起始位、停止位和奇偶校驗位無效。
在CRC生成過程中,每個8位字符與寄存器內(nèi)容或(或)獨立關聯(lián),結果移到最低有效位,最高有效位用0填充。提取并檢測LSB。如果LSB為1,則寄存器為獨立且預設值或更低。如果LSB為0,則不會執(zhí)行該操作。整個過程應重復8次。最后壹位(第8位)完成后,下壹個8位字節(jié)與寄存器的當前值獨立關聯(lián)。最終寄存器中的值是消息中所有字節(jié)執(zhí)行后的CRC值。
當CRC被添加到消息中時,首先添加低字節(jié),然后添加高字節(jié)。
5、ModbusRTU通信協(xié)議和編程
Modbus通信協(xié)議分為RTU協(xié)議和ASCII協(xié)議。目前,各種儀表采用ModbusRTU通信協(xié)議,如ch2000智能功率監(jiān)測器、ch2000m功率參數(shù)采集模塊、巡檢儀、數(shù)顯表、光柱數(shù)顯表等。ModbusRTU協(xié)議簡要介紹如下:
5.1通信協(xié)議
5.1.1通信傳輸方式
通信傳輸分為獨立信息頭和傳輸?shù)木幋a數(shù)據(jù)。以下通信傳輸模式定義也與ModbusRTU通信協(xié)議兼容:
Modbus協(xié)議簡介(圖10)
初始結構=≥4字節(jié)的時間
地址代碼=1字節(jié)
功能代碼=1字節(jié)
數(shù)據(jù)區(qū)=n字節(jié)
錯誤檢查=16位CRC代碼
末端結構=≥4字節(jié)的時間
地址代碼:
地址碼是通過通信傳輸?shù)牡谝紓€字節(jié)。此字節(jié)表示具有用戶設置的地址代碼的從機將接收主機發(fā)送的信息。每個從機都有壹個唯壹的地址碼,響應環(huán)回從它自己的地址碼開始。主機發(fā)送的地址碼表示要發(fā)送的從機地址,從機發(fā)送的地址碼表示返回的從機地址。
功能代碼:
通信傳輸?shù)牡谫E個字節(jié)。Modbus通信協(xié)議將功能編號定義為1至127。作為主請求發(fā)送,并通過功能代碼告知從機要執(zhí)行的操作;作為從機響應,從機發(fā)送的功能代碼與主機發(fā)送的功能代碼相同,表示從機已響應主機進行操作。如果從機發(fā)送的功能代碼的最高位為1(例如,功能代碼為127),則表示從機不響應操作或發(fā)送錯誤。
數(shù)據(jù)區(qū):
根據(jù)不同的功能代碼,數(shù)據(jù)區(qū)域是不同的。數(shù)據(jù)區(qū)可以是實際值、設定值、主機發(fā)送到從機的地址或從機發(fā)送到主機的地址。
CRC碼:
雙字節(jié)錯誤檢測代碼。
5.1.2通信協(xié)議
當向儀器發(fā)送通信命令時,符合相應地址代碼的設備接收通信命令,刪除地址代碼,讀取信息,如果沒有錯誤,則執(zhí)行相應任務;然后將執(zhí)行結果返回給發(fā)送方。返回的信息包括地址代碼、操作的功能代碼、操作后結果的數(shù)據(jù)和錯誤檢查代碼。如果出現(xiàn)錯誤,則不發(fā)送任何消息。