摘 要: 实时数据采集与通信子系统是工业机器人运动控制系统的基本环节,PMAC卡作为底层控制器在工业机器人运动控制中广泛应用。根据数据采集源、与上位机通信模式,对基于PMAC的数据采集方法进行分析,确定在线指令方式进行数据采集,定制了基于网口的开放通信模块。在实现过程中采用了软件模块化、多线程、定时器、双缓存等技术实现指令编码、数据采集与解码。测试结果证明了通信与采集子系统的稳定性和实时性。
关键词: PMAC;开放控制;数据采集;实时性;机器人
0 引言
在工业控制领域,实时数据采集是一个基本而且重要的环节,如何提高数据采集的实时性一直是工控技术人员所关心的问题[1]。多轴运动控制卡(Programmable Multi-Axis Controller,PMAC)集执行程序(运动程序和PLC程序)、数据采集、伺服环更新、资源管理等多个模块一起协同工作,在工业机器人的运动控制中得到广泛应用[2]。
1 基于PMAC的数据采集分析
PMAC通过对机器人关节的4路数字信号解码得到该关节的位置、速度、加速度等数据源,上位机采集这些数据进行运动学和动力学运算得到机器人实时的位置和运动信息。数据采集涉及数据采集源、通信模式、采集方法、数据解码、人机交互[3]等。
数据采集源指被采集的数据在卡上存储的对象,主要有PMAC缓冲区、寄存器、双端口RAM。
PMAC主卡与上位机之间的通信模式有104总线接口、USB2.0以太网口、RS232串口等。
结合通信模式和数据采集源,基于PMAC数据采集有双端口RAM、Gather功能寄存器、PLC程序M变量、在线指令等采集方法。基于双端口的数据采集从双端口RAM中采集数据,不需要经过通信口发送命令和等待响应时间,实时性较好。基于Gather功能的数据采集从缓冲区采集数据,需要使用PMAC的通信驱动和Gather类函数,适合于大量信息进行数据采集[4]。基于PLC程序和在线指令的数据采集从I/O及运动寄存器获取数据,需要使用PMAC的通信驱动和软件定时器。基于在线指令的数据采集可以实时单点采集,也可以循环采集,而且可以基于以太网口定义开放式通信接口,独立于PMAC驱动程序。
2 基于多线程技术和在线指令的实时数据采集
2.1 多线程技术
多线程编程技术应用于机器人控制,可在收发数据的同时进行数据的处理、状态切换、屏幕刷新等任务,提高程序的实时性和软件的整体性能[5]。本控制系统采用多线程技术实现,提高了数据采集的实时性,系统程序结构如图1所示。
2.2 数据采集的编码实现
本文基于在线指令进行数据采集,自定义通信接口。
2.2.1 开放式通讯接口
目前所见的基于PMAC的机器人开放式运动控制器都利用了Delta Tau公司提供的PComm32PRO通信驱动程序,限制了控制器的开放性。为了支持嵌入式实时操作系统的应用开发,采用C++设计了PMAC开放式网口通信服务,供上层服务通过socket调用,数据规范如下:
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 数据采集的编码实现
PMAC指令以及回传的运动参数都是字符串,需要进行指令编码和数据译码。
struct PMACFPV
//定义循环采集的速度和位置
{
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)
//关节位置译码
{
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("关节的位置译码结果是%s\n",PAP1);
//输出拼接结果
return PAP1;
free(AP1);//
free(AP2);//
free(PAP1);//
free(PAP2);//
}
在嵌入式应用环境中进行数据循环采集需要预防产生内存泄露的情况发生,优化内存资源。
2.3 控制系统平台构建与轨迹跟随测试
2.3.1 控制系统平台构建
MOTOMAN、SEIKO等均把基于PC的机器人控制器作为发展方向[6],主要形式有:
工控机+接口卡。接口卡不带处理器,将各关节运动数据送入工控机,经伺服程序计算得到伺服电机的控制量[7],这种方式构建的系统具有很高的灵活性和扩展性,但开发难度比较大。
工控机+运动控制卡。以DSP为核心的运动控制卡可以集多轴实时伺服运动控制于一卡,并有函数库供用户在工控机上构建所需的控制系统,工控机主要完成系统管理、状态监控、运动规划等上层任务[8]。
本文采用工控机+多轴运动控制卡(PMAC)作为机器人控制器,硬件原型如图2所示。
为了满足机器人控制实时性要求,工控机需要运行实时操作系统,如Windows CE等,或采用通用Windows操作系统+实时扩展环境RTX,可以利用Windows操作系统完备的软件开发环境和丰富的软件资源[6]。本控制器硬件采用研祥EC3-1711CLDNA工控机,其CPU是Genuine Intel(R)processor 600 MHz,内存为480 MB,存取速率为599 MHz,硬盘为80 GB,操作系统采用Windows XP+RTX。
2.3.2 系统测试
为验证控制平台和数据采集的有效性,采用两关节模拟工业机器人和静态PID进行测试。轨迹跟随测试的软件流程和测试结果如图3和图4所示,关节实时跟随位置如表1和2所示。
3 结论
本文从数据采集源、通信模式、采集方法等对基于PMAC的开放式数据采集系统进行对比分析,完成通信接口、指令编码数据解码等的模块化设计和封装,采用多线程技术优化性能。硬件平台的两关节机器人轨迹跟随测试的关节空间和笛卡尔运动空间的试验数据验证了控制系统及数据采集子系统的有效性。
参考文献
[1] 林延昌,鱼洋,沈跃.基于PMAC控制卡的机器人控制软件设计[J].计算机测量与控制,2005,13(8):854-857.
[2] 张东衡,徐秀林,张佳鸣.人工心脏瓣膜体外检测装置软件开发[J].计算机测量与控制,2008,16(8):1197-1198.
[3] 王进华,曾凌峰,张勤利.数字电视机顶盒人机交互组件的设计与实现[J].微型机与应用,2011,30(20):96-98.
[4] 郑存红,胡荣强,赵瑞峰,等.用Visual C++实现实时数据采集[J].计算机应用研究,2002,19(4):103-108.
[5] 曾欣.多线程机器人控制软件的设计[J].科技广场,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].上海交通大学学报,2003,37(5):724-728.
[8] 马琼雄,吴向磊,李琳,等.基于IPC的开放式工业机器人控制系统研究[J].机电产品开发与创新,2008,21(1):15-17.