Motoman机器人离线编程——MotocomES介绍

欢迎关注Jungle的Motoman机器人离线编程专栏系列文章:

Motoman机器人离线编程——Motocom32开发简介

Motoman机器人离线编程——Visio Studio环境配置

Motoman机器人离线编程——Motocom32库函数的使用与封装

Motoman机器人离线编程——Motocom32参考文献及注意事项

Motoman机器人离线编程——MotocomES介绍


在上一篇文章中(Motoman机器人离线编程——Motocom32参考文献及注意事项),Jungle在文末提到,涉及到单台计算机控制多个机器人时,Motocom32的库函数是不能实现的,而需要采用MOTOCOMES系列库函数。并且,在之前提到的所有功能,MOTOCOMES都能够实现,且实现起来更加简洁。

1.MOTOCOMES简介

如下图,在安装Motocom32时,MOTOCOMES组件也已经自动安装上了,包含Host Control ES软件和一个手册。

Motoman机器人离线编程——MotocomES介绍_第1张图片

 MOTOCOMES版本的Host Control ES与之前介绍的Host Control 32类似(如下图),用户同样可以结合该软件来配合开发测试应用程序。

Motoman机器人离线编程——MotocomES介绍_第2张图片

 手册与Motocom32版本的手册类似,介绍软件的安装、示例程序和各个库函数的使用方法说明:

Motoman机器人离线编程——MotocomES介绍_第3张图片

 

2.MOTOCOMES版本函数特点及举例

MOTOCOMES版本的库函数既然能够同时控制多个机器人运动当然也能够控制单个机器人运动。对比起来,MOTOCOMES版本的库函数自身已经完成了一次封装了,设计了诸多数据结构对“底层”进行封装,下面举个例子。

函数ESCartMove,查看手册,其功能是“Moves the robot to specified positions. (Type Cartesian Coordinates)”,即“在笛卡尔坐标系(直角坐标系)下,控制机器人运动到指定位置”。

函数声明为:

LONG ESCartMove(HANDLE handle, LONG moveType, ESCartMoveData moveData);

需要说明的是:

  • LONG:可以查到
typedef long LONG
  • HANDLE:通信句柄(typedef void *HANDLE)
  •  moveType:运动类型,通过查阅手册可以查到如下说明(三种方式分别为圆弧插补、直线插补和增量插补。)

Motoman机器人离线编程——MotocomES介绍_第4张图片

  • ESCartMoveData:同样查阅手册,发现它是一个结构体,并且该结构体里的成员也是结构体,手册里然后依次介绍了各个结构体的含义(这里篇幅过大,不再示意,大家可以查阅手册)。

Motoman机器人离线编程——MotocomES介绍_第5张图片

 

因此,根据手册中的讲解,Jungle设计了如下的函数,对该功能函数进行封装:

/**
* @function-命令机器人移动到指定位置
* @param iMoveData-指定机器人运动信息
*					double position[8]:指定机器人移动的目标位置
					double moveSpeed:指定机器人的移动速度(单位:%-MOVJ;mm/s-MOVL,IMOV;°/s-MOVL,IMOV)
					long moveType:指定机器人的运动类型:1-MOVJ;2-MOVL;3-IMOV增量
* @return 
* @author-Jungle
* @date-2019.1.23
*/
void Robot::moveToAppointedPoint(MoveDataInfo iMoveData)
{
	ESCartMoveData moveData;
	memset(&moveData, 0, sizeof(ESCartMoveData));

	long moveType = iMoveData.moveType;
	///机器人序号
	moveData.moveData.robotNo = 1;
	moveData.moveData.stationNo = 0;
	///速度分类:0-%(MOVJ);1-V(MOVL,IMOV);2-VR(MOVL,IMOV)
	moveData.moveData.speedType = 1;	
	moveData.moveData.speed = iMoveData.moveSpeed;
	///数据类型:16-基坐标系;17-机器人坐标系;18-工具坐标系;19-用户坐标系
	moveData.robotPos.dataType = 16;	
	moveData.robotPos.fig = 0;
	///工具号
	moveData.robotPos.toolNo = 0;
	///用户坐标系号
	moveData.robotPos.userFrameNo = 0;
	moveData.robotPos.exFig = 0;
	
	for(int i=0;i

其中,MoveDataInfo是Jungle自己设计的一个结构体:

///轨迹点结构体
struct MoveDataInfo
{
	//机器人移动的目标位置
	double position[8];
	//指定机器人的移动速度
	double moveSpeed;
	//机器人的运动类型:1-MOVJ;2-MOVL;3-IMOV增量
	long moveType;
};

在查阅手册的时候可以发现,MOTOCOMES版本的函数基本都会用到一些“官方内建的结构体”。这样使用起来就相对更方便了,用户在进行二次封装的时候接口可以更加简洁清晰。

3.控制多机器人

可以说官方在开发MOTOCOMES版本库函数的时候就考虑到了控制多机器人的场景,所以函数里也留有这样的接口。比如说上面那个ESCartMove函数的入口参数ESCartMoveData的成员里面,结构体ESMoveData有一个成员是robotNo,即机器人编号,范围可以是0,1~8. 通过编辑这个robotNo的值,可以控制不同机器人运动。

另一方面,可以采用其他方式控制多个机器人,除了上述方法外,还可以采用多线程控制(一个线程负责一个机器人)。采用多线程控制以外,除了关心机器人控制程序的逻辑以外,还需要考虑多线程相关的cases。


欢迎关注知乎专栏:Jungle是一个用Qt的工业Robot

欢迎关注Jungle的微信公众号:Jungle笔记

Motoman机器人离线编程——MotocomES介绍_第6张图片

 

你可能感兴趣的:(工业机器人)