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