PDA

Просмотр полной версии : Как программно определить событие ввода значения переменной в окне визуализации



АлександрБо
28.07.2018, 09:11
Добрый день
Помогите програмно определить наступление события ввода значения переменной в окне визуализации.
Нужна идея.

Spawn
28.07.2018, 10:55
Вы, наверное, имеете в виду наступление события завершения (окончания) ввода значения переменной в окне визуализации (т.е. ввели значение и нажали "ОК")?

АлександрБо
28.07.2018, 10:56
Да , именно это.

Spawn
28.07.2018, 11:15
Я делал так:

1. В глобальных переменных "DialogClosed : BOOL := FALSE;"
2. В свойствах поля, по нажатию на которое появляется форма ввода значения, в свойствах "OnDialogClosed" -> "Выполнить ST-код" -> "DialogClosed := TRUE;"
3. В свойствах поля, по нажатию на которое появляется форма ввода значения, в свойствах "OnMouseClick" -> "Выполнить ST-код" -> "FieldNum := 1;"
4. Где-нибудь в коде, например, в PLC_PRG:
Отсекаем ненужные поля:
IF DialogClosed THEN
IF (FieldNum <> 1) AND (FiledNum <> 2) AND ... THEN
DialogClosed := FALSE;
END_IF
END_IF
Обработка окончания ввода значений нужных полей:
IF DialogClosed THEN
CASE FieldNum OF
1 :
...
2 :
...
END_CASE
END_IF

Как-то так...

lara197a
28.07.2018, 11:26
А не проще в начале цикла ПЛК сравнивать значение введенной переменной к примеру с контрольным значением, а в следующей строке присваивать это значение контрольной?
А:=В<>C;
.
.
.
С:=В;

Евгений Кислов
28.07.2018, 11:29
Поддержу вариант с проверкой изменения значения в коде (удобно создать для этого отдельную функцию), так как:

1. OnDialogClosed может работать некорректно в актуальных для нас версиях CODESYS:
http://www.owen.ru/forum/showthread.php?t=20069&p=283289&viewfull=1#post283289

2. OnDialogClosed сработает и на закрытие диалога через нажатие кнопки Esc.

АлександрБо
28.07.2018, 12:42
Благодарю т.т. Spawn , Кислов
Идея оказалась весьма работоспособной.
Т Iara197a Ваш вариант не подойдет ( Что будет при двух последовательных одинаковых значениях вводимой переменной ?)

lara197a
28.07.2018, 14:23
.
Т Iara197a Ваш вариант не подойдет ( Что будет при двух последовательных одинаковых значениях вводимой переменной ?)

А сами как думаете?
Что произойдет?

Spawn
28.07.2018, 23:16
А не проще в начале цикла ПЛК сравнивать значение введенной переменной к примеру с контрольным значением, а в следующей строке присваивать это значение контрольной?
А:=В<>C;
.
.
.
С:=В;

Может и проще, но просто жить - не интересно :)

Spawn
29.07.2018, 02:51
Благодарю т.т. Spawn , Кислов
Идея оказалась весьма работоспособной.
Т Iara197a Ваш вариант не подойдет ( Что будет при двух последовательных одинаковых значениях вводимой переменной ?)

Всё будет работать согласно алгоритма. АлександрБо, Вам проще (правильнее) будет использовать вариант, который предлагает lara197a. Я, кстати, в своих последующих проектах такой алгоритм и применял (запамятовал что-то). Вариант, предложенный мной в 4-м посте, я взял с моего первого проекта, а там такой огород получился как раз таки, когда я столкнулся с проблемой 2 года назад, которую описывает автор по приведенной Евгением ссылке.

nastuhashap
31.10.2025, 13:39
Такой способ имеет смысл, только как быть при нескольких верхних уровнях (скада и панель оператора)

МихаилГл
31.10.2025, 13:45
Такой способ имеет смысл, только как быть при нескольких верхних уровнях (скада и панель оператора)

Сделал такое без проблем. 3 уровня ввода: визуализация ПЛК, сп315 и ип320. Вводить можно хоть на чем, но есть одно но, есть выбор на каждом пульте активного в данный момент устройства, и соответственно выбор. Если выбрана активным устройством ввода сп315, то и только с неё будут данные приниматься, с остальных игнор.

Валенок
31.10.2025, 16:51
Сделал такое без проблем. 3 уровня ввода: визуализация ПЛК, сп315 и ип320. Вводить можно хоть на чем, но есть одно но, есть выбор на каждом пульте активного в данный момент устройства, и соответственно выбор. Если выбрана активным устройством ввода сп315, то и только с неё будут данные приниматься, с остальных игнор.
Зачем такие сложности с каким-то "активным устройством"?
Если изначально подходить с прицелом на "много" точек ввода, то не имеет значания сколько этих точек будет - 1, 3 или 10.

МихаилГл
31.10.2025, 17:01
Зачем такие сложности с каким-то "активным устройством"?
Если изначально подходить с прицелом на "много" точек ввода, то не имеет значания сколько этих точек будет - 1, 3 или 10.

Ну выбор, какое устройство в данный момент "мастер", доступно со всех устройств, и на каждом устройстве видно, кто главный.

Так что это сделано только для удобства и блокирования лишних точек ввода. А так можно с любого управлять, без проблем, но это не удобно в той технологии из соображений безопасности тех процесса... Нужно в данный момент одно устройство ввода реквизитов и параметров, и чтоб другие не "шалили"...

Валенок
31.10.2025, 18:30
От шалунов не спасет ничто. Они ж могут и первыми подойти и "замастерится"

МихаилГл
31.10.2025, 19:07
Ну в скадах же есть рид-онли лицензии, это такого же примерно типа, но примитивная. Да и нет там по сути шалунов, так, на всякий пожарный... Тем более так значительно проще взаимодействовать с 3мя разными устройствами ввода и управления, так как 3 разных механизма: модбас тср, модбас рту и прямая работа с тэгами с визуализации.

Валенок
31.10.2025, 21:23
Ну в скадах же есть рид-онли лицензии,.
Лицензии.. Вот оно что. Видимо какая-то сложность положить болт на пришедший пакет, требует значительных ресурсов))


... Тем более так значительно проще взаимодействовать с 3мя разными устройствами ввода и управления, так как 3 разных механизма: модбас тср, модбас рту и прямая работа с тэгами с визуализации.
Дык проще все однотипно сделать - 1 раз не 3. А то что "модбас тср, модбас рту и прямая работа с тэгами с визуализации" - вообще не вижу разницы.

МихаилГл
01.11.2025, 06:26
..положить болт на пришедший пакет...
Чтобы на что-то положить, надо знать, на что именно!

..проще все однотипно сделать...
Так все однотипно и сделано, именно обработка. Там сейчас любое решение будет работать, а вот механизмы работы с переменными разные.

Валенок
01.11.2025, 08:40
Чтобы на что-то положить, надо знать, на что именно!
Программист же завсегда знает точку приложения болта, не?


.. , а вот механизмы работы с переменными разные.
А зачем разные сделали? Я одним обхожусь, так же проще