MHELICAL(3,3,3,0,1,90) MOVE(16,0)
MHELICAL(3,-3,0,-3,1,90) MOVE(0,-6)
MHELICAL(-3,-3,-3,0,1,90) MOVE(-2,0)
MHELICAL(-3,3,0,3,1,90)
例2:如下图所示,有一PVC切刀,通过XY两轴来控制,第三轴控制切刀角度。为了做到速度的匹配,我们要用模式1。
BASE(0,1,2) : MERGE=ON '平滑运动开关启动 MOVE(50,0)
MHELICAL(0,-6,0,-3,1,180,1) MOVE(-22,0) WAIT IDLE
MOVE(-90) AXIS(2) '控制切刀转个直角弯 WAIT IDLE AXIS(2) MOVE(0,-50) MHELICAL(-6,0,-3,0,1,180,1) MOVE(0,50)
WAIT IDLE '停一下,继续旋转切刀 MOVE(-90) AXIS(2) WAIT IDLE AXIS(2) MOVE(-22,0)
MHELICAL(0,6,0,3,1,180,1) WAIT IDLE
范例十四:
例子1:有一飞剪系统,要求把纸带切成16m。工作过程中送料轴要求不能停。切刀运动距离是1.2m。例子中用1m。纸的长度用一个测量编码器获得。设置单位为m.。编码器接入轴7。
WHILE IN(2)=ON
MOVELINK(0,150,0,0,7) '纸走150m
MOVELINK(0.3,0.6,0.6,0,7) ' 加速到纸的速度 MOVELINK(0.7,1.0,0,0.6,7) ' 跟踪纸,之后减速 WAIT LOADED ' 等到加速过程结束 OP(8,ON) ' 驱动切刀
MOVELINK(-1.0,8.4,0.5,0.5,7) ‘ 返回原点 WAIT LOADED OP(8,OFF) ' 切刀收起 WEND
范例十五:
运动过程中改变运动指令终点指令(movemodify)
MOVEMODIFY
类型: 运动控制指令
语法: MOVEMODIFY (绝对位置) 备选: MM()
说明: MOVEMODIFY指令改变当前单轴线性运动的绝对结束位置(MOVE或MOVEABS)。如果当前没有运动或当前运动不是直线运动,于是MOVEMODIFY等同于MOVEABS指令。ENDMOVE参数包括用户定义的当前运动的结束位置。
MOVEMODIFY工作在缺省基本轴,除非AXIS定义临时基本轴。 参数: 绝对位置
将绝对位置设置成新的结束位置。 例子:
例1:传送带上有一快玻璃板,需要在遇到接近开关,发现上升沿后的250mm停下来,接近开关连接到色标输入端子。
MOVE(10000) '在传送带启动一个相对长的运动 REGIST(3) '设置色标输入
WAIT UNTIL MARK 'MARK goes TRUE 发现传感器 OFFPOS = -REG_POS '使当前位置为0 WAIT UNTIL OFFPOS=0 '等 OFFPOS 结束 MOVEMODIFY(250) '改变运动终点到 250mm
范例十六: 例子程序分析
'--Zero VR(0) thru VR(4) used to store the five register FIFO data. VR(0)=0 VR(1)=0 VR(2)=0 VR(3)=0 VR(4)=0
'--Init some variables.
i_pointer=0 'input data VR pointer o_pointer=1 'output data VR pointer
inspect_i=8 'input point for product inspection station reject_o=9 'output point for product reject station dwell=500 'shift dwell time
OP(reject_o,OFF) 'force product reject output signal off
'--Main loop. WHILE 1=1
i_pointer = (i_pointer+1) MOD(5) 'increment FIFO input pointer o_pointer = (o_pointer+1) MOD(5) 'increment FIFO output pointer
'--Check product inspection input to load FIFO.
IF IN(inspect_i)=ON THEN
VR(i_pointer)=1 'load 1 for rejected product ELSE
VR(i_pointer)=0 'load 0 for good product ENDIF
'--Check FIFO output pointer to fire product reject output. IF VR(o_pointer)=1 THEN OP(reject_o,ON) WA(dwell) OP(reject_o,OFF)
GOSUB display_fifo WA(dwell) WEND
display_fifo:
pa=(i_pointer+4) MOD(5) pb=(i_pointer+3) MOD(5) pc=(i_pointer+2) MOD(5) pd=(i_pointer+1) MOD(5)
PRINT #5,VR(i_pointer)[0];VR(pa)[0];VR(pb)[0];VR(pc)[0];VR(pd)[0] RETURN
'==============================================================================
这是我在手册上看到的一个先入先出的例子,在这个例子中用来检测产品的好坏,不合格的产品被推出传送带,在这个程序中的while 1=1的成是怎样得来的?
i_pointer = (i_pointer+1) MOD(5) 'increment FIFO input pointer
o_pointer = (o_pointer+1) MOD(5) 'increment FIFO output pointer 这两句的做用是什么呢? pa=(i_pointer+4) MOD(5) pb=(i_pointer+3) MOD(5) pc=(i_pointer+2) MOD(5)
pd=(i_pointer+1) MOD(5) 这四句的做用又是什么呢?
答:在这里的WHILE 1=1 .......WEND和REPEAT.......UNTIL FALSE的作用相同, i_pointer = (i_pointer+1) MOD(5) o_pointer = (o_pointer+1) MOD(5)
这两句的作用是把VR区限定在VR(0)到VR(5),在程序值行时有这两句存在可以对VR(0)-VR(5)进行周期性的循环扫描,