Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
06.05.2024, 18:33:55
 
Начало Помощь Поиск Войти Регистрация
Новости: Форум обновлен

+  Форум АО "ВЗЛЕТ"
|-+  Приборы ЗАО "Взлет"
| |-+  Отдел программистов
| | |-+  Правильное использование сервера связи.
0 Пользователей и 1 Гость смотрят эту тему. « предыдущая тема следующая тема »
Страниц: [1] Печать
Автор Тема: Правильное использование сервера связи.  (Прочитано 9525 раз)
resident
Пользователь
**

Харизма: 0
Офлайн Офлайн

Сообщений: 22


« : 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 для каждого прибора(проверено работает но не логично)
Я думаю что смысл моего вопроса специалистам будет понятен.
Спасибо.
Записан
resident
Пользователь
**

Харизма: 0
Офлайн Офлайн

Сообщений: 22


« Ответ #1 : 27.08.2010, 13:30:15 »

Уважаемые специалисты "Взлет". Вопрос актуален. Мне кто ни будь ответит?
Записан
Денис Пономарев
Global Moderator
*****

Харизма: 6
Офлайн Офлайн

Сообщений: 74



« Ответ #2 : 27.08.2010, 17:41:07 »

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

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

Харизма: 0
Офлайн Офлайн

Сообщений: 22


« Ответ #3 : 28.08.2010, 07:04:29 »

Денис спасибо за ответ. Хотелось уточнить один момент.

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

Харизма: 0
Офлайн Офлайн

Сообщений: 22


« Ответ #4 : 28.08.2010, 07:14:43 »

P.S
Дело в том, что у меня нет в наличии двух приборов (не могу экспериментировать). А в дальнейшем предполагается использование по схеме описанной выше.
Записан
Денис Пономарев
Global Moderator
*****

Харизма: 6
Офлайн Офлайн

Сообщений: 74



« Ответ #5 : 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.
Записан
resident
Пользователь
**

Харизма: 0
Офлайн Офлайн

Сообщений: 22


« Ответ #6 : 02.09.2010, 10:47:16 »

Спасибо. про KeepLog=1 не знал. Очень удобно.
Записан
Страниц: [1] Печать 
« предыдущая тема следующая тема »
Перейти в:  


Войти

© 1990—2016, АО «Взлет».
Все права защищены.
Контактная информация
Powered by SMF 1.1.13 | SMF © 2006-2011, Simple Machines LLC
Материалы, размещенные на сайте, охраняются законодательством об авторском праве. Перепечатка материалов допускается только со ссылкой на сайт.