楊 嘯,李 迪,李 松2,王世勇
(1.華南理工大學(xué) 機(jī)械與汽車工程學(xué)院,廣東 廣州 510640;2.深圳市旗眾智能科技有限公司 運(yùn)動控制研發(fā)中心,廣東 深圳 518100)
“中國制造2025”對制造業(yè)提出了“數(shù)字化、網(wǎng)絡(luò)化、智能化”的新要求[1],運(yùn)動控制器作為制造業(yè)的核心技術(shù)之一,已從封閉式逐步發(fā)展為開放式[2]。開放式運(yùn)動控制器主要有三種架構(gòu):PC嵌入NC、NC嵌入PC、軟控制器[3]。在智能制造的新時期,軟控制器能充分利用PC機(jī)的性能優(yōu)勢,以模塊化軟件實(shí)現(xiàn)實(shí)時控制功能,具有可重構(gòu)、可擴(kuò)展、柔性化等特點(diǎn),發(fā)展前景良好,成為當(dāng)前的研究熱點(diǎn)之一,Brecher等[4]以典型廠商、研究項(xiàng)目為例詳細(xì)地介紹了開放式控制系統(tǒng)的發(fā)展與現(xiàn)狀;朱達(dá)宇等[5]在Linux平臺下采用RTLinux實(shí)時擴(kuò)展,構(gòu)建全軟件數(shù)控系統(tǒng);王普等[6]研究了基于RTX的全軟件數(shù)控系統(tǒng),分析測試了系統(tǒng)的實(shí)時性能,并構(gòu)建原型系統(tǒng);Yu等[7]分析了傳統(tǒng)數(shù)控系統(tǒng)的體系架構(gòu)與現(xiàn)場總線的特點(diǎn),采用組件技術(shù)設(shè)計(jì)了基于現(xiàn)場總線的開放式數(shù)控系統(tǒng);宋利利等[8]以三軸仿真轉(zhuǎn)臺為實(shí)際應(yīng)用背景,針對實(shí)時性、穩(wěn)定性的系統(tǒng)需求,設(shè)計(jì)了基于RTX的實(shí)時控制軟件;畢魯雁等[9]設(shè)計(jì)了基于RTX的工業(yè)機(jī)器人控制系統(tǒng),為機(jī)器人控制算法與功能擴(kuò)展提供了基礎(chǔ)平臺;Wu等[10]通過“PC+Windows實(shí)時擴(kuò)展”的方式探究了開放式軟數(shù)控系統(tǒng)的實(shí)施方案,并驗(yàn)證了系統(tǒng)的實(shí)時性與功能。
以上研究主要集中在32位平臺下的專用控制,對非標(biāo)設(shè)備控制研究較少。然而隨著控制需求的不斷提高,定制化產(chǎn)品、個性化設(shè)備需求的不斷出現(xiàn),研究基于高性能64位平臺的通用軟控制器具有一定的現(xiàn)實(shí)意義。
本文提出以“Windows7 + RTX64”為主控單元,結(jié)合EtherCAT (Ethernet for Control Automation Technology)總線協(xié)議,設(shè)計(jì)并實(shí)現(xiàn)了64位平臺下的通用開放式軟運(yùn)動控制平臺,并提供軟件開發(fā)工具包(Software Development Kit, SDK),可適用于不同的解決方案,為促進(jìn)控制器實(shí)時性、擴(kuò)展性、柔性化可配置的發(fā)展提供參考。
如圖1所示,軟運(yùn)動控制器是由實(shí)時任務(wù)與非實(shí)時任務(wù)組成的多任務(wù)混合系統(tǒng),采用“Windows 7 + RTX64 3.0”設(shè)計(jì)方案,在Windows下運(yùn)行非實(shí)時任務(wù),在RTX實(shí)時子系統(tǒng)(Real-time Subsystem,RTSS)中運(yùn)行實(shí)時任務(wù)。采用EtherCAT總線協(xié)議實(shí)現(xiàn)工控機(jī)與驅(qū)動器從站、I/O從站等硬件設(shè)備的通訊。
圖1 軟運(yùn)動控制器系統(tǒng)方案
作為通用運(yùn)動控制平臺,軟運(yùn)動控制器的模塊化功能主要包括:參數(shù)配置模塊、運(yùn)動控制模塊、安全控制模塊、從站控制模塊、反饋功能模塊。在不同的工藝需求中,可基于軟運(yùn)動控制器設(shè)計(jì)個性化的解決方案,實(shí)現(xiàn)運(yùn)動邏輯自定義,具有可配置、可重構(gòu)、可擴(kuò)展的優(yōu)點(diǎn),如圖2所示。
圖2 軟運(yùn)動控制器功能模塊圖
RTX64是Interval Zero公司開發(fā)的運(yùn)行在64位平臺下的實(shí)時子系統(tǒng)。RTX64通過擴(kuò)展Windows硬件抽象層(Hardware Abstraction Layer, HAL)實(shí)現(xiàn)從Windows隔離系統(tǒng)資源,獨(dú)占處理器,保證RTSS和Windows之間的中斷隔離,確保了實(shí)時指令、RTSS調(diào)度任務(wù)等只能在RTSS獨(dú)占的處理器上運(yùn)行[11]。
RTSS提供了基于優(yōu)先級的搶占式調(diào)度,線程優(yōu)先級可設(shè)置為0-127,共128個等級,其中127為最高優(yōu)先級。RTX線程的優(yōu)先級始終高于Windows線程[9]。同時,RTX擁有自己的時鐘和定時器服務(wù),時鐘精度為100 ns,確保實(shí)時任務(wù)的可靠性。RTSS可通過IPC對象實(shí)現(xiàn)與Windows系統(tǒng)間的數(shù)據(jù)交互,通過內(nèi)核同步機(jī)制保證數(shù)據(jù)同步與通訊。
RTX64作為Windows系統(tǒng)實(shí)時擴(kuò)展的首選方案,可充分利用Microsoft Visual Studio強(qiáng)大的開發(fā)、調(diào)試功能,降低開發(fā)難度、提高開發(fā)效率。
根據(jù)運(yùn)動控制器混合多任務(wù)的特性,采用模塊化設(shè)計(jì)思想,將事件觸發(fā)、對實(shí)時性要求較低的人機(jī)交互界面(Human Machine Interface, HMI)運(yùn)行在Windows應(yīng)用層,將周期性執(zhí)行、對實(shí)時性要求較高的運(yùn)動控制內(nèi)核、EtherCAT主站等運(yùn)行RTSS中。
如圖3所示,軟運(yùn)動控制器分層架構(gòu)從上至下依次為應(yīng)用層、數(shù)據(jù)交互層、實(shí)時控制層、設(shè)備層。
圖3 軟運(yùn)動控制器分層架構(gòu)方案
1)應(yīng)用層包含HMI與應(yīng)用程序接口(Application Programming Interface, API)。通過HMI可將API指令信息傳遞至數(shù)據(jù)交互層。
2)數(shù)據(jù)交互層包含動態(tài)鏈接庫(Dynamic Link Library, DLL)與三塊共享內(nèi)存空間:普通指令區(qū)、緊急指令區(qū)、反饋信息區(qū)。根據(jù)執(zhí)行指令的緊急與否設(shè)計(jì)了快慢雙緩沖的環(huán)形隊(duì)列方案:普通指令區(qū)存放非緊急指令,如參數(shù)設(shè)置、直線插補(bǔ);緊急指令區(qū)存放緊急指令,如急停、在線改變目標(biāo)位置;緊急指令區(qū)優(yōu)先級高于普通指令區(qū)。此外通過反饋信息區(qū),可監(jiān)控運(yùn)動控制器的狀態(tài),如實(shí)際位置、實(shí)際速度、IO狀態(tài)等。
3)實(shí)時控制層包含運(yùn)動內(nèi)核、EtherCAT主站、網(wǎng)卡驅(qū)動。運(yùn)動內(nèi)核的主要功能為軌跡規(guī)劃;EtherCAT主站負(fù)責(zé)運(yùn)動內(nèi)核與EtherCAT從站間的數(shù)據(jù)運(yùn)輸,如:驅(qū)動器從站的過程數(shù)據(jù)對象(Process Data Object, PDO)。具體流程為:運(yùn)動內(nèi)核將應(yīng)用層的運(yùn)動指令通過解析、預(yù)處理、插補(bǔ)計(jì)算等處理后,交由EtherCAT主站。主站將運(yùn)動內(nèi)核輸出數(shù)據(jù)打包,通過網(wǎng)卡發(fā)送下行數(shù)據(jù)幀至各個從站模塊。同時,主站也將從站上行數(shù)據(jù)幀反饋至運(yùn)動內(nèi)核。
4)設(shè)備層由網(wǎng)卡與從站模塊組成,在設(shè)計(jì)的運(yùn)動控制器中采用了總線型拓?fù)浣Y(jié)構(gòu),從站模塊包括:Driver從站、Box從站、I/O從站、D/A從站等。
分層架構(gòu)表明軟運(yùn)動控制器是由人機(jī)交互界面、運(yùn)動內(nèi)核、EtherCAT主站三個進(jìn)程組成。其中,人機(jī)交互界面運(yùn)行在windows系統(tǒng)中,運(yùn)動內(nèi)核、EtherCAT主站運(yùn)行在RTSS中。三者協(xié)同工作,通過使用共享內(nèi)存實(shí)現(xiàn)進(jìn)程間通訊,以互斥體確保進(jìn)程間交互數(shù)據(jù)的正確性,避免競爭條件的產(chǎn)生。
1)人機(jī)交互界面與運(yùn)動內(nèi)核間的通訊:
HMI根據(jù)指令時效性高低發(fā)送至不同的指令共享內(nèi)存。在運(yùn)動內(nèi)核解析任務(wù)中,緊急指令優(yōu)先于基本指令被解析。同時運(yùn)動內(nèi)核周期性地將實(shí)時運(yùn)動數(shù)據(jù)更新至反饋共享內(nèi)存,HMI采用循環(huán)掃描的方式獲取反饋信息,并對變動信息進(jìn)行更新顯示。
2)運(yùn)動內(nèi)核與EtherCAT主站間的通訊:
以數(shù)據(jù)結(jié)構(gòu)體的形式實(shí)現(xiàn)交互,在結(jié)構(gòu)體內(nèi)部設(shè)計(jì)兩塊環(huán)形緩沖區(qū)。運(yùn)動內(nèi)核將指令發(fā)送至環(huán)形緩沖區(qū)rbSend,同時將標(biāo)記bMCtoMaster置為真,EtherCAT主站收到標(biāo)記為真的消息后,取出運(yùn)動內(nèi)核指令,并將標(biāo)記還原。同樣的,運(yùn)動內(nèi)核收到EtherCAT主站反饋數(shù)據(jù)標(biāo)記后,從環(huán)形緩沖區(qū)rbRece中獲取反饋數(shù)據(jù),并將反饋標(biāo)記清零,如圖4所示。
圖4 通訊結(jié)構(gòu)體設(shè)計(jì)
環(huán)形緩沖區(qū)具有先進(jìn)先出(First In First Out, FIFO)的特點(diǎn),在多線程異步協(xié)作或生產(chǎn)者消費(fèi)者模型中被廣泛使用[12]。采用環(huán)形緩沖機(jī)制能有效解決數(shù)據(jù)生產(chǎn)與消費(fèi)速度不匹配的問題、增強(qiáng)多線程的并行性能[13]、減少“數(shù)據(jù)饑餓”、避免“內(nèi)存碎片”的產(chǎn)生。模板是C++泛型編程的重要思想,具有靈活性強(qiáng)、代碼復(fù)用的優(yōu)勢。采用模板類設(shè)計(jì)環(huán)形緩沖區(qū),在構(gòu)造函數(shù)內(nèi)進(jìn)行成員變量的初始化,在析構(gòu)函數(shù)內(nèi)清理成員變量,確保資源的自動管理。
軟運(yùn)動控制器將基于模板類的環(huán)形緩沖區(qū)與臨界資源結(jié)合使用,確保多線程間的數(shù)據(jù)保護(hù)與通訊,如圖5所示,CRingBuffer類實(shí)現(xiàn)了存放不同數(shù)據(jù)類型的環(huán)形緩沖區(qū),可從緩沖區(qū)內(nèi)添加、獲取一組或多組數(shù)據(jù),并根據(jù)實(shí)際需求更改緩沖區(qū)大小。
圖5 基于模板類的環(huán)形緩沖區(qū)UML類圖
軟運(yùn)動控制器采用了多線程流水線設(shè)計(jì)模式。由于控制器具有點(diǎn)位運(yùn)動與連續(xù)軌跡運(yùn)動兩種模式,故采用多生產(chǎn)者單消費(fèi)者模型,在該模型中,當(dāng)前線程既作為上游線程的消費(fèi)者,又作為下游線程的生產(chǎn)者。若當(dāng)前線程判斷存在以下情況之一:(1)上游生產(chǎn)者緩沖區(qū)為空;(2)下游消費(fèi)者緩沖區(qū)空間不足;(3)插補(bǔ)計(jì)算軸的引用計(jì)數(shù)非0,則放棄當(dāng)前線程執(zhí)行權(quán)。否則,當(dāng)前線程獲取上游緩沖區(qū)數(shù)據(jù),經(jīng)過解析、計(jì)算、封裝處理后,打包發(fā)送至下游緩沖區(qū)。此時本次線程調(diào)度完成,由運(yùn)行狀態(tài)切換至休眠狀態(tài),等待下一次被喚醒。
軟運(yùn)動控制器在實(shí)時內(nèi)核層采用多線程并行工作方式實(shí)現(xiàn)強(qiáng)實(shí)時任務(wù)的設(shè)計(jì)。運(yùn)動內(nèi)核作為控制器的核心,主要包括以下線程:主函數(shù)線程、上位機(jī)指令解析線程、連續(xù)軌跡預(yù)處理線程、插補(bǔ)計(jì)算線程、主站通訊線程、狀態(tài)反饋線程。根據(jù)各線程任務(wù)的緊急程度與重要性,設(shè)置了不同的調(diào)度周期與線程優(yōu)先級。此外,為保證下游數(shù)據(jù)冗余、避免數(shù)據(jù)饑餓,將線程在運(yùn)行狀態(tài)下設(shè)置為執(zhí)行不同的次數(shù)。如表1所示為運(yùn)動內(nèi)核線程調(diào)度方案。
表1 運(yùn)動內(nèi)核線程調(diào)度方案設(shè)計(jì)
主函數(shù)線程作為第一個被創(chuàng)建和最后一個退出的線程,負(fù)責(zé)啟動時軟控制器的初始化工作與退出時軟控制器的清理工作;上位機(jī)指令解析線程以動態(tài)的從站數(shù)量作為每周期掃描次數(shù),避免HMI指令流量過高造成指令阻塞。并將解析后的點(diǎn)位運(yùn)動發(fā)送至插補(bǔ)計(jì)算線程、連續(xù)軌跡運(yùn)動發(fā)送到預(yù)處理線程;連續(xù)軌跡預(yù)處理線程負(fù)責(zé)前瞻與小線段平滑過渡,將處理后的指令發(fā)送至插補(bǔ)計(jì)算線程;插補(bǔ)計(jì)算線程采用S型算法計(jì)算出每個周期內(nèi)的路徑規(guī)劃位置,并發(fā)送至主站通訊線程;主站通訊線程負(fù)責(zé)運(yùn)動控制內(nèi)核與EtherCAT主站間的數(shù)據(jù)交互。
EtherCAT是德國倍福自動化有限公司推出的實(shí)時工業(yè)以太網(wǎng)協(xié)議,具有實(shí)時性強(qiáng)、拓?fù)浣Y(jié)構(gòu)靈活、有效數(shù)據(jù)率高的優(yōu)點(diǎn)[14]。軟運(yùn)動控制器基于RTX64在Windows平臺下開發(fā)了EtherCAT主站程序,采用CoE(CANOpen over EtherCAT)協(xié)議用于伺服驅(qū)動器應(yīng)用層通訊,通訊周期為1ms,調(diào)度優(yōu)先級為127,控制模式為周期性同步位置模式(Cyclic Synchronous Position Mode, CSP)。
EtherCAT主、從站通過狀態(tài)機(jī)切換可進(jìn)入運(yùn)行(OP)狀態(tài)[15]。對伺服驅(qū)動器還需通過控制字切換至使能狀態(tài)。在運(yùn)行過程中,運(yùn)動內(nèi)核的主站通訊線程通過共享內(nèi)存實(shí)現(xiàn)與主站的通訊,如將接收過程數(shù)據(jù)對象(Receive Process Data Object, RxPDO)、IO輸出、模擬量輸出等指令信息發(fā)送給主站,并從主站獲取發(fā)送過程數(shù)據(jù)對象(Transport Process Data Object, TxPDO)、IO輸入、手搖脈沖發(fā)生器(Manual Pulse Generator, MPG)位置等。
控制器在運(yùn)行過程中事件流的執(zhí)行與數(shù)據(jù)流的傳遞過程,如圖6所示。具體工作流程可描述為:(1)啟動在windows系統(tǒng)下運(yùn)行的HMI后,HMI創(chuàng)建其與運(yùn)動內(nèi)核交互的共享內(nèi)存,并啟動運(yùn)行在RTX64系統(tǒng)下的運(yùn)動內(nèi)核;(2)運(yùn)動內(nèi)核創(chuàng)建其與EtherCAT主站通訊的共享內(nèi)存后,啟動運(yùn)行在RTX64系統(tǒng)下的EtherCAT主站,并進(jìn)行參數(shù)初始化;(3)在運(yùn)動內(nèi)核中,根據(jù)事件流的執(zhí)行順序依次創(chuàng)建指令解析線程、連續(xù)軌跡預(yù)處理線程、插補(bǔ)計(jì)算線程、主站通訊線程、反饋線程,并根據(jù)線程優(yōu)先級設(shè)定、掃描周期進(jìn)行線程調(diào)度;(4)進(jìn)入自動加工模式后,HMI根據(jù)加工工藝需求將指令發(fā)送至指令共享內(nèi)存。運(yùn)動內(nèi)核從指令共享內(nèi)存中獲取指令信息,并將軌跡規(guī)劃信息發(fā)送至EtherCAT主站。同時,運(yùn)動內(nèi)核也從EtherCAT主站獲取實(shí)時運(yùn)動信息發(fā)送至反饋共享內(nèi)存。HMI根據(jù)反饋共享內(nèi)存中的數(shù)據(jù)進(jìn)行狀態(tài)顯示;(5)自動加工完成后,依次關(guān)閉運(yùn)動內(nèi)核、EtherCAT主站、HMI,并完成必要的資源清理。
圖6 軟運(yùn)動控制器流程圖
為驗(yàn)證基于RTX64的軟運(yùn)動控制器的性能,設(shè)計(jì)了如圖7所示的硬件測試平臺,該平臺由占美GK1037工控機(jī)、高創(chuàng)CDHD-0032A系列高性能伺服驅(qū)動器與電機(jī)(共12組)、深圳市旗眾智能科技有限公司的I/O從站與box從站組成。圖8為基于軟運(yùn)動控制器開發(fā)的手機(jī)外殼3D打磨系統(tǒng)的上位機(jī)界面。使用該上位機(jī)進(jìn)行實(shí)驗(yàn)一與實(shí)驗(yàn)二的測試。
圖7 硬件測試平臺
圖8 手機(jī)外殼3D打磨系統(tǒng)的上位機(jī)界面
實(shí)驗(yàn)一:使用S型算法進(jìn)行單軸定長運(yùn)動,位移長度為6 000 pluse,起始速度、停止速度為0 pluse/ms,目標(biāo)速度為50 pluse/ms,加速度、減速度為1 pluse/ms2,加加速度、減加速度為0.01 pluse/ms3。
每個通訊周期內(nèi)的位置數(shù)據(jù),如圖9所示??梢娢恢们€的變化較為平滑,且運(yùn)動控制內(nèi)核路徑規(guī)劃位置與伺服驅(qū)動器反饋的實(shí)際運(yùn)行位置偏差較小,均保持在兩個周期的指令位置內(nèi),位置偏差控制在±0.01 mm以內(nèi)。表明軟運(yùn)動控制器具有較好的穩(wěn)定性,較高的位置控制精度。
圖9 路徑規(guī)劃位置與實(shí)際運(yùn)行位置信息
實(shí)驗(yàn)二:本實(shí)驗(yàn)通過在上位機(jī)的自動加工界面中編寫磨削加工文件進(jìn)行測試,實(shí)現(xiàn)手機(jī)外殼3D打磨系統(tǒng)的模擬效果??刂芚YZ軸進(jìn)行三軸聯(lián)動插補(bǔ),并以X軸、Y軸為主軸,分別實(shí)現(xiàn)對X0至X3軸、Y0至Y3軸的軸組控制;同時進(jìn)行一維直線運(yùn)動,即同時控制12個驅(qū)動器從站工作。
使用RTX64提供的Tracealyzer工具,可以監(jiān)控實(shí)時子系統(tǒng)中多線程切換、調(diào)度時序等,有助于分析程序中的資源沖突、性能瓶頸,提高系統(tǒng)的實(shí)時響應(yīng),如圖10所示。
圖10 線程調(diào)度時序圖
其中,PID-1015表示運(yùn)動內(nèi)核當(dāng)前進(jìn)程ID,T-64、T-69至T-73分別表示主函數(shù)線程、上位機(jī)指令解析線程、連續(xù)軌跡預(yù)處理線程、插補(bǔ)計(jì)算線程、主站通訊線程、狀態(tài)反饋線程的ID。11:36.317.000表示當(dāng)前時間為11分36秒317毫秒0微秒。
由圖10可知,各線程在運(yùn)行態(tài)的時間均在設(shè)定的調(diào)度周期內(nèi),且均有90%以上的時間冗余,證明軟運(yùn)動控制器具有較好的實(shí)時性與擴(kuò)展性。
本文采用“Windows7+RTX64”的設(shè)計(jì)方案,充分利用Windows系統(tǒng)資源豐富、界面友好的特性與RTX子系統(tǒng)強(qiáng)大的實(shí)時性能,設(shè)計(jì)并實(shí)現(xiàn)了開放性強(qiáng)、擴(kuò)展性高的通用軟運(yùn)動控制器。通過軟控制器控制所有的控制任務(wù),并通過測試平臺進(jìn)行驗(yàn)證,實(shí)驗(yàn)結(jié)果表明:
1)基于RTX64的軟運(yùn)動控制器具有較高的穩(wěn)定性與實(shí)時性,滿足同步精度與位置誤差精度的要求。
2)多線程調(diào)度時序符合設(shè)定的運(yùn)動控制任務(wù)拓?fù)湫蛄?,滿足了運(yùn)動控制功能與實(shí)時控制性能的需求,具有較好的開放性與拓展性。