恭喜,你发布的帖子
发布于 2023-05-26 11:49:27
4楼
导轨上两个电机:A,B。初始位分别在按钮1和按钮6。六个按钮,一个按钮一个位置。
电机运动规则是当第一个按钮被按下时,电机A判断按钮位置是否会与另一个电机B相撞,如果不会就执行动作到按钮位置。不会相撞则AB 电机交替执行动作。
会相撞则电机B到达按钮位置,再次有按钮按下则由没有动作的A电机判断,不相撞A动,相撞B动。再次有按钮按下则由没有动作的A电机判断,不相撞A动,相撞B动。(不动不计入判断。如初始位A1,B6.按下6还是A1,B6。下次还是A判断是否动。)
如:按下按钮 2,电机A到达按钮2的位置,再按下按钮 5,电机B 到达按钮5的位置。再按下按钮4,申机A到达按钮4的位置。再按下按钮 3,电机A到达按3的位置。再按下按钮4,申机B到达按钮4的位置。
实现方法:
在不撞机运行下,我可以计数,然后确定该A还是改B动作;对于会撞机则具体分析,再清除计数重新计数。
R_TRIG_1(CLK:=动作标志);
IF R_TRIG_1.Q THEN
顺序:=顺序+1;
动作标志:=0;
END_IF;
判断:=顺序 MOD 2;
A允许动作:=判断=0 ;
B允许动作:=判断<>0;
//按键2
IF R_TRIG_2.Q THEN
IF A位置<2 AND B位置>2 THEN
IF A允许动作=TRUE THEN
A位置:=2;
动作标志:=TRUE;
END_IF;
IF B允许动作=TRUE THEN
B位置:=2;
动作标志:=TRUE;
END_IF;
END_IF;
IF A位置>2 AND B位置>2 THEN
A位置:=2;
顺序:=1;
END_IF;
IF A位置<2 AND B位置<2 THEN
A位置:=2;
B位置:=2;
顺序:=0;
END_IF;
按钮2:=FALSE;
END_IF;
那除了用MOD实现改A还是改B动之外,还有其他方法吗?
请填写推广理由:
分享
只看
楼主