現場總線的開關量I/O模塊的設計:MODBUS 現場總線技術
MODBUS是Modicon公司1979年最先倡導的一種通信協議,經過許多公司的實際應用,逐漸被認可,成為一種應用于工業控制器上的標準通信協議,由于其功能比較完善而且協議開放,因此,被廣泛應用于工業現場,在微機化測量設備之間實現雙向串行多節點數字通信。連接單個分散的測量控制設備,使之可以相互溝通信息、共同完成自控任務的網絡系統與控制系統,具有分散控制、使用簡單、簡化系統結構、數據易于處理、節約硬件設備、易于安裝和維護等優點。
MODBUS串行鏈路協議是一個主/從協議。適用于半雙工的RS-485總線。協議規定總線上有一個主機,多個從機,每個從機分配唯一的地址。工作時可以采用命令/應答的通訊方式。MODBUS通訊總是由主站發起請求,所有的從設備都接收并解析其中的地址信息,與地址不匹配的從站拋棄該請求幀,繼續偵聽總線;只有與地址相匹配的從設備對該請求幀進行進一步解析,并回應應答幀。若解析后校驗的結果出錯,從站向主機發送出錯信號。一般情況下,當主機收到出錯應答或在用戶設定的時間內仍未收到響應報文時,主站就會立即重發信息給從設備。這種一問一答的通信模式,大大提高了通信的正確率。從站沒有收到來自總站的請求時,將不會自動發送數據。從站之間也不能互相通信。在某一時刻主站只能啟動一個MODBUS事務處理。
數據傳輸以幀為單位,將報文作為一幀數據,報文是由發送地址、控制信息、發送數據、校驗信息按一定格式組成的一個數據單元。主設備發出的請求幀和從設備發出的應答幀都是以地址開頭的。
2.2 MODBUS協議在串行鏈路層上的實現
串行鏈路上的MODBUS系統可以使用不同的物理接口作為其物理層標準。最常用的接口是RS485兩線制接口,RS485四線制接口可作為附加選項用。當只需要短距離的點到點通信時,也可以使用RS232串行接口作為MODBUS系統的物理接口。圖2.1給出了MODBUS協議與ISO/OSI網絡模型的對應關系。

2.2.1 MODBUS主/從協議原理
MODBUS串行鏈路協議位于OSI模型的第2層,是一個主/從協議。基于串行鏈路實現的MODBUS系統中,有且僅有一個主節點(客戶機、主站)能夠向其他從節點發出請求報文并處理響應,從節點在沒有收到主站的請求時并不主動向總線上發送數據,也不與其他從節點通信。
主站可通過單播和廣播兩種方式向從站發出MODBUS請求。在單播模式下,主站尋址單個從站。從站接收并處理完請求后,向主站返回一個應答。而對于廣播模式的請求,主站可以向所用從站發送請求,但該請求必須是寫命令,且從站沒有應答返回。
2.2.2 MODBUS總線兩種串行傳輸模式
傳輸模式定義了鏈路上串行傳送報文域的位內容,并確定了信息是怎樣打包為報文及如何解碼。MODBUS有兩種串行傳輸模式,即RTU模式和ASCII模式。
●ASCII傳輸模式
在ASCII模式中,用兩個ASCII字符發送報文中的一個8位字節。報文中用特定的字符表示起始和結束。這種模式的主要優點是允許兩個字符之間的時間間隔可達到1秒而不發送錯誤。如果出現更大的間隔,則正在接收的設備認為出現錯誤。表2.1所示為ASCII模式字符中的位序列。每個字節包括1個起始位(邏輯0)、7個數據位(首先發送最低有效位)、1個奇偶校驗位和一個停止位(邏輯1 )。其中,奇偶校驗位默認為偶檢驗,為保證最大兼容性,也可選擇奇校驗或無校驗(用一個停止位填充)。

ASCII模式的錯誤校驗采用縱向冗余校驗(Longitudinal Redundancy Check-LRC)。報文以一個冒號(:)字符開始,即ASCII碼3AH;并且以一個回車換行符(CRLF)結束,即ASCII碼0DH和0AH.網絡設備不斷檢測網絡總線上的“:”字符,當一個冒號被接收到時,每個設備都解碼下個域(地址域)來查明是否是被訪問的設備。ASCII報文幀格式如表2 .2所示:

