Страница 1 из 1

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

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

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

Добавлено: 01 дек 2019, 13:58
IvanLis
mihafiz97@gmail.com писал(а):Добрый день, я пытаюсь вызвать внутри 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
пути до и после компиляции
пути до и после компиляции
1.png

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

Добавлено: 01 дек 2019, 14:33
dadreamer
mihafiz97@gmail.com, обычно разграничивают формирование путей в режиме среды разработки (IDE) и в режиме ран-тайма (экзешник, RTE). Проще всего использовать Conditional Disable Structure, задав два состояния: RUN_TIME_ENGINE == True и RUN_TIME_ENGINE == False. Для :vi: генерируются одни пути, для EXE другие. Также не забудьте включить ваш SubVI внутрь билда, если он туда не попадает автоматом.

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

Добавлено: 01 дек 2019, 15:32
Kosist
Ну, и резюмируя все вышесказанное
Для ран-тайма используйте иной путь (лучше использовать как базовый Application Directory)
Путь для edit-time
Путь для edit-time
Development.png (5.85 КБ) 5670 просмотров
Путь в ран-тайме
Путь в ран-тайме
Run-Time.png (6.24 КБ) 5670 просмотров
При билде, добавляете "динамическую" виайку как Always Included
Source Files.png
При надобности, создаете кастомный путь; или используете дефолтный путь для "Support Files" (там могут быть не только потом такие виайки, а и просто файлы, необходимые для приложения - картинки, конфиг. файлы, и т.д.).
Destinations.png
Вручную конфигурируете, что SubVI будет включена именно в путь для "Support Files"
Source File Settings.png
Source File Settings.png (6.58 КБ) 5670 просмотров
Проверяете при помощи Preview - SubVI после билда будет в папке data, и таким образом путь будет правильным.
Preview.png
Preview.png (6.22 КБ) 5670 просмотров

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

Добавлено: 01 дек 2019, 20:04
ujin
Добрый день, я пытаюсь вызвать внутри VI другой VI
Не совсем понятно для какой цели.
Например у Вас есть несколько драйверов для разных приборов и Вам требуется 10 раз вызвать один (или несколько клонов из них)
и при этом у Вас нет цели менять эти VI в процессе работы без перекомпиляции всего проекта.
Для этого случая можно вызывать заранее загруженный VI.
Этот способ загружает только VI с опцией Shared clone reentrant execution.

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

Добавлено: 01 дек 2019, 20:59
Kosist
ujin писал(а):Не совсем понятно для какой цели.
Динамический вызов виаек применяется всплошь и рядом. Если в программе должен быть паралельный процесс, то всегда легче сделать отдельную виайку, которую потом можно запустить с главной виайки; нежели городить все статически.
Еще один use case - это юзер-интерфейсы, отображаемые в сабпанелях. Очень удобно - особенно если пользовательський интерфейс составлен со многих элементов. Вместо того, чтобы все лепить в одной виайке, разбиваете на несколько, и отображаете их в сабпанелях.
Ну, и ввесь Actor Framework построен на том, что акторы вызываются асинхронно, динамически - чем позволяют делать приложение довольно гибким и масштабируемым.

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

Добавлено: 02 дек 2019, 11:16
Blackman
Подскажите пожалуйста как вызвать NEW_VI.vi чтобы при переносе TEST.exe в другое место не возникала данная ошибка?
Самый простой способ использовать Static VI Reference

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

Добавлено: 03 дек 2019, 22:05
mihafiz97@gmail.com
Не совсем понятно для какой цели.
Мне это нужно для того чтобы передать данные из SubVi (NEW_VI) в главную VI (TEST.VI). Например в SubVI я обращаю к базе данных, сохраняю данные в базу, удаляю и т.д. После того как данные загружены из базы я хочу результаты (id записей например) передать в главную VI и после нажатия кнопки OK SubVI закрывается, а результаты появляются в главной VI.
В общем мне просто надо окно вызвать чтобы пользователь выбрал данные из этого окна и эти данные попали в главную VI.

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

Добавлено: 03 дек 2019, 23:33
mihafiz97@gmail.com
Kosist
Попробовал такое проделать, это работает, но если exe перенести на например на диск C:, то та же ошибка возникает. А если этот Test.exe надо будет перенести на другой компьютер?
Есть ли какой-то другой способ вызвать окно, в котором можно получить данные из базы, выбрать нужные данные и при закрытии этого окна они должны попасть в главную vi. Получить данные из БД мне понятно как, а вот передать данные между vi не могу реализовать. Помогите пожалуйста разобраться с этим как это сделать?

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

Добавлено: 03 дек 2019, 23:38
Kosist
mihafiz97@gmail.com писал(а):Попробовал такое проделать, это работает, но если exe перенести на например на диск C:, то та же ошибка возникает. А если этот Test.exe надо будет перенести на другой компьютер?
Значит, неправильно пробовали, и где-то допустили ошибку. Забилденный екзе можно переносить куда-угодно, все будет работать. У Вас есть проект с конфигурацией билда?

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

Добавлено: 04 дек 2019, 15:53
ujin
Есть ли какой-то другой способ вызвать окно, в котором можно получить данные из базы, выбрать нужные данные и при закрытии этого окна они должны попасть в главную vi.
Окно можно вызвать просто установив VI с вызовом окна на диаграмму. Например я поставил на диаграмму VI с чтением данных из базы.
Load data 1.png
Load data 1.png (3.09 КБ) 5553 просмотра
Внутри VI выглядит так
Load data.png
При вызове на выходе Data появляются необходимые данные и они используются в главном VI.
То есть если VI Вам заранее известен можно просто поставить его на диаграмму.
Динамические вызовы по ссылкам точно потребуются если при компиляции неизвестно какой именно VI Вы будете вызывать. Или сколько экземпляров этого VI Вам нужно параллельно запустить.
В остальных целях возможно стоит просто поставить нужный VI на диаграмму.