Подача данных на input subVI после Anychronous call&forget
-
- assistant
- Сообщения: 120
- Зарегистрирован: 05 сен 2019, 21:01
- Версия LabVIEW: 2019
- Контактная информация:
Подача данных на input subVI после Anychronous call&forget
Добрый вечер!
Есть программа которая на различных стадиях 1,2,3... (машина состояний с индексами 1,2,3 ..., условно ) рассчитывает некоторые величины, соответственно это v1,v2,.... Я вызываю один раз, когда мне нужно, по кнопке, окно моего SubVI с помощью asynchronous call and forget (это я сделал, см. рис. или файл).
Задача, которую я пытаюсь реализовать:
После вызова, в каждой последующей стадии k+1,k+2,.... в этот SubVI забрасывается соответственно значение v1, v2,... и он что то с ними делает (обновляет график с учетом поступающих значений, например). Между стадиями - соответственно, он ожидает поступление новых значений и ничего не делает.
Моя проблема:
1) Как к нему обратиться и передать значение в i-ой стадии? С ожиданием значения я разобрался. Я не могу понять, как строить программу в плане передачи значения работающему в режиме Asychronous call and Forget подприбору.
Можете сказать, про какой VI мне нужно почитать ?
2) Полагаю - использование ссылки на subVI (на рисунке убрать close reference) и какого то VI похожего на asynchronous call. По окончанию работы я, соответственно, закрываю эту ссылку. В таком случае понадобиться каждый раз проверять, действительна ли ссылка, которую я буду кидать из состояние в состояние, но каким VI эту проверку выполнять ?
Есть программа которая на различных стадиях 1,2,3... (машина состояний с индексами 1,2,3 ..., условно ) рассчитывает некоторые величины, соответственно это v1,v2,.... Я вызываю один раз, когда мне нужно, по кнопке, окно моего SubVI с помощью asynchronous call and forget (это я сделал, см. рис. или файл).
Задача, которую я пытаюсь реализовать:
После вызова, в каждой последующей стадии k+1,k+2,.... в этот SubVI забрасывается соответственно значение v1, v2,... и он что то с ними делает (обновляет график с учетом поступающих значений, например). Между стадиями - соответственно, он ожидает поступление новых значений и ничего не делает.
Моя проблема:
1) Как к нему обратиться и передать значение в i-ой стадии? С ожиданием значения я разобрался. Я не могу понять, как строить программу в плане передачи значения работающему в режиме Asychronous call and Forget подприбору.
Можете сказать, про какой VI мне нужно почитать ?
2) Полагаю - использование ссылки на subVI (на рисунке убрать close reference) и какого то VI похожего на asynchronous call. По окончанию работы я, соответственно, закрываю эту ссылку. В таком случае понадобиться каждый раз проверять, действительна ли ссылка, которую я буду кидать из состояние в состояние, но каким VI эту проверку выполнять ?
- Вложения
-
- Asynchronous Call and Forget.vi
- (12.3 КБ) 95 скачиваний
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: Подача данных на input subVI после Anychronous call&forg
>> Как к нему обратиться и передать значение в i-ой стадии? С ожиданием значения я разобрался. Я не могу понять, как строить программу в плане передачи значения работающему в режиме Asychronous call and Forget подприбору.
Сконфигурируйте один из входов вашего SubVI в виде ссылки (reference) на очередь или уведомитель строкового типа. Это и будет ваша команда, которую вы в любой момент можете отправить в SubVI. Нужно только непрерывно читать очередь / уведомитель в SubVI, чтобы не пропустить команду. Также опционально можно сделать и выход аналогичного типа для отображения состояния SubVI. Вторая проблема при таком подходе должна сама "рассосаться".
Сконфигурируйте один из входов вашего SubVI в виде ссылки (reference) на очередь или уведомитель строкового типа. Это и будет ваша команда, которую вы в любой момент можете отправить в SubVI. Нужно только непрерывно читать очередь / уведомитель в SubVI, чтобы не пропустить команду. Также опционально можно сделать и выход аналогичного типа для отображения состояния SubVI. Вторая проблема при таком подходе должна сама "рассосаться".
-
- assistant
- Сообщения: 120
- Зарегистрирован: 05 сен 2019, 21:01
- Версия LabVIEW: 2019
- Контактная информация:
Re: Подача данных на input subVI после Anychronous call&forg
[quote=="dadreamer"]>> Как к нему обратиться и передать значение в i-ой стадии? С ожиданием значения я разобрался. Я не могу понять, как строить программу в плане передачи значения работающему в режиме Asychronous call and Forget подприбору.
Сконфигурируйте один из входов вашего SubVI в виде ссылки (reference) на очередь или уведомитель строкового типа. Это и будет ваша команда, которую вы в любой момент можете отправить в SubVI. Нужно только непрерывно читать очередь / уведомитель в SubVI, чтобы не пропустить команду. [/quote]
Спасибо! Возник вопрос - если я хочу отправлять enum-состояния моему VI через очередь, то как я вижу, на примере такого SubVI, он принимает только строки - это можно как то изменить ?
Сконфигурируйте один из входов вашего SubVI в виде ссылки (reference) на очередь или уведомитель строкового типа. Это и будет ваша команда, которую вы в любой момент можете отправить в SubVI. Нужно только непрерывно читать очередь / уведомитель в SubVI, чтобы не пропустить команду. [/quote]
Спасибо! Возник вопрос - если я хочу отправлять enum-состояния моему VI через очередь, то как я вижу, на примере такого SubVI, он принимает только строки - это можно как то изменить ?
- Вложения
-
- Server.vi
- (11.04 КБ) 82 скачивания
-
- States.ctl
- (3.83 КБ) 82 скачивания
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: Подача данных на input subVI после Anychronous call&forg
Тогда поменяйте тип очереди со строкового на числовой. Или же переводите enum в строку перед отправкой. На принимающей стороне потребуется корректно распарсить команду. Я обычно использую разделитель, например "::", и передаю через очередь набор параметров. Ещё, как вариант, сделать тип очереди кластером, в котором определить необходимые параметры (у вас уже что-то похожее изображено на диаграмме).
-
- assistant
- Сообщения: 120
- Зарегистрирован: 05 сен 2019, 21:01
- Версия LabVIEW: 2019
- Контактная информация:
Re: Подача данных на input subVI после Anychronous call&forg
[quote=="dadreamer"]
Тогда поменяйте тип очереди. [/quote]
[quote=="dadreamer"]
Ещё, как вариант, сделать тип очереди кластером.
[/quote]
Это как раз я пытаюсь сделать - не могу понять, как поменять тип - обычным подключением нужного типа данных ко входу это у меня не получается.
Тогда поменяйте тип очереди. [/quote]
[quote=="dadreamer"]
Ещё, как вариант, сделать тип очереди кластером.
[/quote]
Это как раз я пытаюсь сделать - не могу понять, как поменять тип - обычным подключением нужного типа данных ко входу это у меня не получается.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: Подача данных на input subVI после Anychronous call&forg
dakishi, на вход element data type инструмента Obtain Queue надо подать константу нужного типа. Потом ПКМ на выходе queue out -> Create -> Control / Indicator. Получившийся контрол или индикатор с панели копируете на панель вашего SubVI, перепривязываете входы-выходы и т.п.
-
- assistant
- Сообщения: 120
- Зарегистрирован: 05 сен 2019, 21:01
- Версия LabVIEW: 2019
- Контактная информация:
Re: Подача данных на input subVI после Anychronous call&forg
[quote=="dadreamer"]dakishi, на вход element data type инструмента Obtain Queue надо подать константу нужного типа. Потом ПКМ на выходе queue out -> Create -> Control / Indicator. Получившийся контрол или индикатор с панели копируете на панель вашего SubVI, перепривязываете входы-выходы и т.п.[/quote]
Спасибо! Можете сказать, можно ли сделать как то просто ссылку на SubVI со входами и выходами и работать с ней, и, соответственно, в очередь кидать команды на ввод?
Спасибо! Можете сказать, можно ли сделать как то просто ссылку на SubVI со входами и выходами и работать с ней, и, соответственно, в очередь кидать команды на ввод?
Последний раз редактировалось dakishi 17 фев 2020, 18:29, всего редактировалось 1 раз.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: Подача данных на input subVI после Anychronous call&forg
>> Спасибо! Можете сказать, можно ли сделать как то просто ссылку на SubVI со входами и выходами и работать с ней ?
Можете подробнее расписать, зачем это нужно и чего хотите добиться? Предложенный мной вариант не подходит?
Можете подробнее расписать, зачем это нужно и чего хотите добиться? Предложенный мной вариант не подходит?
-
- assistant
- Сообщения: 120
- Зарегистрирован: 05 сен 2019, 21:01
- Версия LabVIEW: 2019
- Контактная информация:
Re: Подача данных на input subVI после Anychronous call&forg
[quote=="dadreamer"]>> Спасибо! Можете сказать, можно ли сделать как то просто ссылку на SubVI со входами и выходами и работать с ней ?
Можете подробнее расписать, зачем это нужно и чего хотите добиться? Предложенный мной вариант не подходит?[/quote]
Я выношу некоторые вычисления в отдельное окно. В моей задаче довольно много входных/выходных параметров - всё это загонять в класс или строку менее читабельно для программиста в отличии от ссылки где все выходы/выходы подписаны при наведении и есть описание.
Можете подробнее расписать, зачем это нужно и чего хотите добиться? Предложенный мной вариант не подходит?[/quote]
Я выношу некоторые вычисления в отдельное окно. В моей задаче довольно много входных/выходных параметров - всё это загонять в класс или строку менее читабельно для программиста в отличии от ссылки где все выходы/выходы подписаны при наведении и есть описание.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: Подача данных на input subVI после Anychronous call&forg
Я так понял, вам не хочется протягивать внутрь SubVI множество входных параметров и тянуть из SubVI множество выходных? Если так, то специально для этого придумали пару Get Control Values by Index и Set Control Values by Index. Можно из любого SubVI прочитать и записать любые контролы/индикаторы на FP. Вкупе с Variant'ом и его атрибутами чудесная штука. Если ещё завернуть в Malleable VIs, вообще можно не париться насчёт передаваемых типов данных. Если же я не так понял, то возможно кто-то ещё подскажет. А что касается совета с очередями/уведомителями и Start Asynchronous Call, то я сам их часто использую именно в таком виде, как и описал. Запускаю параллельно пачку SubVI, пока они крутятся, кидаю им команды, отслеживаю состояние.
-
- assistant
- Сообщения: 120
- Зарегистрирован: 05 сен 2019, 21:01
- Версия LabVIEW: 2019
- Контактная информация:
Re: Подача данных на input subVI после Anychronous call&forg
[quote=="dadreamer"]Я так понял, вам не хочется протягивать внутрь SubVI множество входных параметров и тянуть из SubVI множество выходных? Если так, то специально для этого придумали пару Get Control Values by Index и Set Control Values by Index.[/quote]
Интересно, что в Help написано про работу с контролами, но она тянет и индикаторы из SubVI. Можете сказать, как с синхронизацией - опция, после подачи input перенимает окончательное значение output при первом же изменении output ?
Интересно, что в Help написано про работу с контролами, но она тянет и индикаторы из SubVI. Можете сказать, как с синхронизацией - опция, после подачи input перенимает окончательное значение output при первом же изменении output ?
-
- professor
- Сообщения: 3391
- Зарегистрирован: 31 июл 2011, 23:05
- Награды: 2
- Версия LabVIEW: 12-18
- Благодарил (а): 49 раз
- Поблагодарили: 172 раза
- Контактная информация:
Re: Подача данных на input subVI после Anychronous call&forg
[quote=="dakishi"]Интересно, что в Help написано про работу с контролами, но она тянет и индикаторы из SubVI. Можете сказать, как с синхронизацией - опция, после подачи input перенимает окончательное значение output при первом же изменении output ?[/quote]
Под контролом в данном случае понимается любой активный элемент панели управления.
Естественно, метод чтения выдаст текущее значение элемента в момент запроса. Так что можно отслеживать изменение контрола.
Вот только расточительный это способ.
Под контролом в данном случае понимается любой активный элемент панели управления.
Естественно, метод чтения выдаст текущее значение элемента в момент запроса. Так что можно отслеживать изменение контрола.
Вот только расточительный это способ.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: Подача данных на input subVI после Anychronous call&forg
>> Интересно, что в Help написано про работу с контролами, но она тянет и индикаторы из SubVI.
И контролы, и индикаторы можно читать/писать, также как с помощью локальных переменных. Вообще, внутри контрол от индикатора только одним флагом отличается. В скриптинге есть даже проверка на то, чем является объект.
>> Можете сказать, как с синхронизацией - опция, после подачи input перенимает окончательное значение output при первом же изменении output ?
Я не понял вопроса. Перефразируйте, пожалуйста.
И контролы, и индикаторы можно читать/писать, также как с помощью локальных переменных. Вообще, внутри контрол от индикатора только одним флагом отличается. В скриптинге есть даже проверка на то, чем является объект.
>> Можете сказать, как с синхронизацией - опция, после подачи input перенимает окончательное значение output при первом же изменении output ?
Я не понял вопроса. Перефразируйте, пожалуйста.
-
- assistant
- Сообщения: 120
- Зарегистрирован: 05 сен 2019, 21:01
- Версия LabVIEW: 2019
- Контактная информация:
Re: Подача данных на input subVI после Anychronous call&forg
[quote=="dadreamer"]
>> Можете сказать, как с синхронизацией - опция, после подачи input перенимает окончательное значение output при первом же изменении output ?
Я не понял вопроса. Перефразируйте, пожалуйста.[/quote]
Имел ввиду, что функция при подаче input "сразу же" подает результат вычислений на output - т.е. при первом change output функция делает присвоение и закрывается.
Как ответил только что Artem.spb, я так понимаю, так оно и есть.
>> Можете сказать, как с синхронизацией - опция, после подачи input перенимает окончательное значение output при первом же изменении output ?
Я не понял вопроса. Перефразируйте, пожалуйста.[/quote]
Имел ввиду, что функция при подаче input "сразу же" подает результат вычислений на output - т.е. при первом change output функция делает присвоение и закрывается.
Как ответил только что Artem.spb, я так понимаю, так оно и есть.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 126 раз
- Контактная информация:
Re: Подача данных на input subVI после Anychronous call&forg
Что запись, что чтение - однократные операции, выполнились, а дальше программист сам решает, что ему делать. Если надо непрерывно читать/писать, то делает это в цикле. Для синхронизации использовать можно, но есть специально заточенные под это инструменты, такие как UE, очереди, семафоры. Ни к чему изобретать лишний велосипед, который получится совсем не лучше встроенного функционала. Если совсем вломы тащить очередь внутрь SubVI, можно в основном сделать индикатор типа "очередь", на этапе инициализации заполнить его действительным значением и далее в SubVI получать эту очередь через Get Control Values by Index.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 3 Ответы
- 855 Просмотры
-
Последнее сообщение IvanLis
-
- 13 Ответы
- 1191 Просмотры
-
Последнее сообщение Boxa
-
- 0 Ответы
- 486 Просмотры
-
Последнее сообщение Juri
-
- 3 Ответы
- 263 Просмотры
-
Последнее сообщение AndreyDmitriev
-
- 13 Ответы
- 2439 Просмотры
-
Последнее сообщение rsv