Суть программы. Нужно зафиксировать момент переключения дискретного входа с 1 в 0. Подсчитать количество таких переключений и записать в ретейн.
Суть проблемы. Имеется функциональный блок и функция тело программы одинаковое но при этом функциональный блок выполняется, а функция нет. В чем проблема не пойму.

Функциональный блок :

FUNCTION_BLOCK counter_FB
VAR_INPUT
chislo : BOOL;
END_VAR
VAR_OUTPUT
counter : WORD;
reatin : WORD;
END_VAR
VAR
chislo2 : BYTE;
END_VAR


IF BOOL_TO_BYTE(chislo) <> chislo2 THEN
chislo2 := BOOL_TO_BYTE(chislo);
IF (chislo2 AND 1) = 0 THEN
counter := counter + 1;
IF counter = 10000 THEN
counter := 0;
END_IF;
reatin := counter;
END_IF;
END_IF;

Функция :

FUNCTION count : WORD
VAR_INPUT
chislo1 : BOOL;
_retain : POINTER TO WORD;
END_VAR
VAR
chislo2 : BYTE;
END_VAR

IF BOOL_TO_BYTE(chislo1) <> chislo2 THEN
chislo2 := BOOL_TO_BYTE(chislo1);
IF (chislo2 AND 1) = 0 THEN
count := count + 1;
IF count = 10000 THEN
count := 0;
END_IF;
_retain^ := count;
END_IF;
END_IF;