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