王力宇,曹其新,董 忠
(上海交通大學(xué) 機(jī)械系統(tǒng)與振動國家重點(diǎn)實(shí)驗(yàn)室,上海 200240)
1001-2265(2017)10-0074-03
10.13462/j.cnki.mmtamt.2017.10.018
2016-11-30;
2017-01-09
國家自然科學(xué)基金資助項(xiàng)目(61673261)
王力宇(1991—),男,江蘇蘇州人,上海交通大學(xué)碩士研究生,研究方向?yàn)闄C(jī)器人運(yùn)動控制,(E-mail)wangliyu@sjtu.edu.cn。
基于EtherCAT總線的工業(yè)機(jī)器人控制系統(tǒng)設(shè)計(jì)*
王力宇,曹其新,董 忠
(上海交通大學(xué) 機(jī)械系統(tǒng)與振動國家重點(diǎn)實(shí)驗(yàn)室,上海 200240)
為了簡化工業(yè)機(jī)器人控制系統(tǒng)結(jié)構(gòu),降低工業(yè)機(jī)器人運(yùn)動控制器硬件成本,提出了一種基于x86平臺和EtherCAT總線的實(shí)時工業(yè)機(jī)器人運(yùn)動控制器設(shè)計(jì)。借助Windows可擴(kuò)展內(nèi)核的特性,使用RTX64作為控制系統(tǒng)的實(shí)時內(nèi)核,并使用Kingstar Motion作為EtherCAT主站,搭建了一個工業(yè)機(jī)器人的實(shí)時控制系統(tǒng)。使用共享內(nèi)存實(shí)現(xiàn)實(shí)時系統(tǒng)和Windows內(nèi)核的數(shù)據(jù)交換,實(shí)現(xiàn)了在Windows內(nèi)核中對實(shí)時內(nèi)核程序的指令下達(dá)和狀態(tài)查看,在RTX內(nèi)核中使用多線程方式實(shí)現(xiàn)了對驅(qū)動器多種不同類型數(shù)據(jù)的處理。實(shí)驗(yàn)表明,該控制系統(tǒng)具有良好的實(shí)時響應(yīng)性能,能夠滿足工業(yè)機(jī)器人的控制要求。
EtherCAT;機(jī)器人控制系統(tǒng);實(shí)時系統(tǒng)
控制器是工業(yè)機(jī)器人的核心部件之一。在工業(yè)機(jī)器人發(fā)展早期,由于通用處理器性能較差,通常在使用通用處理器+運(yùn)動控制卡的架構(gòu),在通用處理器上實(shí)現(xiàn)HMI功能,在運(yùn)動控制卡上實(shí)現(xiàn)多軸插補(bǔ)和運(yùn)動控制功能[1]。而隨著通用處理器性能的加強(qiáng),尤其是多核CPU的廣泛應(yīng)用,現(xiàn)在使用普通工控PC也可以實(shí)現(xiàn)很好的實(shí)時性[2],尤其是隨著EtherCAT總線的使用和大量支持EtherCAT協(xié)議的驅(qū)動器的推出,使用工控機(jī)+普通網(wǎng)線即可實(shí)現(xiàn)對機(jī)器人電機(jī)的控制,省略了以往控制系統(tǒng)中的PCI卡和數(shù)/模轉(zhuǎn)化模塊,大大簡化了系統(tǒng)的結(jié)構(gòu),也有助于提高系統(tǒng)的穩(wěn)定性[3]。
EtherCAT是最初由德國Beckhoff公司研發(fā)的一款實(shí)時工業(yè)以太網(wǎng)技術(shù)。它使用了“飛速傳輸”(Processing on the Fly)技術(shù)[4]來解決工業(yè)以太網(wǎng)中數(shù)據(jù)幀較短,數(shù)據(jù)頻率較高導(dǎo)致的帶寬利用率低的問題。它具有傳輸速率快,傳輸延時小,系統(tǒng)結(jié)構(gòu)簡單清晰等特點(diǎn)。
EtherCAT控制系統(tǒng)由主站和從站兩部分組成,EtherCAT主站可以使用普通工控機(jī)和以太網(wǎng)卡,從站使用專門的芯片實(shí)現(xiàn)數(shù)據(jù)處理。為了保證主站響應(yīng)速度,EtherCAT主站通常運(yùn)行在實(shí)時內(nèi)核之上。
本文主要介紹基于RTX64[6]和Kingstar Motion[7]EtherCAT主站的實(shí)時系統(tǒng)搭建。在同一臺工控機(jī)上實(shí)現(xiàn)了HMI程序和實(shí)時控制程序,降低了硬件成本。同時使用多線程方式處理實(shí)時程序,提高實(shí)時系統(tǒng)的響應(yīng)性能。
我們的控制對象為一臺四軸碼垛機(jī)器人,它包含四個SANMOTION三相伺服電機(jī)及其配套的SANMOTION Advanced R系列驅(qū)動器。我們使用一臺處理器為Intel Celeron J1900的工控機(jī)作為其運(yùn)動控制器。由于使用了EtherCAT總線控制,因此控制器與各驅(qū)動器之間可以直接通過網(wǎng)線連接。其硬件結(jié)構(gòu)如圖1所示。
圖1 控制系統(tǒng)硬件結(jié)構(gòu)
我們使用IntervalZero公司的Kingstar Motion作為我們的EtherCAT主站,該EtherCAT主站運(yùn)行于該公司的RTX64實(shí)時系統(tǒng)中。RTX64使用內(nèi)核擴(kuò)展技術(shù)在硬件抽象層實(shí)現(xiàn)對Windows內(nèi)核的擴(kuò)展,從而可以使實(shí)時系統(tǒng)和Windows系統(tǒng)運(yùn)行于同一臺工控機(jī)上[8]。
控制系統(tǒng)軟件部分由HMI(Human Machine Interface,人機(jī)接口)和實(shí)時控制程序兩部分組成, HMI運(yùn)行于Windows 7 Embedded Standard系統(tǒng)中,實(shí)時控制程序運(yùn)行于RTX64內(nèi)核中,程序結(jié)構(gòu)如圖2所示。
圖2 控制系統(tǒng)軟件結(jié)構(gòu)
通過內(nèi)核擴(kuò)展技術(shù),對于多核處理器,我們可以讓RTX64程序和Windows程序分別運(yùn)行在不同的CPU核心上,兩者之間互不影響。我們使用的Celeron J1900共有4個CPU核心,我們將其中兩個核心分配給Windows,兩個核心分配給RTX64,使用共享內(nèi)存來交換數(shù)據(jù)。
我們在共享空間中分配了控制變量和狀態(tài)變量兩塊區(qū)域,HMI程序?qū)⒖刂浦噶顚懭氲娇刂谱兞績?nèi)存空間,然后實(shí)時控制程序根據(jù)這些控制指令進(jìn)行相應(yīng)的控制。同時,實(shí)時控制程序?qū)?dāng)前的各軸運(yùn)動狀態(tài)寫入到狀態(tài)變內(nèi)存空間,HMI程序可以通過讀取該狀態(tài)變量實(shí)現(xiàn)對當(dāng)前機(jī)器人運(yùn)動狀態(tài)的監(jiān)控。
圖3 共享內(nèi)存結(jié)構(gòu)
2.1 實(shí)時系統(tǒng)控制流程
我們使用的驅(qū)動器使用CoE(CANopen over EtherCAT)的通訊指令格式。CoE是對EtherCAT總線命令的一層封裝,它以類似CANopen的方式通過EtherCAT總線發(fā)送和接收PDO(Process Data Object,過程數(shù)據(jù)對象)和SDO(Service Data Object,服務(wù)數(shù)據(jù)對象)數(shù)據(jù)[4]。因此,在控制系統(tǒng)中,針對這兩種數(shù)據(jù)類型的不同特點(diǎn),我們需要使用不同的數(shù)據(jù)處理方式。
在實(shí)時系統(tǒng)中,我們建立了三個線程,一個主線程,一個SDO服務(wù)程序和一個PDO定時中斷程序,如圖4所示。除此之外,EtherCAT主站還會建立一個EtherCAT通訊進(jìn)程,它運(yùn)行于RTX64的實(shí)時TCP/IP棧上。
圖4 實(shí)時系統(tǒng)程序執(zhí)行流程
主線程首先配置、啟動EtherCAT,從共享內(nèi)存空間中讀入HMI設(shè)置的參數(shù)并同時反饋狀態(tài)變量到HMI程序顯示,同時它也是另外兩個RTX64線程的入口程序。
SDO數(shù)據(jù)是那些需要給驅(qū)動器發(fā)送讀取指令它才返回值的數(shù)據(jù),通常,SDO數(shù)據(jù)讀取比較慢。并且SDO查詢指令發(fā)送后需要等待驅(qū)動器返回,而等待的時間是不確定的,所以SDO查詢指令不能嚴(yán)格保證實(shí)時性。因此,我們創(chuàng)建了一個循環(huán)線程來處理SDO數(shù)據(jù),該線程使用輪詢的方式不停地查詢SDO數(shù)據(jù)狀態(tài)。為了防止SDO查詢數(shù)據(jù)占據(jù)太多EtherCAT總線帶寬,我們在每次循環(huán)最后等待10ms。對于我們采用的驅(qū)動器,驅(qū)動器的IO值需要使用SDO方式來讀取和寫入,驅(qū)動器的一些參數(shù),例如驅(qū)動器的PID參數(shù)等,也可以使用SDO方式配置。另外,也可以使用SDO指令查看驅(qū)動器的狀態(tài),如是否已完成使能,是否有錯誤,驅(qū)動器錯誤代號等。
PDO數(shù)據(jù)是驅(qū)動器定時會向上位機(jī)發(fā)送以及上位機(jī)需要定時向驅(qū)動器發(fā)送的數(shù)據(jù)。它包含驅(qū)動器反饋的電機(jī)編碼器信息,電機(jī)力矩值以及上位機(jī)向驅(qū)動器發(fā)送的輸出力矩值等信息。PDO數(shù)據(jù)具有很強(qiáng)的實(shí)時性和周期性,因此,我們創(chuàng)建了一個定時中斷線程來處理PDO數(shù)據(jù)。除了獲取電機(jī)的位置和力矩等PDO數(shù)據(jù)外,該線程同時會根據(jù)目標(biāo)位置以及期望估計(jì)進(jìn)行運(yùn)動插補(bǔ),并根據(jù)當(dāng)前驅(qū)動器反饋的位置和力矩信息,使用PID算法計(jì)算出需要給驅(qū)動器發(fā)送的力矩值,下發(fā)給驅(qū)動器。
EtherCAT主站通訊進(jìn)程通過和實(shí)時TCP/IP棧交互,實(shí)現(xiàn)對網(wǎng)絡(luò)的實(shí)時控制。我們的PDO和SDO程序的指令都是通過該進(jìn)程與驅(qū)動器進(jìn)行數(shù)據(jù)交換的。
在該系統(tǒng)中,我們給RTX64內(nèi)核分配了兩個CPU核心,因此我們可以將不同的線程分配給不同的CPU來執(zhí)行。由于RTX64不支持根據(jù)CPU負(fù)載進(jìn)行自動CPU調(diào)度,因此我們需要手動為各線程分配CPU并調(diào)整各線程的優(yōu)先級。
在我們的程序中,運(yùn)動插補(bǔ)、PID計(jì)算、驅(qū)動器PDO數(shù)據(jù)讀寫都是由PDO定時中斷線程來處理,因此該線程計(jì)算量最大;主線程在初始化EtherCAT主站之后,主要負(fù)責(zé)與HMI線程之間的數(shù)據(jù)交換,因此工作量較??;SDO線程主要負(fù)責(zé)讀寫SDO數(shù)據(jù),因此工作量也較小,但是SDO讀寫指令不能保證實(shí)時性;EtherCAT通訊進(jìn)程為后臺服務(wù)進(jìn)程,我們的SDO線程和PDO線程的正常執(zhí)行都需要依賴該進(jìn)程的數(shù)據(jù)。
我們將PDO線程和主線程放在同一個CPU上,雖然在程序中這兩個線程運(yùn)算量較大,但由于這兩個線程的每個指令都能保證確定的執(zhí)行時間,具有很好的實(shí)時性,因此我們將這兩個線程放在同一個CPU上執(zhí)行。SDO線程和EtherCAT主站通訊進(jìn)程放在另一個CPU上,EtherCAT主站通訊進(jìn)程的優(yōu)先級高于SDO線程優(yōu)先級,因此SDO服務(wù)線程能被EtherCAT主站通訊線程中斷。主線程、PDO線程和SDO線程之間的數(shù)據(jù)使用互斥鎖來防止數(shù)據(jù)沖突。在EtherCAT主站初始化完成之后,我們設(shè)置主程序的更新周期設(shè)置為10ms,PDO定時中斷線程的更新周期設(shè)置成1ms,SDO線程在每次讀寫完之后的等待時間為10ms。因?yàn)樗欧\(yùn)算由PDO線程完成,因此機(jī)器人的伺服周期為1ms,機(jī)器人的指令更新周期為10ms。
2.2 HMI程序控制流程
HMI程序運(yùn)行于Windows內(nèi)核中,用戶通過該程序設(shè)置EtherCAT參數(shù),并給下位機(jī)發(fā)送運(yùn)動指令,一些上層的軌跡規(guī)劃等任務(wù)也在Windows內(nèi)核程序中完成,然后發(fā)送到RTX64程序中進(jìn)行進(jìn)一步的插補(bǔ)和控制。該程序同時也顯示一些機(jī)器人的當(dāng)前狀態(tài)供操作人員查看。其程序框圖如圖5所示。
圖5 HMI程序執(zhí)行流程
對于搭建的實(shí)時系統(tǒng),我們測試了它的任務(wù)切換延時和定時中斷響應(yīng)抖動[9],以及EtherCAT主站操作延時。
任務(wù)切換延時是指我們在同一CPU上運(yùn)行多任務(wù)時,當(dāng)任務(wù)A完成后,系統(tǒng)切換到任務(wù)B,該切換過程耗費(fèi)的時間。我們通過創(chuàng)建任務(wù)A和任務(wù)B兩個任務(wù),采集任務(wù)A結(jié)束的時間和任務(wù)B開始的時間,計(jì)算這之間的時間差,即為任務(wù)切換延時。
定時中斷響應(yīng)抖動是指定時中斷的周期誤差。我們創(chuàng)建一個周期為1ms的定時中斷,獲取每次進(jìn)入中斷的時間,則兩次進(jìn)入中斷的時間差即為實(shí)際定時中斷執(zhí)行時間,該時間與設(shè)定周期時間1ms之間的差值即為定時中斷響應(yīng)抖動。
而EtherCAT主站操作延時為數(shù)據(jù)從EtherCAT主站給出發(fā)送數(shù)據(jù)包指令到實(shí)際發(fā)出數(shù)據(jù)包之間的時間差。我們首先記錄EtherCAT主站發(fā)送數(shù)據(jù)包的時間,然后使用Wiresharp截獲EtherCAT主站發(fā)出的數(shù)據(jù)包,查看該數(shù)據(jù)包的時間戳,比較數(shù)據(jù)發(fā)出時間和截獲時間,即為EtherCAT主站操作延時。
我們對以上三個主要參數(shù)均進(jìn)行了2組,每組1000次的測試,測試結(jié)果如表 1所示。
表1 系統(tǒng)實(shí)時性測試結(jié)果
通過該測試結(jié)果可以看到該系統(tǒng)的這三個實(shí)時性參數(shù)的量級都是微秒級的,考慮到工業(yè)機(jī)器人的控制周期通常在1ms左右,因此這些延時完全可以滿足工業(yè)機(jī)器人的控制要求。
本文提出了一款基于x86工控機(jī)和EtherCAT總線的工業(yè)機(jī)器人運(yùn)動控制器,得益于x86處理器的通用性和強(qiáng)大性能,以及EtherCAT總線的良好的實(shí)時性能,我們可以將HMI和實(shí)時控制系統(tǒng)放在同一臺工控機(jī)上,簡化了控制系統(tǒng)同時降低成本。測試表明,該系統(tǒng)具有良好的實(shí)時性,可以滿足一般工業(yè)機(jī)器人的控制需求。
[1] 范永,譚民.機(jī)器人控制器的現(xiàn)狀及展望[J]. 機(jī)器人,1999,21(1):75-78.
[2] 陳光明. 基于Windows/RTX的碼垛機(jī)器人控制系統(tǒng)軟件設(shè)計(jì)[D].上海:上海交通大學(xué),2010.
[3] Fiebiger B, Munz H. KUKA KR C4 robot controller uses EtherCAT[J]. PC Control, 2014(1): 31-33.
[4] Beckhoff, G. EtherCAT: The Ethernet Fieldbus [Z]. EtherCAT Technology Group, 2006.
[5] 中華人民共和國國家質(zhì)量監(jiān)督檢驗(yàn)檢疫總局. GB/T 31230-2014 工業(yè)以太網(wǎng)現(xiàn)場總線EtherCAT [S]. 北京:中國標(biāo)準(zhǔn)出版社,2015.
[6] IntervalZero Inc. Overview RTOS: RTX64 and RTX[EB/OL]. https://www.intervalzero.com/products/rtx64-rtx/overview/,2016-11-29.
[7] Kingstar Inc. Soft motion control[EB/OL]. http://kingstar.com/products/soft-motion/,2016-11-29.
[8] 時未東,杜承烈,宋翠葉. Windows 實(shí)時擴(kuò)展技術(shù)研究[J]. 計(jì)算機(jī)工程,2011,37(23):63-65,68.
[9] 張曉龍. 實(shí)時系統(tǒng)性能測試方法的研究及應(yīng)用[D].北京:中國科學(xué)院大學(xué),2014.
[10] Cena G, Bertolotti I C, Scanzio S, et al. Evaluation of EtherCAT distributed clock performance[J]. IEEE Transactions on Industrial Informatics, 2012, 8(1): 20-29.
TheDesignofaReal-TimeIndustryRobotControllerBasedonEtherCAT
WANG Li-yu, CAO Qi-xin, DONG Zhong
(State key Laboratory of Mechanical System and Vibration, Shanghai Jiao Tong University, Shanghai 200240, China)
In order to simplify the structure of industrial robot control systems and cut down the hardware cost of the robot controller, the design of a real-time industrial robot controller is proposed based on x86 platform and EtherCAT. Thanks to the extensible kernel of Windows, the RTX64 real-time kernel is used as the extended kernel of the control system, and Kingstar Motion is then installed on the real time kernel as the EtherCAT master. The robot control system is then established on the system. It uses shared memory to exchange data with Windows, which enables the control and status feedback in the Windows kernel. Different types of data is dealt with in the RTX kernel using a multi-thread technology. Experiments show that this control system has a good real time response quality, which satisfies the requirement of the industrial robot.
EtherCAT; robot controller; real-time systems
TH165;TG659
A
(編輯李秀敏)