
Сообщение от
Sayland
Вы забываете, что мы работаем со знаковыми целочисленными, типа INT. Перевод во Float, нужен только для задания знака целочисленной, так как данного типа нет в Лоджике.
А у целочисленных как известно нет дробей. По факту ФБ должен называться INT_TO_WORD, а не FLOAT_TO_INT.
Если же нужна дробь, то умножаете на 10, передаёте и по получении делите на 10. Только это уже не имеет отношения к ФБ, а только к уму применяющего данный блок.
А уж если с защитой от дурака делать, то будет например так
Код:
VAR_INPUT
in : REAL;
END_VAR
VAR
K : udint;
X: REAL;
END_VAR
K:=dc32(15);
x:=Round(fLimit((In),udint_to_real(K)*-1,udint_to_real(K-1)),0);
FLOAT_TO_INT:=Sel(abs(x)>x,real_to_udint(abs(x)), K-real_to_udint(abs(x))+K);
end_function