李鵬,徐凱,陳魁
(上海新時(shí)達(dá)機(jī)器人有限公司,上海 201801)
基于SocketCan的機(jī)器人焊接控制系統(tǒng)研究
李鵬,徐凱,陳魁
(上海新時(shí)達(dá)機(jī)器人有限公司,上海 201801)
在基于實(shí)時(shí)Linux的開放式機(jī)器人控制系統(tǒng)下,引入SocketCan為機(jī)器人焊接功能包提供了一個(gè)簡(jiǎn)單易用、便于集成的焊機(jī)通訊、控制接口,通過(guò)USB轉(zhuǎn)CAN實(shí)現(xiàn)了簡(jiǎn)單、可靠的通訊物理層,此焊機(jī)控制方式既解決了IO控制接線復(fù)雜問(wèn)題,又能有效替代Canopen或Devicenet等總線控制方式,降低成本。采用此方式進(jìn)行實(shí)焊,焊接工藝穩(wěn)定,焊縫質(zhì)量較好。
SocketCan;工業(yè)機(jī)器人;USB;開放式
目前隨著中國(guó)人口“紅利”的逐步消失,生產(chǎn)力成本上升以及產(chǎn)業(yè)結(jié)構(gòu)升級(jí)的需要,機(jī)器人代替人工成為了發(fā)展趨勢(shì)。焊接機(jī)器人因其可替代人工進(jìn)行危險(xiǎn)作業(yè),同時(shí)可大大提高焊接的速度,保障焊接質(zhì)量,從而在工業(yè)機(jī)器人的應(yīng)用中占據(jù)了很大的比重。
目前焊接機(jī)器人主控單元與焊機(jī)之間的通訊方式主要有兩種:IO控制,總線控制。IO控制依靠數(shù)字IO來(lái)控制焊接的開關(guān),依靠模擬量來(lái)控制焊接的電流,IO控制無(wú)法進(jìn)行高級(jí)焊接功能控制。而采用總線控制方式則可以簡(jiǎn)化接線,同時(shí)可以在機(jī)器人控制器與焊機(jī)之間靈活進(jìn)行控制與狀態(tài)信息的交互。目前焊接中采用較多的現(xiàn)場(chǎng)總線協(xié)議有Canoepn[1],Devicenet[2]等,但是采用標(biāo)準(zhǔn)現(xiàn)場(chǎng)總線需要在控制器側(cè)增加總線主站模塊,焊機(jī)側(cè)增加總線從站模塊,會(huì)對(duì)應(yīng)增加成本。
CAN(controller area network)即控制器局域網(wǎng)是國(guó)際上應(yīng)用最為廣泛的總線之一,具有高速率、高抗電磁干擾性的特點(diǎn),非常適合作為機(jī)器人控制器與焊機(jī)之間的底層通訊方式。而嵌入式實(shí)時(shí)Linux系統(tǒng)由于其代碼開放、易于移植、開發(fā)資源豐富、具有硬實(shí)時(shí)的特點(diǎn),非常適合作為機(jī)器人控制器的操作系統(tǒng)[3]。這樣就需要在Linux系統(tǒng)下實(shí)現(xiàn)焊機(jī)CAN通訊的驅(qū)動(dòng),傳統(tǒng)實(shí)現(xiàn)方式是在Linux下開發(fā)CAN的字符設(shè)備,但是這樣提供的功能比較少,而且需要上層開發(fā)用戶熟悉硬件操作,無(wú)法形成統(tǒng)一的接口標(biāo)準(zhǔn)。SocketCan[4]則是Linux系統(tǒng)下CAN協(xié)議的一種實(shí)現(xiàn)方法,其目的是底層提供各種CAN設(shè)備驅(qū)動(dòng),中間跨接TCP/IP網(wǎng)絡(luò)層,在頂層提供像以太網(wǎng)一樣的Socket通訊接口,讓熟悉網(wǎng)絡(luò)編程的開發(fā)人員更容易使其應(yīng)用程序在Linux下訪問(wèn)CAN總線。一個(gè)基本的焊接機(jī)器人控制系統(tǒng)如圖1所示,示教器與控制器之間通過(guò)以太網(wǎng)連接,焊機(jī)與控制器之間通過(guò)CAN總線連接,但是作為應(yīng)用開發(fā)工程師來(lái)說(shuō),這兩者的接口都是采用普通的Socket接口,即可實(shí)現(xiàn)與示教器和焊機(jī)的通訊。
圖1 焊接機(jī)器人控制系統(tǒng)Fig.1 Welding robot control system
1.1焊機(jī)SocketCan通訊架
基于SocketCan的焊機(jī)通訊架構(gòu)如圖2所示,分為5個(gè)層次:應(yīng)用層、協(xié)議層、網(wǎng)絡(luò)層、驅(qū)動(dòng)層和硬件層。在硬件層我們沒有采用成本較高的CAN專用芯片,如SJA1000,而是采用了低成本的STM32芯片,利用其上的自帶的CAN通訊接口以及USB通訊接口,通過(guò)程序控制在芯片內(nèi)實(shí)現(xiàn)USB轉(zhuǎn)CAN功能,同時(shí)在Linux系統(tǒng)下開發(fā)對(duì)應(yīng)的USB驅(qū)動(dòng)程序,配合完成USB轉(zhuǎn)CAN的功能。驅(qū)動(dòng)層則是SocketCan工程下針對(duì)不同的CAN硬件設(shè)備而提供不同的驅(qū)動(dòng)模塊,網(wǎng)絡(luò)層直接使用Linux系統(tǒng)下的網(wǎng)絡(luò)層,在協(xié)議層Socket-Can則注冊(cè)增加了“CAN_ISOTP”,“CAN_GW”,“CAN_RAW”以及“CAN_BCM”幾種SocketCan的協(xié)議,協(xié)議層、網(wǎng)絡(luò)層、驅(qū)動(dòng)層共同構(gòu)成了SocketCan的完整通訊方案。在應(yīng)用層開發(fā)者調(diào)用通用的Socket接口,可以實(shí)現(xiàn)對(duì)CAN數(shù)據(jù)的發(fā)送與讀取,此處基于Socket接口針對(duì)不同型號(hào)的焊機(jī),定義不同的焊機(jī)控制協(xié)議解析模塊,然后為頂層的焊接功能包提供統(tǒng)一的焊接控制接口,實(shí)際使用時(shí)可根據(jù)現(xiàn)場(chǎng)實(shí)際使用的焊機(jī),用戶從機(jī)器人示教器上選擇焊機(jī)型號(hào),自動(dòng)選擇對(duì)應(yīng)的焊機(jī)協(xié)議解析模塊,實(shí)現(xiàn)對(duì)實(shí)際焊機(jī)的通訊控制。
圖2 焊機(jī)SocketCan通訊架構(gòu)Fig.2 Socketcan communication framework
1.2焊機(jī)通訊數(shù)據(jù)幀
在SocketCan焊機(jī)通訊系統(tǒng)中,總共存在3種數(shù)據(jù)幀:網(wǎng)絡(luò)幀(skb_frame)、CAN數(shù)據(jù)幀(can_frame)、USB轉(zhuǎn)CAN數(shù)據(jù)幀(usb_can frame)。用戶在應(yīng)用層調(diào)用Socket后,接收與發(fā)送的是網(wǎng)絡(luò)幀,而在硬件層CAN接口處接收和發(fā)送的是CAN數(shù)據(jù)幀。在驅(qū)動(dòng)層與硬件層之間需要對(duì)這兩種數(shù)據(jù)幀進(jìn)行互相轉(zhuǎn)化,同時(shí)需要在數(shù)據(jù)幀中增加Linux下驅(qū)動(dòng)層與硬件層之間交互的特殊數(shù)據(jù),如通訊方式及參數(shù)配置等信息,這樣就需要我們自定義一種中間數(shù)據(jù)幀,成為USB轉(zhuǎn)CAN數(shù)據(jù)幀,此數(shù)據(jù)幀的結(jié)構(gòu)如圖3所示。
圖3 Usb_can數(shù)據(jù)幀結(jié)構(gòu)Fig.3 Usb_can data frme structure
此數(shù)據(jù)幀依據(jù)USB通訊協(xié)議,最大數(shù)據(jù)容量為64 bytes,整個(gè)數(shù)據(jù)幀分為3個(gè)段。第1段為幀頭4 bytes,第1字節(jié)是CAN數(shù)據(jù)包計(jì)數(shù),由于USB每次傳送數(shù)據(jù)包為64字節(jié),我們盡量提高通訊效率,會(huì)在此數(shù)據(jù)幀內(nèi)最大限度地填充消息,這樣驅(qū)動(dòng)層接收到后,依據(jù)此字節(jié)判斷此數(shù)據(jù)幀內(nèi)含有多少個(gè)消息,后3字節(jié)預(yù)留。第2段為消息幀頭11 bytes,其中第1字節(jié)描述此消息的類型,第2字節(jié)描述此消息的長(zhǎng)度,后9個(gè)字節(jié)為預(yù)留。第3段為具體的消息,最大49字節(jié),是對(duì)應(yīng)消息類型的實(shí)際消息數(shù)據(jù)。此數(shù)據(jù)幀內(nèi)可以排列多個(gè)消息,消息個(gè)數(shù)就是此幀頭的第1個(gè)字節(jié)。對(duì)于skb_frame和can_frame,是標(biāo)準(zhǔn)格式,再此不加贅述。
1.3USB轉(zhuǎn)CAN的實(shí)現(xiàn)
硬件層采用STM32芯片,內(nèi)部實(shí)現(xiàn)USB轉(zhuǎn)CAN,其實(shí)現(xiàn)原理如圖4所示。
圖4 STM32內(nèi)USB轉(zhuǎn)CAN實(shí)現(xiàn)原理Fig.4 Realizarion principle of USB to CAN in STM32
圖4內(nèi)部設(shè)有發(fā)送和接收數(shù)據(jù)緩沖區(qū),用來(lái)匹配USB與CAN總線通訊響應(yīng)和速率的不一致。Linux下驅(qū)動(dòng)層發(fā)送USB數(shù)據(jù)后,產(chǎn)生USB中斷,接收usb_can frame,解包成CAN數(shù)據(jù)幀后放入發(fā)送緩沖區(qū),CAN接口接收到外部數(shù)據(jù)后產(chǎn)生CAN中斷,接收CAN frame,打包成usb_can frame后放入接收數(shù)據(jù)幀。主循環(huán)程序則不斷輪詢2個(gè)數(shù)據(jù)緩沖區(qū),只要發(fā)送數(shù)據(jù)緩沖區(qū)內(nèi)有未下發(fā)數(shù)據(jù)就調(diào)用CAN發(fā)送,只要接收數(shù)據(jù)緩沖區(qū)內(nèi)有未上傳數(shù)據(jù)就調(diào)用USB批量上傳函數(shù)上傳數(shù)據(jù),此過(guò)程的發(fā)送流程如圖5所示。
圖5 USB,CAN發(fā)送流程圖Fig.5 Flowchart of USB and CAN data sending
發(fā)送數(shù)據(jù)隊(duì)列和接收數(shù)據(jù)隊(duì)列采用FIFO機(jī)制,通過(guò)Put放入新數(shù)據(jù),通過(guò)Get獲取最先放入而未曾發(fā)送的數(shù)據(jù),Get指針跟隨Put指針而不會(huì)超過(guò),2個(gè)指針到達(dá)隊(duì)列尾后自動(dòng)跳轉(zhuǎn)到隊(duì)列頭部,形成環(huán)形隊(duì)列。同時(shí)接受數(shù)據(jù)隊(duì)列為了提高數(shù)據(jù)傳輸?shù)男?,采用?dòng)態(tài)裝入機(jī)制,即隊(duì)列每個(gè)幀最大64字節(jié),內(nèi)部可以自動(dòng)適應(yīng)裝載最大量的消息,消息格式見圖3。發(fā)送與接收數(shù)據(jù)隊(duì)列結(jié)構(gòu)見圖6。
圖6 發(fā)送與接收數(shù)據(jù)隊(duì)列結(jié)構(gòu)Fig.6 Data queue structure of receiving and sending
機(jī)器人控制器采用開放式的控制架構(gòu),如圖7所示,硬件平臺(tái)采用X86架構(gòu)為機(jī)器人各種任務(wù),尤其是多軸運(yùn)動(dòng)學(xué)算法提供了強(qiáng)大的運(yùn)算和調(diào)度平臺(tái),實(shí)時(shí)Linux系統(tǒng)可以設(shè)置最小1 ms的實(shí)時(shí)任務(wù),實(shí)時(shí)抖動(dòng)最大40 μs,使用Codesys[5]軟件平臺(tái)既提供了一個(gè)軟PLC的編程環(huán)境,又為機(jī)器人各種應(yīng)用功能提供了方便的集成接口,用戶可以在Codesys的集成開發(fā)環(huán)境下進(jìn)行方便的二次開發(fā)及各種周邊設(shè)備的配置。在此架構(gòu)下,我們可以方便地將基于SocketCan的焊機(jī)控制系統(tǒng)進(jìn)行集成,SocketCan的驅(qū)動(dòng)及協(xié)議模塊直接運(yùn)行在Linux系統(tǒng)下,圖2中的焊機(jī)解析協(xié)議可以通過(guò)Codesys提供的IoDriver功能,將其編譯打包成Codesys下可識(shí)別的不同類型的焊機(jī)設(shè)備,開發(fā)者可以在Codesys的集成開發(fā)環(huán)境下靈活配置焊機(jī),映射焊機(jī)控制及狀態(tài)字,供焊接功能包調(diào)用。機(jī)器人控制系統(tǒng)下SocketCan通訊控制的啟動(dòng)、運(yùn)行流程如圖8所示。
圖7 開放式機(jī)器人控制器架構(gòu)Fig.7 Architecture of open robot controler
圖8 機(jī)器人控制系統(tǒng)下焊接控制順序Fig.8 Welding control sequence under robot control system
使用本文所述的基于SocketCan的機(jī)器人焊接控制系統(tǒng),應(yīng)用在新時(shí)達(dá)機(jī)器人控制器SRM1000上,控制新時(shí)達(dá)SA1400機(jī)型,配置奧太焊機(jī)進(jìn)行實(shí)際焊接應(yīng)用。圖9所示為Codesys下奧太焊機(jī)設(shè)備的配置及控制狀態(tài)字映射。在電梯門板線焊接應(yīng)用中,實(shí)際焊接效果良好。
圖9 Codesys下奧太焊機(jī)的集成使用Fig.9 Integration and application of AOTAI welding machine in codesys
本文提出了一種基于SocketCan的機(jī)器人控制系統(tǒng),通過(guò)USB轉(zhuǎn)CAN實(shí)現(xiàn)了通訊硬件層,在嵌入式實(shí)時(shí)Linux系統(tǒng)下移植了SocketCan的通訊模型,將焊機(jī)設(shè)備通過(guò)Socket接口,有效集成到了機(jī)器人開放式控制器的Codesys平臺(tái)下。最后通過(guò)實(shí)際焊機(jī)應(yīng)用驗(yàn)證了此控制系統(tǒng)的可行性。通過(guò)應(yīng)用證明此焊接控制方式具有易于集成、通訊可靠、成本低的優(yōu)勢(shì)。
[1] 蘇國(guó)火,宋永倫,趙雙喜.基于CANopen現(xiàn)場(chǎng)總線的分布式控制及應(yīng)用[J].電焊機(jī),2014(11):128-131.
[2] 譚甲凡,黎建輝.基于DeviceNet網(wǎng)絡(luò)的焊接生產(chǎn)線改造方案[J].南華大學(xué)學(xué)報(bào)(自然科學(xué)版),2007,21(3):37-40.
[3] 鄭天江,宋孫浩,楊亞威,等.基于實(shí)時(shí)Linux的網(wǎng)絡(luò)化開放式運(yùn)動(dòng)控制器研究[J].制造業(yè)自動(dòng)化,2015,37(10):36-39.
[4]The SocketCan Wikipedia Website.https://de.wikipedia.org/ wiki/SocketCAN.
[5] 王麗麗,康存鋒,馬春敏,等.基于Codesys的嵌入式軟PLC系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代制造工程,2007(3):54-56.
Research of Robot Welding Control System Based on SocketCan
LI Peng,XU Kai,CHEN Kui
(Shanghai STEP Robotics Corporation,Shanghai 201801,China)
Under open robot control system based on real-time Linux,SocketCan was introduced as an easy-to-use,integratable communication and control interface for robot welding.An easy and reliable physical layer was realized by using USB to CAN.This welding control method resolved the disadvantage of complex circuit caused by IO control and provided an efficient replacement of traditional fieldbus as Canopen or Devicenet with lower price. The practical wielding process with this method prove that the system work stable and reliable.
SocketCan;industrial robot;USB;open
TP242.2
A
2015-09-26
修改稿日期:2016-01-25
上海市科技人才計(jì)劃項(xiàng)目(14QB1404600)
李鵬(1982-),男,博士研究生,工程師,Email:lipeng@steprobots.com