摘 要: 實(shí)時(shí)數(shù)據(jù)采集與通信子系統(tǒng)是工業(yè)機(jī)器人運(yùn)動(dòng)控制系統(tǒng)的基本環(huán)節(jié),PMAC卡作為底層控制器在工業(yè)機(jī)器人運(yùn)動(dòng)控制中廣泛應(yīng)用。根據(jù)數(shù)據(jù)采集源、與上位機(jī)通信模式,對(duì)基于PMAC的數(shù)據(jù)采集方法進(jìn)行分析,確定在線指令方式進(jìn)行數(shù)據(jù)采集,定制了基于網(wǎng)口的開放通信模塊。在實(shí)現(xiàn)過(guò)程中采用了軟件模塊化、多線程、定時(shí)器、雙緩存等技術(shù)實(shí)現(xiàn)指令編碼、數(shù)據(jù)采集與解碼。測(cè)試結(jié)果證明了通信與采集子系統(tǒng)的穩(wěn)定性和實(shí)時(shí)性。
關(guān)鍵詞: PMAC;開放控制;數(shù)據(jù)采集;實(shí)時(shí)性;機(jī)器人
0 引言
在工業(yè)控制領(lǐng)域,實(shí)時(shí)數(shù)據(jù)采集是一個(gè)基本而且重要的環(huán)節(jié),如何提高數(shù)據(jù)采集的實(shí)時(shí)性一直是工控技術(shù)人員所關(guān)心的問(wèn)題[1]。多軸運(yùn)動(dòng)控制卡(Programmable Multi-Axis Controller,PMAC)集執(zhí)行程序(運(yùn)動(dòng)程序和PLC程序)、數(shù)據(jù)采集、伺服環(huán)更新、資源管理等多個(gè)模塊一起協(xié)同工作,在工業(yè)機(jī)器人的運(yùn)動(dòng)控制中得到廣泛應(yīng)用[2]。
1 基于PMAC的數(shù)據(jù)采集分析
PMAC通過(guò)對(duì)機(jī)器人關(guān)節(jié)的4路數(shù)字信號(hào)解碼得到該關(guān)節(jié)的位置、速度、加速度等數(shù)據(jù)源,上位機(jī)采集這些數(shù)據(jù)進(jìn)行運(yùn)動(dòng)學(xué)和動(dòng)力學(xué)運(yùn)算得到機(jī)器人實(shí)時(shí)的位置和運(yùn)動(dòng)信息。數(shù)據(jù)采集涉及數(shù)據(jù)采集源、通信模式、采集方法、數(shù)據(jù)解碼、人機(jī)交互[3]等。
數(shù)據(jù)采集源指被采集的數(shù)據(jù)在卡上存儲(chǔ)的對(duì)象,主要有PMAC緩沖區(qū)、寄存器、雙端口RAM。
PMAC主卡與上位機(jī)之間的通信模式有104總線接口、USB2.0以太網(wǎng)口、RS232串口等。
結(jié)合通信模式和數(shù)據(jù)采集源,基于PMAC數(shù)據(jù)采集有雙端口RAM、Gather功能寄存器、PLC程序M變量、在線指令等采集方法。基于雙端口的數(shù)據(jù)采集從雙端口RAM中采集數(shù)據(jù),不需要經(jīng)過(guò)通信口發(fā)送命令和等待響應(yīng)時(shí)間,實(shí)時(shí)性較好?;贕ather功能的數(shù)據(jù)采集從緩沖區(qū)采集數(shù)據(jù),需要使用PMAC的通信驅(qū)動(dòng)和Gather類函數(shù),適合于大量信息進(jìn)行數(shù)據(jù)采集[4]?;赑LC程序和在線指令的數(shù)據(jù)采集從I/O及運(yùn)動(dòng)寄存器獲取數(shù)據(jù),需要使用PMAC的通信驅(qū)動(dòng)和軟件定時(shí)器。基于在線指令的數(shù)據(jù)采集可以實(shí)時(shí)單點(diǎn)采集,也可以循環(huán)采集,而且可以基于以太網(wǎng)口定義開放式通信接口,獨(dú)立于PMAC驅(qū)動(dòng)程序。
2 基于多線程技術(shù)和在線指令的實(shí)時(shí)數(shù)據(jù)采集
2.1 多線程技術(shù)
多線程編程技術(shù)應(yīng)用于機(jī)器人控制,可在收發(fā)數(shù)據(jù)的同時(shí)進(jìn)行數(shù)據(jù)的處理、狀態(tài)切換、屏幕刷新等任務(wù),提高程序的實(shí)時(shí)性和軟件的整體性能[5]。本控制系統(tǒng)采用多線程技術(shù)實(shí)現(xiàn),提高了數(shù)據(jù)采集的實(shí)時(shí)性,系統(tǒng)程序結(jié)構(gòu)如圖1所示。
2.2 數(shù)據(jù)采集的編碼實(shí)現(xiàn)
本文基于在線指令進(jìn)行數(shù)據(jù)采集,自定義通信接口。
2.2.1 開放式通訊接口
目前所見的基于PMAC的機(jī)器人開放式運(yùn)動(dòng)控制器都利用了Delta Tau公司提供的PComm32PRO通信驅(qū)動(dòng)程序,限制了控制器的開放性。為了支持嵌入式實(shí)時(shí)操作系統(tǒng)的應(yīng)用開發(fā),采用C++設(shè)計(jì)了PMAC開放式網(wǎng)口通信服務(wù),供上層服務(wù)通過(guò)socket調(diào)用,數(shù)據(jù)規(guī)范如下:
typedef struct tagEthernetCmd
{
BYTE RequestType;
BYTE Request;
WORD wValue;
WORD wIndex;
WORD wLength;
BYTE bData[1492];
}ETHERNETCMD,*PETHERNETCMD;
PMAC卡IP地址是:192.6.94.5:1025。
2.2.2 數(shù)據(jù)采集的編碼實(shí)現(xiàn)
PMAC指令以及回傳的運(yùn)動(dòng)參數(shù)都是字符串,需要進(jìn)行指令編碼和數(shù)據(jù)譯碼。
struct PMACFPV
//定義循環(huán)采集的速度和位置
{
double FP1;
double FP2;
double FV1;
double FV2;
};
struct PMACFPV PMACPVF()
//周期采集
{
struct PMACFPV PV;
char AV1[255],AP1[255];
long NV1,NP1;
char AV2[255],AP2[255];
long NV2,NP2;
NV1=PmacGetResponseA(0,AV1,255,"#1V");
PV.FV1=atof(AV1)/20;//速度譯碼
NP1=PmacGetResponseA(0,AP1,255,"#1P");
PV.FP1=atof(AP1)/20;//角度譯碼
cout<<NV1<<endl;
cout<<AV1<<endl;
cout<<PV.FV1<<endl;
cout<<NP1<<endl;
cout<<AP1<<endl;
cout<<PV.FP1<<endl;
NV2=PmacGetResponseA(0,AV2,255,"#2V");
PV.FV2=atof(AV2)/20;//速度譯碼
NP2=PmacGetResponseA(0,AP2,255,"#2P");
PV.FP2=atof(AP2)/20;//角度譯碼
cout<<<<NV2<<endl;
cout<<AV2<<endl;
cout<<PV.FV2<<endl;
cout<<NP2<<endl;
cout<<AP2<<endl;
cout<<PV.FP2<<endl;
return PV;
}
char*PMACITOAP(double P1,double P2)
//關(guān)節(jié)位置譯碼
{
double IP1=0,IP2=0;
IP1=P1*20;
IP2=P2*20;
char*AP1=(char*)malloc(30*sizeof(char));
char*AP2=(char*)malloc(30*sizeof(char));
gcvt(IP1,15,AP1);
gcvt(IP2,15,AP2);
char*PAP1=(char*)malloc(sizeof(char)*100);
char*PAP2=(char*)malloc(sizeof(char)*50);
strcpy(PAP1,"X");
strcat_s(PAP1,100,AP1);
strcpy(PAP2,"Y");
strcat_s(PAP2,50,AP2);
strcat_s(PAP1,100,PAP2);
printf("關(guān)節(jié)的位置譯碼結(jié)果是%s\n",PAP1);
//輸出拼接結(jié)果
return PAP1;
free(AP1);//
free(AP2);//
free(PAP1);//
free(PAP2);//
}
在嵌入式應(yīng)用環(huán)境中進(jìn)行數(shù)據(jù)循環(huán)采集需要預(yù)防產(chǎn)生內(nèi)存泄露的情況發(fā)生,優(yōu)化內(nèi)存資源。
2.3 控制系統(tǒng)平臺(tái)構(gòu)建與軌跡跟隨測(cè)試
2.3.1 控制系統(tǒng)平臺(tái)構(gòu)建
MOTOMAN、SEIKO等均把基于PC的機(jī)器人控制器作為發(fā)展方向[6],主要形式有:
工控機(jī)+接口卡。接口卡不帶處理器,將各關(guān)節(jié)運(yùn)動(dòng)數(shù)據(jù)送入工控機(jī),經(jīng)伺服程序計(jì)算得到伺服電機(jī)的控制量[7],這種方式構(gòu)建的系統(tǒng)具有很高的靈活性和擴(kuò)展性,但開發(fā)難度比較大。
工控機(jī)+運(yùn)動(dòng)控制卡。以DSP為核心的運(yùn)動(dòng)控制卡可以集多軸實(shí)時(shí)伺服運(yùn)動(dòng)控制于一卡,并有函數(shù)庫(kù)供用戶在工控機(jī)上構(gòu)建所需的控制系統(tǒng),工控機(jī)主要完成系統(tǒng)管理、狀態(tài)監(jiān)控、運(yùn)動(dòng)規(guī)劃等上層任務(wù)[8]。
本文采用工控機(jī)+多軸運(yùn)動(dòng)控制卡(PMAC)作為機(jī)器人控制器,硬件原型如圖2所示。
為了滿足機(jī)器人控制實(shí)時(shí)性要求,工控機(jī)需要運(yùn)行實(shí)時(shí)操作系統(tǒng),如Windows CE等,或采用通用Windows操作系統(tǒng)+實(shí)時(shí)擴(kuò)展環(huán)境RTX,可以利用Windows操作系統(tǒng)完備的軟件開發(fā)環(huán)境和豐富的軟件資源[6]。本控制器硬件采用研祥EC3-1711CLDNA工控機(jī),其CPU是Genuine Intel(R)processor 600 MHz,內(nèi)存為480 MB,存取速率為599 MHz,硬盤為80 GB,操作系統(tǒng)采用Windows XP+RTX。
2.3.2 系統(tǒng)測(cè)試
為驗(yàn)證控制平臺(tái)和數(shù)據(jù)采集的有效性,采用兩關(guān)節(jié)模擬工業(yè)機(jī)器人和靜態(tài)PID進(jìn)行測(cè)試。軌跡跟隨測(cè)試的軟件流程和測(cè)試結(jié)果如圖3和圖4所示,關(guān)節(jié)實(shí)時(shí)跟隨位置如表1和2所示。
3 結(jié)論
本文從數(shù)據(jù)采集源、通信模式、采集方法等對(duì)基于PMAC的開放式數(shù)據(jù)采集系統(tǒng)進(jìn)行對(duì)比分析,完成通信接口、指令編碼數(shù)據(jù)解碼等的模塊化設(shè)計(jì)和封裝,采用多線程技術(shù)優(yōu)化性能。硬件平臺(tái)的兩關(guān)節(jié)機(jī)器人軌跡跟隨測(cè)試的關(guān)節(jié)空間和笛卡爾運(yùn)動(dòng)空間的試驗(yàn)數(shù)據(jù)驗(yàn)證了控制系統(tǒng)及數(shù)據(jù)采集子系統(tǒng)的有效性。
參考文獻(xiàn)
[1] 林延昌,魚洋,沈躍.基于PMAC控制卡的機(jī)器人控制軟件設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2005,13(8):854-857.
[2] 張東衡,徐秀林,張佳鳴.人工心臟瓣膜體外檢測(cè)裝置軟件開發(fā)[J].計(jì)算機(jī)測(cè)量與控制,2008,16(8):1197-1198.
[3] 王進(jìn)華,曾凌峰,張勤利.數(shù)字電視機(jī)頂盒人機(jī)交互組件的設(shè)計(jì)與實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,2011,30(20):96-98.
[4] 鄭存紅,胡榮強(qiáng),趙瑞峰,等.用Visual C++實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)采集[J].計(jì)算機(jī)應(yīng)用研究,2002,19(4):103-108.
[5] 曾欣.多線程機(jī)器人控制軟件的設(shè)計(jì)[J].科技廣場(chǎng),2011(11):100-103.
[6] DELTA TAU Data Systems, Inc. PComm32PRO installation and troubleshooting procedures, Versions 10.45(PRO Suite 2.0)and later[S].
[7] 張廣立,付瑩,楊汝清,等.基于Windows NT的開放式機(jī)器人實(shí)時(shí)控制系統(tǒng)[J].上海交通大學(xué)學(xué)報(bào),2003,37(5):724-728.
[8] 馬瓊雄,吳向磊,李琳,等.基于IPC的開放式工業(yè)機(jī)器人控制系統(tǒng)研究[J].機(jī)電產(chǎn)品開發(fā)與創(chuàng)新,2008,21(1):15-17.