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

Работа с файлами и базами данных
Ответить
mihafiz97@gmail.com
beginner
beginner
Сообщения: 17
Зарегистрирован: 27 июл 2018, 14:40
Репутация: 0
Версия LabVIEW: 2015
Контактная информация:

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

Сообщение 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 в другое место не возникала данная ошибка?
Вложения
new_vi.vi
(5.23 КБ) 68 скачиваний
test.vi
(10.6 КБ) 74 скачивания
error.png
error.png (10.25 КБ) 2663 просмотра

Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
professor
professor
Сообщения: 4929
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Репутация: 0
Версия LabVIEW: 2015, 2016
Откуда: СССР

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

Сообщение 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

Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3505
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Репутация: 0
Версия LabVIEW: 2.5 — 2020
Контактная информация:

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

Сообщение dadreamer »

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

Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1069
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Репутация: 0
Версия LabVIEW: 2013-2020
Контактная информация:

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

Сообщение Kosist »

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

ujin
user
user
Сообщения: 77
Зарегистрирован: 28 июл 2019, 13:16
Репутация: 0
Версия LabVIEW: 19
Контактная информация:

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

Сообщение ujin »

Добрый день, я пытаюсь вызвать внутри VI другой VI
Не совсем понятно для какой цели.
Например у Вас есть несколько драйверов для разных приборов и Вам требуется 10 раз вызвать один (или несколько клонов из них)
и при этом у Вас нет цели менять эти VI в процессе работы без перекомпиляции всего проекта.
Для этого случая можно вызывать заранее загруженный VI.
Этот способ загружает только VI с опцией Shared clone reentrant execution.
Вложения
new_vi.vi
(5.65 КБ) 77 скачиваний
Execution.png
test.png

Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1069
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Репутация: 0
Версия LabVIEW: 2013-2020
Контактная информация:

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

Сообщение Kosist »

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

Blackman

Activity
leader
leader
Сообщения: 929
Зарегистрирован: 17 янв 2016, 15:02
Награды: 1
Репутация: 0
Версия LabVIEW: 6.1,8.5,20
Контактная информация:

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

Сообщение Blackman »

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

mihafiz97@gmail.com
beginner
beginner
Сообщения: 17
Зарегистрирован: 27 июл 2018, 14:40
Репутация: 0
Версия LabVIEW: 2015
Контактная информация:

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

Сообщение mihafiz97@gmail.com »

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

mihafiz97@gmail.com
beginner
beginner
Сообщения: 17
Зарегистрирован: 27 июл 2018, 14:40
Репутация: 0
Версия LabVIEW: 2015
Контактная информация:

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

Сообщение mihafiz97@gmail.com »

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

Аватара пользователя
Kosist

Activity Gold
expert
expert
Сообщения: 1069
Зарегистрирован: 21 фев 2011, 23:44
Награды: 2
Репутация: 0
Версия LabVIEW: 2013-2020
Контактная информация:

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

Сообщение Kosist »

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

ujin
user
user
Сообщения: 77
Зарегистрирован: 28 июл 2019, 13:16
Репутация: 0
Версия LabVIEW: 19
Контактная информация:

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

Сообщение ujin »

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

Ответить

Вернуться в «Сохранение данных»