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

Как сгенерировать только одно сообщение?


Автор Сообщение
Сообщение создано: 17. 02. 2018 [11:32]
rainproof
Виктор Иванов
Создатель темы
Зарегистрирован(а) с: 02.02.2018
Сообщения: 32
Как сгенерировать одно сообщение по событию нажатия кнопки - разобрался.
Но нужно сгенерировать только одно сообщение при изменении атрибута виджета (клапан открылся) - не могу понять.

Когда прописываю так -
JAVASCRIPT
if(this["Kl_1"].attr("st_open")){
SYS.messNote("OP:",this.ownerSess().user()+"::Состояние Клапана 1::Открыт");
}

- сообщение записывается в журнал, но много раз.
Для кнопки в демопроекте это реализовано с помощью цикла.
Как реализовать в данном случае?

Уточню немного:
Весь код я расположил в окне ввода кода страницы этой мнемосхемы.
(Событие по кнопке программа отрабатывает и генерит сообщение в журнал действий оператора)
На мнемосхеме есть кнопка "Открыть"(формирует команду на открытие), и есть виджет шарового клапана.
В журнале действий оператора должно отобразится сообщение о том, что оператор нажал кнопку, и после этого сообщения - сообщение о том, что клапан по факту открылся (параметр клапана st_open == true).
Т.е. - как заставить изменение параметра st_open виджета Kl_1 - сгенерировать сообщение -
JAVASCRIPT
SYS.messNote("OP:",this.ownerSess().user()+"::Команда Клапан 1::Открыт");
?
читаю в мануале
пользовательские события (префикс: usr_) генерируются пользователем в процедурах обсчёта виджетов;

т.е. - я могу создать свое пользовательское событие типа usr_st_open, и уже его использовать в том же алгоритме, который обрабатывает нажатие кнопки? но как и где создать эту карту пользовательских событий?
в коде виджета шарового клапана есть польз.события (usr_open например). Но с чем они связаны и где созданы?

[Сообщение редактировалось 4 раз(а), в последний раз 18.02.2018 в 13:01.]
Сообщение создано: 18. 02. 2018 [17:29]
rainproof
Виктор Иванов
Создатель темы
Зарегистрирован(а) с: 02.02.2018
Сообщения: 32
Вобщем помучался немного, и сделал.
JAVASCRIPT
if (f_start) { 
var st_open_vlv1 = false;
var st_close_vlv1 = false;
}
 
//Обработка нажатий кнопок
 
var ev_wrk = ev_rez = "";
for(off = 0; (ev_wrk=event.parse(0,"\n",off)).length; ) 
{
if (ev_wrk == "ws_BtPress:/btNalivAvtoCistern") {
SYS.messNote("OP:",this.ownerSess().user()+"::Команда выбора Резервуаров::Резервуар 1 включен"); 
}
else if (ev_wrk == "ws_BtRelease:/btNalivAvtoCistern") SYS.messNote("OP:",this.ownerSess().user()+"::Команда выбора Резервуаров::Резервуар 1 отключен");
}else {
 ev_rez+=ev_wrk+"\n";
}
var event = ev_rez;
 
//Обработка состояний атрибутов виджетов клапанов
 
if (this["Kl_1"].attr("st_open")==true) {
if (st_open_vlv1 == false){
SYS.messNote("OP:",this.ownerSess().user()+"::Состояние Клапана 1::Открыт");
st_open_vlv1 = true;
}
}
if (this["Kl_1"].attr("st_open")==false) {
st_open_vlv1 = false;
}
 
if (this["Kl_1"].attr("st_close")==true) {
if (st_close_vlv1 == false){
SYS.messNote("OP:",this.ownerSess().user()+"::Состояние Клапана 1::Закрыт");
st_close_vlv1 = true;
}
}
if (this["Kl_1"].attr("st_close")==false) {
st_close_vlv1 = false;
}




[Сообщение редактировалось 1 раз(а), в последний раз 18.02.2018 в 17:34.]
Сообщение создано: 19. 02. 2018 [10:09]
roman
Roman Savochenko
Moderator
Contributor
Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
А вот теперь осталось осознать, что:
- эта задача решается на логическом уровне источника данных;
- следовательно в библиотеках шаблонов есть тому много примеров;
- системы реального времени характерны особенностями циклического программирования;
- это всё описано в документации, а значит нужно просто её читать и изучать примеры перед обращением на форум.

Learn, learn and learn better than work, work and work.
Сообщение создано: 19. 02. 2018 [10:42]
rainproof
Виктор Иванов
Создатель темы
Зарегистрирован(а) с: 02.02.2018
Сообщения: 32
- эта задача решается на логическом уровне источника данных;

буду читать и изучать дальше.
пару недель только занимаюсь этим проектом, и пару недель как увидел openscada.



7514