运动控制库的头文件和库文件在pilelibs目录下。头文件分别在robbase和bombax子目录。库文件(dll, lib)在bug子目录。
CMotionTime和CGtsPci类对以太网运动模块和PCI接口运动模块进行具体封装,操作方式基本与CRobMot类一样。
通常情况下,CRobMot类一般不单独使用,与CWorkDesk类一起使用。运动模块初始化有两种方法。PCI卡初始化方法如下:
CRobMot* pRob = new CGtsPci;
RV_ASSERT(pRob);
BOOL ret = pRob->Init(“C:\\Program Files\\tabx\\myinit.dat”, 0, 0, NULL);
参数1为运动模块参数配置文件,
参数2为运动框架框架类型,
参数3为控制模块的运行模式。
EtherCAT卡初始化方法如下:
CRobMot* pRob = new CMotionTime;
RV_ASSERT(pRob);
BOOL ret = pRob->Init(0,2, 0, NULL)
参数1为运动模块的ID,一般为0;参数2为运动模块型号;参数3为运动控制框架类型。
运动模块型号一般4轴卡为2, 6轴卡为3。
运动控制框架类型决定了CRobMot对象控制的运动轴总数。
宏定义 | 说明 | 可用轴号 | 轴数 |
---|---|---|---|
RM_FX | 未知运动框架 | 1-x | 用户设置 |
RM_F3 | 3轴运动框架,单作业位X,y,z三运动轴 | RM_AXIS_X RM_AXIS_Y RM_AXIS_Z |
3 |
RM_F3_2T | 3轴运动框架,双作业位X,y,z三运动轴 | RM_AXIS_X RM_AXIS_Y RM_AXIS_Z |
3 |
RM_F4_2T | 4轴,双工作位 | RM_AXIS_X RM_AXIS_Y RM_AXIS_Z RM_AXIS_Y2 |
4 |
RM_F4_1T_1R | 带旋转轴的单工作位 | RM_AXIS_X RM_AXIS_Y RM_AXIS_Z RM_AXIS_R |
4 |
RM_F6_1T_1R_1A | 6轴,单工作位,带旋转轴 | RM_AXIS_X RM_AXIS_Y RM_AXIS_Z RM_AXIS_R RM_AXIS_A |
6 |
RM_F6_2T_L | 6轴,双工作位,背靠背,联动 | RM_AXIS_X RM_AXIS_Y RM_AXIS_Z RM_AXIS_X_2 RM_AXIS_Y_2 RM_AXIS_Z_2 |
6 |
RM_F6_2T_L | 6轴,双工作位,背靠背,独立 | RM_AXIS_X RM_AXIS_Y RM_AXIS_Z RM_AXIS_Y RM_AXIS_Y_2 RM_AXIS_Z_2 |
6 |
RM_F6_2T_1R_1A | 6轴,双工作位,旋转,辅助轴 | RM_AXIS_Y RM_AXIS_Y RM_AXIS_Z RM_AXIS_R RM_AXIS_Y_2 RM_AXIS_A |
7 |
RM_F2 | 2轴移动平台 | RM_AXIS_X RM_AXIS_Y |
2 |
RM_F1 | 1轴移动平台 | RM_F2_S | 2 |
运动模块不再需要工作以后,按照下面方式释放资源:
pRob-> Release();
运动轴正常运行之前需要根据实际机构和驱动器进行正确配置参数,这些参数如导程,细分,软限位行程等。
驱动器一般分为步进驱动器和伺服驱动器。对于无反馈的步进控制前,一般至少需要配置导程和细分。如:
CMotionTime mt;
mt.SetDPR( RM_AXIS_X, 16 );
mr.SetMotorReso(RM_AXIS_X, 3600 );将X轴的细分设置位3600脉冲,即运动轴电机每转一圈需要3600脉冲。运动轴电机转动一圈,轴上负载移动16毫米。
下面语句设置X轴的负方向最大移动距离位3毫秒,正方向最大移动距离位295毫米。
mr.SetSoftLimits(RM_AXIS_X, -3, 295, NULL);如果运动轴电机的驱动器为伺服驱动器,一般还需要使能伺服功能。如:
mt.EnableAxisServo(RM_AXIS_X, TRUE, NULL);
同时可以设置反馈位置的来源:
mt.SetPosCounterType(RM_AXIS_X,, RM_PC_DEFAULT, NULL);上面语句将X轴的位置来源设置为默认,即理论位置。注意:位置即相当于原点的坐标。 位置来源有三种,规划位置,编码器,光栅尺。
宏定义 | 说明 |
---|---|
RM_PC_DEFAULT | 规划位置 |
RM_PC_ENCODER | 编码器计数 |
RM_PC_RASTER | 光栅尺计数 |
mt.SetAxisMachType(RM_AXIS_X, RM_MT_LINEAR);
轴运动类型有三种,自由轴,直线移动,旋转移动。
宏定义 | 说明 | 备注 |
---|---|---|
RM_MT_UNLIMIT | 自由移动 | 自由移动一般没有原点和限位,不支持回零 |
RM_MT_LINEAR | 直线移动 | 默认 |
RM_MT_ROTATION | 旋转移动 |
CRobMot类移动分为回零移动,单轴移动,多轴插补移动,甚至多种基本移动方式组合成更加复杂的移动。两轴插补移动可以将机头沿直线,多段线,圆弧等常见几何轨迹移动。
CMotionTime mt;
mt. GoHome(RV_AXIS_X, 26., 55, 2600, NULL);
//等待完成。
如果要标准坐标的多个轴回零,调用相应的函数,如:mt.GoHomeXY(26., 55, 2600, NULL);
//等待完成。
该语句将驱动X轴和Y轴同时回零。 如果需要任意两个轴同时回零,调用相应的函数,如:mt. GoHomeAny2(RM_AF_Y | RM_AF_X_2, 26., 55, 2600, NULL);
//等待完成。
CRobMot最多支持任意4轴同时回零。
CMotionTime mt;
mt.Move(RM_AXIS_X, 20, 26, 2600, 260000, NULL);
//等待完成
上面语句驱动X轴往正方向移动20毫米,速度为26, 加速度为2600, 加加速度为260000。如果要X轴移动到坐标为20毫米的位置,如下。
mt.MoveTo(RM_AXIS_X, 20, 26, 2600, 260000, NULL);
//等待完成
CMotionTime mt;
mt.Jog(RM_AXIS_X, 26, 2600, 260000, NULL);
如果要停止连续移动,需要显示调用StopJog进行停止。如
mt.StopJog(RM_AXIS_X , RM_SM_IMD, 2600, 260000, NULL);该语句将X轴强制立即停止。
插补移动必须是2轴或2轴以上的轴同时移动。插补移动可以形成直线,圆弧,圆等常见几何图形。常见的插补移动有相应的函数对应。如:
CMotionTime mt;
mt.MoveToXY(100, 100, 26, 2600, 260000, NULL);
//等待移动结束
上面的语句将X轴和Y轴分别移动到100的坐标位置,速度为每秒26毫米,加速度为2600, 加加速度为260000。其中两轴和三轴提供了相对直线移动,如:
mt. MoveXY(100, 100, 26, 2600, 260000, NULL);
//等待移动结束
该语句驱动X轴和Y轴相对移动100毫米的距离。同时,也提供任意的2轴或3轴进行移动。如:
mt. MoveAny2(RM_AF_X | RM_AF_Z, 100, 100, 26, 2600, 260000, TRUE, NULL);
//等待移动结束
如果当前轴运动没有完成,开发者可以调用相应的函数强制终止移动。回零运动和常规运动的停止时调用的函数不一样,不同函数启动的运动操作需要对应的函数进行停止。
CMotionTime mt;
mt.StopHome(RM_AXIS_X, RM_SM_SMOOTH, 2600, 260000, NULL);上面语句将运行中的X轴以减速度2600,减减速度260000的方式平滑停止。
如果X轴和Y轴正在运行,调用下面函数,可以立即停止:
mt.StopHomeXY(RM_SM_IMD, 0, 0, NULL);如果运动轴X和Y正在常规移动,调用下面函数进行平滑停止:
mt.StopAxisXY(RM_SM_SMOOTH, 2600, 260000, NULL);
使用StopJog停止。如:
mt. StopJog(RM_AXIS_Y2, RM_SM_IMD, 0, 0, NULL);该语句使Y2轴立即停止。
CGio为辅助类,实现对运动卡上提供的输入输出进行读写。CGio对象对应运动模块上的一个输入或输出口。
通常在构造时指定:
CGio in(CGio:: GT_IN, 3, FALSE, pRobMat);
该语句的in对象的类型为输入,输入位号为3, 不进行信号转置。注意:输入或输出位号的编号从1开始。
TABX分别保留了4个输入位号和3个输出位号。
# | 宏 | 说明 |
---|---|---|
1 | RM_DI_EMG | 急停 |
2 | RM_DI_RESET | 复位 |
3 | RM_DI_START | 开始 |
4 | RM_DI_STOP | 停止 |
# | 宏 | 说明 |
---|---|---|
1 | RM_DO_NORMAL | 绿灯 |
2 | RM_DO_WARNING | 黄灯 |
3 | RM_DO_ERROR | 红灯或蜂鸣 |
下面函数获得当前输入输出的状态(0为低电平,1为高电平)
int level=0;
in.Get(&level, NULL);
如果Gio对象为输出,可以使用下面语句改变输出电平:
mt.Set(CRobMot::RM_HI, NULL);
当未知当前输出状态时,可以使用下面语句进行电平反置:
mt. Topple();
该语句将现有输出电平置反,如果当前电平为低,则输出高电平。反之,输出电平。
CSoftTrigger为辅助类,利用某一路输入信号,实现上升沿或下降沿的状态读取。在构造函数指定:
CSoftTrigger trig(CSoftTrigger:: ST_RISING , CRobMot:: RM_LOW);
该软触发检测上升沿信号,初始电平为低电平。
调用下面语句检测当前是否产生触发:
int level =0;
in.Get(&level, NULL);
BOOL ret = trig.Check(level, NULL);
if (ret){//做相应动作
}
如果发生异常,使用下面的语句进行清除:
trig.Reset(CRobMot:: RM_LOW);
抖音视频号: 第一感机器视觉
微信公众号: 精浦科技
深圳市软云动力科技有限公司
东莞办事处: 广东省东莞市松湖智谷B6栋225b
公司地址: 广东省深圳市南山区桃园路金桃园大厦2191
深圳市软云动力科技有限公司 版权所有 鄂ICP备2022015826号-2