常用场景为:流水线点胶、流水线产品分拣、流水线产品搬运等。
常见机械结构:XYZ (R)、SCARA、DELTA等。

1、指令介绍
同步跟随是指点的跟随,跟随的是位置,皮带与跟随轴的位置之间由算子去协调位置关系,需要处理的仅仅是第一个跟随时刻的位置。
MOVESYNC指令内重要参数是给出皮带的位置和跟随轴的位置,只需要把跟随点跟随的这个“时刻”静态化处理就行,即可以想象成当皮带上物体到了传感器mark位置时刻皮带停止了。
跟随轴这个时候移动到达产品mark点,这个时刻得到了两组坐标位置:
支持单轴或多轴同步跟随。
模式 | |
-1 | 同步结束模式,运动到指定的绝对位置,此模式运动如果后面紧接着其它MOVESYNC指令,会被覆盖,此模式下syncaxis无效 |
-2 | 强制结束模式,调用时强制停止原来的MOVESYNC,运动到指定结束位置,此模式运动如果后面紧接着其它MOVESYNC指令,会被覆盖,此模式下syncaxis无效 |
0 | BASE第1个轴(x)跟随皮带轴物体 |
10 | BASE第2个轴(y)跟随皮带轴物体 |
20 | BASE第3个轴跟随皮带轴物体 |
(3)syncposition:皮带轴物体被感应到时皮带轴的位置
(4)syncaxis:皮带轴轴号,-1表示没有皮带轴,可以是电机轴,也可以是编码器
(5)pos1:皮带轴物体被感应到时的BASE第1个轴(一般是跟随轴)的绝对位置
(6)posn:皮带轴物体被感应到时的BASE第n个轴的绝对位置
5、指令使用图解(单轴为例)
假设当产品到传感器位置时实现跟随;借助传感器的信号实现皮带位置锁存,即当产品到达传感器锁存的位置时,依靠锁存记录下皮带坐标(syncposition参数),此时将跟随轴X轴运行到产品锁存点位置,得到跟随轴X轴位置为(pos1);
下面示例以单轴跟随为例子,辅助以感应器作为位置记录条件。

⊙第一次运行,需要进行对位操作,确认跟随轴的位置,点击产品到位,模拟产品放到了传送带上开始运动,到达锁存位置停止,将跟随轴移动到产品位置处停下。记录下跟随轴此时的坐标,此坐标MOVESYNC指令将会用到。
⊙配置轴号,轴的运动参数,合理设置三段运动的时间。
global sub get_mark_pos(mode) '使用3或者4,其他方式修改等待条件和获取的数据寄存器,reg_pos REG_INPUTS(belt_axis) = $0000 '映射皮带锁存输入 reg_count = 0 DMSET mark_flag(0,100,-1) '每次开始前清空标志,避免误判 WHILE 1 base(belt_axis)REGIST(mode)axis(belt_axis) wait until mark if reg_count >= 100 then '位置数组循环存储值判断 reg_count = 0 endif mark_pos(reg_count) = REG_POS ?REG_POS mark_flag(reg_count) = 1 reg_count = reg_count + 1 wend endsub
同步跟随函数:依靠锁存函数给的参数,设置跟随时间,执行同步跟随动作,分为加速、同步和减速回原位置三个阶段,注意每个阶段的时间规划合理,完成一个跟随步骤之后等待触发下一次跟随。
global sub run_sync() base(sync_axis) move_count = 0 '运动计数清0 TABLE(10) = -1 '以table 10 的值,作为同步结束标志 WHILE 1 if move_count >= 100 then '循环 move_count = 0 endif if mark_flag(move_count) = 1 then '判断是否有产品触发 if abs(sync_star_dis + mark_pos(move_count)) >= abs(mpos(belt_axis)) then '尚在有效触发距离内,即可以跟随 '开始跟随 '第一段:加速段(追赶段) 跟随模式看机构具体而定,一般皮带编码器方向与跟随轴运动方向一致就用0 反方向就用 0 + pi/2 MOVESYNC(0, accel_time, mark_pos(move_count), belt_axis, sync_pos) '第二段:同步段与加速段唯一不同是时间 MOVESYNC(0, sync_time, mark_pos(move_count), belt_axis, sync_pos) '此处可以开启线程去操作其他动作 '使用 move_task 指令操作 '用table 10 的值来作为其他运动的结束标志,这里使用move_table,是为了使同步完全结束,后面开发时可以将MOVE_TABLE放在其他运动的线程里面使用 MOVE_TABLE(10,10) elseif abs(sync_star_dis + mark_pos(move_count)) < abs(mpos(belt_axis)) then '超出范围,直接跳过, TABLE(10) = 10 ?"跳过" '?abs(sync_star_dis + mark_pos(move_count)) , abs(mpos(belt_axis)) endif '判断结束 wait UNTIL table(10) = 10 '第三段:复位段 以当前位置为停止位置,可以添加变量设置待机位。 MOVESYNC(-1, decel_time, mark_pos(move_count),-1, sync_pos) move_table(10,-1) '结束标志复位 mark_flag(move_count) = -1 '同步条件标志复位 move_count = move_count + 1 '计数+ 1 endif wend endsub