現(xiàn)場總線運動控制模塊的設(shè)計及其在PLC系統(tǒng)中的應(yīng)用
運動控制模塊接收到工作指令后,開始進(jìn)行G代碼的解釋執(zhí)行任務(wù)。G代碼存放在SD卡中,主控制器集成FAT文件系統(tǒng),支持SD卡的文件讀寫。G代碼讀入后,逐行進(jìn)行第一遍掃描(即指令預(yù)處理),期間將注釋、空格、非法字符去除,小寫字符轉(zhuǎn)換成大寫,以方便解碼程序進(jìn)行識別。
經(jīng)過預(yù)處理的G代碼指令逐行送入G代碼解碼程序,解釋程序再逐字檢查其是否為G代碼的指令字符,若是,則提取關(guān)鍵字的后續(xù)數(shù)值,作為該指令的操作數(shù),將其提取出來。其中用到了ANSI C的標(biāo)準(zhǔn)庫函數(shù)sscanf( )(位于stdio.h中),可以方便地提取字符串中指定的信息,支持類正則表達(dá)式的格式字符串,非常靈活。同時因為使用了ANSI C的標(biāo)準(zhǔn)庫函數(shù),程序移植簡單。
以下是G代碼解碼程序的部分代碼:
/*遍歷整個s字符串,找到字符后,提取后續(xù)數(shù)字,并存入中間代碼中*/
本文引用地址:http://butianyuan.cn/article/152081.htm
其中,CurrentGMidCode是預(yù)定義的結(jié)構(gòu)體變量,用于保存每行G代碼提取出來的指令及其操作數(shù),結(jié)構(gòu)如下:
提取到每行G代碼的關(guān)鍵信息后進(jìn)行相關(guān)處理,計算出每行代碼的運動起止坐標(biāo),將其通過SPI總線發(fā)送至NC控制芯片,控制電機運動。
1.3.2 插補進(jìn)給
電機的插補運算、加減速和進(jìn)給控制,由一個獨立STM32微控制器完成,并稱為NC運動控制芯片。
目前市場上的運動控制芯片主要是日本和歐美公司的專用ASIC和各數(shù)控廠家自行開發(fā)的FPGA芯片,雖然性能優(yōu)越,但價格不低。相對于使用ASIC芯片或FPGA芯片,完成同樣的任務(wù)使用MCU方案,硬件生產(chǎn)成本和開發(fā)成本均具有明顯優(yōu)勢,當(dāng)STM32微控制器運行在其最高頻率為72 MHz下時,性能完全可以滿足中低端數(shù)控系統(tǒng)應(yīng)用的要求。
在三軸數(shù)控銑系統(tǒng)中,NC運動控制芯片需要實現(xiàn)三軸快速定位、二軸直線插補、二軸圓弧插補、三軸直線插補的功能。
插補是在組成軌跡的直線段或曲線段的起點和終點之間,按一定的算法進(jìn)行數(shù)據(jù)點的密化工作,以確定一些中間點,從而為軌跡控制的每一步提供逼近目標(biāo)。在本控制器中,選用逐點比較法作為基本的插補算法,具有算法簡單高效、進(jìn)給速度均勻的特點,同時支持三軸的直線插補[1],滿足本控制器對插補算法的要求。
逐點比較直線插補,就是執(zhí)行機構(gòu)每走一步都要和給定運動軌跡上相應(yīng)的坐標(biāo)值相比較,比較的結(jié)果稱為偏差函數(shù)F,根據(jù)偏差的正、負(fù)決定下一步的進(jìn)給方向。實質(zhì)上這是一種用階梯折線來逼近直線的一種算法,它與規(guī)定運動軌跡之間的最大誤差為1個脈沖當(dāng)量(每走1步移動的距離)。因此,只要把脈沖當(dāng)量設(shè)計得足夠小,就可以達(dá)到運動精度的要求[2]。
1.4 Modbus-RTU協(xié)議的實現(xiàn)
Modbus-RTU是Modicon公司開發(fā)的一種通信協(xié)議。它采用主從應(yīng)答方式工作,其規(guī)范已公布在互聯(lián)網(wǎng)上,是一種在工業(yè)領(lǐng)域被廣為應(yīng)用的真正開放的標(biāo)準(zhǔn)網(wǎng)絡(luò)通信協(xié)議。由于它具有免收許可費用,易于集成不同的設(shè)備、簡單易用、開發(fā)成本低、有著廣泛的知識資源支持等特點,已經(jīng)成為一種公認(rèn)的通用工業(yè)標(biāo)準(zhǔn)。有了這個標(biāo)準(zhǔn),不同廠商生產(chǎn)的控制設(shè)備可以連成工業(yè)網(wǎng)絡(luò),進(jìn)行集中監(jiān)控。Modbus PTU協(xié)議有2種傳輸模式:RTU模式和ASCII模式。其中RTU模式信息幀中的8 bit數(shù)據(jù)包括2個4 bit十六進(jìn)制字符,相對于ASCII模式,RTU模式表達(dá)相同的信息需要較少的位數(shù),且在相同通信速率下具有更大的數(shù)據(jù)流量。因此通常情況下,一般工業(yè)智能儀器儀表都是采用RTU模式的Modbus規(guī)約。
Modbus-RTU協(xié)議以幀為通信的基本單位,幀格式為:地址碼1 B;功能碼1 B;數(shù)據(jù)區(qū)N B;錯誤校驗2 B CRC碼。
本運動控制器在其RS-485接口上實現(xiàn)了Modbus-RTU協(xié)議,使用了當(dāng)今流行的免費開源協(xié)議棧FreeModbus-RTU,從而保證了可靠的通信、節(jié)約了開發(fā)成本。
FreeModbus是針對通用的Modbus協(xié)議棧在嵌入式系統(tǒng)中應(yīng)用的實現(xiàn),其遵循BSD開放源代碼協(xié)議,并可以免費用于商業(yè)用途,成熟可靠。移植FreeModbus到STM32處理器只需要少量資源,除了1個雙工USART外,只需要配置1個定時器進(jìn)行超時判斷即可。
評論