вызов SubVi из главной VI

Работа с файлами и базами данных

вызов SubVi из главной VI

Postby mihafiz97@gmail.com on 01 Dec 2019, 12:08

Добрый день, я пытаюсь вызвать внутри VI другой VI (код прилогаю), Если сделать exe приложение, то выдает ошибку (error.png). Получается что у меня NEW_VI.vi находится там где главная TEST.vi, а когда я делаю build и переношу exe файл в другое место (например на диск C), то TEST.vi не может найти NEW_vi. Подскажите пожалуйста как вызвать NEW_VI.vi чтобы при переносе TEST.exe в другое место не возникала данная ошибка?
Attachments
new_vi.vi
(5.23 KiB) Downloaded 5 times
test.vi
(10.6 KiB) Downloaded 5 times
error.png
error.png (10.25 KiB) Viewed 265 times
mihafiz97@gmail.com
beginner
beginner
 
Posts: 16
Joined: 27 Jul 2018, 14:40
LabVIEW Version: 2015
Karma: 0

Re: вызов SubVi из главной VI

Postby IvanLis on 01 Dec 2019, 13:58

mihafiz97@gmail.com wrote:Добрый день, я пытаюсь вызвать внутри VI другой VI (код прилогаю), Если сделать exe приложение, то выдает ошибку (error.png). Получается что у меня NEW_VI.vi находится там где главная TEST.vi, а когда я делаю build и переношу exe файл в другое место (например на диск C), то TEST.vi не может найти NEW_vi. Подскажите пожалуйста как вызвать NEW_VI.vi чтобы при переносе TEST.exe в другое место не возникала данная ошибка?


Выведите формируемый путь на лицевую панель и посмотрите, что Вы получаете до и после компиляции.
Дело в том, что EXE это своеобразная форма архива, и путь к NEW_VI.vi должен уже включать exe файл, должно получиться типа такого:
X:\builds\test\test\Application.exe\New_vi.vi
Снимок экрана от 2019-12-01 13-57-02.png
пути до и после компиляции

1.png
User avatar
IvanLis
professor
professor
 
Posts: 4840
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2015, 2016
Karma: 784
hardware VIP bloggers teachers

Re: вызов SubVi из главной VI

Postby dadreamer on 01 Dec 2019, 14:33

mihafiz97@gmail.com, обычно разграничивают формирование путей в режиме среды разработки (IDE) и в режиме ран-тайма (экзешник, RTE). Проще всего использовать Conditional Disable Structure, задав два состояния: RUN_TIME_ENGINE == True и RUN_TIME_ENGINE == False. Для :vi: генерируются одни пути, для EXE другие. Также не забудьте включить ваш SubVI внутрь билда, если он туда не попадает автоматом.
User avatar
dadreamer
professor
professor
 
Posts: 3337
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2019
Karma: 845
I/O VIP vision internet

Re: вызов SubVi из главной VI

Postby Kosist on 01 Dec 2019, 15:32

Ну, и резюмируя все вышесказанное
Для ран-тайма используйте иной путь (лучше использовать как базовый Application Directory)
Development.png
Путь для edit-time
Development.png (5.85 KiB) Viewed 236 times

Run-Time.png
Путь в ран-тайме
Run-Time.png (6.24 KiB) Viewed 236 times

При билде, добавляете "динамическую" виайку как Always Included
Source Files.png

При надобности, создаете кастомный путь; или используете дефолтный путь для "Support Files" (там могут быть не только потом такие виайки, а и просто файлы, необходимые для приложения - картинки, конфиг. файлы, и т.д.).
Destinations.png

Вручную конфигурируете, что SubVI будет включена именно в путь для "Support Files"
Source File Settings.png
Source File Settings.png (6.58 KiB) Viewed 236 times

Проверяете при помощи Preview - SubVI после билда будет в папке data, и таким образом путь будет правильным.
Preview.png
Preview.png (6.22 KiB) Viewed 236 times
Мы делили апельсин - много наших полегло...
User avatar
Kosist
expert
expert
 
Posts: 1007
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 282
CLAD I/O VIP students

Re: вызов SubVi из главной VI

Postby ujin on 01 Dec 2019, 20:04

Добрый день, я пытаюсь вызвать внутри VI другой VI

Не совсем понятно для какой цели.
Например у Вас есть несколько драйверов для разных приборов и Вам требуется 10 раз вызвать один (или несколько клонов из них)
и при этом у Вас нет цели менять эти VI в процессе работы без перекомпиляции всего проекта.
Для этого случая можно вызывать заранее загруженный VI.
Этот способ загружает только VI с опцией Shared clone reentrant execution.
Attachments
new_vi.vi
(5.65 KiB) Downloaded 3 times
Execution.png
test.png
ujin
beginner
beginner
 
Posts: 27
Joined: 28 Jul 2019, 13:16
LabVIEW Version: 15
Karma: 4

Re: вызов SubVi из главной VI

