基于MODBUS總線(xiàn)伺服電機運動(dòng)控制方案
引言
現代工業(yè)自動(dòng)控制系統朝智能化、網(wǎng)絡(luò )化和開(kāi)放式結構的方向發(fā)展。利用現場(chǎng)總線(xiàn)技 術(shù),將符合同一標準的各種智能設備統一起來(lái),徹底實(shí)現整個(gè)監測系統的分散控制,將提高系統集成度和數據傳輸效率、延長(cháng)有效控制距離,并有利于提高系統抗干 擾性能和擴展系統功能。在運動(dòng)控制中,伺服電機以其響應速度快,控制精準等優(yōu)點(diǎn)以被更多的客戶(hù)所選用。如果把總線(xiàn)通信與伺服控制技術(shù)統一起來(lái),將推動(dòng)運動(dòng)控制技術(shù)以及設備遠程監控技術(shù)的發(fā)展。MODBUS作為一種通用的現場(chǎng)總線(xiàn),已經(jīng)得到很廣泛的應用,很多廠(chǎng)商PLC、智能I/O與A/D模塊具備MODBUS通訊接口。本文在闡述MODBUS通信協(xié)議的基礎上,構建了基于MODBUS的伺服電機運動(dòng)控制。
1 MODBUS總線(xiàn)控系統的技術(shù)特征
MODBUS通訊協(xié)議是一種工業(yè)現場(chǎng)總線(xiàn)通訊協(xié)議,它定義的是一種設備控制器可以識別和使用的信息幀結構,獨立于物理層介質(zhì),可以承載于多種網(wǎng)絡(luò )類(lèi)型 中。MODBUS協(xié)議把通信參與者規定為“主站”(Master)和“從站”(Slave),數據和信息的通信遵從主/從模式,當它應用于標準 MODBUS網(wǎng)絡(luò )時(shí),信息被直接傳送。MODBUS總線(xiàn)網(wǎng)絡(luò )中的各個(gè)智能設備通過(guò)異步串行總線(xiàn)連接起來(lái),只允許一個(gè)控制器作為主站,其余智能設備作為從 站。采用命令/應答的通信方式,主站發(fā)出請求,從站應答請求并送回數據或狀態(tài)信息,從站不能夠自己發(fā)送信息。MODBUS協(xié)議定義的各種信息幀格式,描述 了主站控制器訪(fǎng)問(wèn)從站設備的過(guò)程,規定從站怎樣做出應答響應,以及檢查和報告傳輸錯誤等。網(wǎng)絡(luò )中的每個(gè)從設備都必須分配給一個(gè)唯一的地址,只有符合地址要 求的從設備才會(huì )響應主設備發(fā)出的命令。
由于MODBUS總線(xiàn)系統開(kāi)發(fā)成本低,簡(jiǎn)單易用,并且現在已有很多工控器、PLC、顯示屏等都具有MODBUS通信接口,所以它已經(jīng)成為一種公認的通信標準。通過(guò)MODBUS總線(xiàn),可以很方便地將不同廠(chǎng)商生產(chǎn)的控制設備連成工業(yè)網(wǎng)絡(luò ),進(jìn)行集中監控。
MODBUS最初為PLC通信而設計,它通過(guò)24種總線(xiàn)命令實(shí)現PLC與外界的信息交換。這些總線(xiàn)命令對應的通信功能主要包括AI/AO、DI/DO的數據傳送。但不是很多MODBUS設備的控制只使用其中的幾條命令,對其余命令不做反應。
1.1 MODBUS通信格式
MODBUS協(xié)議定義了兩種傳輸模式,即RTU(Remote Terminal Unit)和ASCII。在RTU模式中,1字節的信息作為一個(gè)8位字符被發(fā)送,而在A(yíng)SCII模式中則作為兩個(gè)ASCII字符被發(fā)送,如發(fā)送字符 “20”時(shí),采用RTU模式時(shí)為“00100000”,然而采用ASCII模式則成為“00110010”+“00110000”(ASCII字符的 “2”和“0”)??梢?jiàn),發(fā)送同樣的數據時(shí),RTU模式的效率大約為ASCII模式的兩倍。一般來(lái)說(shuō),數據量少而且主要是文本時(shí)采用ASCII;通信數據 量大而且是二進(jìn)制數值時(shí),多采用RTU模式。
主站一次可向一個(gè)或所有從站發(fā)送通信請求(或指令),主設備通過(guò)消息幀的地址域來(lái)選通從設備。主站發(fā)送的消息幀的內容和順序為:從站地址、功能碼、 數據域(數據起始地址、數據量、數據內容)、CRC校驗碼;從站應答的信息內容和順序與主站信息幀基本相同。MODBUS除了定義通信功能碼之外,同時(shí)還 定義了出錯碼,標志出錯信息。主站接收到錯誤碼后,根據錯誤的原因采取相應的措施。從站應答的數據內容依據功能碼進(jìn)行響應,例如功能代碼03要求讀取從站 設備中保持寄存器的內容。
MODBUS部分功能碼
1.2 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í),先 加入低字節,然后高字節。
伺服電機相關(guān)文章:伺服電機工作原理
評論