Written on: 12. 08. 2014 [10:10]
|
Waterdisp
Александр Иванов
Topic creator
registered since: 03.10.2013
Posts: 32
|
Добрый день! Не могу настроить последовательный вызов нескольких транспортов в функции JavalLikeCalc контролера. Я создал несколько транспортов типа "Модем", функция котроллера пытается последовательно обзвонить модемы и получить данные, но после первого удачного сеанса связи функция завершается. Если связь не была успешной, то функция переходит к следующему транспорту, однако если связь состоялась - завершается. При этом, никаких ошибок в лог не сыплется... В чем может быть причина?
P.S. Выложу на всяк скрины настройки 1 из транспортов, бо есть подозрение что где то с таймаутами мог затупить.
[This article was edited 1 times, at last 12.08.2014 at 10:34.]
Attachment
tr1.png (File type: image/png, Size: 393.13 kilobytes) — 2022 downloads
tr2.png (File type: image/png, Size: 449.15 kilobytes) — 2034 downloads
|
Written on: 12. 08. 2014 [11:10]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"Waterdisp" wrote:
Не могу настроить последовательный вызов нескольких транспортов в функции JavalLikeCalc контролера. Я создал несколько транспортов типа "Модем", функция котроллера пытается последовательно обзвонить модемы и получить данные, но после первого удачного сеанса связи функция завершается.
Какая функция и что плохого в том, что она завершается?
"Waterdisp" wrote:
Если связь не была успешной, то функция переходит к следующему транспорту, однако если связь состоялась - завершается.
При этом, никаких ошибок в лог не сыплется...
Если имеется в виду функция вызова messIO() то скорее всего она прерывается по таймауту безопасности, который 10 секунд по умолчанию и который при связи через модем будет почти наверняка превышен на первом-же сеансе.
Но об этом сообщения в консоли должны быть.
Вообще, включайте отладку для транспорта и смотрите чего модем там делает.
Learn, learn and learn better than work, work and work.
|
Written on: 12. 08. 2014 [15:17]
|
Waterdisp
Александр Иванов
Topic creator
registered since: 03.10.2013
Posts: 32
|
Если грубо, то мне нужно запустить подряд несколько
rez1=SYS.Transport.Serial.out_transport1.messIO(Special.FLibSYS.strEnc2Bin("01 03 30 00 00 02 cb 0b"));
rez2=SYS.Transport.Serial.out_transport2.messIO(Special.FLibSYS.strEnc2Bin("01 03 30 00 00 02 cb 0b"));
rez3=SYS.Transport.Serial.out_transport3.messIO(Special.FLibSYS.strEnc2Bin("01 03 30 00 00 02 cb 0b"));
в одном контроллере JavalikeCalc.
И мне все таки удалось это сделать, только я поставил задержку перед отработкой запроса к следующему транспорту в несколько секунд. Как я понимаю, при успешном соединении транспорт не успевает "освободить" Com-порт для следующего транспорта, поэтому не срабатывают все следующие запросы к другим транспортам (также, получилось работать с двумя портами попеременно).
А есть возможность обратиться к объекту транспорта из функции контроллера JavalikeCalc, чтобы извлечь,скажем, время жизни транспорта? Или возможно еще как нибудь проверить занятость порта?
[This article was edited 1 times, at last 12.08.2014 at 15:19.]
|
Written on: 12. 08. 2014 [17:26]
|
roman
Roman Savochenko
Moderator Contributor Developer
registered since: 12.12.2007
Posts: 3750
|
"Waterdisp" wrote:
Если грубо, то мне нужно запустить подряд несколько
в одном контроллере JavalikeCalc.
И мне все таки удалось это сделать, только я поставил задержку перед отработкой запроса к следующему транспорту в несколько секунд.
Как я понимаю, при успешном соединении транспорт не успевает "освободить" Com-порт для следующего транспорта, поэтому не срабатывают все следующие запросы к другим транспортам (также, получилось работать с двумя портами попеременно).
То, что они все на одном Serial (/dev/ttyS0) устройстве и вообще это физически один модем умолчали!?
Тогда это логично, поскольку успешное подключения физически закроется через "Время жизни", которое 3 секунды и разблокирует доступ к другим транспортам.
Хотя в принципе всё это можно было-бы сделать в одном транспорте, меняя ему адрес перед сеансом обмена (и таймауты вернуть), в результате чего он транспорт остановит не выжидая времени жизни:
"Waterdisp" wrote:
А есть возможность обратиться к объекту транспорта из функции контроллера JavalikeCalc, чтобы извлечь,скажем, время жизни транспорта? Или возможно еще как нибудь проверить занятость порта?
В статусе он этой информации не отдаёт, но через интерфейс управления можно получить всё, что в конфигураторе, включая и поле "Время жизни".
Learn, learn and learn better than work, work and work.
|