原文地址:https://blog.csdn.net/qq_44415187/article/details/132182757
感谢作者:
Pnceon
2023.07.21
环境:
CodeSys V3.5 PLC
MC_Basic库 – 遵循PLCOpen标准的库
相关指令:
MC_CamIn
MC_CamOut
MC_CamTableSelect
步骤:
1、建立基础功能块:
MC_Power、MC_Reset、MC_Stop、MC_Jog(调试用)
MC_CamTableSelect、MC_CamIn、MC_CamOut
2、新建cam表
“设备(Device)” - “PLC逻辑” - “应用(Application)” - “右键” - “添加对象” - “Cam表”
3、打开cam表,编辑数据
右键刚才新建的cam表,进入 “属性”,可以设置一些参数,这里改一下,主轴结束位置改为720。(也可以不改,可以用默认值)
双击打开刚刚新建好的cam表,进入cam编辑界面。cam表主要有4个子页面:cam、cam表、挺杆、挺杆表。我们进入“cam”页面。
在“cam”页面,可见主轴位置范围变为 0 - 720,默认为 0 - 360。
cam表 页面,可以直接对主从轴位置关系进行数据编辑,可以添加、减少对应点,对应图标效果,可以在“cam”页面看到。
现在让主从轴做这个运动:主轴走720°(两圈),从轴在此期间,做往返一圈运动。
4、使用功能块编程:
主要用到3个功能块:
MC_CamTableSelect
MC_CamIn
MC_CamOut
MC_CamTableSelect是选择cam表,返回一个cam表ID。MC_CamIn是使主从轴进入cam模式。MC_CamOut是让主从轴退出cam模式,其中较为明显的现象是从轴脱离跟随主轴,主轴当前的运动可以不停止或按脱离前的运动方式运动。而从轴脱离时,会以原先的运动速度继续运动,调用MC_Stop可以使其停止。
(1)MC_CamTableSelect
使用 MC_CamTableSelect 来指定电子凸轮运行时所遵循的凸轮表。Execute 设置为 True,可执行指定或刷新凸轮表。Done 转为 True 时,CamTableID生效。当主从轴建立同步关系后,用户对 MC_CamTableSelect 参数进行修改会造成凸轮的行为变动。 修改 CamTable 变量后,凸轮行为模式会立即生效。 修改 Periodic 模式时,必须要重启功能块才能生效。
CamTable为凸轮表的选择,Execute触发之后,如果当前凸轮表正确,Done为TRUE,CamTableID的输出关联到MC_CamIn.CamTableId进行凸轮运动。
-
CamTableSelect(
-
Master:= Axis1,
// 主轴
-
Slave:= Axis2,
// 从轴
-
CamTable:= Cam,
// cam表
-
Execute:= bCamTableSelectExe,
// 触发
-
Periodic:= bPeriodic,
// 是否重复执行
-
MasterAbsolute:= FALSE,
// 主轴绝对模式
-
SlaveAbsolute:= FALSE,
// 从轴绝对模式
-
Done=> bTableDone,
-
Busy=> bTableBusy,
-
Error=> bTableErr,
-
ErrorId=> ,
-
CamTableId=> );
(2)MC_CamIn
MC_CamIn指令使主从轴按照给定的凸轮表运动。在执行的过程中,主轴以当前的速度运动,从轴则按照当前执行的凸轮表参数进行运动;当主轴达到凸轮表中设定的位置时,从轴也达到目标位置。凸轮周期执行时,执行完最后一条记录,会直接跳转到第一条记录继续循环执行。
在功能块运行的同时,如果控制同一轴的其它指令启动运行,此时该指令运行会被终止,CommandAborted 置位。
执行过程中指令使轴处于Synchronized_Motion状态,执行完成之后,轴状态转换为StandStill。
-
CamIN(
-
Master:= Axis1,
-
Slave:= Axis2,
-
Execute:= bCamInExe,
-
ContinuousUpdate:= FALSE,
// 更新模式
-
MasterValueSource:=
0,
-
MasterOffset:=
0,
-
SlaveOffset:=
0,
-
MasterScaling:=
1,
-
SlaveScaling:=
1,
-
MasterStartDistance:= ,
-
MasterSyncPosition:= ,
-
VelocityDiff:= ,
-
Acceleration:= ,
-
Deceleration:= ,
-
Jerk:= ,
-
TappetHysteresis:= ,
-
StartMode:=
0,
-
CamTableId:= CamTableSelect.CamTableId,
-
BufferMode:= ,
-
InSync=> bCamInInSync,
-
Busy=> bCamInBusy,
-
Active=> bCamInAct,
-
CommandAborted=> ,
-
Error=> bCamInErr,
-
ErrorId=> ,
-
EndOfProfile=> );
(3)MC_CamOut
通过MC_CamOut 指令,停止主从轴的凸轮关联,主从轴关联解除后,Done输出。如果没有其他运动控制指令接管从轴,从轴将按照分离时的速度匀速运行。
-
CamOut(
-
Slave:= Axis2,
-
Execute:= bCamOutExe,
-
Done=> bCamOutDone,
-
Busy=> bCamOutBusy,
-
Error=> bCamOutErr,
-
ErrorId=> );
5、执行步骤
先执行MC_CamTableSelect,CamTable参数选择在上面创建好的cam表,得到该功能块的输出CamTableId。
从轴使能,执行MC_CamIn,若从轴不使能,或在错误状态,MC_CamIn执行会报错。触发信号置位后,功能块输出InSync为True、Busy为True、Active为True,且Error为False,则说明功能块执行正常,主从轴进入cam模式。
若以上输出没有达到,或者Error为True或ErrorId有报错信息,则检查错误并清除后再执行该功能块。
到此,主从轴的cam运动已经建立,主从轴的位置关系根据所选cam表进行规划。
6、效果
主轴使用Jog运动,往正向Jog运动,从轴按照cam表进行规划。
CamOut功能块如上文所述,在主从轴cam同步运动中,若执行camOut,则断开cam关系,主从轴各自保持原来的运动方式,直至运动结束或者被打断。
7、扩展
(1)
在MC_CamIn确立的情况下,如果中途不打断(不断开主从的cam关系),其主从的信息会一直保存着:(在MC_CamTableSelect的主从轴均为相对模式下)
例如:1.主轴运行中,2.主轴中间停顿,主从轴位置保持不变,3.主轴继续运动,从轴也接着上一次的位置继续按照cam表运动。
在 “2.主轴中间停顿” 期间,执行SetPosition,把主从轴的位置均设为0,也不影响主从轴的继续运动。
若在“2.主轴中间停顿”这期间,打断cam关系,比如执行CamOut或者从轴断使能,那么下次继续运动,主从轴则重新开始同步。
在主从轴的cam关系确立期间,CamIn功能块的输出InSync为True、Busy为True、Active为True,若cam关系打断,这几个输出都不会继续为True。
(2)在从轴绝对模式下:
从轴的位置要求严格,要求起始位置必须和cam表上从轴起始位置一致,不然执行CamIn时,会报错,并自动断使能。而主轴无论位置如何都不受影响(只要从轴位置符合)。
按上例的cam表,如现在主轴位置54,从轴位置0,执行CamIn成功。
主轴位置54,从轴位置10,执行CamIn失败,从轴断使能。
主轴位置0,从轴位置15,执行CamIn失败,从轴断使能。
(3)在主轴绝对模式下:
主轴位置要求严格,若主轴在cam表的位置对不上,CamIn就会报错,并导致从轴断使能,若主轴位置偏差在范围内,也能导致CamIn执行时,从轴会瞬间抖动一下。而从轴无论位置如何都不受影响(只要主轴位置符合)。
按上例的cam表,如现在主轴位置54,从轴位置0,执行CamIn失败,从轴断使能。
主轴位置54,从轴位置10,执行CamIn失败,从轴断使能。
主轴位置0,从轴位置15,执行CamIn成功。
(4)主从轴均在绝对模式下:
主从轴的位置都要求严格,只要主从轴任一轴的位置在cam表上不对应,执行CamIn时,都会执行失败,导致从轴断使能。
按上例的cam表,如现在主轴位置54,从轴位置0,执行CamIn失败,从轴断使能。
主轴位置54,从轴位置10,执行CamIn失败,从轴断使能。
主轴位置0,从轴位置15,执行CamIn失败,从轴断使能。
主轴位置0,从轴位置0,执行CamIn成功。
</article>