Author |
Message |
Written on: 08. 05. 2013 [10:47]
|
kerberous
Vitaliy Kleymenov
Topic creator
registered since: 24.04.2013
Posts: 1
|
Здравствуйте!
Имеется задача: отправлять СМС сообщения о критических авариях системы.
В качестве решения был принят механизм:
1) При аварии отправлять системные сообщения с отдельной категорией для смс.
2) Создать архиватор сообщений этой категории.
3) Выбирать сообщения архива по времени и отправлять их по СМС через транспорт сериал.
Однако столкнулся с непонятной ситуацией. Создал тестовую функцию для отправки СМС через пользовательский протокол SMS.
Выглядит она так:
//Подготовка запроса
req = SYS.XMLNode("send").setAttr("tel","+79600000000").setText("textSMS");
//Отправка запроса
SYS.Transport["Serial"]["out_com1"].messIO(req,"SMS");
if(!req.attr("err").length) SYS.messDebug("TEST REQ","RES: "+req.text());
В результате ошибок нет, но и пользовательский протокол не выполняется (счетчик не растет, добавлял отправку дебаг сообщения в первую строчку протокола - ничего не отправлялось).
Функцию запускал через 3-ю вкладку по кнопке.
Может кто подскажет что я делаю не так?
|
Written on: 08. 05. 2013 [17:29]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"kerberous" wrote:
Имеется задача: отправлять СМС сообщения о критических авариях системы.
В качестве решения был принят механизм:
1) При аварии отправлять системные сообщения с отдельной категорией для смс.
2) Создать архиватор сообщений этой категории.
3) Выбирать сообщения архива по времени и отправлять их по СМС через транспорт сериал.
Нормально.
"kerberous" wrote:
//Подготовка запроса
req = SYS.XMLNode("send").setAttr("tel","+79600000000").setText("textSMS");
//Отправка запроса
SYS.Transport["Serial"]["out_com1"].messIO(req,"SMS");
if(!req.attr("err").length) SYS.messDebug("TEST REQ","RES: "+req.text());
Так должно работать:
req = SYS.XMLNode("send").setAttr("ProtIt","SMS").setAttr("tel","+79600000000").setText("textSMS");
SYS.Transport["Serial"]["out_com1"].messIO(req,"UserProtocol");
Learn, learn and learn better than work, work and work.
|
Written on: 02. 09. 2013 [14:58]
|
Godzilla
Арсен Закоян
Contributor
registered since: 12.02.2013
Posts: 123
|
Не стал создавать новую тему,спрошу здесь.
Задача также при возникновении аварии отсылать смс нужным людям через модем.Собственно все работает,только при аварии СМС отправляется постоянно, чуть ли не каждую секунду, а хотелось бы 1 раз.
Кусок кода отправки содержится в виджете ,вот он
//включение сигнализации
if(pErrCode==3 ){wColor = "#ac040d-255";alarm="90||высокое давление|5";diagram1_prm0color = "red";
//отправка СМС
req = SYS.XMLNode("send").setAttr("ProtIt","SMS").setAttr("tel","+79000000000").setText("message");
SYS.Transport["Serial"]["out_ttyACM0"].messIO(req,"UserProtocol");}
|
Written on: 02. 09. 2013 [20:39]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"Godzilla" wrote:
Не стал создавать новую тему,спрошу здесь.
Задача также при возникновении аварии отсылать смс нужным людям через модем.Собственно все работает,только при аварии СМС отправляется постоянно, чуть ли не каждую секунду, а хотелось бы 1 раз.
Ну так, сделайте обработку формирования нарушений только при смене и в этот момент отсылать SMS.
P.S. Вообще нежелательно SMS отправлять из задачи интерфейса, поскольку это не быстро и влияет на реакцию интерфейса.
Learn, learn and learn better than work, work and work.
|
Written on: 03. 09. 2013 [15:39]
|
Godzilla
Арсен Закоян
Contributor
registered since: 12.02.2013
Posts: 123
|
Был бы признателен за подсказку как сделать обработку формирования нарушений только при смене.Думаю не я один сталкивался с этой проблемой
|
Written on: 03. 09. 2013 [17:29]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"Godzilla" wrote:
Был бы признателен за подсказку как сделать обработку формирования нарушений только при смене.Думаю не я один сталкивался с этой проблемой
В ДемоБД есть примеры:
Шаблон унифицированного аналогового параметра: /DAQ/tmplb_base/anUnif
Элемент отображения: Main.anShow
Общий смысл в том чтобы сохранить предыдущую ошибку и если в следующем цикле она совпала то пропустить.
Learn, learn and learn better than work, work and work.
|
Written on: 06. 09. 2013 [12:21]
|
Godzilla
Арсен Закоян
Contributor
registered since: 12.02.2013
Posts: 123
|
Спасибо Роман,все получилось.Но если нужно послать смску нескольким людям,то происходит следующее:
при аварии посылается смс на первый номер
и сразу же начинается запрос на посылку на второй номер,но в это время еще не закончена посылка на первый номер.Естественно на второй номер смс не отправляется.
Существует ли какая нибудь команда с помощью которой выполнение приостанавливается на некоторое количество секунд?Пока нашел выход в пустом запросе,для того чтоб потянуть время.
Но в любом случае это увеличивает время выполнения проекта (код отправки в виджете)с 1 сек до 5 при 2х номерах.Куда посоветуете тогда вставить код отправки?
|
Written on: 06. 09. 2013 [13:30]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"Godzilla" wrote:
Но если нужно послать смску нескольким людям,то происходит следующее:
при аварии посылается смс на первый номер
и сразу же начинается запрос на посылку на второй номер,но в это время еще не закончена посылка на первый номер.Естественно на второй номер смс не отправляется.
Как это сразу и как может быть не закончена предыдущая отправка если транспорт отпускает после окончания отправки? Вы-же на второй номер отправляете отдельным вызовом?
"Godzilla" wrote:
Существует ли какая нибудь команда с помощью которой выполнение приостанавливается на некоторое количество секунд?
Она то существует, но я крайне не рекомендую её использовать!
"Godzilla" wrote:
Пока нашел выход в пустом запросе,для того чтоб потянуть время.
Но в любом случае это увеличивает время выполнения проекта (код отправки в виджете)с 1 сек до 5 при 2х номерах.Куда посоветуете тогда вставить код отправки?
Я сразу говорил, что ему там не место.
Лучше всего создать отдельный контроллер спулера с очередью SMS или на крайний случай делать это в шаблоне параметра, но только не в скрипте виджета, что прямо влияет на интерактивность взаимодействия с оператором.
Learn, learn and learn better than work, work and work.
|
Written on: 30. 08. 2015 [22:19]
|
green
Александр Белоногов
registered since: 23.08.2015
Posts: 4
|
Доброго дня!
Пытаюсь разобраться с USB модемом,используя данный пример. Для этого настроил последовательный транспорт "gsm_out", а обработку хочу проводить в пользовательском протоколе "GSM_modem".
Проблема в том,что у меня не получается передать данные из функции контроллера через протокол исходящему транспорту. По аналогии с отправкой смс,я передаю номер телефона на который делаю звонок:
//отправка запроса из функции
req=SYS.XMLNode("send").setAttr("Profit","GSM_modem").setAttr("tel", "0990000000");
SYS.Transport["Serial"]["gsm_out"].messIO(req,"UserProtocol");
Не работает и запрос из темы выше, если я исползьзую мой модем и протокол "СМС"
req = SYS.XMLNode("send").setAttr("ProtIt","SMS").setAttr("tel","+79600000000").setText("textSMS");
SYS.Transport["Serial"]["gsm_out"].messIO(req,"UserProtocol");
Мой вопрос первый: что я делаю не так? Модем управлется из Putty и из выходного транспорта(gsm_out) через кнопку "отправить" без проблем.
И второе: я понимаю,что запрос в виде дерева XML позволяет использовать настроенные транспорты, оперируя только атрибутами. Но вот споткнулся об это "облегчение" и задумался, а можно ли напрямую работать с транспортом из пользовательской функции или виджета ?
Спасибо.
|
Written on: 31. 08. 2015 [09:02]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"green" wrote:
Мой вопрос первый: что я делаю не так? Модем управлется из Putty и из выходного транспорта(gsm_out) через кнопку "отправить" без проблем.
И второе: я понимаю,что запрос в виде дерева XML позволяет использовать настроенные транспорты, оперируя только атрибутами. Но вот споткнулся об это "облегчение" и задумался, а можно ли напрямую работать с транспортом из пользовательской функции или виджета ?
Телепаты в отпуске, что-бы отвечать на вопросы, что Вы там себе делаете.
У меня очевидно работает, через XML это: http://wiki.oscada.org/HomePageEn/Using/APIFunctionLibs/LibUserPrtDevs#h1161-4
Если Вам так не нравится, то не используйте, но и вопрошать тогда не нужно!
Learn, learn and learn better than work, work and work.
|