?
1 引言
現代工業自動控制系統朝智能化、網絡化和開放式結構的方向發展。實現不同種自動化設備之間通信是系統集成的關鍵。現場控制設備具有通信功能,便于構成工廠底層控制網絡。通信標準的公開、一致,使系統具備開放性,設備間具有互可操作性。功能塊與結構的規范化使相同功能的設備間具有互換性。控制功能下放到現場,使控制系統結構具備高度的分散性。利用現場總線技術,將符合同一標準的各種智能設備統一起來,徹底實現整個監測系統的分散控制,將提高系統集成度和數據傳輸效率、延長有效控制距離,并有利于提高系統抗干擾性能和擴展系統功能。
2 MODBUS協議簡介
MODBUS協議是應用于電子控制器的一種通訊語言。利用這個協議,控制器相互之間(例如485、232C等),控制器通過網絡(例如以太網)和其他設備之間進行通訊。它定義了一種控制器能認識使用的消息結構,而不管它們是通過何種網絡實現;描述的是控制器請求訪問其它設備的過程,如何回應來自其它設備的請求,以及怎樣偵錯并記錄;制定了消息域格局和內容的公共格式。MODBUS通訊規約按照主從設備來規定,如:主站一次可向一個或所有從站發送通信請求(或指令),主設備通過消息幀的地址域來選通從設備。主站發送的消息幀的內容和順序為:從站地址(設備地址)、功能碼、數據域(數據起始地址、數據量、數據內容)、CRC校驗碼;從站應答的信息內容和順序與主站信息幀基本相同。MODBUS除了定義通信功能碼之外,同時還定義了出錯碼,標志出錯信息。主站接收到錯誤碼后,根據錯誤的原因采取相應的措施。從站應答的數據內容依據功能碼進行響應。例如功能代碼03要求讀取從站設備中保持寄存器的內容。
2.1 MODBUS通訊傳輸模式
MODBUS通訊實現有兩種傳輸模式(ASCII或RTU),ABB公司的50系列PLC產品采用的是RTU(遠程終端單元)模式,在消息中的每個8Bit字節包含兩個4Bit的十六進制字符。這種方式的主要優點是:在同樣的波特率下,可比ASCII方式傳送更多的數據。
代碼系統:
· 8位二進制,十六進制數0...9,A...F。
· 消息中的每個8位域都是一個兩個十六進制字符組成每個字節的位。
· 1個起始位。
· 8個數據位,最小的有效位先發送。
· 1個奇偶校驗位,無校驗則無。
· 1個停止位(有校驗時),2個Bit(無校驗時)。
· 錯誤檢測域,CRC(循環冗長檢測)。
基于RS485的RTU模式MODBUS通訊格式為:
它定義了在這些網絡上連續傳輸的消息段的每一位,以及決定怎樣將信息打包成消息域和如何解碼。
2.2 MODBUS通訊查詢回應功能
(1)查詢 查詢消息中的功能代碼告之被選中的從設備要執行何種功能。數據段包含了從設備要執行功能的任何附加信息。例如功能代碼03是要求從設備讀保持寄存器并返回它們的內容。數據段必須包含要告之從設備的信息:從何寄存器開始讀及要讀的寄存器數量。錯誤檢測域為從設備提供了一種驗證消息內容是否正確的方法。
(2)回應 如果從設備產生一正常的回應,在回應消息中的功能代碼是在查詢消息中的功能代碼的回應。數據段包括了從設備收集的數據:象寄存器值或狀態。如果有錯誤發生,功能代碼將被修改以用于指出回應消息是錯誤的,同時數據段包含了描述此錯誤信息的代碼。錯誤檢測域允許主設備確認消息內容是否可用。
2.3 MODBUS消息幀
傳輸設備將MODBUS消息轉為有起點和終點的幀,這就允許接收的設備在消息起始處開始工作,讀地址分配信息,判斷哪一個變量被選中,判知何時信息已完成。部分消息也能偵測到錯誤并且能設置為返回結果。使用RTU模式,消息發送至少要以3.5個字符時間的停頓間隔開始。傳輸的第一個域是變量地址。可以使用的傳輸字符是十六進制的0...9,A...F。網絡設備不斷偵測網絡總線,包括停頓間隔時間內。當第一個域(地址域)接收到,每個設備都進行解碼以判斷是否發往自己的。在最后一個傳輸字符之后,一個至少3.5個字符時間的停頓標定了消息的結束。一個新的消息可在此停頓后開始。
整個消息幀必須作為一連續的流轉輸。如果在幀完成之前有超過1.5個字符時間的停頓時間,接收設備將刷新不完整的消息并假定下一字節是一個新消息的地址域。同樣地,如果一個新消息在小于3.5個字符時間內接著前個消息開始,接收的設備將認為它是前一消息的延續。這將導致一個錯誤,因為在最后的CRC域的值不可能是正確的。所以在通訊端口初始化時,Timer1定時間隔設置為500ms。
2.4 MODBUS的CRC校驗原理
CRC校驗實現 MODBUS通信的RTU模式中,規定信息幀的最后兩個字節用于傳遞CRC(Cyclic Redundancy Check,循環冗余校驗)碼。發送方將信息幀中地址域、功能碼、數據域的所有字節按規定的方式進行位移并進行XOR(異或)計算,即可得到2字節的CRC碼,并把包含CRC校驗碼的信息幀作為一連續的流進行傳輸。接收方在收到該信息幀時按同樣的方式進行計算,并將結果同收到的CRC碼的雙字節比較,如果一致就認為通信正確,否則認為通信有誤,從站將發送CRC錯誤應答。 RTU模式一般采用CRC-16冗余校驗方法,CRC-16的校驗碼為16位(2字節),其中低字節在前,高字節在后。實現CRC校驗有兩種方法:根據CRC校驗的定義公式進行計算,或者在程序中建立CRC校驗值表。在程序中使用前者更容易實現,這里需要使用CRC生成多項式X16+X15+X2+1。該多項式對應的碼組系數為18005H(16進制),去除最高位,對應的16位余數為8005H,即為CRC-16常數。CRC-16校驗過程如下:將CRC寄存器的每一位預置為1;把該寄存器值與8bit的信息幀數據進行異或,結果存于該寄存器;對CRC寄存器從高到低進行移位,在最高位(MSB)的位置補零,而最低位(LSB,移位后已經被移出CRC寄存器)如果為1,則把寄存器與CRC-16常數進行異或,否則如果LSB為零,則無需進行異或。重復上述的由高至低的移位8次,第一個8bit數據處理完畢,用此時寄存器的值與下一個8bit數據異或并進行如前一樣的8次移位。所有的字符處理完成后CRC寄存器內的值即為最終的CRC值。CRC添加到消息中時,先加入低字節,然后高字節。RTU模式的傳輸格式是1個數據位,2個停止位,沒有奇偶校驗位。通信數據安全由控制參數CRC-16碼保證。RTU接收設備依靠接收字符間經過的時間判斷一幀的開始,如果經過3個半的字符時間后仍然沒有新的字符或者沒有完成幀,接收設備就會放棄該幀,并設下一個字符為新一幀的開始,應用程序中,MODBUS協議通信由通訊子模塊實現,包含CRC-16計算與驗證、信息幀的編制和分解。
3 MODBUS通訊應用
下面是基于單片機MSP430F149為主芯片的高壓軟起動裝置液晶操控板,以此為例來說明MODBUS通訊的應用。MODBUS通訊主設備是DSP控制器,從設備是高壓軟起動裝置液晶操控板。
3.1 液晶操控板MODBUS通訊測試碼
/*****************************MODBUS通訊測試碼*****************************
召喚發送:
00 06
00 00 00 0C 1E 88
電壓、電流監測功能:
00 03
1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0D 8D
故障顯示功能:
00 02
18 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 20 34
*****************************MODBUS通訊測試碼*****************************/
2:對以上測試碼分別進行說明:
(1):召喚發送,參數設置功能:即控制器(DSP)與液晶屏(430)之間的通訊,是雙向的。
00 06
00 00 00 0C 1E 88
以上這段代碼是DSP傳給430的召喚代碼,含義(代碼從左到右)是:00:設備代碼。本系統中從設備只有高壓軟起動裝置液晶操控板一個設備,故設備代碼設置為00。06:功能碼,實現何種功能(本例中,06是雙向召喚發送功能,實現參數設置;03功能碼實現電壓、電流監測功能;02功能碼實現故障顯示功能)。00 00:是起始地址的高八位、低八位。00 0C:是DSP要求430回傳字節的個數(不包括設備代碼、功能碼、數據個數代碼、和校驗代碼),00是個數的高八位、0C是個數的低八位,0C是十六進制(轉換成十進制是12,12是從“起動時間、額定電流——備用 3”的個數),1E 88:是CRC校驗碼。當DSP給430傳
00 06
00 00 00 0C 1E 88
代碼時,430先將這8個字節保存到一個臨時數組RX[]中,然后分別對這8個字節進行判斷(1E 88是校驗查表得出來的代碼),如果檢驗正確,就會把要回傳給DSP的字節放到can_s[]數組中發出去,發送到DSP。以下代碼就是430接到
00 06
00 00 00 0C 1E 88
判斷正確后,回傳給DSP的代碼。00 06:是設備代碼、功能碼。18:回傳的字節個數(十六進制18就是十進制24)。B6 8F是回傳的校驗代碼。中間的24個字節(00),每兩個字節(00)分別對應“起動時間、額定電流——備用 3”,之所以全是00 ,是因為沒有設置參數,在液晶屏上設置參數,相應的高低位也跟著變化。
00 06
18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B6 8F
(2):電壓、電流監測功能:
00 03
1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 0D 8D
同理00 03 1C是設備地址、功能碼、DSP傳給430的數據個數(1C是十六進制,轉為十進制是28,包括1C在內,不包括00 03 0D 8D)。當430接收到
00 03
1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0D 8D
時,會將接收到的字節分別存到可用數組里,在利用可用數組進行顯示。
DSP下傳:
00(設備代碼)03(功能碼)1C(個數14*2) 00H(電壓高位)00L(電壓低位)
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
00H(備用12高位)00L(備用12低位)CRCH(高位)CRCL(低位)
(3):故障顯示功能:
00 02
18 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01
01 01 01 20 34
同理00 02 18是設備地址、功能碼、DSP傳給430的數據個數(18是十六進制,轉為十進制是24,包括18算內,不包括00 02 20 34)。當430接收到
00 02
18 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 20 34
時,會將接收到的字節分別存到可用數組里,在利用可用數組進行顯示。
DSP下傳:
00(設備代碼)02(功能碼)18(個數) 00(啟動中)。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。00(三相不平衡)CRCH(高位)CRCL(低位)
高壓軟起動裝置液晶操控板
高壓軟起動裝置液晶操控板
結語
由于MODBUS串行通訊技術有著實現簡便、系統集成費用低以及通訊距離遠(RS485/422)等特點,所以,在各個行業的應用也都很廣泛。MODBUS通訊在現場給調試人員及編程人員也帶來很大方便。因此,伴隨著多種通訊方式可以融合并存的發展趨勢,MODBUS串行通訊技術仍會保持廣泛的應用前景。
評論
查看更多