Просмотр полной версии : Как программно определить событие ввода значения переменной в окне визуализации
АлександрБо
28.07.2018, 09:11
Добрый день
Помогите програмно определить наступление события ввода значения переменной в окне визуализации.
Нужна идея.
Вы, наверное, имеете в виду наступление события завершения (окончания) ввода значения переменной в окне визуализации (т.е. ввели значение и нажали "ОК")?
АлександрБо
28.07.2018, 10:56
Да , именно это.
Я делал так:
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 Ваш вариант не подойдет ( Что будет при двух последовательных одинаковых значениях вводимой переменной ?)
А сами как думаете?
Что произойдет?
А не проще в начале цикла ПЛК сравнивать значение введенной переменной к примеру с контрольным значением, а в следующей строке присваивать это значение контрольной?
А:=В<>C;
.
.
.
С:=В;
Может и проще, но просто жить - не интересно :)
Благодарю т.т. Spawn , Кислов
Идея оказалась весьма работоспособной.
Т Iara197a Ваш вариант не подойдет ( Что будет при двух последовательных одинаковых значениях вводимой переменной ?)
Всё будет работать согласно алгоритма. АлександрБо, Вам проще (правильнее) будет использовать вариант, который предлагает lara197a. Я, кстати, в своих последующих проектах такой алгоритм и применял (запамятовал что-то). Вариант, предложенный мной в 4-м посте, я взял с моего первого проекта, а там такой огород получился как раз таки, когда я столкнулся с проблемой 2 года назад, которую описывает автор по приведенной Евгением ссылке.
Powered by vBulletin® Version 4.2.3 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot