Подача данных на input subVI после Anychronous call&forget

Простейшие вопросы в области инженерной разработки
ujin
user
user
Сообщения: 94
Зарегистрирован: 28 июл 2019, 13:16
Версия LabVIEW: 19
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Подача данных на input subVI после Anychronous call&forg

Сообщение ujin »

Как к нему обратиться и передать значение в i-ой стадии? С ожиданием значения я разобрался. Я не могу понять, как строить программу в плане передачи значения работающему в режиме Asychronous call and Forget подприбору.
Можете сказать, про какой VI мне нужно почитать ?
Метод Asychronous call целесообразно применять:
1. Для вызова подпрограммы с большими затратами ресурсов и ее завершении после выполнения для освобождения ресурсов
2. При необходимости масштабирования путем вызова одинаковых параллельных процессов (scalability).
В других случаях это такой же поток, работающий в общем пространстве процесса. Такой поток можно организовать вторым циклом While Loop, параллельным основному.
Так как в Вашем случае SubVI вызывается из основного VI, передача данных между main VI и SubVI осуществляется так же как и между параллельными потоками.
Можно почитать тему передача данных между параллельными циклами (move data between parallel loops).
Способов много
Global Variables, FGV (Functional Global Variables), DVR (Data Value Reference), Shared Variables (в режиме I/O Variable), Queus, channels и так далее по мере усложнения.
Далее необходимо определиться с моделью взаимодействия между main VI и SubVI и какая модель переменных Вам нужна.
Допустим SubVi накапливает данные и периодически сбрасывает в параллельный цикл для обработки - почитать можно тему модель produser/consumer.
Какие модель переменных. Типа Tag - данные обновляются независимо от SubVi . SubVI периодически читает последние значения данных. Есть буферированные переменные - очереди, channels и др. если не допускается потеря данных.
Требуется ли управление SubVi. например команды обновления данных, команды останова. Тут потребуется управление событиями Events. В этом случае модель усложняется и можно почитать тему Queued Message Handler (QMH) architecture.
Одна из двух моделей produser/consumer или Queued Message Handler (QMH) в описанной Вами задаче должна подойти.
В приведенном Вами примере Server неправильно использована Event Structure. Событие будет срабатывать, если значение изменено пользователем. Для реакции на программные изменения нужно создать и зарегистрировать пользовательское событие. Опять же это обширная тема можно почитать в Queued Message Handler (QMH).
Про очереди. Если Вы создали очередь, то VI Dequeue Element будет ждать нового элемента пока не закончится таймаут. Dequeue Element блокирует выполнение остальных элементов в цикле While Loop.
Т.е. если У Вас задача ждать новые данные и только по приходу выполнять далее с ними действия ничего более специально не нужно делать Dequeue Element будет все ждать время таймаута или бесконечно если таймаут = -1. В этом случае остановить ожидание можно уничтожив очередь (Release Queue) в основном цикле - Dequeue Element выйдет из ожидания с ошибкой.
В общем все подробно расписано в описании модели QMH.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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