Т.е. их значения надо сохранить во внешних энергонезависимых переменных, и потом использовать как входные:
Owen.jpgКод:FUNCTION_BLOCK fb_Counter VAR_INPUT ///<Description>Детектор импульсов</Description> imp : BOOL; //входная переменная с типом данных bool in : BOOL; //входная переменная с типом данных bool b1:bool; b2:bool; b3:bool; t_block : UDINT; //входная переменная с типом данных bool ///<Description>Предустановленное значение счетчика</Description> t_work : UDINT; //входная переменная с типом данных bool c1in:udint; // Сохраненные между вызовами c2in:udint; c3in:udint; END_VAR VAR_OUTPUT ///<Description>Значение счетчика</Description> t_proshlo: UDINT; //выходная переменная с типом данных udint work_out: BOOL; block:BOOL; rasresh:bool; c_block:UDINT; c1:UDINT; c2:UDINT; c3:UDINT; cf:UDINT; END_VAR var //объявление локальных переменных res : BOOL; //входная переменная с типом данных bool END_VAR // Востановление сохраненных значений c1 := c1in; c2 := c2In; c3 := C3in; if in and not block then rasresh:=true; end_if if imp and rasresh AND NOT block then t_proshlo:= t_proshlo+1; work_out:=TRUE; end_if if t_proshlo>= t_work AND t_proshlo > 0 THEN work_out:=FALSE; t_proshlo:=0; block:=TRUE; rasresh:=false; if b1 then c1:=c1+1; end_if if b2 then c2:=c2+1; end_if if b3 then c3:=c3+1; end_if end_if if block and imp then c_block:=c_block+1; end_if; if c_block >=t_block then block:=false; c_block:=0; end_if cf:=c1+c2+c3; end_function_block