УкраїнськаEnglishmRussian
Вход/Новый
В теме нет новых постов

Реализация кнопки квитирования на верхнем уровне (запись Modbus регистра 1-цы по нажатию кнопки).


Автор Сообщение
Сообщение создано: 06. 09. 2012 [10:13]
pentagon128
Руслан Кучерявый
Создатель темы
Зарегистрирован(а) с: 15.11.2011
Сообщения: 102
Здравствуйте. Подскажите как лучше реализовать отдельную кнопку квитирования в Vision. В контроллере есть булевская ячейка с доступом по Modbus TCP. При записи в неё 1-цы контроллер сбрасывает в своей технологической программе триггеры технологической сигнализации (лампы мигания, звонки). И перезаписывает эту ячейку 0-м. Так реализована функция квитирования с верхнего уровня. В существующем проекте на Trace Mode всё реализуется просто. В среде разработки вытаскивается кнопка и посылает 1-цу в канал, присоединённый к булевской ячейке контроллера. Ведётся лог нажатий на кнопку квитирования оператором. Пробую реализовать в Open Scada v0.8.0 2. Через модуль MODBUS ячейку подключил (C:0x3FF:rw:arm_kvit:арм квит) могу записать в неё 1-цу в окне атрибутов, ткнув мышкой в поле для галочки. Квитирование работает. Далее в Vision на поле вытаскиваю элемент "кнопка". И вот что дальше делать непонятно...Как грамотно написать обработку события по нажатию кнопки для элемента кнопка?
Сообщение создано: 06. 09. 2012 [12:26]
legend
Oleg N
Зарегистрирован(а) с: 13.04.2012
Сообщения: 63
Посмотрите demo пример AGLKS.
Создаете виджет, добавляете в него кнопку. В обработке виджета описываете логику, которая вам нужна. Делается не сложнее, чем на ТМ.
Посмотрите пример с вентилятором в быстром старте, а еще лучше проделайте его самостоятельно. Ну и про VCAEngine можно почитать.
Сообщение создано: 06. 09. 2012 [12:32]
trotila
Юрий
Зарегистрирован(а) с: 09.04.2012
Сообщения: 10
Обработка событий хорошо описана документе OpenSCADA "Быстрый старт" (5.3.2. Создание финального скомпонованного виджета "Холодильник" на основе примитива "Группа элементов")

В общем необходимо проделать следующие операции:
1) В свойствах визуального элемента,в котором располагается кнопка квитирования, во вкладке "Обработка", добавить новый атрибут,установить поле "Конфигурация" в значение "Выходная связь" или "Полная связь", установить значение поля "Обработка" в True.
2) В свойствах визуального элемента, во вкладке "Связи", указать путь до атрибута параметра контролера.(prm:/ModBus/<Controler>/<parametr>/arm_kvit), где:
<Controller> - имя контролера,
<parametr> - имя параметра контролера.
3) В свойствах визуального элемента, во вкладке "Обработка", добавить алгоритм обработки события нажатия кнопки, например:

ev_cur = ev_rez = "";
off=0;
while(true)
{
ev_cur=Special.FLibSYS.strParse(event,0,"\n",off);
if( ev_cur == "" ) break;
SYS.messErr("TEST","Event: "+ev_cur);
// Если нажата кнопка bt1, то : <делаем что-нибудь>
// В Вашем случае необходимо установить значение переменной arm_kvit равное 1
if( ev_cur == "ws_BtPress:/bt1") arm_kvit=1;
else ev_rez += (ev_cur+"\n");
}
event=ev_rez;
Сообщение создано: 06. 09. 2012 [12:38]
legend
Oleg N
Зарегистрирован(а) с: 13.04.2012
Сообщения: 63
Кстати, в обработку виджета можно еще добавить механизм визуализации и квитирования аварий, заложененный в саму OpenSCADA (светофор в правом нижнем углу рядом с часами). Разберите в демо пример как работает сигнализация об авариях на примере элемента anShow - отображение аналоговых данных.
Сообщение создано: 06. 09. 2012 [14:27]
pentagon128
Руслан Кучерявый
Создатель темы
Зарегистрирован(а) с: 15.11.2011
Сообщения: 102
Спасибо большое всем кто ответил! Буду пробовать! Быстрый старт читал давненько и прогонял, включая элемент холодильника. С anShow уже разбирался сегодня. Отдельное Спасибо trotila (Юрий) - мне нужно было именно то что вы описали. В своё время на Visual Studio NET приходилось писать программы с MDI интерфейсом, сложной объёктной моделью, кучей окон, включая плавающие по двойному клику (так называемые Nobi, в них панели управления хорошо делать). А тут QT со своими заморочками. Думаю разберусь...:D
Сообщение создано: 07. 09. 2012 [07:01]
pentagon128
Руслан Кучерявый
Создатель темы
Зарегистрирован(а) с: 15.11.2011
Сообщения: 102
всё получилось! Спасибо за помощь!
Сообщение создано: 02. 11. 2014 [09:47]
tka4ev_s
Сергей Ткачев
Зарегистрирован(а) с: 19.10.2014
Сообщения: 30
Роман добрый день!!!
Создаю виджет прописываю программу
ev_cur = ev_rez = "";
off=0;
while(true)
{
ev_cur=Special.FLibSYS.strParse(event,0,"\n",off);
if( ev_cur == "" ) break;
//SYS.messErr("TEST","Event: "+ev_cur);
if( ev_cur == "ws_LnAccept:/tzad1") tzad=tzad1_value*10;
else tzad1_value=tzad/10;
if( ev_cur == "ws_CombChange:/combo1")
{ if (combo1_value=="Выключено") regim=1;
if (combo1_value=="Экономный") regim=4;
if (combo1_value=="Пониженый") regim=3;
if (combo1_value=="Комфортный") regim=5;
if (combo1_value=="Ожидание") regim=2;
if (combo1_value=="Авто") regim=0;
}
else ev_rez += (ev_cur+"\n");
}
event=ev_rez;
запускаю на исполнение событие Event не происходит
терминал ошибок компиляции не выдает
в другом виджете все работает но после дня мучений (так и не понял что сделал)
не могу понять что делаю не так
Сообщение создано: 02. 11. 2014 [11:32]
tka4ev_s
Сергей Ткачев
Зарегистрирован(а) с: 19.10.2014
Сообщения: 30
прописал в атрибут>страница > группа название группы
все заработало



0131