постоянно общаюсь с ком-портом, но есть проблема, иногда происходит одновременный или почти одновременный запрос.
на схеме есть несколько в который идёт запрос
внутри них я эту проблему решаю через flat sequence
НЕУЖЕЛИ И ЗДЕСЬ ТАКЖЕ ПРИДЁТСЯ
Параллельное общение с COM портом
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Параллельное общение с COM портом
Предложение: подправить архитектуру приложения. Например ввести в него новую "нить", которая синхронизует общение с COM портом. Например, так:
Или применить семафор величины 1, если прога простая
. Я такие вставки запускаю отдельными VI в особой системе выполнения со своим приоритетом. Можно назвать это "драйвером ComPort" в твоей реализации. Тогда вместо вызова VI ты помещаешь сообщение во входную очередь драйвера, а для получения результата, ждёшь сообщения из очереди ответов. В тип данных элементов очереди ответов можно вставить уникальный номер запроса (для демультиплексирования)Или применить семафор величины 1, если прога простая
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows
-
Eugen Graf
- guru
- Сообщения: 6502
- Зарегистрирован: 13 ноя 2007, 02:20
- Награды: 4
- Версия LabVIEW: 2009
- Откуда: Saarbrücken
- Контактная информация:
Re: Параллельное общение с COM портом
У меня в программах общение с компортом всегда идёт в отдельном цикле-драйвере. Есть при этом одна проблема. Команды этому драйверу я посылаю из цкла и, у которого нет своей очереди. И поэтому ждать ответа я не могу. В общем этот цикл обрабатывает у меня юзер ивенты, т.е. это цикл, который содержит ивент структуру. Я конечно использую там динамические ивенты и могу получать через них сообщения из других циклов, а вот всё таки ждать ответа, как ты об этом написал не получается. Какой есть выход?
-
mzu2006
- doctor
- Сообщения: 2456
- Зарегистрирован: 16 авг 2008, 02:12
- Награды: 3
- Версия LabVIEW: 7.1 10 11 12
- Откуда: St-Petersburg (RU), Phila, Boston, Washington DC
- Контактная информация:
Re: Параллельное общение с COM портом
Очень интересный вопрос, спасибо. В приложениях сложности выше среднего, я использовал три цикла:eg писал(а):вот всё таки ждать ответа, как ты об этом написал не получается.
1. Обрабатывает user events
2. Обновляет индикаторы
3. Отрабатывает основной алгоритм.
+ "драйверы".
Тогда по user event, посылается сообщение на вход очереди основного цикла. Основной цикл отсылает сообщение драйверу и меняет своё состояние на "ожидание ответа". Драйвер получает сообщение, делает что-то с com портом, и отсылает сообщение назад в 3-ю нить, которая по необходимости отдаёт команду обновить индикатор.
Эта архитектура явилась итеративным результатом поиска методом проб и ошибок в течении несольких месяцев. Интересно услышать любые другие идеи на эту тему
Правила форума (Forum rules in Russian)
rm -rf /mnt/windows
rm -rf /mnt/windows