电子凸轮
目录
在利用构造的凸轮曲线来模拟机械凸轮,以达到机械凸轮系统相同的凸轮轴与主轴之间相对运动的软件系统。
① 电子凸轮属于多轴同步运动(速度位置同步),这种运动(也叫Follow运动)是基于主轴和一个或者多个从轴系统。主轴可以是物理轴,也可以是虚拟轴(一种算法, 没有实际的输出);
② 电子凸轮是直接将轨迹点输入到驱动器内,通过设定的计算方式进行伺服控制,达到和机械凸轮相同的加工目的,实现一种周期性的往复运动;
③ 启动位置和终点位置是否一致可以将电子凸轮曲线分为闭式曲线和开式曲线,如图1.1.1;
图1.1.1 电子凸轮运动曲线
① 电子凸轮灵活,轨迹易于改动,方便根据需求加工轨迹,不需要繁琐更改机械凸轮;
② 当要改变凸轮的运动轨迹时,加工机械凸轮的成本较高,难度较大,而电子凸轮只需简单的设定一些轨迹参数即可,不需要产生新的成本;
③ 机械凸轮会磨损,通常是机床噪音的最大来源,而用电子凸轮可减轻运行阻力及噪音,减轻机身重量,提高效率;
④ 每组 Follow 运动关联的两个轴,被跟随轴称为主轴,跟随轴称为从轴。多个从轴可以跟随同一个主轴,从轴又可以作为其他轴的主轴
⑤ 从轴可以跟随主轴的规划位置或者实际位置,从轴也可以直接跟随外部的编码器输入从轴可以指跟随主轴的某个运动方向(正向或者负向)或者双向跟随;
⑥ 与从轴之间的同步,通过用户设定的多个数据段自动规划,每个数据段包含主轴位移,从轴位移,速度规划类型三个参数,即主轴在完成设定位移的过程中,从轴也自动完成设定位移,这个过程中的速度曲线由速度规划类型决定;
⑦ 每个从轴有两个 FIFO 用于缓存同步数据段,每个 FIFO 最多可以存储 32 个数据段,通过手动切换,其中一个 FIFO 的数据用完后会自动切换到另外一个 FIFO;
⑧ 通过配置 FIFO 的循环次数,可实现从轴周期性的跟随;
⑨ 同步的启动可以配置为立即启动,也可以配置为主轴穿越某个位置时自动启动;
略
通过GCS.exe工具对电子凸轮的使用配置进行详细说明。GCS.exe工具连接控制器,点击功能->Follow(电子凸轮)运动,打开测试轴1,测试轴2,如图2.2.1电子凸轮测试。
图2.2.1 电子凸轮测试
从图2.1的Follow(电子凸轮)运动工具中测试,添加主轴位移、从轴位移和跟随类型,添加位置点没有限制;参数设置列表中,从轴通道、跟随主轴、主轴类型、跟随方向和循环次数根据需求选择即可;对于Fifo序号,用来设置从轴缓存同步数据段的;启动模式如果选择主轴穿越启动,当主轴达到设定的穿越位置从轴方可响应;配置完成执行1.配置,2.压入数据和3.启动;值得注意的是,启动前,需要把轴位置,状态清零。
以下为电子凸轮常用功能函数的详细说明。
电子凸轮
函数原形 | 函数说明 |
设置FOLLOW跟随方向 | |
获取FOLLOW跟随方向 | |
设置FOLLOW主轴参数 | |
获取FOLLOW主轴参数 | |
设置FOLLOW的循环执行次数 | |
获取FOLLOW的循环执行次数 | |
设置FOLLOW的的启动事件 | |
获取FOLLOW的启动事件 | |
获取FOLLOW的fifo剩余空间 | |
设置FOLLOW的数据 | |
清除FOLLOW对应fifo号的数据 | |
启动Follow运动 | |
切换Follow运动的fifo号 |
(1)设置单轴运动速度曲线类型
NMC_MtSetPrfMode( HAND axisHandle, short mode );
参数 | 输入/输出 | 描述 |
axisHandle | 输入 | 轴句柄 |
mode | 输入 | 各轴的规划模式 #define MT_NONE_PRF_MODE (-1) // 无效 #define MT_PTP_PRF_MODE (0) // 梯形规划 #define MT_JOG_PRF_MODE (1) // 连续速度模式 #define MT_CRD_PRF_MODE (3) // 坐标系 #define MT_GANTRY_MODE (4) // 龙门跟随模式 #define MT_PT_PRF_MODE (5) // PT模式 #define MT_MULTI_LINE_MODE (6) // 多轴直线插补 #define MT_GEAR_PRF_MODE (7) // 电子齿轮模式 #define MT_FOLLOW_PRF_MODE (8) // Follow跟随模式 注意:坐标系模式不需要通过NMC_MtSetPrfMode设置 |
(2)单轴JOG运动
NMC_MtMoveJog(HAND axisHandle, double acc, double dec, double maxVel, short smoothCoef, short clrStsFlag);
参数 | 输入/输出 | 描述 |
axisHandle | 输入 | 轴句柄 |
acc | 输入 | 加速度,脉冲/ms^2 |
dec | 输入 | 减速度,脉冲/ms^2 |
maxVel | 输入 | 最大速度,脉冲/ms |
smoothCoef | 输入 | 平滑系数,[0, 199], 单位ms |
clrStsFlag | 输入 | 是否运动前先清除轴状态,0:不清除,1:清除 |
(3)设置FOLLOW跟随方向
NMC_MtFollowSetDir(HAND axisHandle, short dir);
参数 | 输入/输出 | 描述 |
axisHandle | 输入 | 从轴句柄 |
dir | 输入 | =0:双向跟随 <0:< span="">负向跟随 >0:正向跟随 |
(4)获取FOLLOW跟随方向
NMC_MtFollowGetDir(HAND axisHandle, short *pDir);
参数 | 输入/输出 | 描述 |
axisHandle | 输入 | 从轴句柄 |
pDir | 输出 | =0:双向跟随 <0:< span="">负向跟随 >0:正向跟随 |
(5)设置FOLLOW主轴参数
NMC_MtFollowSetMaster(HAND axisHandle, short masterNo, short masterType);
参数 | 输入/输出 | 描述 |
axisHandle | 输入 | 从轴句柄 |
masterNo | 输入 | 主轴序列号(0~N) |
masterType | 输入 | 主轴类型 #define PROFILE_FOLLOW_MASTER_NONE (0) // 0:无效 #define PROFILE_FOLLOW_MASTER_AXIS_PRF (1) // 1:AXIS规划值 #define PROFILE_FOLLOW_MASTER_AXIS_ENC (2) // 2:AXIS反馈值 #define PROFILE_FOLLOW_MASTER_ENC (3) // 3:编码器值 |
(6)获取FOLLOW主轴参数
NMC_MtFollowGetMaster(HAND axisHandle, short *pMasterNo, short *pMasterType);
参数 | 输入/输出 | 描述 |
axisHandle | 输入 | 从轴句柄 |
pMasterNo | 输出 | 主轴序列号(0~N) |
pMasterType | 输出 | 主轴类型,见宏定义 |
(7)设置FOLLOW的循环执行次数
NMC_MtFollowSetLoopCount(HAND axisHandle, long loopCnt);
参数 | 输入/输出 | 描述 |
axisHandle | 输入 | 从轴句柄 |
loopCnt | 输入 | 循环次数 |
(8)获取FOLLOW的循环执行次数
NMC_MtFollowGetLoopCount(HAND axisHandle, long *pLoopCnt);
参数 | 输入/输出 | 描述 |
axisHandle | 输入 | 从轴句柄 |
ploopCnt | 输出 | 循环次数 |
(9)设置FOLLOW的的启动事件
NMC_MtFollowSetEvent(HAND axisHandle, short eventType, short masterDir, long pos);
参数 | 输入/输出 | 描述 |
axisHandle | 输入 | 从轴句柄 |
eventType | 输入 | 1:表示调用启动指令以后立即启动 2:表示主轴穿越设定位置以后启动跟随 |
masterDir | 输入 | 穿越启动时,主轴的运动方向:1主轴正向运动,-1 主轴负向运动 |
pos | 输入 | 穿越位置 |
(10)获取FOLLOW的的启动事件
NMC_MtFollowGetEvent(HAND axisHandle, short *pEventType, short *pMasterDir, long *pPos);
参数 | 输入/输出 | 描述 |
axisHandle | 输入 | 从轴句柄 |
pEventType | 输出 | 1 表示调用启动指令以后 立即启动 2表示主轴穿越设定位置以后启动跟随 |
pMasterDir | 输出 | 穿越启动时,主轴的运动方向:1 主轴正向运动,-1 主轴负向运动 |
pPos | 输出 | 穿越位置 |
(11)获取FOLLOW的fifo剩余空间
NMC_MtFollowGetSpace(HAND axisHandle, short *pSpace, short fifoNo);
参数 | 输入/输出 | 描述 |
axisHandle | 输入 | 从轴句柄 |
pSpace | 输出 | 空间大小 |
fifoNo | 输入 | fifo号,0或1 |
(12)设置FOLLOW的数据
NMC_MtFollowPushData(HAND axisHandle, long masterPos, double slavePos, short type, short fifoNo;
参数 | 输入/输出 | 描述 |
axisHandle | 输入 | 从轴句柄 |
masterPos | 输入 | 主轴位移 |
slavePos | 输入 | 从轴位移 |
type | 输入 | 数据段类型:0普通段,默认;1匀速段;2 减速到 0 段;3保持 FIFO 之间速度连续 |
fifoNo | 输入 | fifo号,0或1 |
(13)清除FOLLOW对应fifo号的数据
NMC_MtFollowClear(HAND axisHandle, short fifoNo);
参数 | 输入/输出 | 描述 |
axisHandle | 输入 | 从轴句柄 |
fifoNo | 输入 | fifo号,0或1 |
(14)启动Follow运动
NMC_MtFollowStart(HAND axisHandle, short syncAxCnts, short *pSyncAxArray);
参数 | 输入/输出 | 描述 |
axisHandle | 输入 | 从轴句柄 |
syncAxCnts | 输入 | 不包括axisHandle 的其他同步启动轴数量 |
pSyncAxArray | 输入 | 其他同步启动轴的序号:0~N |
(15)切换Follow运动的fifo号
NMC_MtFollowSwitch(HAND axisHandle, short syncAxCnts, short *pSyncAxArray);
参数 | 输入/输出 | 描述 |
axisHandle | 输入 | 从轴句柄 |
syncAxCnts | 输入 | 不包括axisHandle 的其他同步进行fifo切换的轴数量 |
pSyncAxArray | 输入 | 其他同步进行fifo切换的轴的序号:0~N |
该案例主轴为 Jog 模式,速度为 50pulse/ms,从轴为 Follow 模式,跟随主轴的规划位置。从 轴启动的跟随条件是:主轴走过 50000pulse 后,从轴启动跟随。从轴的运动规律由 3 段组成,如下表所示,加速段跟随,匀速跟随,减速跟随,类似一个梯形曲线。并且无限次循环此数据段。
第一段 | 第二段 | 第三段 | |
主轴位置 | 20000 | 20000 | 20000 |
从轴位置 | 10000 | 20000 | 10000 |
/*********此处省略控制器初始化部分***********/
//函数返回值错误 #define RTN_ERR {if(rtn != RTN_CMD_SUCCESS){ return;}}
short rtn = 0; //启动主轴JOG运动, 速度脉冲/ms, 加、减速度为脉冲/ms^2 rtn = NMC_MtMoveJog(axishandle[0], 1, 1, 50, 0, 1); RTN_ERR //设置轴二的运动模式为FOllow模式 rtn = NMC_MtSetPrfMode(axishandle[1], MT_FOLLOW_PRF_MODE); RTN_ERR //清空从轴FIFO数据 rtn = NMC_MtFollowClear(axishandle[1], 0); RTN_ERR //设置跟随主轴的规划位置 rtn = NMC_MtFollowSetMaster(axishandle[1], 0, PROFILE_FOLLOW_MASTER_AXIS_PRF); RTN_ERR //设置跟随数据 double masterpos = 20000; double slavepos = 10000; rtn = NMC_MtFollowPushData(axishandle[1], masterpos, slavepos, 0, 0); RTN_ERR masterpos += 20000; slavepos += 20000; rtn = NMC_MtFollowPushData(axishandle[1], masterpos, slavepos, 0, 0); RTN_ERR masterpos += 20000; slavepos += 10000; rtn = NMC_MtFollowPushData(axishandle[1], masterpos, slavepos, 0, 0); RTN_ERR //设置为无限循环 rtn = NMC_MtFollowSetLoopCount(axishandle[1], 0); RTN_ERR //设置跟随条件, 主轴正向运动到位置时启动 rtn = NMC_MtFollowSetEvent(axishandle[1], 2, 1, 50000); RTN_ERR //启动Follow运动 rtn = NMC_MtFollowStart(axishandle[1], 0, 0); RTN_ERR //跟随运动过程中可调用NMC_MtFollowGetLoopCount查询循环执行次数 return rtn; |
① 首先使用GCS.exe工具测试数控机床是否达到安全启动要求;
② 在函数中,有三种编程对象,对于单轴控制的指令是以 NMC_Mt 开头,对于坐标系的指令是以NMC_Crd 开头,其余是对控制器的指令;
③ 文档只挑选常用功能,更多功能请关注头文件,在里面做了详细的注释;
④ 如有其他疑问,请联系技术。
Copyright ©2020 深圳市高川自动化技术有限公司 版权所有 备案号:粤ICP备2022048856号