机器视觉与图像处理
多功能和易用运动控制框架
支持图像模板深度学习

1. 运动控制

运动控制库的头文件和库文件在pilelibs目录下。头文件分别在robbase和bombax子目录。库文件(dll, lib)在bug子目录。

1.1 CRobMot

CRobMot为抽象类,定义运动控制过程中的操作,如回零,单轴移动,多轴插补移动,轴状态读取,设置限位,设置运动电机分辨率,运动轴导程等。

CMotionTime和CGtsPci类对以太网运动模块和PCI接口运动模块进行具体封装,操作方式基本与CRobMot类一样。

通常情况下,CRobMot类一般不单独使用,与CWorkDesk类一起使用。

CRobMot初始化

运动模块初始化有两种方法。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类移动分为回零移动,单轴移动,多轴插补移动,甚至多种基本移动方式组合成更加复杂的移动。两轴插补移动可以将机头沿直线,多段线,圆弧等常见几何轨迹移动。

回零

回零有单轴回零和多轴同时回零。下面语句让X轴以26mm/秒最大速度不超过55mm/秒,加速度为2600mm2/秒的速度回零。

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);

//等待完成

单轴连续移动(JOG)

单轴连续运动都用在设备的维修或加工任务编程阶段,不需要指定位置或移动距离,如果不认为终止,运动轴将一直往一个方向进行移动。如

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);

//等待移动结束

终止移动

CRobMot类的所有移动函数调用以后,会立即返回,如果开发者在当前运动没有完成之前就进行其它运动操作,这样会造成移动轴运行异常。 一般移动以后需要等待移动完成。

如果当前轴运动没有完成,开发者可以调用相应的函数强制终止移动。回零运动和常规运动的停止时调用的函数不一样,不同函数启动的运动操作需要对应的函数进行停止。

回零停止

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);

JOG移动停止

使用StopJog停止。如:

mt. StopJog(RM_AXIS_Y2, RM_SM_IMD, 0, 0, NULL);

该语句使Y2轴立即停止。

1.2 CGio

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();

该语句将现有输出电平置反,如果当前电平为低,则输出高电平。反之,输出电平。

1.3 CSoftTrigger

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

二维码1 二维码2 二维码3


深圳市软云动力科技有限公司 版权所有  鄂ICP备2022015826号-2   

统计显示 ▼