Параллельное общение с COM портом

VISA, TCP/IP, USB, CAN, GPIB и подобные протоколы
Ответить
Аватара пользователя
Korotenko

Activity
developer
developer
Сообщения: 286
Зарегистрирован: 25 июл 2008, 10:43
Награды: 1
Версия LabVIEW: 2009
Откуда: Россия, Владивосток
Контактная информация:

Параллельное общение с COM портом

Сообщение Korotenko »

постоянно общаюсь с ком-портом, но есть проблема, иногда происходит одновременный или почти одновременный запрос.
на схеме есть несколько :vi: в который идёт запрос
1.GIF
1.GIF (7.16 КБ) 3413 просмотров
внутри них я эту проблему решаю через flat sequence
2.GIF
НЕУЖЕЛИ И ЗДЕСЬ ТАКЖЕ ПРИДЁТСЯ :cry: :cry: :cry:
I work in LabVIEW 2009 !
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Параллельное общение с COM портом

Сообщение mzu2006 »

Предложение: подправить архитектуру приложения. Например ввести в него новую "нить", которая синхронизует общение с COM портом. Например, так:
Comportdriver template
Comportdriver template
. Я такие вставки запускаю отдельными VI в особой системе выполнения со своим приоритетом. Можно назвать это "драйвером ComPort" в твоей реализации. Тогда вместо вызова VI ты помещаешь сообщение во входную очередь драйвера, а для получения результата, ждёшь сообщения из очереди ответов. В тип данных элементов очереди ответов можно вставить уникальный номер запроса (для демультиплексирования)

Или применить семафор величины 1, если прога простая
Аватара пользователя
Eugen Graf

Activity Professionalism Silver Black
guru
guru
Сообщения: 6502
Зарегистрирован: 13 ноя 2007, 02:20
Награды: 4
Версия LabVIEW: 2009
Откуда: Saarbrücken
Контактная информация:

Re: Параллельное общение с COM портом

Сообщение Eugen Graf »

У меня в программах общение с компортом всегда идёт в отдельном цикле-драйвере. Есть при этом одна проблема. Команды этому драйверу я посылаю из цкла и, у которого нет своей очереди. И поэтому ждать ответа я не могу. В общем этот цикл обрабатывает у меня юзер ивенты, т.е. это цикл, который содержит ивент структуру. Я конечно использую там динамические ивенты и могу получать через них сообщения из других циклов, а вот всё таки ждать ответа, как ты об этом написал не получается. Какой есть выход?
Аватара пользователя
mzu2006

Professionalism Tutorials Black
doctor
doctor
Сообщения: 2456
Зарегистрирован: 16 авг 2008, 02:12
Награды: 3
Версия LabVIEW: 7.1 10 11 12
Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
Контактная информация:

Re: Параллельное общение с COM портом

Сообщение mzu2006 »

eg писал(а):вот всё таки ждать ответа, как ты об этом написал не получается.
Очень интересный вопрос, спасибо. В приложениях сложности выше среднего, я использовал три цикла:
1. Обрабатывает user events
2. Обновляет индикаторы
3. Отрабатывает основной алгоритм.

+ "драйверы".

Тогда по user event, посылается сообщение на вход очереди основного цикла. Основной цикл отсылает сообщение драйверу и меняет своё состояние на "ожидание ответа". Драйвер получает сообщение, делает что-то с com портом, и отсылает сообщение назад в 3-ю нить, которая по необходимости отдаёт команду обновить индикатор.

Эта архитектура явилась итеративным результатом поиска методом проб и ошибок в течении несольких месяцев. Интересно услышать любые другие идеи на эту тему
Ответить

Вернуться в «Коммуникация с приборами»