jki_producer_consumer_loop

Простейшие вопросы в области инженерной разработки
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

jki_producer_consumer_loop

Сообщение rushonda »

Добрый вечер! Подскажите, как в данном проекте в основном цикле запустить например непрерывный цикл (в одном из состояний стэйт машины), но чтобы и на события реагировала программа и выходила из цикла.
есть вариант конечно в event structure в окне timeout, но где-то здесь на форуме читал, что не желательно так делать...
Вложения
Новая папка.zip
нужна Tasking2 для запуска, готов скинуть
(91.1 КБ) 101 скачивание
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: jki_producer_consumer_loop

Сообщение rushonda »

не tasking нужна библиотека, а jki state machine)
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: jki_producer_consumer_loop

Сообщение rushonda »

Мне кажется, что верхний цикл event здесь лишний, можно и через второй все делать. Или использовать верхний в случае, если циклов более 1 для удобства?
Вложения
jki_lib_state_machine-2018.0.7.45.vip.zip
jki
(5.18 МБ) 108 скачиваний
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: jki_producer_consumer_loop

Сообщение Artem.spb »

Я в таких случаях в кейсе, который должен повторяться. отправляю запрос на такой же кейс. Главное таймауты поставить, иначе цикл сожрёт все ресурсы.
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: jki_producer_consumer_loop

Сообщение rushonda »

Как же она будет выходить из этого кейса?
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: jki_producer_consumer_loop

Сообщение Artem.spb »

тогда запросы должны сыпаться снаружи. Таймаут будет стоять там.
Ещё можно так. Если действие цикличное, то таймаут >0, если его надо выключить, то снова поставить -1
q.png
минус: при приходе других запросов период сбивается, если запросы будут частыми, то и вовсе можно не дождаться таймаута
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: jki_producer_consumer_loop

Сообщение Artem.spb »

Как же она будет выходить из этого кейса?
в сдвиговом бегает флаг, который снимается по команде "стоп". Если флаг стоит. то следующий запрос отправляется, если его нет, то и отправлять не надо.
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: jki_producer_consumer_loop

Сообщение rushonda »

Artem.spb, программа работает на основе user event, нельзя ли без очередей обойтись?
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: jki_producer_consumer_loop

Сообщение Artem.spb »

используйте события вместо очередей, кто запрещает?
таймаут что в событиях, что в очередях работает одинаково - ждёт с момента _последнего_ действия, а не задаёт реальный период цикла.
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: jki_producer_consumer_loop

Сообщение rushonda »

Артем, не сложно на примере показать как это сделать, ранее только с очередями работал, с событиями только начинаю?
Artem.spb

Activity Автор
professor
professor
Сообщения: 3393
Зарегистрирован: 31 июл 2011, 23:05
Награды: 2
Версия LabVIEW: 12-18
Благодарил (а): 49 раз
Поблагодарили: 172 раза
Контактная информация:

Re: jki_producer_consumer_loop

Сообщение Artem.spb »

Artem.spb, программа работает на основе user event, нельзя ли без очередей обойтись?
вы уж определитесь, очереди или события. Если опыт с очередями, то зачем лезть в неведомое? разве только в образовательных целях.
не сложно на примере показать как это сделать
что "это"? вы забраковали оба варианта
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: jki_producer_consumer_loop

Сообщение rushonda »

Artem.spb писал(а):
Artem.spb, программа работает на основе user event, нельзя ли без очередей обойтись?
вы уж определитесь, очереди или события. Если опыт с очередями, то зачем лезть в неведомое? разве только в образовательных целях.
не сложно на примере показать как это сделать
что "это"? вы забраковали оба варианта
Понравилась модель программирования от jki (jki state machine) - с точки зрения удобства, хочу перейти на нее, заодно и user event освоить.
Но информации как взаимодействовать между циклами мало и как в этой машине запустить правильно цикл сбора информации тоже мало.
Так что хотелось бы попробовать через user event)
Blackman

Activity
leader
leader
Сообщения: 932
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Версия LabVIEW: 6.1,8.5,20

Re: jki_producer_consumer_loop

Сообщение Blackman »

Можно использовать Timeout Event Structure как показано на картинке.
Если скините свой пример в версии < 18 могу показать как это можно сделать в JKI SM.
Вложения
Cont scan with event structure timeout.PNG
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

Re: jki_producer_consumer_loop

Сообщение rushonda »

Спасибо. Сохранил в 14 версии. И еще вопрос по программе - зачем верхний цикл, нельзя ли обойтись одной state machine.
хочется, чтобы одна state machine отвечала за 1 прибор. В частности в данной машине буде крутиться цикл, где будут считываться кадры с камеры.
Вложения
ver.14.zip
(65.61 КБ) 76 скачиваний
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

Re: jki_producer_consumer_loop

Сообщение IvanLis »

rushonda писал(а):И еще вопрос по программе - зачем верхний цикл, нельзя ли обойтись одной state machine.
хочется, чтобы одна state machine отвечала за 1 прибор. В частности в данной машине буде крутиться цикл, где будут считываться кадры с камеры.
Машина состояний у Вас одна - нижний цикл, он же получается ведомый.
Верхний цикл - ведущий.

Если у вас будет несколько управляемых приборов, то ведущий останется. А количество ведомых, будет соответствовать количеству железяк.
В некоторых случаях запускаются несколько десятков параллельных циклов, каждый из которых решает свою задачу асинхронно с другими.

А вот на риторический вопрос, что лучше, Артем попытался дать ответ:
Artem.spb писал(а):вы уж определитесь, очереди или события. Если опыт с очередями, то зачем лезть в неведомое? разве только в образовательных целях
В реальных проектах надо использовать, то, чем вы владеете и понимаете.
Я например не использую сторонних библиотек, т.к. время потраченное на их изучение соизмеримо с созданием своего шаблона. Вопросы быстродействия я вообще не обсуждаю, т.к. любая универсальность приводит к усложнению.

Что касается личного опыта, то лучше использовать очереди (Queue), а не события (User events).
Т.к. уже напарывался несколько раз, когда внезапно нарушается логика работы.
Возникает это по причине того, что событие было инициализировано раньше, чем выполнена регистрация в SubVI (параллельном цикле). И такие события довольно сложно выловить в большом проекте со сложной логикой.
Плюсы тоже конечно есть, то что не нужно рассылать каждому циклу команду индивидуально в индивидуальной очереди.
Но приходится мириться, т.к. достоинство в одно, обязательно влечет неудобство в другом.

Есть конечно библиотеки NI Qbus (http://labviewportal.org/viewtopic.php? ... 823#p78560), но тоже влечет определенные неудобства.

Я бы порекомендовал почитать книгу: LabVIEW: стиль программирования - Блюм Питер
Потому что, сколько людей, столько и мнений. А книга позволяет, провести анализ и систематизировать информацию.

Вот например мы инициализируем очереди для каждого цикла (некоторые приборы требуют параллельной работы нескольких циклов)
init.png
А потом раздаем их и посредством очередей взаимодействуем.
Посылаем команды в каждый цикл.
Для обратной связи так же используются очереди:
- возникла ошибка, кидаем в очередь ошибок
-данные, в очередь данных
и т.д. и т.п.
main.png
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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