恭喜,你发布的帖子
发布于 2018-12-19 15:42:59
48楼
SCL不应该是复杂的SEQ CONTROL吗?至少写点CONST, LOOP啊 用点GENERIC
把复杂的SEQ CONTROL用一个LOOP解决掉,CONST FB可以重用到其他的项目,剩下每个SEQ做什么,就是独立的事件了
CONST
TOTAL := 4;
PER_INCOMMANDS := 3;
PER_OUTCOMMANDS := 2;
COMPLETEPOS := 0;
ENABLEPOS := 1;
SKIPPOS := 2;
OSTARTPOS := 0;
OCOMPLETEPOS := 1;
END_CONST
VAR_INPUT
COMPLETE1 {S7_m_c := 'true'} : BOOL := FALSE;
INCOMMANDS AT COMPLETE1 : ARRAY[0..0] OF BOOL;
......
VAR_OUTPUT
OSTART1 {S7_m_c := 'true'} : BOOL := FALSE;
OUTCOMMANDS AT OSTART1 : ARRAY[0..0] OF BOOL;
......
IF statINDEX < TOTAL THEN
FOR K := 1 TO TOTAL DO
TEMP := TOTAL - K; //REVERSE CHECKING
IF TEMP = statINDEX THEN
IF INCOMMANDS[TEMP * PER_INCOMMANDS + SKIPPOS] THEN
OUTCOMMANDS[TEMP * PER_OUTCOMMANDS + OSTARTPOS] := FALSE;
OUTCOMMANDS[TEMP * PER_OUTCOMMANDS + OCOMPLETEPOS] := FALSE;
statINDEX := statINDEX + 1;
ELSIF INCOMMANDS[TEMP * PER_INCOMMANDS + COMPLETEPOS] THEN
OUTCOMMANDS[TEMP * PER_OUTCOMMANDS + OSTARTPOS] := FALSE;
OUTCOMMANDS[TEMP * PER_OUTCOMMANDS + OCOMPLETEPOS] := TRUE;
statINDEX := statINDEX + 1;
ELSE
IF INCOMMANDS[TEMP * PER_INCOMMANDS + ENABLEPOS] THEN
OUTCOMMANDS[TEMP * PER_OUTCOMMANDS + OSTARTPOS] := TRUE;
ELSE
OUTCOMMANDS[TEMP * PER_OUTCOMMANDS + OSTARTPOS] := FALSE;
//wait enable happen
END_IF;
END_IF;
END_IF;
END_FOR;
ELSE
statSTART := FALSE;
END_IF;
请填写推广理由:
分享
只看
楼主