Ок. выходной массив собирается в битовое слово и уходит на МУ110(у меня пунктик насчёт входов/выходов ПЛК)..
глянь пож вот это:
Код:
FUNCTION_BLOCK startGroupSelect
VAR_INPUT
inputTimer :BOOL;
locRem :UDINT;
inputButton :ARRAY [0..7] OF BOOL;
inputRem :ARRAY [0..7] OF BOOL;
END_VAR
VAR_OUTPUT
invertorSupplayON :BOOL;
routerSupplayON :BOOL;
outputGroup :ARRAY [0..7] OF BOOL;
i :UDINT;
END_VAR
VAR
ASICtimeDelay :TIME := T#20S;
inventorTimeDelay :TIME := T#10S;
timerStartGroup0 :SYS.TON;
timerStartGroup1 :SYS.TON;
timerStartGroup2 :SYS.TON;
timerStartGroup3 :SYS.TON;
timerStartGroup4 :SYS.TON;
timerStartGroup5 :SYS.TON;
timerStartGroup6 :SYS.TON;
timerStartGroup7 :SYS.TON;
timerStopGroup0 :SYS.TOF;
timerStopGroup1 :SYS.TOF;
timerStopGroup2 :SYS.TOF;
timerStopGroup3 :SYS.TOF;
timerStopGroup4 :SYS.TOF;
timerStopGroup5 :SYS.TOF;
timerStopGroup6 :SYS.TOF;
timerStopGroup7 :SYS.TOF;
invertorSupplay :SYS.TOF;
routerSupplay :SYS.TOF;
END_VAR
CASE locRem OF
// Управление с кнопок панели ПР205
0:
FOR i:=0 TO 7 BY 1 DO
outputGroup[i] := inputButton[i];
routerSupplayON := inputButton[i];
invertorSupplay(I:=inputButton[i], T:=inventorTimeDelay, Q=>invertorSupplayON);
END_FOR
// Управление по таймерам
1:
routerSupplayON := inputTimer;
routerSupplay(I:=inputTimer, T:=ASICtimeDelay);
timerStartGroup0(I:=routerSupplay.Q, T:=T#0S);
timerStartGroup1(I:=routerSupplay.Q, T:=T#5S);
timerStartGroup2(I:=routerSupplay.Q, T:=T#10S);
timerStartGroup3(I:=routerSupplay.Q, T:=T#15S);
timerStartGroup4(I:=routerSupplay.Q, T:=T#20S);
timerStartGroup5(I:=routerSupplay.Q, T:=T#25S);
timerStartGroup6(I:=routerSupplay.Q, T:=T#30S);
timerStartGroup7(I:=routerSupplay.Q, T:=T#35S);
timerStopGroup0(I:=timerStartGroup0.Q,T:=T#0S, Q=>outputGroup[0]);
timerStopGroup1(I:=timerStartGroup1.Q,T:=T#5S, Q=>outputGroup[1]);
timerStopGroup2(I:=timerStartGroup2.Q,T:=T#10S, Q=>outputGroup[2]);
timerStopGroup3(I:=timerStartGroup3.Q,T:=T#15S, Q=>outputGroup[3]);
timerStopGroup4(I:=timerStartGroup4.Q,T:=T#20S, Q=>outputGroup[4]);
timerStopGroup5(I:=timerStartGroup5.Q,T:=T#25S, Q=>outputGroup[5]);
timerStopGroup6(I:=timerStartGroup6.Q,T:=T#30S, Q=>outputGroup[6]);
timerStopGroup7(I:=timerStartGroup7.Q,T:=T#35S, Q=>outputGroup[7]);
invertorSupplay(I:=outputGroup[7], T:=inventorTimeDelay, Q=>invertorSupplayON);
// Управление с диспетчеризации
2:
FOR i:=0 TO 7 BY 1 DO
outputGroup[i] := inputRem[i];
routerSupplayON := inputButton[i];
invertorSupplay(I:=inputButton[i], T:=inventorTimeDelay, Q=>invertorSupplayON);
END_FOR
ELSE
outputGroup [0] := FALSE;
outputGroup [1] := FALSE;
outputGroup [2] := FALSE;
outputGroup [3] := FALSE;
outputGroup [4] := FALSE;
outputGroup [5] := FALSE;
outputGroup [6] := FALSE;
outputGroup [7] := FALSE;
END_CASE
END_FUNCTION_BLOCK
глюк только на этом фб, но CASE 1: ведь работает.