Доброго дня всем.
Прежде всего спасибо всем, кто помогает с ответами на мои дилетантские вопросы. Я не каждый раз отписываюсь, но с вашей помощью иду вперёд и на данном этапе всё удалось решить.
Сегодня же столкнулся с таким казусом.
Понадобилось сделать макрос для Овенлоджика который округляет число с плавающей запятой при переходе через значение 0.5 и умножает результат на 10.
например: 1,499 = 14 а 1,500 = 15, соответственно в панели СП310 будет отображаться 1,5 и 1,6
Нужно это, что бы не занимать лишний регистр при передаче значения, например температуры (с точностью 0,1), в панель.
Вот что у меня получилось
Вроде работает, но только если внешний выход макроса (который real) подключен к какой либо прееменной.function_block r_t_u_//преобразование числа real в udint с округлением до 0.1 и умножением на 10
var_input
inp : real;
end_var
var_output
Q_r : real;
Q_u : udint;
end_var
var
inp_1 : udint;
end_var
//================================================== ================================================== ============================
(*код программы*)
Q_r := inp;
inp_1 := real_to_udint(inp*1000) mod 1000;
if inp_1 > 500 then Q_u := real_to_udint(inp*10) + 1; else Q_u := real_to_udint(inp*10); end_if
end_function_block
Если нет, то не работает.
(Специально пришлось в макросе прописать: Q_r := inp)
Соответственно картинки 1 и 2
округление.png
округление 1.png
Можно ли сделать так, что бы у макроса был только выход с целочисленным значением?




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