Я хочу создать многооконное приложение с помощью subVI работающих в режиме Shared clone reentatn execution, где по N моим кликам на кнопку вызова выплывает N одинаковых окон моих клонированных subVI которые работают одновременно. При этом я могу закрыть любое из окон и вызвать опять еще одно.
Я остановился на проблеме: я могу сделать только фиксированное число окон и потом их все закрыть, т.к. при входе на n-ю итерацию некого цикла, моя программа, допустим, когда видит N` SubVI, запускает их одновременно и ждет их выполнения, соответственно, я не могу добавить новое окно (только закрыть старые). Как можно обойти это ?
Создание многооконного приложения с reentatn execution VI
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Создание многооконного приложения с reentatn execution V
Посмотрите пример https://forums.ni.com/t5/LabVIEW/progra ... 39#M864196 Можно запустить сколько угодно окон и как угодно их закрыть. При этом основная программа не ждёт завершения работы SubVI (флаг 0x80 "Prepare to call and forget").
-
- assistant
- Сообщения: 120
- Зарегистрирован: 05 сен 2019, 21:01
- Версия LabVIEW: 2019
- Контактная информация:
Re: Создание многооконного приложения с reentatn execution V
[quote=="dadreamer"]Посмотрите пример https://forums.ni.com/t5/LabVIEW/progra ... 39#M864196 Можно запустить сколько угодно окон и как угодно их закрыть. При этом основная программа не ждёт завершения работы SubVI (флаг 0x80 "Prepare to call and forget").[/quote]
Не до конца понимаю, как это работает. Можете пояснить, что я делаю не так - здесь я убрал user events и оставил только открытие и закрытие ссылки на прибор. Но, выплывает ошибка LabVIEW: (Hex 0x407) VI Reference type does not match VI connector pane. При этом у моего subVI нет входов и выходов, но в ссылке требуется VI, так понимаю, как минимум с одним входом.
Также не совсем понимаю, как задается reentatn execution. На втором изображении приведен скрин примера оригинала.
Не до конца понимаю, как это работает. Можете пояснить, что я делаю не так - здесь я убрал user events и оставил только открытие и закрытие ссылки на прибор. Но, выплывает ошибка LabVIEW: (Hex 0x407) VI Reference type does not match VI connector pane. При этом у моего subVI нет входов и выходов, но в ссылке требуется VI, так понимаю, как минимум с одним входом.
Также не совсем понимаю, как задается reentatn execution. На втором изображении приведен скрин примера оригинала.
Последний раз редактировалось dakishi 04 янв 2020, 20:25, всего редактировалось 1 раз.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Создание многооконного приложения с reentatn execution V
>> ошибка LabVIEW: (Hex 0x407) VI Reference type does not match VI connector pane.
Надо обновить все константы-ссылки (VI References). Для первой: ПКМ -> Browse for Path -> указываете свой SubVI. Для второй: ПКМ -> Select VI Server Class -> Browse -> указываете свой SubVI.
>> Также не совсем понимаю, как задается reentatn execution.
Задано в настройках SubVI. Однако я ещё бы добавил флаг 0x40 "Enable simultaneous calls on reentrant VIs", т.к. без него несколько одновременно работающих SubVI выполняются последовательно. См. описание функции Open VI Reference.
>> здесь я убрал user events и оставил только открытие и закрытие ссылки на прибор
Верните Start Asynchronous Call Node, иначе чуда не произойдёт. Ну, то есть, ваш СабВИ не запустится.
Посмотрите также примеры в папке C:\Program Files\National Instruments\LabVIEW 2019\examples\Application Control\VI Server\Asynchronous Call By Reference.
Надо обновить все константы-ссылки (VI References). Для первой: ПКМ -> Browse for Path -> указываете свой SubVI. Для второй: ПКМ -> Select VI Server Class -> Browse -> указываете свой SubVI.
>> Также не совсем понимаю, как задается reentatn execution.
Задано в настройках SubVI. Однако я ещё бы добавил флаг 0x40 "Enable simultaneous calls on reentrant VIs", т.к. без него несколько одновременно работающих SubVI выполняются последовательно. См. описание функции Open VI Reference.
>> здесь я убрал user events и оставил только открытие и закрытие ссылки на прибор
Верните Start Asynchronous Call Node, иначе чуда не произойдёт. Ну, то есть, ваш СабВИ не запустится.
Посмотрите также примеры в папке C:\Program Files\National Instruments\LabVIEW 2019\examples\Application Control\VI Server\Asynchronous Call By Reference.
-
- assistant
- Сообщения: 120
- Зарегистрирован: 05 сен 2019, 21:01
- Версия LabVIEW: 2019
- Контактная информация:
Re: Создание многооконного приложения с reentatn execution V
[quote=="dadreamer"]
>> Также не совсем понимаю, как задается reentatn execution.
Задано в настройках SubVI. Однако я ещё бы добавил флаг 0x40 "Enable simultaneous calls on reentrant VIs", т.к. без него несколько одновременно работающих SubVI выполняются последовательно. См. описание функции Open VI Reference.
[/quote]
Спасибо большое! Можете сказать, если я выберу в Property Node у ссылки Execution => Is reentatn - это то же самое, что и в VI properties (кроме настроек распределения памяти) ? И, можете сказать, какой опцией можно закрыть VI после выполнения - либо внутри VI, либо через здесь, из ведущего меню ? Последний вопрос - окошко у меня появляется в правом нижнем углу экрана, его не видно если не перетащить - как можно задать его положения ?
>> Также не совсем понимаю, как задается reentatn execution.
Задано в настройках SubVI. Однако я ещё бы добавил флаг 0x40 "Enable simultaneous calls on reentrant VIs", т.к. без него несколько одновременно работающих SubVI выполняются последовательно. См. описание функции Open VI Reference.
[/quote]
Спасибо большое! Можете сказать, если я выберу в Property Node у ссылки Execution => Is reentatn - это то же самое, что и в VI properties (кроме настроек распределения памяти) ? И, можете сказать, какой опцией можно закрыть VI после выполнения - либо внутри VI, либо через здесь, из ведущего меню ? Последний вопрос - окошко у меня появляется в правом нижнем углу экрана, его не видно если не перетащить - как можно задать его положения ?
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: Создание многооконного приложения с reentatn execution V
>> если я выберу в Property Node у ссылки Execution => Is reentatn - это то же самое, что и в VI properties (кроме настроек распределения памяти) ?
Да, с помощью свойства можно узнать, что VI реентерантный. Однако в RTE это свойство только для чтения. Записать можно, когда VI не запущен.
>> какой опцией можно закрыть VI после выполнения - либо внутри VI, либо через здесь, из ведущего меню ?
В примере с форума NI все подприборы завершают работу, когда пользовательское событие Custom User Event становится True. Вполне себе нормальный вариант. Можно и логический Notifier использовать при желании. Хотя в данном случае User Event удобнее, т.к. в каждом SubVI уже размещена Event-структура.
>> как можно задать его положения ?
Самое простое - установить Position = Centered в свойствах VI (вкладка Window Run-Time Position).
Да, с помощью свойства можно узнать, что VI реентерантный. Однако в RTE это свойство только для чтения. Записать можно, когда VI не запущен.
>> какой опцией можно закрыть VI после выполнения - либо внутри VI, либо через здесь, из ведущего меню ?
В примере с форума NI все подприборы завершают работу, когда пользовательское событие Custom User Event становится True. Вполне себе нормальный вариант. Можно и логический Notifier использовать при желании. Хотя в данном случае User Event удобнее, т.к. в каждом SubVI уже размещена Event-структура.
>> как можно задать его положения ?
Самое простое - установить Position = Centered в свойствах VI (вкладка Window Run-Time Position).
- Juri
- I/O
- Сообщения: 263
- Зарегистрирован: 19 апр 2017, 23:06
- Версия LabVIEW: 2021
- Благодарил (а): 13 раз
- Поблагодарили: 6 раз
Re: Создание многооконного приложения с reentatn execution V
никогда не понимал, почему NI сделал такой неудобный вход в "Open VI Reference"
- Вложения
-
- Flags.vi
- (4.99 КБ) 105 скачиваний
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
- 2 Ответы
- 434 Просмотры
-
Последнее сообщение Artem.spb
-
- 2 Ответы
- 675 Просмотры
-
Последнее сообщение Sergey Puzanov
-
- 6 Ответы
- 907 Просмотры
-
Последнее сообщение AndreyDmitriev
-
- 9 Ответы
- 813 Просмотры
-
Последнее сообщение ujin1
-
- 10 Ответы
- 2373 Просмотры
-
Последнее сообщение PAG