Author |
Message |
Written on: 12. 12. 2019 [09:26]
|
ShuraF
Aleksandr Fenogentov
Topic creator
registered since: 08.08.2019
Posts: 50
|
Создал Пользовательский протокол. Все работает кроме того что в логах постоянно "Время чтения истекло".
req2 = SYS.XMLNode().setAttr("ProtIt","m230_eth").setAttr("netaddr",netaddr).setAttr("data",SYS.strFromCharCode(0x06,0x03,addr_H,addr_L,0x1E));
SYS.Transport["Sockets"]["out_"+transport].messIO(req2,"UserProtocol");
Т.е. req2 прекрасно получает данные из Протокола, но позже в логах появляется ошибка
В чем причина?
[2019-12-12T10:03:51.949627] Время чтения истекло.
[2019-12-12T10:03:49.948415] Получено
00: 09 09 20 06 09 0B 0A 0B A3 38 .. ......8
[2019-12-12T10:03:49.861860] Передано
00: 09 08 00 A6 02 .....
[2019-12-12T10:03:49.860699] Время чтения истекло.
[2019-12-12T10:03:47.858535] Получено
00: 09 69 00 56 22 FF FF FF FF 28 00 96 A0 FF FF FF .i.V"....(......
10: FF ED 28 ..(
[2019-12-12T10:03:47.746750] Передано
00: 09 05 00 00 13 B9 ......
[2019-12-12T10:03:47.745465] Время чтения истекло.
[2019-12-12T10:03:45.743438] Получено
00: 09 A6 30 19 10 00 12 12 19 1E D4 2F ..0......../
[2019-12-12T10:03:45.646647] Передано
00: 09 08 13 E7 CF .....
[2019-12-12T10:03:45.645648] Время чтения истекло.
[2019-12-12T10:03:43.643466] Получено
00: 09 00 07 E0 ....
[2019-12-12T10:03:43.550551] Передано
00: 09 01 01 01 01 01 01 01 01 1D D1 ...........
[2019-12-12T10:03:43.550129] Запущен
[2019-12-12T10:03:43.549321] Подключение к '10.150.9.17'
[2019-12-12T10:03:43.549263] Разрешение '10.150.9.17'
|
Written on: 18. 12. 2019 [09:33]
|
ShuraF
Aleksandr Fenogentov
Topic creator
registered since: 08.08.2019
Posts: 50
|
Что же все-таки происходит?
Откуда берутся " Время чтения истекло.", если все работает и все из пользовательского протокола передается в логику.
По какому критерию это оценивается, если данные из функции возвращаются?
|
Written on: 18. 12. 2019 [10:34]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"ShuraF" wrote:
Что же все-таки происходит?
http://oscada.org/wiki/Special:MyLanguage/Modules/Serial#Notes
Learn, learn and learn better than work, work and work.
|
Written on: 18. 12. 2019 [13:13]
|
ShuraF
Aleksandr Fenogentov
Topic creator
registered since: 08.08.2019
Posts: 50
|
Но это не последовательный интерфейс, это TCP.
Получается, что Транспорт не распознает окончание приема (конец пакета) и даже когда мы "выкинули" данные вызвавшей подзадаче, транспорт все равно сидит и слушает (как это указано для последовательных интерфейсов). И нет смысла ждать пропадания в логах этих сообщений и главное подобрать таймаут?
|
Written on: 18. 12. 2019 [13:43]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"ShuraF" wrote:
Но это не последовательный интерфейс, это TCP.
Получается, что Транспорт не распознает окончание приема (конец пакета) и даже когда мы "выкинули" данные вызвавшей подзадаче, транспорт все равно сидит и слушает (как это указано для последовательных интерфейсов). И нет смысла ждать пропадания в логах этих сообщений и главное подобрать таймаут?
Читать нужно учитывая размер (критерий окончания) посылки протокола, а не слепо читать из канала до нулевого сообщения — прерывания по таймауту!
Примеры смотрим!
Learn, learn and learn better than work, work and work.
|
Written on: 20. 12. 2019 [12:48]
|
ShuraF
Aleksandr Fenogentov
Topic creator
registered since: 08.08.2019
Posts: 50
|
Так ничего и не понял: Что является критерием окончания. Чего оно ждет если я "все прочитал и уже отправил наверх"...
Но оно само как то прошло, перестали появляться записи
Тестирую на двух приборах Меркурий.
Если один опрашивать то цикл чтения 10 атрибутов, даже со считыванием архива порядка 1 секунды. Если включать опрос второго, то появляются Записи о превышении таймаута, период опроса поднимается до 50 секунд. Короче Меркурий+Uport5100+TCP_опрос меркурии плохо переносят.
Есть ли возможность блокировать работу Транспорта для Контроллера пока с ним работает другой Контроллер, Т.е. установка своеобразного Симофора?
|
Written on: 23. 12. 2019 [14:54]
|
ShuraF
Aleksandr Fenogentov
Topic creator
registered since: 08.08.2019
Posts: 50
|
Т.к. контроллеры "мешают" друг другу.
То присвоил им разные Приоритет задачи получения данных (101 и 102) и задал период опроса 10 секунд,
|
Written on: 21. 01. 2020 [22:04]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
http://oscada.org/wiki/Special:MyLanguage/Documents/DAQ#LogicLev
Прямая работа с выходным транспортом функции string messIO( string mess, real timeOut = 0 ); не предусматривает блокирования транспорта поза вызовом этой функции, а соответственно, для сложных протоколов с посылками ответа более чем в одном пакете, что предусматривает процесс "дожидания", не можно использовать общий транспорт, по которому возможна отправка пакетов различных протоколов или даже один, но в различных задачах (объектах контроллеров). Соответственно, если есть необходимость использования совместного транспорта, то размещайте параметры опроса по протоколу в одном объекте контроллера (задаче) или используйте модуль пользовательского протокола, к которому это замечание не имеет отношения, поскольку он осуществляет такое блокирование на время вызова процедуры обработки, как и остальные модульные протоколы OpenSCADA.
Learn, learn and learn better than work, work and work.
|