Postby Kosist on 01 Dec 2019, 20:59

ujin wrote:Не совсем понятно для какой цели.

Динамический вызов виаек применяется всплошь и рядом. Если в программе должен быть паралельный процесс, то всегда легче сделать отдельную виайку, которую потом можно запустить с главной виайки; нежели городить все статически.
Еще один use case - это юзер-интерфейсы, отображаемые в сабпанелях. Очень удобно - особенно если пользовательський интерфейс составлен со многих элементов. Вместо того, чтобы все лепить в одной виайке, разбиваете на несколько, и отображаете их в сабпанелях.
Ну, и ввесь Actor Framework построен на том, что акторы вызываются асинхронно, динамически - чем позволяют делать приложение довольно гибким и масштабируемым.
Мы делили апельсин - много наших полегло...
User avatar
Kosist
expert
expert
 
Posts: 1007
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 282
CLAD I/O VIP students

Re: вызов SubVi из главной VI

Postby Blackman on 02 Dec 2019, 11:16

Подскажите пожалуйста как вызвать NEW_VI.vi чтобы при переносе TEST.exe в другое место не возникала данная ошибка?

Самый простой способ использовать Static VI Reference
Blackman
leader
leader
 
Posts: 885
Joined: 17 Jan 2016, 15:02
Medals: 1
Activity (1)
LabVIEW Version: 6.1,8.5,20
Karma: 259
VIP

Re: вызов SubVi из главной VI

Postby mihafiz97@gmail.com on 03 Dec 2019, 22:05

Не совсем понятно для какой цели.

Мне это нужно для того чтобы передать данные из SubVi (NEW_VI) в главную VI (TEST.VI). Например в SubVI я обращаю к базе данных, сохраняю данные в базу, удаляю и т.д. После того как данные загружены из базы я хочу результаты (id записей например) передать в главную VI и после нажатия кнопки OK SubVI закрывается, а результаты появляются в главной VI.
В общем мне просто надо окно вызвать чтобы пользователь выбрал данные из этого окна и эти данные попали в главную VI.
mihafiz97@gmail.com
beginner
beginner
 
Posts: 16
Joined: 27 Jul 2018, 14:40
LabVIEW Version: 2015
Karma: 0

Re: вызов SubVi из главной VI

Postby mihafiz97@gmail.com on 03 Dec 2019, 23:33

Kosist
Попробовал такое проделать, это работает, но если exe перенести на например на диск C:, то та же ошибка возникает. А если этот Test.exe надо будет перенести на другой компьютер?
Есть ли какой-то другой способ вызвать окно, в котором можно получить данные из базы, выбрать нужные данные и при закрытии этого окна они должны попасть в главную vi. Получить данные из БД мне понятно как, а вот передать данные между vi не могу реализовать. Помогите пожалуйста разобраться с этим как это сделать?
mihafiz97@gmail.com
beginner
beginner
 
Posts: 16
Joined: 27 Jul 2018, 14:40
LabVIEW Version: 2015
Karma: 0

Re: вызов SubVi из главной VI

Postby Kosist on 03 Dec 2019, 23:38

mihafiz97@gmail.com wrote:Попробовал такое проделать, это работает, но если exe перенести на например на диск C:, то та же ошибка возникает. А если этот Test.exe надо будет перенести на другой компьютер?

Значит, неправильно пробовали, и где-то допустили ошибку. Забилденный екзе можно переносить куда-угодно, все будет работать. У Вас есть проект с конфигурацией билда?
Мы делили апельсин - много наших полегло...
User avatar
Kosist
expert
expert
 
Posts: 1007
Joined: 21 Feb 2011, 23:44
Medals: 2
Activity (1) Gold (1)
LabVIEW Version: 2013-2017
Karma: 282
CLAD I/O VIP students

Re: вызов SubVi из главной VI

Postby ujin on 04 Dec 2019, 15:53

Есть ли какой-то другой способ вызвать окно, в котором можно получить данные из базы, выбрать нужные данные и при закрытии этого окна они должны попасть в главную vi.

Окно можно вызвать просто установив VI с вызовом окна на диаграмму. Например я поставил на диаграмму VI с чтением данных из базы.
Load data 1.png
Load data 1.png (3.09 KiB) Viewed 119 times

Внутри VI выглядит так
Load data.png

При вызове на выходе Data появляются необходимые данные и они используются в главном VI.
То есть если VI Вам заранее известен можно просто поставить его на диаграмму.
Динамические вызовы по ссылкам точно потребуются если при компиляции неизвестно какой именно VI Вы будете вызывать. Или сколько экземпляров этого VI Вам нужно параллельно запустить.
В остальных целях возможно стоит просто поставить нужный VI на диаграмму.
ujin
beginner
beginner
 
Posts: 27
Joined: 28 Jul 2019, 13:16
LabVIEW Version: 15
Karma: 4


Return to Сохранение данных

Who is online

Users browsing this forum: No registered users and 1 guest

cron