Сообщение создано: 12. 08. 2014 [10:10]
|
Waterdisp
Александр Иванов
Создатель темы
Зарегистрирован(а) с: 03.10.2013
Сообщения: 32
|
Добрый день! Не могу настроить последовательный вызов нескольких транспортов в функции JavalLikeCalc контролера. Я создал несколько транспортов типа "Модем", функция котроллера пытается последовательно обзвонить модемы и получить данные, но после первого удачного сеанса связи функция завершается. Если связь не была успешной, то функция переходит к следующему транспорту, однако если связь состоялась - завершается. При этом, никаких ошибок в лог не сыплется... В чем может быть причина?
P.S. Выложу на всяк скрины настройки 1 из транспортов, бо есть подозрение что где то с таймаутами мог затупить.
[Сообщение редактировалось 1 раз(а), в последний раз 12.08.2014 в 10:34.]
Вложенный файл
tr1.png (Тип файла: image/png, Размер: 393.13 килобайт) — 2015 загрузок
tr2.png (Тип файла: image/png, Размер: 449.15 килобайт) — 2026 загрузок
|
Сообщение создано: 12. 08. 2014 [11:10]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"Waterdisp" wrote:
Не могу настроить последовательный вызов нескольких транспортов в функции JavalLikeCalc контролера. Я создал несколько транспортов типа "Модем", функция котроллера пытается последовательно обзвонить модемы и получить данные, но после первого удачного сеанса связи функция завершается.
Какая функция и что плохого в том, что она завершается?
"Waterdisp" wrote:
Если связь не была успешной, то функция переходит к следующему транспорту, однако если связь состоялась - завершается.
При этом, никаких ошибок в лог не сыплется...
Если имеется в виду функция вызова messIO() то скорее всего она прерывается по таймауту безопасности, который 10 секунд по умолчанию и который при связи через модем будет почти наверняка превышен на первом-же сеансе.
Но об этом сообщения в консоли должны быть.
Вообще, включайте отладку для транспорта и смотрите чего модем там делает.
Learn, learn and learn better than work, work and work.
|
Сообщение создано: 12. 08. 2014 [15:17]
|
Waterdisp
Александр Иванов
Создатель темы
Зарегистрирован(а) с: 03.10.2013
Сообщения: 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, чтобы извлечь,скажем, время жизни транспорта? Или возможно еще как нибудь проверить занятость порта?
[Сообщение редактировалось 1 раз(а), в последний раз 12.08.2014 в 15:19.]
|
Сообщение создано: 12. 08. 2014 [17:26]
|
roman
Roman Savochenko
Moderator Contributor Developer
Зарегистрирован(а) с: 12.12.2007
Сообщения: 3750
|
"Waterdisp" wrote:
Если грубо, то мне нужно запустить подряд несколько
в одном контроллере JavalikeCalc.
И мне все таки удалось это сделать, только я поставил задержку перед отработкой запроса к следующему транспорту в несколько секунд.
Как я понимаю, при успешном соединении транспорт не успевает "освободить" Com-порт для следующего транспорта, поэтому не срабатывают все следующие запросы к другим транспортам (также, получилось работать с двумя портами попеременно).
То, что они все на одном Serial (/dev/ttyS0) устройстве и вообще это физически один модем умолчали!?
Тогда это логично, поскольку успешное подключения физически закроется через "Время жизни", которое 3 секунды и разблокирует доступ к другим транспортам.
Хотя в принципе всё это можно было-бы сделать в одном транспорте, меняя ему адрес перед сеансом обмена (и таймауты вернуть), в результате чего он транспорт остановит не выжидая времени жизни:
"Waterdisp" wrote:
А есть возможность обратиться к объекту транспорта из функции контроллера JavalikeCalc, чтобы извлечь,скажем, время жизни транспорта? Или возможно еще как нибудь проверить занятость порта?
В статусе он этой информации не отдаёт, но через интерфейс управления можно получить всё, что в конфигураторе, включая и поле "Время жизни".
Learn, learn and learn better than work, work and work.
|