И снова очереди

Простейшие вопросы в области инженерной разработки
Аватара пользователя
Eugen Graf

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

Re: И снова очереди

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

Ошибки я обрабатываю в потоках-циклах, а из потока у меня выходят кластеры без ошибок. Объединяются они в один для того, чтобы удостовериться, что все потоки закончены по принципу data flow.
Аватара пользователя
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: И снова очереди

Сообщение mzu2006 »

Обработка ошибок в таких многопоточных архитектурах это очень интересная тема, и явно тянет не на один пост.
eg писал(а):чтобы удостовериться, что все потоки закончены по принципу data flow
ты имел в виду, "перед тем как удалять очереди и user events", да?
Аватара пользователя
Eugen Graf

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

Re: И снова очереди

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

Да.
Pavel

Activity
developer
developer
Сообщения: 271
Зарегистрирован: 31 июл 2009, 08:07
Награды: 1
Версия LabVIEW: 8.5

Re: И снова очереди

Сообщение Pavel »

taras_33 писал(а):
Следуя выше указанным советам я это и сделал, попутно добавив пару комментариев для таких же "чайников" как сам :D . Ничего не напутал? Значит можно использовать это как шаблон? Меня интересует обработка ошибок, я не совсем понимаю механизм. Зачем их всех собирать в кучку (в конце) и записывать в кластер, ни слова не сказав пользователю? Я так понимаю если уж мы их собрали, и произошла какая то ошибка, то нужно сообщить об этом, используя палитру Dialog and User Interface. Или я не прав?

Еще раз спасибо Eg и mzu2006 :thank:
В цикле где закрываешь референсы на очереди и события я бы поставил проверку валидности референса. А то если хоть один из массива окажется битый то все остальные после него не закроются. Во-вторых у типа variant есть атрибуты которые можно использовать для передачи служебной информации к данным. И хоть твой вариант выглядит более наглядным все же иногда стоит использовать атрибуты. В третьих: если ошибка будет повторяться в каждой итерации цикла представь как ты достанешь пользователя своим Dialog and User Interface. Что б этого не было, используют лог (или 2 лога) куда обычно пишется все состояние программы.
Аватара пользователя
Eugen Graf

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

Re: И снова очереди

Сообщение 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: И снова очереди

Сообщение mzu2006 »

Pavel писал(а):В цикле где закрываешь референсы на очереди и события я бы поставил проверку валидности референса. А то если хоть один из массива окажется битый то все остальные после него не закроются.
проверять не надо, закроются нормально, т.к. Release Queue/Destroy UE выполняется даже при пришедшей на error in ошибке. 8.6 online help destroy user event
Pavel писал(а): все же иногда стоит использовать атрибуты
На версии 7 я тестировал что быстрее: добавить ещё один элемент в кластер или использовать аттрибут варианта. Смутно помню, что аттрибут варианта получился медленнее. Как правило, тип передаваемых данных известен.
Pavel писал(а):(или 2 лога)
А зачем 2 лога?
eg писал(а):У меня есть центральный обработчик ошибок, который отправляет возникшую ошибку, без открытия диалога в поток-индикатор-логгер лицевой панели.
Да, я бы тоже так делал. Иногда возникает необходимость классифицировать ошибки: с чем-то можно разобраться на месте (в потоке драйвера). Что-то можно записать в лог, что-то выдать пользователю.
Pavel писал(а):ты достанешь пользователя своим Dialog and User Interface.
Совершенно согласен. модальное окно диалога использовать не надо вообще. Как вариант: boolean indicators, которые загораются при ошибке в подсистеме, и кнопка сброса рядом. Или log с грамотной возможностью фильтрации.
Аватара пользователя
taras_33

Activity
professional
professional
Сообщения: 392
Зарегистрирован: 31 окт 2009, 18:25
Награды: 1
Версия LabVIEW: 2019
Поблагодарили: 13 раз
Контактная информация:

Re: И снова очереди

Сообщение taras_33 »

Доброе время суток народ. Два дня мучений и причина найдена..... Но вопрос остался открытым. Суть в следующем. Имеется три параллельные циклы (юзер интерфейс, прибор с RS232, индикатор) комунникация с помощью очередей. Этот кусок кода (извлечение элемента из очереди)
In Queue.PNG
In Queue.PNG (3.15 КБ) 4206 просмотров
повторяется неоднократно, следовательно был создан SubVI
SubVI.PNG
SubVI.PNG (1.16 КБ) 4206 просмотров
. Как оказалось в параллельный циклах одновременно этот SubVI не работает. Но стоит создать его копию с другим именем и включить в проект, все работает. Кто подскажет в чем дело?
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
Аватара пользователя
Eugen Graf

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

Re: И снова очереди

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

Да, тебе следует сделать его реинтрантным (в установках).
Аватара пользователя
FireFly

Activity Black
expert
expert
Сообщения: 1321
Зарегистрирован: 25 апр 2009, 08:58
Награды: 2
Версия LabVIEW: 2014
Откуда: Санкт-Петербург
Поблагодарили: 1 раз

Re: И снова очереди

Сообщение FireFly »

VI Properties -> Execution -> Reentrant execution
Почитай
Иногда лучше молчать и слыть идиотом, чем заговорить и развеять все сомнения.
Аватара пользователя
taras_33

Activity
professional
professional
Сообщения: 392
Зарегистрирован: 31 окт 2009, 18:25
Награды: 1
Версия LabVIEW: 2019
Поблагодарили: 13 раз
Контактная информация:

Re: И снова очереди

Сообщение taras_33 »

Спасибо мужики, снимаю шапку :thank: Все работает
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
Ответить

Вернуться в «Для чайников»