您需要在 TwinCAT、TON和/或TOF中使用定时器。您还需要检测按钮何时被按下,以重置计时器。按下 LED 按钮后,您将重新启动两个计时器并启动开启计时器。
一个快速而肮脏的可能不是 100% 正确的 2 分钟解决方案(绝不是优雅的,并且可以大大简化)是这样的:在这里我只使用一个按钮。将所有这些放在一个 for 循环中以获得您想要的。
功能块头:
bLED : ARRAY [1..6] OF BOOL ;
bLEDButton : ARRAY [1..6] OF BOOL;
tTimersOn : ARRAY [1..6] OF TON := [(PT := T#1S)];
tTimersOff : ARRAY [1..6] OF TON := [(PT := T#1S)];
fbLEDButtonTimerReset : ARRAY [1..6] OF R_TRIG;
fbLEDOnReset : ARRAY [1..6] OF R_TRIG;
fbLEDOffReset : ARRAY [1..6] OF R_TRIG;
功能块体
fbLEDButtonTimerReset[1](CLK := bLEDButton[1]);
IF fbLEDButtonTimerReset[1].Q THEN
tTimersOn[1](IN := FALSE);
tTimersOn[1].IN := TRUE;
tTimersOff[1](IN := FALSE);
END_IF
IF bLEDButton[1] THEN
tTimersOn[1]();
tTimersOff[1]();
fbLEDOffReset[1](CLK := tTimersOff[1].Q);
IF fbLEDOffReset[1].Q THEN
tTimersOn[1](IN := FALSE);
tTimersOn[1].IN := TRUE;
END_IF
fbLEDOnReset[1](CLK := tTimersOn[1].Q);
IF fbLEDOnReset[1].Q THEN
tTimersOff[1](IN := FALSE);
tTimersOff[1].IN := TRUE;
END_IF
bLED[1] := NOT tTimersOn[1].Q;
END_IF