薛浩宇,林福師,蒙國良
(上汽通用五菱汽車股份有限公司,廣西 柳州 545007)
控制器作為自動化系統(tǒng)的核心部件,在工業(yè)制造領(lǐng)域廣為應(yīng)用,現(xiàn)有的控制器類型比較多樣化,控制形式比較離散,可拓展性能較差。以汽車制造集成的生產(chǎn)線為例,控制器主要有以下幾種類型:(1)PLC控制器:專注于現(xiàn)場離散的設(shè)備的集成控制,成本昂貴;(2)機器人控制器:專注于單個機器人的控制;(3)專有設(shè)備控制器:用于特定設(shè)備的控制,如視覺、涂膠等。機器人控制器是工業(yè)機器人的核心部件之一,國外品牌工業(yè)機器人所采用的控制器基本上都是開發(fā)者基于自己的獨立結(jié)構(gòu)進行開發(fā)的,結(jié)構(gòu)封閉,開放性、可擴展性差,難以根據(jù)不同的生產(chǎn)需要進行定制化開發(fā)。
EtherCAT實時工業(yè)以太網(wǎng)技術(shù)以其網(wǎng)絡(luò)實時性高、數(shù)據(jù)傳輸率高、拓撲結(jié)構(gòu)靈活等優(yōu)點,在工業(yè)生產(chǎn)中得到廣泛應(yīng)用,能滿 足工業(yè)網(wǎng)絡(luò)傳輸?shù)膶崟r性和同步性要求。在支持EtherCAT總線的CODESYS平臺上開發(fā)機器人控制器系統(tǒng),能夠滿足開放性、可移植性和可擴展性的需求。采用Linux+Preempt-RT操作系統(tǒng),移植CODESYS平臺的Runtime組件與機器人算法,利用C++編寫共享內(nèi)存庫,實現(xiàn)CODESYS與機器人算法間PDO數(shù)據(jù)共享,再利用CODESYS的PLC編程功能,即可打造一個PLC+機器人控制器平臺,完成對機器人以及現(xiàn)場離散設(shè)備的集成控制。
本文中,采用x86架構(gòu)的工控機,安裝Debian9操作系統(tǒng),移植linux-4.19.152版本內(nèi)核、CODESYS平臺的Runtime組件與機器人算法程序,構(gòu)成一個同時支持PLC與機器人控制功能的可編程邏輯控制器。利用CODESYS平臺的可視化模組進行設(shè)計開發(fā)人機交互界面,機器人驅(qū)動器采用清能德創(chuàng)CoolDrive A8型號的驅(qū)動器。
工控機上使用CODESYS作為EtherCAT主站,下掛六軸機器人伺服驅(qū)動器。其中,六軸機器人伺服驅(qū)動器的PDO數(shù)據(jù),通過共享內(nèi)存的方式,在CODESYS與機器人算法程序間傳輸。同時CODESYS作為Modbus_TCP主站控制作為從站的機器人算法程序,系統(tǒng)架構(gòu)如圖1所示。
在工控機上安裝Debian9操作系統(tǒng),安裝完成后,隨即開始搭建系統(tǒng)環(huán)境:(1)配置網(wǎng)絡(luò)鏡像源,編輯source.list文件,將缺省的國外鏡像源配置成國內(nèi)鏡像源;(2)安裝調(diào)試及生產(chǎn)需要的軟件,例如vim、net-tools、rt-tests等;(3)配置網(wǎng)卡,本文的工控機有兩個網(wǎng)卡,故將其中一個網(wǎng)卡設(shè)置成靜態(tài)IP地址,用于連接內(nèi)網(wǎng),另一個網(wǎng)卡設(shè)置成采用DHCP協(xié)議自動獲取IP地址,用于連接外網(wǎng);(4)移除無用的軟件包,禁用一些不需要的服務(wù),加快系統(tǒng)啟動時間。
圖1 系統(tǒng)架構(gòu)圖示
Linux采用非搶占式的調(diào)度方法,其內(nèi)核允許在內(nèi)核態(tài),應(yīng)用程序運行在用戶態(tài),程序在內(nèi)核態(tài)和用戶態(tài)間切換需要消耗大量時間,無法滿足運動控制的實時性要求。可以通過安裝實時內(nèi)核補丁的方式改善Linux內(nèi)核實時性。Debian9推送的內(nèi)核是4.19.152版本,故下載內(nèi)核源碼時選擇linux-4.19.152版本的源碼以及與之相對應(yīng)的Preempt-RT補丁。進入內(nèi)核源碼目錄,執(zhí)行如下命令,安裝Preempt-RT補丁:
進入內(nèi)核配置界面:
如圖2所示,內(nèi)核配置界面最上方顯示的是引導(dǎo)說明以及不同字符所代表的含義,其余區(qū)域顯示的是不同的內(nèi)核配置選項。
圖2 內(nèi)核配置界面
如圖3所示,內(nèi)核配置中,支持設(shè)置不同的Preemption模式,以處理不同的工作負載。Preemption是指內(nèi)核為了處理更高優(yōu)先級的任務(wù),中斷正在執(zhí)行的任務(wù)的能力。在安裝了Preempt-RT補丁后,將會多出兩個preemption模式,為了搭建實時操作系統(tǒng),選擇Fully Preemptible Kernel (RT)模式。
圖3 Preemption模式選擇界面
實時性測試主要有兩點:模擬負載與實時性測試工具。模擬負載采用stress軟件,實時性測試工具選擇cyclictest軟件。經(jīng)過72小時不間斷測試,各核最大抖動不超過30 μs,實時性滿足運動控制的需求。
進程間通信的目的是實現(xiàn)計算機系統(tǒng)內(nèi)部相互協(xié)作的進程之間數(shù)據(jù)共享和信息交換,是實現(xiàn)進程間同步和互斥的一種重要手段。實時系統(tǒng)中常用的進程間通信方式包括管道、消息隊列、信號量和共享內(nèi)存等。
本文使用共享內(nèi)存的進程間通信方式實現(xiàn)CODESYS與機器人算法程序間PDO數(shù)據(jù)共享。PDO即為過程數(shù)據(jù)對象,其作用是傳輸實時短幀數(shù)據(jù)。PDO數(shù)據(jù)按照讀寫類型分為只讀PDO與讀寫PDO,只讀PDO是EtherCAT從站(即伺服驅(qū)動器)輸出給EtherCAT主站(即CODESYS)的數(shù)據(jù),讀寫PDO是EtherCAT主站輸出給EtherCAT從站的數(shù)據(jù)。機器人算法程序需要通過與伺服驅(qū)動器相互傳輸PDO數(shù)據(jù),從而對機器人本體進行控制。由于CODESYS與機器人算法程序同時作EtherCAT主站的情況下,EtherCAT總線無法正常工作,故將CODESYS設(shè)置為EtherCAT主站,機器人算法程序與CODESYS通過進程間通信的方式實現(xiàn)雙方數(shù)據(jù)傳輸。因為PDO數(shù)據(jù)傳輸需要較高的實時性,所以本文采用最高效的進程間通信機制,即共享內(nèi)存實現(xiàn)數(shù)據(jù)的傳輸?;静襟E如下:(1)伺服驅(qū)動器輸出的只讀PDO由CODESYS接收,然后寫入共享內(nèi)存區(qū)中,機器人算法程序訪問共享內(nèi)存區(qū)讀取只讀PDO;(2)機器人算法程序向共享內(nèi)存區(qū)中寫入讀寫PDO,CODESYS訪問共享內(nèi)存區(qū)讀取讀寫PDO,然后輸出給伺服驅(qū)動器。
采用共享內(nèi)存方式進行進程間通信,需要預(yù)先規(guī)定兩個進程寫入共享內(nèi)存區(qū)的數(shù)組的數(shù)據(jù)格式,本文中數(shù)組的格式定義如下:
利用CODESYS的開發(fā)工具包,使用C++編寫共享內(nèi)存功能源碼并封裝成功能塊,實現(xiàn)二次化開發(fā)。調(diào)用shm_open()函數(shù)創(chuàng)建一個新的共享對象或打開一個既有對象,并獲得一個上述對象的文件描述符:
int fd = shm_open(“PDODataExchange”,O_RDWR|O_CREAT,0777);
調(diào)用mmap()函數(shù)把共享內(nèi)存對象映射到進程的虛擬地址空間,該函數(shù)使用shm_open()函數(shù)返回的對象文件描述符作為參數(shù):
為了保證共享內(nèi)存對象能夠被受控訪問,需要使用IPC信號量,信號量的本質(zhì)是計數(shù)器,如果受保護的資源是可用的,那么信號量的值為正數(shù);如果受保護的資源現(xiàn)不可用,那么信號量的值為0。調(diào)用semget()函數(shù)獲取IPC信號量標識符,作為參數(shù)指定對共享資源進行保護的IPC信號量的IPC關(guān)鍵字,為了保證CODESYS與機器人算法進程間的數(shù)據(jù)的同步性,需要創(chuàng)建兩個信號量:
伺服總共有三種控制方式,分別為轉(zhuǎn)矩控制、速度控制和位置控制。其中,位置控制是最常用的控制方式,一般是通過外部輸入的脈沖頻率來確定轉(zhuǎn)動速度的大小,通過脈沖的個數(shù)來確定轉(zhuǎn)動的角度,本文中,機器人伺服控制方式使用的就是位置控制,必需的只讀PDO有:(1)Status word狀態(tài)字,(2)Position actual value位置實際值,(3)Error code故障代碼,(4)Mode of operation display控制模式顯示;必需的讀寫PDO有:(1)Control word控制字,(2)Target position位置目標值,(3)Modes of operation控制模式設(shè)定。將所需PDO按照預(yù)先規(guī)定的格式定義編寫程序代碼,并封裝成共享內(nèi)存功能塊,調(diào)用實例如圖4所示。
圖4 共享內(nèi)存功能塊實例
連續(xù)運行機器人,監(jiān)控CODESYS編程軟件中的EtherCAT主站狀態(tài)(如圖5所示),未發(fā)現(xiàn)丟幀等異常狀態(tài),且機器人運行平滑無卡頓。
圖5 EtherCAT主站狀態(tài)監(jiān)控
在機器人運行期間,使用清能德創(chuàng)的調(diào)試軟件連接伺服驅(qū)動器,監(jiān)控數(shù)據(jù)狀態(tài),通過監(jiān)控到的數(shù)據(jù)曲線(如圖6所示)得知,EtherCAT主站周期穩(wěn)定。
圖6 伺服驅(qū)動器數(shù)據(jù)監(jiān)控
本文設(shè)計了一種基于CODESYS平臺的機器人控制器。以六軸工業(yè)機器人為控制對象,結(jié)合EtherCAT總線通信技術(shù)和共享內(nèi)存IPC通信方式,設(shè)計了一種同時具備PLC邏輯控制和機器人運動控制功能的控制器。該控制器有很好的開放性和可移植性,同時,僅僅是CODESYS和機器人算法程序雙方各新增一個共享內(nèi)存功能塊,代碼實現(xiàn)較為簡單,故還具備開發(fā)成本低、開發(fā)周期短以及兼容性好的優(yōu)勢。