Я сталкивался с такой проблемой BLINK-а, выходил из положения просто: блинк ставил как генератор а в CTU делал выход, тем самым увеличил размер временной переменной и стало по барабану как где блин этот застрял.
Только он даже не импортируется.
можно и проще
Код:FUNCTION_BLOCK blnk VAR_INPUT start: BOOL; (*разрешение работы блока*) hi: TIME:=t#3s; (*продолжительность включенного выхода*) lo: TIME:=t#1s; (*продолжительность отключенного выхода*) END_VAR VAR_OUTPUT q: BOOL; (*выход*) END_VAR VAR b0,b: BLINK; END_VAR ------ b := SEL(start, b0, b); b(ENABLE := start, TIMELOW := lo, TIMEHIGH := hi, OUT => q);
OSCAT-овский генератор, можно скорректировать под себя:
Код:FUNCTION_BLOCK GEN_PULSE VAR_INPUT ENQ : BOOL := TRUE; PTH : TIME; PTL : TIME; END_VAR VAR_OUTPUT Q : BOOL; END_VAR VAR tx: TIME; tn: TIME; init: BOOL; END_VAR (* version 1.5 8. apr. 2011 programmer hugo tested by oscat GEN_PULSE uses the internal sps timer to generate a continuous output waveform with programmable high and low time. the accuracy of gen_pulse is depending on the system timer. when time is 0 the high and low times are exactly one cycle. ENQ = TRUE will start and ENQ = FALSE will stop the generator. *) IF enq THEN tx := TIME(); IF NOT init THEN init := TRUE; tn := tx; Q := TRUE; END_IF; // можно изменить на нужное состояние Q при запуске IF PTL <= t#0s THEN Q := TRUE; ELSE IF tx - tn >= SEL(Q, PTL, PTH) THEN tn := tn + SEL(Q, PTL, PTH); Q := NOT Q; END_IF; END_IF; ELSE Q := FALSE; init := FALSE; END_IF; (* revision history hm 29. jun. 2008 rev 1.0 original version hm 23. nov. 2008 rev 1.1 set default for enq to be true hm 18. jul. 2009 rev 1.2 improved performance hm 13. nov. 2009 rev 1.3 corrected error hm 16. feb. 2011 rev 1.4 corrected an error when timer overflows hm 8. apr. 2011 rev 1.5 ptl and pth was exchanged 1exan 05042024 for 0 PTL, Q is on *)