Просмотр полной версии : ПР205. Ввод переменной с экрана и изменение её же внутренней логикой. Возможно?
DoctorDron
20.02.2026, 09:27
Есть задача: Вводить уставку 0-10.0 В с точностью 0.1 и так же требуется кнопками (чтобы быстро) дискретно менять эту уставку с шагом +-1.0. При этом введенная в поле ввода уставка должна отображать изменение, реализованное отдельно логикой, завязанной на кнопки.
Опишу конкретную ситуацию, реализовать которую у меня (пока?) не получилось:
1. Ввод значения 1.1В с экрана
2. Дискретно кнопкой с шагом "+1В" изменить переменную до "7.1"В
3. В это время значение переменной, привязанной к полю ВВОДА на экране, также должно измениться до 7.1, т.е. вводимая переменная на экране должна отображать актуальное состояние, которое может также меняться внутренней логикой
4. Откорректировать значение на экране "7.1"-> "7.3"
Затык у меня в пункте 3.
Проблема в том, что если задействовать логику на вводимую с экрана переменную, то изменение этой переменной возможно уже только через логику - ввод с экрана не работает. Новое значение с экрана можно попытаться ввести, но при нажатии ОК значение остается то, которое хранится внутри логики.
Такое ощущение, что при нажатии "ОК" введенное с экрана значение переменной успевает перезаписаться тем значением, которое хранится внутри. Связи с задержкой на 1 цикл не помогают.
Итого хотелки:
Ввод переменной с экрана И ТАКЖЕ (!) изменение её значения кнопками вверх/вниз.
Поддержание актуального состояния значения переменной, вводимой на экране для её последующего редактирования.
Возможно ли такое организовать в принципе?
Вот так как на скриншоте - не работает ввод с экрана (оставил только суть для понимания проблемы)
88188
Есть задача: Вводить уставку 0-10.0 В с точностью 0.1 и так же требуется кнопками (чтобы быстро) дискретно менять эту уставку с шагом +-1.0. При этом введенная в поле ввода уставка должна отображать изменение, реализованное отдельно логикой, завязанной на кнопки.
Опишу конкретную ситуацию, реализовать которую у меня (пока?) не получилось:
1. Ввод значения 1.1В с экрана
2. Дискретно кнопкой с шагом "+1В" изменить переменную до "7.1"В
3. В это время значение переменной, привязанной к полю ВВОДА на экране, также должно измениться до 7.1, т.е. вводимая переменная на экране должна отображать актуальное состояние, которое может также меняться внутренней логикой
4. Откорректировать значение на экране "7.1"-> "7.3"
Затык у меня в пункте 3.
Проблема в том, что если задействовать логику на вводимую с экрана переменную, то изменение этой переменной возможно уже только через логику - ввод с экрана не работает. Новое значение с экрана можно попытаться ввести, но при нажатии ОК значение остается то, которое хранится внутри логики.
Такое ощущение, что при нажатии "ОК" введенное с экрана значение переменной успевает перезаписаться тем значением, которое хранится внутри. Связи с задержкой на 1 цикл не помогают.
Итого хотелки:
Ввод переменной с экрана И ТАКЖЕ (!) изменение её значения кнопками вверх/вниз.
Поддержание актуального состояния значения переменной, вводимой на экране для её последующего редактирования.
Возможно ли такое организовать в принципе?
Вот так как на скриншоте - не работает ввод с экрана (оставил только суть для понимания проблемы)
Для переменных, привязанных к экрану, появляется свойство "Запись в конце цикла" - включение её может помочь
88189
DoctorDron
20.02.2026, 09:44
Огромное спасибо, не знал.
Помогло.
А не проще переместиться на нужный разряд и его изменить?
88191
DoctorDron
27.02.2026, 07:58
А не проще переместиться на нужный разряд и его изменить?
88191
Не проще. Это как минимум 2 лишних нажатия. К тому же дискретные команды + и - можно и на дискретные выносные кнопки завязать. Суть вопроса была в реализации корректного изменения переменной и логикой и с экрана.
Mister_Yury
29.04.2026, 14:50
Коллеги, доброго времени суток.
Прорабатываю проект автоматизации на базе ПР205. Учитывая специфику, реле планируется разместить во взрывозащищенном корпусе. Соответственно, штатный интерфейс (кнопки на лицевой панели) будет недоступен для оператора, зато имеется набор внешних дискретных сигналов ("сухие контакты"), которые нужно задействовать для управления системой через дискретные входы ПР205 .
Возникло два вопроса по реализации в среде Owen Logic:
Редактирование вещественных чисел. Необходимо организовать интерфейс для изменения уставок (температура, давление и т.п.), имеющих дробную часть. Как программно реализовать пошаговое изменение real-переменной (например, с шагом 0.1) по командам от дискретных входов "Увеличить"/"Уменьшить"? Интересует именно корректная работа с числами с плавающей точкой — нужно ли переводить их в целочисленный тип для инкремента или есть готовые библиотечные функции/блоки?
Навигация по элементам на экране. Как программно реализовать управление переходами между полями ввода/индикации на экране? Нужно, чтобы оператор с помощью дискретных входов ("Вверх"/"Вниз") перемещал активный курсор по экранным элементам (виджетам), а затем "входил" в выбранное поле для редактирования и подтверждал новое значение. Как в Owen Logic отслеживать смену активного элемента и привязывать к нему фокус ввода?
Коллеги, доброго времени суток.
Прорабатываю проект автоматизации на базе ПР205. Учитывая специфику, реле планируется разместить во взрывозащищенном корпусе. Соответственно, штатный интерфейс (кнопки на лицевой панели) будет недоступен для оператора, зато имеется набор внешних дискретных сигналов ("сухие контакты"), которые нужно задействовать для управления системой через дискретные входы ПР205 .
Возникло два вопроса по реализации в среде Owen Logic:
Я бы лучше энкодер к быстрым входам прикрутил.
А, так,
Редактирование вещественных чисел. Необходимо организовать интерфейс для изменения уставок (температура, давление и т.п.), имеющих дробную часть. Как программно реализовать пошаговое изменение real-переменной (например, с шагом 0.1) по командам от дискретных входов "Увеличить"/"Уменьшить"? Интересует именно корректная работа с числами с плавающей точкой — нужно ли переводить их в целочисленный тип для инкремента или есть готовые библиотечные функции/блоки?
Готовых не встречал. Пишем свой макрос или ФБ. Функции: единичное нажатие - изменяем с шагом 0,1; удержание - изменяем с шагом 1 со скоростью, например 1/500 мс. Можно и дальше пойти - в зависимости от длительности удержания, изменять сначала единицы, потом десятки и т.д.
Навигация по элементам на экране. Как программно реализовать управление переходами между полями ввода/индикации на экране? Нужно, чтобы оператор с помощью дискретных входов ("Вверх"/"Вниз") перемещал активный курсор по экранным элементам (виджетам), а затем "входил" в выбранное поле для редактирования и подтверждал новое значение. Как в Owen Logic отслеживать смену активного элемента и привязывать к нему фокус ввода?
Тут тоже надо будет свой макрос писать, который будет имитировать нажатие кнопки SEL, т.е. зажигать вокруг полей фокус (свой, не системный)
kondor3000
29.04.2026, 15:04
Не выйдёт тут просто так, или вам придётся вскрыть клавиатуру и припаяться к ней.
А если ИПП-120 (https://owen.ru/product/ipp120)задействовать?
Я бы не делал активный курсор, а просто перелистывал экраны с параметрами (один параметр - один экран).
А дальше:
ОК для входа.
Больше/Меньше для изменения.
OK для фиксации.
Я делаю примерно так:
89038
function_block Edit
var_input
inValue : real; // Входное значение параметра
delta : real; // Дельта при изменении
btnUp, btnDn, btnOK : bool; // Кнопки
end_var
var_output
nPar : udint; // Номер текущего параметра
outValue : real; // Выходное значение параметра
bSave : bool; // Сигнал на запись в параметр
end_var
var
rtUp, rtDn, rtOK: SYS.RTRIG; // Фиксация нажатия кнопок
bMode : bool; // Переключатель параметр/значение
end_var
outValue := inValue;
rtUp(I:=btnUp);
if rtUp.Q then
if bMode then
outValue := outValue + delta; // Инкремент значения
else
nPar := nPar + 1; // Инкремент номера параметра
end_if
end_if
rtDn(I:=btnDn);
if rtDn.Q then
if bMode then
outValue := outValue - delta; // Декремент значения
else
nPar := nPar - 1; // Декремент номера параметра
end_if
end_if
rtOK(I:=btnOK);
if rtOK.Q then
if bMode then bsave := true; end_if // Фиксируем значение перед сменой режима
bMode := not bMode; // Меняем режим
else
bSave := false;
end_if
end_function_block
kondor3000
29.04.2026, 16:32
Хотя в принципе, если сделать Запись с кнопки, то здесь почти готовая программа заполнения массива, осталось только изменение + и - добавить.
Запись массива с экрана_40 шагов_шаговик_ПР205 https://owen.ru/forum/showthread.php?t=38239&p=483018&viewfull=1#post483018
kondor3000
29.04.2026, 23:12
Вот накидал запись 10 уставок в массив с трёх кнопок. 89041
Наверху динамический ввод показывает, в какую уставку будет запись.
Удержание кнопок +/ - в течении нескольких секунд ускоряет изменение переменной ввода.
Кнопка ОК записывает переменную в массив и через 1 сек. (лучше уменьшить до 200-300 мс) автоматически переводит строку в массиве,
для ввода след. уставки, всё на одном экране.
Синий индикатор горит, пока не введут 10 уставок. Кол-во переменных можно изменить.
2 вариант: Можно выделять переменную для записи стрелкой или рамкой 89062
(ненужное удалить)
Mister_Yury
07.05.2026, 16:52
к чему привязывать имитирование нажатия SEL, к какой переменной, где ее найти или как ее создать?
МихаилГл
07.05.2026, 16:59
к чему привязывать имитирование нажатия SEL, к какой переменной, где ее найти или как ее создать?
Вам вроде kondor3000 без sel предложил, через 3 физических дискретных входа...
Powered by vBulletin® Version 4.2.3 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot