异或是个捷径,可作出最简化的单键启停。
我也试着用软PLC做了一个,循环体内5行。
50000个故障点、50000个指示灯、50000个故障复位、1个警笛、1个消音。
因为cpu够强,用内存点以及hmi测试时,赛扬cpu负荷不到1%
没有使用异或(看到300的STL就头大,更别提地址指针了),而是直接检测50000个故障指示灯的上升沿。只要有1个上升沿,就声音报警。
PROGRAM MAIN
VAR
b_fault:ARRAY[1..50000] OF BOOL;(*故障信号输入*)
b_faultlamp:ARRAY[1..50000] OF BOOL;(*故障指示灯*)
b_lamprise:ARRAY[1..50000] OF R_TRIG;(*故障灯上升沿*)
b_faultrst:ARRAY[1..50000] OF BOOL;(*故障复位按钮*)
b_sound:BOOL;
b_soundrst:BOOL;
n:DINT; (*循环计数器,因为需要50000个变量,需要dint*)
END_VAR
FOR n:=1 TO 50000 DO
IF b_fault[n]=TRUE THEN b_faultlamp[n]:=TRUE ;END_IF
IF b_fault[n]=FALSE AND b_faultrst[n]=TRUE THEN b_faultlamp[n]:=FALSE;END_IF
(*以上是故障灯点亮-熄灭控制*)
b_lamprise[n](CLK:=b_faultlamp[n],Q=>);
IF b_lamprise[n].Q=TRUE THEN b_sound:=TRUE;END_IF
IF b_soundrst=TRUE THEN b_sound:=FALSE;END_IF
(*以上警笛及消音控制*)
END_FOR


