Modbus消息幀
在兩種傳輸模式(ASCII或RTU)中,傳輸設備將Modbus消息轉換為具有起點和終點的幀,從而允許接收設備從消息的開頭開始工作,讀取地址分配信息,判斷選擇了哪個設備(廣播模式傳輸到所有設備),并判斷信息何時完成。還可以檢測某些消息,并將錯誤設置為返回結果。
3.1ASCII幀
使用ASCII模式,消息以冒號(:)字符(ASCII代碼3ah)開頭,以回車換行符(ASCII代碼0dh,0ah)結尾。
可以在其他字段中使用的傳輸字符是十陸進制09,A。。F.網絡上的設備不斷檢測“:”字符。當收到冒號時,每個設備對下壹個域(地址域)進行解碼,以確定是否將其發送給自身。
消息中發送字符之間的最大時間間隔不應超過1秒,否則接收設備將考慮傳輸錯誤。典型的消息框如下所示:
3.2RTU框架
使用RTU模式時,消息發送應以至少3.5個字符的暫停間隔開始。在網絡波特率下最容易實現多字符時間。傳輸的第壹個域是設備地址。可以使用的傳輸字符是十陸進制09,A。。F.網絡設備持續檢測網絡總線,包括暫停間隔。當接收到第壹個域(地址域)時,每個設備進行解碼以確定是否將其發送到自己的域。在最后傳輸的字符之后,至少3.5個字符的暫停標志著消息的結束。在此暫停后,可以啟動壹條新消息。
整個消息幀必須作為連續流輸入。如果幀完成前的暫停時間超過1.5個字符,接收設備將刷新未完成的消息,并假定下壹個字節是新消息的地址字段。類似地,如果壹個新消息從少于3.5個字符的前壹個消息開始,則接收設備將認為它是先前消息的延續。這將導致錯誤,因為最后壹個CRC字段中的值不正確。典型的消息幀如下所示:
3.3地址域
消息幀的地址字段包含兩個字符(ASCII)或8位(RTU)。可能的從屬地址為0247(十進制)。單個設備的地址范圍為1247。主設備通過將要聯系的從設備的地址放入消息中的地址字段來對從設備進行門控。當從設備發送響應消息時,它將其地址放入響應地址字段,以便主設備知道哪個設備響應了。
地址0用作廣播地址,以便所有從屬設備都能識別它。當Modbus協議用于更高級別的網絡時,可能不允許廣播或以其他方式代替廣播。
3.4如何處理功能域
消息框中的功能代碼字段包含兩個字符(ASCII)或8位(RTU)。可能的代碼范圍為十進制1255。當然,有些代碼適用于所有控制器,有些代碼適用于某些控制器,有些代碼保留供將來使用。
當從主設備向從設備發送消息時,功能代碼字段將告訴從設備要執行的行為。例如,要讀取輸入開關狀態,請讀取壹組寄存器的數據內容,讀取從設備的診斷狀態,并允許傳輸、記錄和驗證從設備中的程序。
當從設備響應時,它使用功能代碼字段指示是正常響應(無錯誤)還是發生錯誤(稱為異議響應)。對于正常響應,從設備僅響應相應的功能代碼。作為對異議的響應,設備返回壹個與普通代碼等效的代碼,但最重要的位置是邏輯1。
例如,如果從主設備發送到從設備的消息需要讀取壹組保持寄存器,則將生成以下功能代碼:011(十陸進制03h)
對于正常響應,從設備僅響應相同的功能代碼。作為對異議的響應,它返回:10011(十陸進制83h)
除了由于異議錯誤而修改功能代碼外,從設備還在響應消息的數據字段中輸入壹個唯壹的代碼,該代碼可以告訴主設備發生了什么錯誤。
在主設備應用程序收到對異議的響應后,典型的過程是重新發送消息,或者診斷發送到從設備的消息并將其報告給操作員。
3.5數據字段
數據字段由兩組十陸進制數字組成,范圍為00FF。根據網絡傳輸模式,這可以由壹對ASCII字符或壹個RTU字符組成。
從主設備發送到從設備的消息數據字段包含附加信息:必須使用從設備執行功能代碼定義的操作。例如,這包括不連續的寄存器地址、要處理的項目數和字段中的實際數據字節數。
例如,如果主設備需要從設備讀取壹組保持寄存器(功能代碼03),則數據字段指定起始寄存器和要讀取的寄存器數量。如果主設備寫入壹組從設備寄存器(功能代碼10十陸進制),則數據字段指示要寫入的起始寄存器、要寫入的寄存器數、數據字段的數據字節數以及要寫入寄存器的數據。
如果沒有發生錯誤,則從設備返回的數據字段包含請求的數據。如果發生錯誤,此字段包含反對代碼,主設備應用程序可使用該代碼確定下壹個操作。
在某些消息中,數據字段可能不存在(長度為0)。例如,主設備要求從設備響應通信事件記錄(功能代碼0bhex),而從設備不需要任何附加信息。
3.6錯誤檢測域
標準MODBUS網絡有兩種錯誤檢測方法。錯誤檢測字段的內容取決于所選的檢測方法。
ASCII碼
當選擇ASCII模式作為字符幀時,錯誤檢測字段包含兩個ASCII字符。這是使用LRC(縱向冗余檢測)方法從消息內容計算得出的,不包括起始冒號和回車換行符。LRC字符追加到回車換行符之后。
遠程終端
當選擇RTU模式作為字符幀時,錯誤檢測字段包含16位值(由兩個8位字符實現)。錯誤檢測域的內容通過消息內容的循環詳細性檢測獲得。CRC字段附加在消息的末尾。當添加時,低字節首先后跟高字節。因此,CRC的高位字節是發送消息的最后壹個字節。
3.7字符的連續傳輸
通過標準MODBUS系列網絡傳輸消息時,每個字符或字節按如下方式發送
4、錯誤檢測方法
標準MODBUS串行網絡使用兩種錯誤檢測方法。奇偶校驗可用于每個字符,幀檢測(LRC或CRC)應用于整個消息。它們在消息發送之前由主設備生成,從設備在接收過程中檢測每個字符和整個消息幀。
用戶應為主設備配置預定義的超時時間間隔,該時間間隔應足夠長,以便任何從設備都能正常響應。如果從設備檢測到傳輸錯誤,則不會接收消息,也不會響應主設備。這樣,超時事件將觸發主機來處理錯誤。發送到不存在的從屬設備的地址也會生成超時。
4.1平價
用戶可以將控制器配置為奇數或偶數檢查,或不檢查。這將決定如何設置每個字符中的奇偶校驗位。
如果指定奇偶校驗,則“1”的位數將計入每個字符的位數(ASCII模式下為7個數據位,RTU模式下為8個數據位)。例如,RTU字符幀包含以下8個數據位:1100101
“1”的整數是4。如果使用奇偶校驗,幀的奇偶校驗位將為0,因此整個“1”的數字仍然是4。如果使用奇偶校驗,幀的奇偶校驗位將為1,因此“1”的數目為5。
如果未指定奇偶校驗位,則傳輸期間將沒有奇偶校驗位,并且不會執行驗證檢測。它不是額外的停止位,而是填充到要傳輸的字符幀中。
4.2LRC檢測
使用ASCII模式,消息包括基于LRC方法的錯誤檢測域。LRC域檢測消息域中的內容,但起始冒號和結束回車行號除外。
LRC字段是壹個包含8位貳進制值的字節。LRC值由發送設備計算并放入消息幀中。接收設備在接收消息的過程中計算LRC,并將其與接收消息中LRC域中的值進行比較。如果兩個值不相等,則存在錯誤。
LRC方法是連續累積消息中的8位字節并丟棄進位。
4.3CRC檢測
使用RTU模式,消息包括基于CRC方法的錯誤檢測域。CRC域檢測整個消息的內容。
CRC字段為兩個字節,包含壹個16位貳進制值。它由傳輸設備計算并添加到消息中。接收設備重新計算接收到的消息的CRC,并將其與接收到的CRC域中的值進行比較。如果兩個值不同,則存在錯誤。
CRC首先放入壹個值均為“1”的16位寄存器,然后調用對消息中8位字節的當前寄存器中的值的處理。每個字符中只有8位數據對CRC有效,起始位、停止位和奇偶校驗位無效。
在CRC生成過程中,每個8位字符與寄存器內容或(或)獨立關聯,結果移到最低有效位,最高有效位用0填充。提取并檢測LSB。如果LSB為1,則寄存器為獨立且預設值或更低。如果LSB為0,則不會執行該操作。整個過程應重復8次。最后壹位(第8位)完成后,下壹個8位字節與寄存器的當前值獨立關聯。最終寄存器中的值是消息中所有字節執行后的CRC值。
當CRC被添加到消息中時,首先添加低字節,然后添加高字節。
5、ModbusRTU通信協議和編程
Modbus通信協議分為RTU協議和ASCII協議。目前,各種儀表采用ModbusRTU通信協議,如ch2000智能功率監測器、ch2000m功率參數采集模塊、巡檢儀、數顯表、光柱數顯表等。ModbusRTU協議簡要介紹如下:
5.1通信協議
5.1.1通信傳輸方式
通信傳輸分為獨立信息頭和傳輸的編碼數據。以下通信傳輸模式定義也與ModbusRTU通信協議兼容:
Modbus協議簡介(圖10)
初始結構=≥4字節的時間
地址代碼=1字節
功能代碼=1字節
數據區=n字節
錯誤檢查=16位CRC代碼
末端結構=≥4字節的時間
地址代碼:
地址碼是通過通信傳輸的第壹個字節。此字節表示具有用戶設置的地址代碼的從機將接收主機發送的信息。每個從機都有壹個唯壹的地址碼,響應環回從它自己的地址碼開始。主機發送的地址碼表示要發送的從機地址,從機發送的地址碼表示返回的從機地址。
功能代碼:
通信傳輸的第貳個字節。Modbus通信協議將功能編號定義為1至127。作為主請求發送,并通過功能代碼告知從機要執行的操作;作為從機響應,從機發送的功能代碼與主機發送的功能代碼相同,表示從機已響應主機進行操作。如果從機發送的功能代碼的最高位為1(例如,功能代碼為127),則表示從機不響應操作或發送錯誤。
數據區:
根據不同的功能代碼,數據區域是不同的。數據區可以是實際值、設定值、主機發送到從機的地址或從機發送到主機的地址。
CRC碼:
雙字節錯誤檢測代碼。
5.1.2通信協議
當向儀器發送通信命令時,符合相應地址代碼的設備接收通信命令,刪除地址代碼,讀取信息,如果沒有錯誤,則執行相應任務;然后將執行結果返回給發送方。返回的信息包括地址代碼、操作的功能代碼、操作后結果的數據和錯誤檢查代碼。如果出現錯誤,則不發送任何消息。