Создание многооконного приложения с reentatn execution VI

Простейшие вопросы в области инженерной разработки

Создание многооконного приложения с reentatn execution VI

Postby dakishi on 03 Jan 2020, 12:08

Я хочу создать многооконное приложение с помощью subVI работающих в режиме Shared clone reentatn execution, где по N моим кликам на кнопку вызова выплывает N одинаковых окон моих клонированных subVI которые работают одновременно. При этом я могу закрыть любое из окон и вызвать опять еще одно.

Я остановился на проблеме: я могу сделать только фиксированное число окон и потом их все закрыть, т.к. при входе на n-ю итерацию некого цикла, моя программа, допустим, когда видит N` SubVI, запускает их одновременно и ждет их выполнения, соответственно, я не могу добавить новое окно (только закрыть старые). Как можно обойти это ?
dakishi
user
user
 
Posts: 74
Joined: 05 Sep 2019, 21:01
LabVIEW Version: 2016
Karma: 0

Re: Создание многооконного приложения с reentatn execution V

Postby dadreamer on 04 Jan 2020, 14:20

Посмотрите пример https://forums.ni.com/t5/LabVIEW/progra ... 39#M864196 Можно запустить сколько угодно окон и как угодно их закрыть. При этом основная программа не ждёт завершения работы SubVI (флаг 0x80 "Prepare to call and forget").
User avatar
dadreamer
professor
professor
 
Posts: 3423
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 858
I/O VIP vision internet

Re: Создание многооконного приложения с reentatn execution V

Postby dakishi on 04 Jan 2020, 20:23

[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. На втором изображении приведен скрин примера оригинала.
Attachments
Ссылка на VI.JPG
Пример.JPG
Last edited by dakishi on 04 Jan 2020, 20:25, edited 1 time in total.
dakishi
user
user
 
Posts: 74
Joined: 05 Sep 2019, 21:01
LabVIEW Version: 2016
Karma: 0

Re: Создание многооконного приложения с reentatn execution V

Postby dadreamer on 04 Jan 2020, 20:45

>> ошибка 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.
2020-01-04_22-41-07.jpg

Однако я ещё бы добавил флаг 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.
User avatar
dadreamer
professor
professor
 
Posts: 3423
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 858
I/O VIP vision internet

Re: Создание многооконного приложения с reentatn execution V

Postby dakishi on 04 Jan 2020, 22:13

[quote=="dadreamer"]

>> Также не совсем понимаю, как задается reentatn execution.
Задано в настройках SubVI.2020-01-04_22-41-07.jpg
Однако я ещё бы добавил флаг 0x40 "Enable simultaneous calls on reentrant VIs", т.к. без него несколько одновременно работающих SubVI выполняются последовательно. См. описание функции Open VI Reference.

[/quote]

Спасибо большое! Можете сказать, если я выберу в Property Node у ссылки Execution => Is reentatn - это то же самое, что и в VI properties (кроме настроек распределения памяти) ? И, можете сказать, какой опцией можно закрыть VI после выполнения - либо внутри VI, либо через здесь, из ведущего меню ? Последний вопрос - окошко у меня появляется в правом нижнем углу экрана, его не видно если не перетащить - как можно задать его положения ?
dakishi
user
user
 
Posts: 74
Joined: 05 Sep 2019, 21:01
LabVIEW Version: 2016
Karma: 0

Re: Создание многооконного приложения с reentatn execution V

Postby dadreamer on 05 Jan 2020, 00:27

>> если я выберу в 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).
User avatar
dadreamer
professor
professor
 
Posts: 3423
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 858
I/O VIP vision internet

Re: Создание многооконного приложения с reentatn execution V

Postby Usss on 20 Jan 2020, 15:28

никогда не понимал, почему NI сделал такой неудобный вход в "Open VI Reference"
Attachments
Flags.vi
(4.99 KiB) Downloaded 22 times
Screenshot_2.png
Usss
assistant
assistant
 
Posts: 109
Joined: 19 Apr 2017, 23:06
LabVIEW Version: 2017
Karma: 14
I/O


Return to Для чайников

Who is online

Users browsing this forum: Yandex and 11 guests

cron