|
类型 |
轴指令 |
|
描述 |
总线硬件位置比较输出,也支持脉冲轴,必须使用特定的输出口。
4系列产品有4个比较输出口,可以选择不同的比较输出口,一般为OUT0/1/2/3口。 比较主轴带编码器输入时,自动使用编码器位置来触发,可以使用MOVEOP_DELAY参数来调整输出准确时刻。 不同的总线驱动器效果可能有差异,也可以通过MOVEOP_DELAY参数来调整。
HW_PSWITCH2与MOVE_OP精准使用同样的硬件资源,不建议在同一个通道同时使用,可以在不同的通道同时使用。 每个系统周期内只能比较一次,系统周期通过SERVO_PERIOD查询。 TABLE位置数据在所有比较点完成前不要修改。 脉冲轴和总线轴均支持此指令。 使用脉冲型电机时只有ATYPE为4时才是比较反馈位置(MPOS),默认出厂的ATYPE为1或7比较的是命令位置(DPOS)。 |
|
语法 |
命令语法:HW_PSWITCH2(mode, [...]) 函数语法:Buff = HW_PSWITCH2([axisnum])
Mode=1:单轴比较,见例一 HW_PSWITCH2(1,opnum,opstate,tablestart,tableend[,direction]) mode:1-启动比较器 opnum:对应的输出口 opstate:第一个比较点的输出状态 tablestart:第一个比较点绝对坐标所在TABLE编号 tableend:最后一个比较点绝对坐标所在TABLE编号 direction:第一个点判断方向,0坐标负向,1坐标正向,-1不使用方向
Mode=2:清除比较点 HW_PSWITCH2(2) mode:2-停止并删除没完成的比较点
使用矢量距离比较时,与VECTOR_MOVED进行比较,建议连续运动前设置VECTOR_MOVED初始值
Mode=3:矢量比较方式,见例二 HW_PSWITCH2(3, opnum, opstate, tablestart, tableend) mode:3-启动比较器 opnum:对应的输出口 opstate:第一个比较点的输出状态 tablestart:第一个比较点VECTOR_MOVED坐标所在TABLE编号 tableend:最后一个比较点VECTOR_MOVED坐标所在TABLE编号
Mode=4:矢量比较方式, 单个比较点 HW_PSWITCH2(4, opnum, opstate, vectstart) mode:4-启动比较器 opnum:对应的输出口 opstate:第一个比较点的输出状态 vectstart:比较点VECTOR_MOVED当前运动距离
Mode=5:矢量比较方式, 周期脉冲模式,见例三 HW_PSWITCH2(5,opnum, opstate, vectstart, repes, cycledis, ondis) mode:5-启动比较器 opnum:对应的输出口 opstate:第一个比较点的输出状态,认为是有效状态,反之认为无效状态 vectstart:比较点VECTOR_MOVED当前运动距离 repes:重复周期,个周期内比较两次,先输出有效状态,再输出无效状态 cycledis:周期距离,每隔这个距离输出opstate, ondis后还原为无效状态 ondis:输出有效状态的距离,(cycledis- ondis)为无效状态距离
Mode=6:矢量比较方式,周期模式,与HW_TIMER一起使用,见例四 HW_PSWITCH2(6, opnum, opstate, vectstart, repes, cycledis) mode:6-启动比较器 opnum:对应的输出口 opstate:第一个比较点的输出状态 vectstart:比较点VECTOR_MOVED当前运动距离 repes:重复周期,一个周期只比较一次 cycledis:周期距离,每隔这个距离输出一次
Mode=7:与HW_TIMER一起使用 HW_PSWITCH2(7, opnum, opstate, tablestart, tableend [, optimeus, optimes, cyctimeus]) mode:7-启动比较器,opstate不翻转, 方便与HW_TIMER配合使用. opnum:对应的输出口 opstate:第一个比较点的输出状态 tablestart:第一个比较点VECTOR_MOVED坐标所在TABLE编号 tableend:最后一个比较点VECTOR_MOVED坐标所在TABLE编号 [与hwtimer并用时,可以动态调整hwtimer参数] optimeus:动态调整HW_TIMER的有效时间 optimes:动态调整HW_TIMER的触发脉冲数,0-不输出 cyctimeus:动态调整HW_TIMER的脉冲周期时间
HW_PSWITCH2没有比较完所有点的话,一定要设置mode值为2,通过HW_PSWITCH2(2)指令停止并删除没有完成的比较点,否则后面此输出通道会工作不正常。
以下为2D,3D比较模式 4系列170706以后固件版本支持,运行轨迹必须顺序通过fifo的点。
2D比较:每2个table存储一个点 多个点比较,每次输出翻转状态。 HW_PSWITCH2(25, opnum, opstate, maxerr, num, tablepos) 注意:此模式下maxerr偏差参数不能写0。
与HW_TIMER复用 HW_PSWITCH2(26, opnum, opstate, maxerr, num, tablepos, [ophwtimeus, ophwtimes, hwcyctimeus])
3D比较:每3个TABLE存储一个点 多个点比较,每次输出翻转状态。 HW_PSWITCH2(35, opnum, opstate, maxerr, num, tablepos)
与HW_TIMER复用 HW_PSWITCH2(36, opnum, opstate, maxerr, num, tablepos, [ophwtimeus, ophwtimes, hwcyctimeus])
参数: mode:25,26,35,36多维的比较模式 opnum:对应的输出口 opstate:第一个比较点的输出状态 maxerr:比较位置每个轴左右的脉冲偏差,进入偏差范围后开始比较 num:table里面存储的比较点个数 tablepos:第一个比较点坐标所在table编号 [与hwtimer并用时,可以动态调整hwtimer参数] ophwtimeus:脉冲时间 ophwtimes:脉冲个数 hwcyctimeus:脉冲周期 |
|
适用控制器 |
3系列部分、4系列及以上产品,4系列固件20170704及以上 |
|
例子 |
以下例程测试环境:ZMC432,固件:20170709(仿真器无法运行此指令)。
例一 单轴比较 总线轴使能过程省略,参考总线初始化例程。 BASE(0) DPOS=0 MPOS=0 OP(0,OFF) TABLE(0,50,100,150,200) '比较点坐标设置 HW_PSWITCH2(2) '停止并删除没有完成的比较点 HW_PSWITCH2(1, 0, 1, 0, 3,1) '比较4个点,操作输出口0 TRIGGER '触发示波器 MOVE(500)
比较输出图 运动到50时,关闭OUT0;位置100时,打开OUT0;位置150时,关闭OUT0;位置200时,打开OUT0。 MPOS(0)垂直刻度200 OP(0)垂直刻度2
例二 矢量单轴比较模式 总线轴使能过程省略,参考总线初始化例程。 BASE(0) DPOS=0 MPOS=0 OP(0,OFF) TABLE(0,50,100,150,200) '比较点坐标设置 VECTOR_MOVED=120 '设置矢量起始位置,会影响比较点 HW_PSWITCH2(2) '停止并删除没有完成的比较点 HW_PSWITCH2(3, 0, 1, 0, 3) '比较4个点,操作输出口0 TRIGGER '触发示波器 MOVE(500)
比较输出图 MPOS(0)垂直刻度200 OP(0)垂直刻度2
可以看出信号操作直接从例一的位置120处开始,只比较了后面两个点,矢量比较模式就是将MPOS(当前位置)+VECTOR_MOVED(之前的位移)与设置位置进行比较。
例三 XY加工模式的PSO应用 RAPIDSTOP(2) WAIT IDLE(0) WAIT IDLE(1) BASE(0,1) ATYPE=1,1 SPEED=100,100 ACCEL=1000,1000 DECEL=1000,1000 SRAMP=100,100 DPOS=0,0 MPOS=0,0 OP(0,OFF) TABLE(0,50,100,150,200) '比较点坐标设置 VECTOR_MOVED=0 '设置矢量起始位置 HW_PSWITCH2(2) '停止并删除没有完成的比较点 HW_PSWITCH2(3, 0, 1, 0, 3) '比较4个点,操作输出口0 TRIGGER '触发示波器 MOVE(300,400) END
比较输出图:按XY轴插补位置比较 VECTOR_MOVED(0)垂直刻度200 OP(0)垂直刻度2
例四 周期比较模式,距离复位 总线轴使能过程省略,参考总线初始化例程。 BASE(0) DPOS=0 MPOS=0 OP(0,OFF) TABLE(0,50,100,150,200) '比较点坐标设置 VECTOR_MOVED=0 '设置矢量起始位置为0,方便观察 HW_PSWITCH2(2) '停止并删除没有完成的比较点 HW_PSWITCH2(5,0,1,100,3,150,50) '位置100开始比较,比较3次 '周期距离150,输出有效距离50 TRIGGER '触发示波器 MOVE(500)
比较输出图 位置100开始比较,比较3次,一个和周期中前50输出有效状态,后100输出无效状态。 MPOS(0)垂直刻度200 OP(0)垂直刻度2
例四 周期比较模式,时间复位 总线轴使能过程省略,参考总线初始化例程。 BASE(0) DPOS=0 MPOS=0 OP(0,OFF) TABLE(0,50,100,150,200) '比较点坐标设置 VECTOR_MOVED=0 '设置矢量起始位置为0,方便观察 HW_PSWITCH2(2) '停止并删除没有完成的比较点 HW_PSWITCH2(6,0,1,100,3,100) '位置100开始比较,比较3次周期距离100,输出有效时间由HW_TIMER指令确定 HW_TIMER(2,1000000,500000,1,off,0) '输出变为on后500ms变为off TRIGGER MOVE(500)
比较输出图 位置100时开始比较,比较3次,输出有效信号后500ms反转。 MPOS(0)垂直刻度100 OP(0)垂直刻度2
例五 二维硬件位置比较输出,模式25 BASE(0,1) '选择XY轴 UNITS=1000,1000 SPEED=100,100 ACCEL=10000,10000 DECEL=10000,10000
'将当前位置设置为0点 DPOS=0,0 MPOS=0,0
'提前写入位置比较点XY坐标到table 10~49中 TABLE(10, 10,0,12,0, 20,0,22,0, 30,0,32,0, 40,0,42,0, 50,0,52,0, 52,10,52,12, 52,20,52,22, 52,30,52,32, 52,40,52,42, 52,50,52,52) GLOBAL pointNum '比较点数 pointNum=20
GLOBAL startX,startY '起点 startX=0 startY=0
GLOBAL midX,midY '中点 midX=52 midY=0
GLOBAL endX,endY '终点 endX=52 endY=52
WHILE 1 IF TABLE(0)=1 THEN '比较脉冲位置,非精准输出 WAIT IDLE ?"比较脉冲位置,非精准输出" '设置参数 SYSTEM_ZSET=1 AXIS_ZSET=1,1
ELSEIF TABLE(0)=2 THEN '比较脉冲位置,精准输出 WAIT IDLE ?"比较脉冲位置,精准输出" '设置参数 SYSTEM_ZSET=3 AXIS_ZSET=3,3
ELSEIF TABLE(0)=3 THEN '比较编码器位置,非精准输出 WAIT IDLE ?"比较编码器位置,非精准输出" '设置参数 SYSTEM_ZSET=17 AXIS_ZSET=17,17
ELSEIF TABLE(0)=4 THEN '比较编码器位置,精准输出 WAIT IDLE ?"比较编码器位置,精准输出" '设置参数 SYSTEM_ZSET=19 AXIS_ZSET=19,19 ENDIF
IF TABLE(0)<>0 AND IDLE(0)=-1 THEN TABLE(0)=0 ?"启动"
HW_PSWITCH2(2) '先清除所有的比较 HW_PSWITCH2(25,0,1,10,pointNum,10) '写入比较,操作输出口0
WA 10 TRIGGER '启动示波器
MOVEABS(startX,startY) '开始运动 MOVEABS(midX,midY) MOVEABS(endX,endY) ENDIF WEND END
|
|
相关指令 |