Форум АО "ВЗЛЕТ"

Приборы ЗАО "Взлет" => Отдел программистов => Тема начата: resident от 26.08.2010, 16:29:42



Название: Правильное использование сервера связи.
Отправлено: resident от 26.08.2010, 16:29:42
Здравствуйте.
Приборы ТСРВ-22,23. Среда разработки Visual Studio 2010
Задача:
1.   Чтение текущих значений
2.   Чтение архивов
При использовании одного прибора вопросов нет.
А как правильно использовать сервер если скажем у меня один прибор подключен к СОМ1 по RS232 а два других к СОМ 2 по RS485? Программный код не прошу. Интересует принцип (алгоритм что ли) правильного использования сервера.
 То есть к примеру:
1 Вариант. Создать один экземпляр VzljotSrv.MBComMaster устанавить все необходимые свойства. В дальнейшем при опросе приборов начинаем манипулировать свойствами  ComPort, ComSpeed, DeviceAddress , Connected и т.д.
2 Вариант (логичнее). Создать один экземпляр VzljotSrv.MBComMaster для каждого интерфейса связи. И также начинаем манипулировать свойствами.  Но не ясно, если я перед чтением установлю адрес прибора =1 вызову скажем функцию ReadInputRegs сразу изменю адрес на =2 для чтения второго прибора (в цикле) и снова вызову ReadInputRegs??? Из “документации” понятно что сервер многопоточный, и запросы помещаются в очередь. Не получится так что при вызове функции ReadInputRegs  для первого прибора она будет адрисована второму прибору???
3 Вариант. Создать экземпляр VzljotSrv.MBComMaster для каждого прибора(проверено работает но не логично)
Я думаю что смысл моего вопроса специалистам будет понятен.
Спасибо.


Название: Re: Правильное использование сервера связи.
Отправлено: resident от 27.08.2010, 13:30:15
Уважаемые специалисты "Взлет". Вопрос актуален. Мне кто ни будь ответит?


Название: Re: Правильное использование сервера связи.
Отправлено: Денис Пономарев от 27.08.2010, 17:41:07
2 Вариант (логичнее). Создать один экземпляр VzljotSrv.MBComMaster для каждого интерфейса связи. И также начинаем манипулировать свойствами.  Но не ясно, если я перед чтением установлю адрес прибора =1 вызову скажем функцию ReadInputRegs сразу изменю адрес на =2 для чтения второго прибора (в цикле) и снова вызову ReadInputRegs??? Из “документации” понятно что сервер многопоточный, и запросы помещаются в очередь. Не получится так что при вызове функции ReadInputRegs  для первого прибора она будет адрисована второму прибору???
3 Вариант. Создать экземпляр VzljotSrv.MBComMaster для каждого прибора(проверено работает но не логично)
Я думаю что смысл моего вопроса специалистам будет понятен.
Спасибо.

Лично я делаю два экземпляра MBComMaster. У каждого свои настройки COM порта.
Для того порта, где два прибора, перед каждым запросом делаю изменение адреса прибора.
Можно и третий вариант, в общем-то, это выбор разработчика.
Когда формируется очередь, то помимо типа запроса, адреса регистра и прочего, там устанавливается и адрес прибора.
Каждому СОМ-порту свой поток.


Название: Re: Правильное использование сервера связи.
Отправлено: resident от 28.08.2010, 07:04:29
Денис спасибо за ответ. Хотелось уточнить один момент.

Значит если я правильно понимаю, после того как я выполнил запрос к прибору с адресом 1(вызвал функцию ReadInputRegs, кстати у нее нет аргумента адрес прибора), можно смело изменить адрес и вызвать ее повторно и она будет адресована второму прибору?


Название: Re: Правильное использование сервера связи.
Отправлено: resident от 28.08.2010, 07:14:43
P.S
Дело в том, что у меня нет в наличии двух приборов (не могу экспериментировать). А в дальнейшем предполагается использование по схеме описанной выше.


Название: Re: Правильное использование сервера связи.
Отправлено: Денис Пономарев от 30.08.2010, 10:48:07
Денис спасибо за ответ. Хотелось уточнить один момент.

Значит если я правильно понимаю, после того как я выполнил запрос к прибору с адресом 1(вызвал функцию ReadInputRegs, кстати у нее нет аргумента адрес прибора), можно смело изменить адрес и вызвать ее повторно и она будет адресована второму прибору?

Да, у неё нет аргумента, аргумент этот уже в объекте MBComMaster.
А так всё верно, да.
Если вы в папке, где установлен Сервер связи (возможно это C:\Program Files\Vzljot\Server\), найдет файл VzljotSrv.ini, и включите там KeepLog:
[LogKeeper]
KeepLog=1
то будут вестись логи, где всё будет отражено. Если у вас пока нет приборов, то будут возращены ошибки, конечно, но вы сможете проконтролировать запросы.
Например:
04.06.2010 15:27:22   572   Out   OK   03 11 C1 4C
04.06.2010 15:27:23   572   In   Err   
04.06.2010 15:28:07   460   Out   OK   01 04 C1 C0 00 02 4C 0B
04.06.2010 15:28:08   460   In   Err

Тут видно, что сначала был послан запрос в прибор с адресом 03 (и в ответ тишина), а потом в прибор с адресом 01.


Название: Re: Правильное использование сервера связи.
Отправлено: resident от 02.09.2010, 10:47:16
Спасибо. про KeepLog=1 не знал. Очень удобно.