功能要求:一个小车由电机驱动,在ABCDE五点之间自动循环往返运行,示意图如下图所示,小车初始位置在A点,当按下启动按钮,小车依次前进到BCDE点,并分别停留2s返回A点停止。
根据要求我们知道,输入需要6个点,分别是启动按钮,A点开关、B点开关、C点开关、D点开关、E点开关。输出2个点,电机的前进和后退。
也就是说当按下启动按钮小车,先运行到B点。停留2s,后返回A点,停留2s后再前进到C点,如此循环,当从E点返回到A点后,小车停止。
下面我们开始编程:
新建FB,并设置接口变量如下图所示:
FB程序如下:
代码如下:
IF #启动 OR (#A点 AND NOT #E点记忆) OR (#B点 AND #B点记忆) OR( #C点 AND #C点记忆) OR (#D点 AND #D点记忆)
THEN
#前进 := 1;
ELSIF
(#B点 AND NOT #B点记忆) OR (#C点 AND NOT #C点记忆) OR (#D点 AND NOT #D点记忆) OR #E点
THEN
#前进 := 0;
END_IF;
IF (#B点 AND NOT #B点记忆) OR (#C点 AND NOT #C点记忆) OR (#D点 AND NOT #D点记忆) OR #E点 THEN
#过程记忆 := 1;
ELSE
#过程记忆 := 0;
END_IF;
#timer.TON(IN := #过程记忆,
PT := T#2S,
Q => #timer_out);
IF #过程记忆 AND #timer_out THEN
#后退 := 1;
ELSIF #A点 THEN
#后退 := 0;
END_IF;
IF #B点 THEN
#B点记忆 := 1;
ELSIF #E点 THEN
#B点记忆 := 0;
END_IF;
IF #C点 THEN
#C点记忆 := 1;
ELSIF #E点 THEN
#C点记忆 := 0;
END_IF;
IF #D点 THEN
#D点记忆 := 1;
ELSIF #E点 THEN
#D点记忆 := 0;
END_IF;