一、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:运动类型,通过查阅手册可以查到如下说明(三种方式分别为圆弧插补、直线插补和增量插补。)
/**
* @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.user
moveData.robotPos.exFig = 0;
for(int i=0;i moveData.robotPos.axesData.axis[i] = iMoveData.position[i];
for(int i=0;i moveData.basePos.axis[i] = 0;
for(int i=0;i moveData.stationPos.axis[i] = 0;
long result = ESCartMove(handle,moveType,moveData);
///等待机器人运动到达该点
///略
}
其中,MoveDataInfo是Jungle自己设计的一个结构体:
///轨迹点结构体
struct MoveDataInfo
{
//机器人移动的目标位置
double position[8];
//指定机器人的移动速度
double moveSpeed;
//机器人的运动类型:1-MOVJ;2-MOVL;3-IMOV增量
long moveType;
};
在查阅手册的时候可以发现,MOTOCOMES版本的函数基本都会用到一些“在规定内建的结构体”。这样使用起来就相对更方便了,用户在进行二次封装的时候接口可以更加简洁清晰。