EnglishУкраїнськаmRussian
Login/New
Topic with many replies

Опрос устройств по событию


Author Message
Written on: 10. 06. 2010 [11:20]
Dreamer
Николай Пастушкевич
registered since: 14.04.2010
Posts: 6
Здравствуйте! Требуется помощь в решении следующей проблемы. Я осуществил опрос некоторого устройства через пользовательский протокол как описано в данном разделе форума (используюя выходную часть пользовательского протокола и функцию в модуле JavaLikeCalc). Все заработало. Но предполагается работать с многими такими же устройствами, у каждого из которых свой транспорт. Поэтому необходимо передать транспорт в качестве параметра в пользовательскую функцию. Есть ли возможность это сделать, если нет - то как обойти это препятствие? Заранее благодарю за помощь.
Written on: 10. 06. 2010 [11:38]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
Создавать отдельные транспорты. Их же не бесконечное множество?

Learn, learn and learn better than work, work and work.
Written on: 17. 08. 2010 [15:42]
Dreamer
Николай Пастушкевич
registered since: 14.04.2010
Posts: 6
Доброго времени суток! В очередной раз потребовалась помощь форума. Проблема состоит в слудующем. Я организовал опрос некоторого устройства путем создания функции на JavaLikeCalc и пользовательського протокола. В качестве транспорта используется сокет. Но при отсутствии ответа от устройства видимо по истечении таймаута данный транспорт отключается. Пытался включать его автоматически используя АРI-функцию (SYS.Transport.Sockets.out_<ID сокета>.start) - не получается. Также не получается например получить описание транспорта (SYS.Transport.Sockets.out_<ID сокета>.dscr). Подскажите в чем моя ошибка при обращении к АРI-функциям исходящего транспорта и как можно избежать отключения
транспорта. Спасибо!
Written on: 17. 08. 2010 [17:05]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"Dreamer" wrote:

Пытался включать его автоматически используя АРI-функцию (SYS.Transport.Sockets.out_<ID сокета>.start) - не получается.

Каким боком это вызов функции?

"Dreamer" wrote:

Также не получается например получить описание транспорта (SYS.Transport.Sockets.out_<ID сокета>.dscr).

Естественно. Где в документации написано, что таким образом это можно?

"Dreamer" wrote:

Подскажите в чем моя ошибка при обращении к АРI-функциям исходящего транспорта и как можно избежать отключения транспорта.

Отключения не нужно избегать. Это нормальное поведение исходящего транспорта в случае ошибки подключения.
А вот то что он не пытается транспорт запускать в функции messIO() я поправил.

Learn, learn and learn better than work, work and work.
Written on: 19. 02. 2014 [07:58]
Anti1800
Олег Астраханцев
registered since: 18.12.2011
Posts: 25
Всем добрый день! Наконец-то появилось свободное время и можно снова посидеть с опенскадой. Готовится у меня железка на МК (в тестовых испытаниях место нее быстро написанная программа клиента на СИ), которая через модуль SIM900 первым посылает данные на входной транспорт - TCP сокет. Протокол примитивный свой. Народ помогите разобраться с простым рабочим примером. Пусть от устройства приходит пакет длинной 2 байта. Задача принять пакет, отправить его обратно, принятый пакет разбить на 2 байта. Первому байту присвоить атрибут "адрес", а второму "данные".Входной транспорт пусть называется "sockIn", протокол - "userPrt". Как будет выглядеть рабочий код в User Protocol и в JavaLikeCalc ?
Written on: 19. 02. 2014 [10:25]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"Anti1800" wrote:

Народ помогите разобраться с простым рабочим примером. Пусть от устройства приходит пакет длинной 2 байта. Задача принять пакет, отправить его обратно, принятый пакет разбить на 2 байта. Первому байту присвоить атрибут "адрес", а второму "данные".Входной транспорт пусть называется "sockIn", протокол - "userPrt". Как будет выглядеть рабочий код в User Protocol и в JavaLikeCalc ?

Примеров уже написано масса и писать новый лично Вам я не буду, особенно если учесть, что пример приведён прямо в документации http://wiki.oscada.org/Doc/UserProtocol#h950-4, и штук пять реальных реализаций лежит в "ДемоБД", разве только можно несколько упростить используя новый объект IO: http://wiki.oscada.org/Doc/FLibSYS#h378-11

Learn, learn and learn better than work, work and work.
Written on: 19. 02. 2014 [14:39]
Anti1800
Олег Астраханцев
registered since: 18.12.2011
Posts: 25
Не могу понять, как передать значение "request" из UserProtocol куда то выше, например в JavaLikeCalc. В примерах идет запрос из скады, а мне надо принять завпрос в скаду через входной транспорт. В User Protocol допустим провел обработку данных, а как их "вытащить" в JavaLikeCalc?
Written on: 19. 02. 2014 [20:15]
roman
Roman Savochenko
Moderator
Contributor
Developer
registered since: 12.12.2007
Posts: 3750
"Anti1800" wrote:

Не могу понять, как передать значение "request" из UserProtocol куда то выше, например в JavaLikeCalc.

Записью в любой атрибут источника данных.
Вообще входящий протокол должен с объектом источника данных ассоциироваться в любом случае, поскольку сам контекста данных не имеет.

"Anti1800" wrote:

В примерах идет запрос из скады, а мне надо принять завпрос в скаду через входной транспорт. В User Protocol допустим провел обработку данных, а как их "вытащить" в JavaLikeCalc?

http://wiki.oscada.org/Doc/OpisanieProgrammy#h920-10

Learn, learn and learn better than work, work and work.
Written on: 27. 02. 2014 [14:47]
Anti1800
Олег Астраханцев
registered since: 18.12.2011
Posts: 25
Разобрался!) Спасибо! Кто столкнется пишите, объясню все.
Written on: 06. 11. 2016 [11:15]
tka4ev_s
Сергей Ткачев
registered since: 19.10.2014
Posts: 30
Добрый день !!
Использовал данный код для опроса счетчика СЕ102М
Выходная программа протокола prt:
rez=tr.messIO(io.text());
rez1=rez;
while(true)
{
trez = tr.messIO("");
if( !trez.length ) break;
rez+=trez;
}
io.setAttr("Text",rez);
опрос идет, но стоит только отключить питание как происходит зависание
а если запустить исполнение то скада полностью зависает не запустив среду исполнения.
Вылечилось вот таким кодом
rez=tr.messIO(io.text());
rez1=rez;
tm_to = SYS.time()+5;
while(true)
{
if(SYS.time() > tm_to)break;
trez = tr.messIO("");
if( !trez.length ) break;
rez+=trez;
}
io.setAttr("Text",rez);
Правильное ли это решение?



2867