УкраїнськаEnglishmRussian
Вход/Новый
В теме нет новых постов

Последовательный вызов Transport.messIO()


Автор Сообщение
Сообщение создано: 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 килобайт) — 2049 загрузок
tr2.png (Тип файла: image/png, Размер: 449.15 килобайт) — 2059 загрузок
Сообщение создано: 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
Если грубо, то мне нужно запустить подряд несколько
JAVASCRIPT
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.



6229