●RTU傳輸模式
在RTU( Remote Termina lUint -遠程終端設備)模式下,一個報文中的每個字節包含兩個4位的十六進制字符。這種模式的主要優點是:在同樣的波特率下,它的高字符密度運行比ASCII方式傳送更多的數據,具有比ASCII模式更高的吞吐率。在本設計中采用RTU傳輸方式。表2 .3所示為RT U模式字符中的位序列。每個字節包括1個起始位(邏輯0 )、8個數據位(首先發送最低有效位)、1個奇偶校驗位和一個停止位(邏輯1 )。其中,奇偶校驗位默認為偶檢驗,為保證最大兼容性,也可選擇奇校驗或無校驗(用一個停止位填充)。

RTU報文幀格式如表2.4所示。典型的RTU報文幀沒有起始位,也沒有停止位,而是以至少3.5個字符時間的停頓間隔標志一幀的開始或結束。報文幀由地址域、功能域、數據域和CRC校驗域構成。所有字符由16進制0-9,A-F組成。RTU報文幀格式如圖2 .5所示:

在RTU模式中,整個報文幀必須作為一個連續的數據流傳輸。如果在報文幀完成之前有超過1.5個字符時間停頓間隔發生,接收設備將刷新未完成的報文并假定下一個字節將是一個新報文的地址域。同樣地,如果一個新報文在小于3.5個字符時間內緊跟前一個報文開始,接收設備將認為它是前一個報文的延續。這些都會導致傳輸的報文錯誤。
消息幀的地址域包含一個8Bit.可能的從設備地址是0-247(十進制)。單個設備的地址范圍是1- 247.主設備通過將要聯絡的從設備的地址放入消息中的地址域來選通從設備。當從設備發送回應消息時,它把自己的地址放入回應的地址域中,以便主設備知道是哪一個設備作出回應。地址0是用作廣播地址,以使所有的從設備都能認識。當Modbus協議用于更高水準的網絡,廣播可能不允許或以其它方式代替。
2.3錯誤檢測域
當選用RTU模式作字符幀,錯誤檢測域包含一16 Bits值(用兩個8位的字符來實現)。錯誤檢測域的內容是通過對消息內容進行循環冗長檢測方法得出的。CRC域附加在消息的最后,添加時先是低字節然后是高字節。故CRC的高位字節是發送消息的最后一個字節。
CRC-16錯誤校驗程序如下:報文(此處只涉及數據位,不指起始位、停止位和任選的奇偶校驗位)被看作是一個連續的二進制,其最高有效位( MSB )首選發送。報文先與X↑16相乘(左移16位),然后看X↑16 + X↑15 + X↑2 + 1除,X↑16 + X↑15 + X↑2 + 1可以表示為二進制數11000000000000101.整數商位忽略不記,16位余數加入該報文( MSB先發送),成為2個CRC校驗字節。余數中的1全部初始化,以免所有的零成為一條報文被接收。經上述處理而含有CRC字節的報文,若無錯誤,到接收設備后再被同一多項式( X↑16+ X↑15 + X↑2 + 1)除,會得到一個零余數(接收設備核驗這個CRC字節,并將其與被傳送的CRC比較)。全部運算以2為模(無進位)。
習慣于成串發送數據的設備會首選送出字符的最右位( LSB -最低有效位)。而在生成CRC情況下,發送首位應是被除數的最高有效位MSB.由于在運算中不用進位,為便于操作起見,計算CRC時設MSB在最右位。生成多項式的位序也必須反過來,以保持一致。多項式的MSB略去不記,因其只對商有影響而不影響余數。
生成CRC-16校驗字節的步驟如下:
(1) 16位CRC寄存器置成FFFFH
(2)第一個8位數據與CRC寄存器低8位進行異或運算,結果放入CRC寄存器;
(3) CRC寄存器向右移一位,HSB填零,檢查LSB ;
(4)(若LSB為0 ):重復3,再右移一位。(若LSB為1 ):CRC寄存器與oxA001進行異或運算;
(5)重復3和4直至完成8次移位,完成8位字節的處理;
(6)報文的下一個字節重復2至5步,直至全部字節處理完畢
(7) CRC寄存器的最終值為CRC值;
(8)把CRC值放入信息時,高8位和低8位應分開放置。
CRC碼生成流程圖如圖2 .2所示:

評論