一種基于MODBUS總線(xiàn)高壓軟起動(dòng)裝置液晶顯示界面的設計
1 引言
本文引用地址:http://dyxdggzs.com/article/166169.htm現代工業(yè)自動(dòng)控制系統朝智能化、網(wǎng)絡(luò )化和開(kāi)放式結構的方向發(fā)展。實(shí)現不同種自動(dòng)化設備之間通信是系統集成的關(guān)鍵?,F場(chǎng)控制設備具有通信功能,便于構成工廠(chǎng)底層控制網(wǎng)絡(luò )。通信標準的公開(kāi)、一致,使系統具備開(kāi)放性,設備間具有互可操作性。功能塊與結構的規范化使相同功能的設備間具有互換性??刂乒δ芟路诺浆F場(chǎng),使控制系統結構具備高度的分散性。利用現場(chǎng)總線(xiàn)技術(shù),將符合同一標準的各種智能設備統一起來(lái),徹底實(shí)現整個(gè)監測系統的分散控制,將提高系統集成度和數據傳輸效率、延長(cháng)有效控制距離,并有利于提高系統抗干擾性能和擴展系統功能。基于Modbus協(xié)議的串口通信是較常用的方式之一。
2 MODBUS協(xié)議簡(jiǎn)介
MODBUS協(xié)議具有偵錯能力強、數據傳輸量大、實(shí)時(shí)性好等特點(diǎn),因而成為目前自控領(lǐng)域使用非常廣泛的通訊語(yǔ)言。本文通過(guò)一個(gè)應用實(shí)例介紹如何利用單片機編程實(shí)現在線(xiàn)通訊ModBUS消息的工作過(guò)程,在可視化語(yǔ)言環(huán)境下完成地址域、功能代碼域、數據域的分配及CRC校驗。MODBUS協(xié)議是應用于電子控制器的一種通訊語(yǔ)言。利用這個(gè)協(xié)議,控制器相互之間(例如485、232C等),控制器通過(guò)網(wǎng)絡(luò )(例如以太網(wǎng))和其他設備之間進(jìn)行通訊。它定義了一種控制器能認識使用的消息結構,而不管它們是通過(guò)何種網(wǎng)絡(luò )實(shí)現;描述的是控制器請求訪(fǎng)問(wèn)其它設備的過(guò)程,如何回應來(lái)自其它設備的請求,以及怎樣偵錯并記錄;制定了消息域格局和內容的公共格式。MODBUS通訊規約按照主從設備來(lái)規定,如:主站一次可向一個(gè)或所有從站發(fā)送通信請求(或指令),主設備通過(guò)消息幀的地址域來(lái)選通從設備。主站發(fā)送的消息幀的內容和順序為:從站地址(設備地址)、功能碼、數據域(數據起始地址、數據量、數據內容)、CRC校驗碼;從站應答的信息內容和順序與主站信息幀基本相同。MODBUS除了定義通信功能碼之外,同時(shí)還定義了出錯碼,標志出錯信息。主站接收到錯誤碼后,根據錯誤的原因采取相應的措施。從站應答的數據內容依據功能碼進(jìn)行響應。例如功能代碼03要求讀取從站設備中保持寄存器的內容。
2.1 MODBUS通訊傳輸模式
MODBUS通訊實(shí)現有兩種傳輸模式(ASCII或RTU),ABB公司的50系列PLC產(chǎn)品采用的是RTU(遠程終端單元)模式,在消息中的每個(gè)8Bit字節包含兩個(gè)4Bit的十六進(jìn)制字符。這種方式的主要優(yōu)點(diǎn)是:在同樣的波特率下,可比ASCII方式傳送更多的數據。
代碼系統:
· 8位二進(jìn)制,十六進(jìn)制數0...9,A...F。
· 消息中的每個(gè)8位域都是一個(gè)兩個(gè)十六進(jìn)制字符組成每個(gè)字節的位。
· 1個(gè)起始位。
· 8個(gè)數據位,最小的有效位先發(fā)送。
· 1個(gè)奇偶校驗位,無(wú)校驗則無(wú)。
· 1個(gè)停止位(有校驗時(shí)),2個(gè)Bit(無(wú)校驗時(shí))。
· 錯誤檢測域,CRC(循環(huán)冗長(cháng)檢測)。
基于RS485的RTU模式MODBUS通訊格式為:
它定義了在這些網(wǎng)絡(luò )上連續傳輸的消息段的每一位,以及決定怎樣將信息打包成消息域和如何解碼。
2.2 MODBUS通訊查詢(xún)回應功能
?。?)查詢(xún) 查詢(xún)消息中的功能代碼告之被選中的從設備要執行何種功能。數據段包含了從設備要執行功能的任何附加信息。例如功能代碼03是要求從設備讀保持寄存器并返回它們的內容。數據段必須包含要告之從設備的信息:從何寄存器開(kāi)始讀及要讀的寄存器數量。錯誤檢測域為從設備提供了一種驗證消息內容是否正確的方法。
?。?)回應 如果從設備產(chǎn)生一正常的回應,在回應消息中的功能代碼是在查詢(xún)消息中的功能代碼的回應。數據段包括了從設備收集的數據:象寄存器值或狀態(tài)。如果有錯誤發(fā)生,功能代碼將被修改以用于指出回應消息是錯誤的,同時(shí)數據段包含了描述此錯誤信息的代碼。錯誤檢測域允許主設備確認消息內容是否可用。
2.3 MODBUS消息幀
傳輸設備將MODBUS消息轉為有起點(diǎn)和終點(diǎn)的幀,這就允許接收的設備在消息起始處開(kāi)始工作,讀地址分配信息,判斷哪一個(gè)變量被選中,判知何時(shí)信息已完成。部分消息也能偵測到錯誤并且能設置為返回結果。使用RTU模式,消息發(fā)送至少要以3.5個(gè)字符時(shí)間的停頓間隔開(kāi)始。傳輸的第一個(gè)域是變量地址??梢允褂玫膫鬏斪址鞘M(jìn)制的0...9,A...F。網(wǎng)絡(luò )設備不斷偵測網(wǎng)絡(luò )總線(xiàn),包括停頓間隔時(shí)間內。當第一個(gè)域(地址域)接收到,每個(gè)設備都進(jìn)行解碼以判斷是否發(fā)往自己的。在最后一個(gè)傳輸字符之后,一個(gè)至少3.5個(gè)字符時(shí)間的停頓標定了消息的結束。一個(gè)新的消息可在此停頓后開(kāi)始。
整個(gè)消息幀必須作為一連續的流轉輸。如果在幀完成之前有超過(guò)1.5個(gè)字符時(shí)間的停頓時(shí)間,接收設備將刷新不完整的消息并假定下一字節是一個(gè)新消息的地址域。同樣地,如果一個(gè)新消息在小于3.5個(gè)字符時(shí)間內接著(zhù)前個(gè)消息開(kāi)始,接收的設備將認為它是前一消息的延續。這將導致一個(gè)錯誤,因為在最后的CRC域的值不可能是正確的。所以在通訊端口初始化時(shí),Timer1定時(shí)間隔設置為500ms。
2.4 MODBUS的CRC校驗原理
CRC校驗實(shí)現 MODBUS通信的RTU模式中,規定信息幀的最后兩個(gè)字節用于傳遞CRC(Cyclic Redundancy Check,循環(huán)冗余校驗)碼。發(fā)送方將信息幀中地址域、功能碼、數據域的所有字節按規定的方式進(jìn)行位移并進(jìn)行XOR(異或)計算,即可得到2字節的CRC碼,并把包含CRC校驗碼的信息幀作為一連續的流進(jìn)行傳輸。接收方在收到該信息幀時(shí)按同樣的方式進(jìn)行計算,并將結果同收到的CRC碼的雙字節比較,如果一致就認為通信正確,否則認為通信有誤,從站將發(fā)送CRC錯誤應答。 RTU模式一般采用CRC-16冗余校驗方法,CRC-16的校驗碼為16位(2字節),其中低字節在前,高字節在后。實(shí)現CRC校驗有兩種方法:根據CRC校驗的定義公式進(jìn)行計算,或者在程序中建立CRC校驗值表。在程序中使用前者更容易實(shí)現,這里需要使用CRC生成多項式X16+X15+X2+1。該多項式對應的碼組系數為18005H(16進(jìn)制),去除最高位,對應的16位余數為8005H,即為CRC-16常數。CRC-16校驗過(guò)程如下:將CRC寄存器的每一位預置為1;把該寄存器值與8bit的信息幀數據進(jìn)行異或,結果存于該寄存器;對CRC寄存器從高到低進(jìn)行移位,在最高位(MSB)的位置補零,而最低位(LSB,移位后已經(jīng)被移出CRC寄存器)如果為1,則把寄存器與CRC-16常數進(jìn)行異或,否則如果LSB為零,則無(wú)需進(jìn)行異或。重復上述的由高至低的移位8次,第一個(gè)8bit數據處理完畢,用此時(shí)寄存器的值與下一個(gè)8bit數據異或并進(jìn)行如前一樣的8次移位。所有的字符處理完成后CRC寄存器內的值即為最終的CRC值。CRC添加到消息中時(shí),先加入低字節,然后高字節。RTU模式的傳輸格式是1個(gè)數據位,2個(gè)停止位,沒(méi)有奇偶校驗位。通信數據安全由控制參數CRC-16碼保證。RTU接收設備依靠接收字符間經(jīng)過(guò)的時(shí)間判斷一幀的開(kāi)始,如果經(jīng)過(guò)3個(gè)半的字符時(shí)間后仍然沒(méi)有新的字符或者沒(méi)有完成幀,接收設備就會(huì )放棄該幀,并設下一個(gè)字符為新一幀的開(kāi)始,應用程序中,MODBUS協(xié)議通信由通訊子模塊實(shí)現,包含CRC-16計算與驗證、信息幀的編制和分解。
評論