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);
Правильное ли это решение?
|