Судя по всему, результат деления имеет вид 24.999999, хотя и отображается в отладке как 25. Ну а блок преобразования к udint не округляет, а просто отбрасывает дробную часть.
Где-то на форуме выкладывали макрос округления к ближайшему целому, похоже нужно в таких случаях перед блоком преобразования использовать что-то подобное.
Округление с нужным количеством знаков:
Код:function fRound : real; var_input rIn : real; N : udint; end_var var tmp : udint; end_var tmp := 10; if N.0 then fRound := udint_to_real(tmp); else fRound := 1; end_if; N := SHR(N,1); while N > 0 do tmp := tmp * tmp; if N.0 then fRound := fRound * udint_to_real(tmp); end_if; N := SHR(N,1); end_while; rIn := rIn * fRound; fRound := (( rIn / abs(rIn) ) * udint_to_real(real_to_udint((abs(rIn) + 0.5)))) / fRound; end_function




Ответить с цитированием