我都用最笨的办法,整个程序中每个轴只有一处脉冲驱动指令(手动不算,手动是单写的),通过管理寄存器的值和启动条件进行位置切换。
最愚蠢的办法就是
ld GoPos1 D200=位置1,D202=速度1
ld GoPos2 D200=位置2,D202=速度2
ld GoPos3 D200=位置3,D202=速度3
.。。。
ld GoPosn D200=位置n,D202=速度n
然后GoPos1~GoPosn是严格互斥的,任意时刻只有一个被置位,位置多了专门用一个D写索引做数值比较也是可以的(还可以用间接寻址,更方便)
任意posn置位后会同步输出 act,类似于 GoPos1 or GoPos2 or GoPos3.。。or GoPosn out Act 然后
ld Act DDRVA D200 D202 Y0 Y4
同时运动结束触点输出到EndPosn
ld m8029 and GoPos1 set EndPos1
and GoPos2 set EndPos2
and GoPos2 set EndPos2
。。。
and GoPosn set EndPosn
然后程序里面就超级简单了,要去哪个位置直接置位,比如说去位置1直接set GoPos1,然后等着EndPos1来进入下一步,基本上把伺服当气缸用~