вызов SubVi из главной VI
-
- beginner
- Сообщения: 17
- Зарегистрирован: 27 июл 2018, 14:40
- Версия LabVIEW: 2015
- Контактная информация:
вызов SubVi из главной VI
Добрый день, я пытаюсь вызвать внутри 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 КБ) 212 скачиваний
-
- test.vi
- (10.6 КБ) 227 скачиваний
-
- error.png (10.25 КБ) 5874 просмотра
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: вызов 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 в другое место не возникала данная ошибка?
Дело в том, что EXE это своеобразная форма архива, и путь к NEW_VI.vi должен уже включать exe файл, должно получиться типа такого:
X:\builds\test\test\Application.exe\New_vi.vi
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: вызов SubVi из главной VI
mihafiz97@gmail.com, обычно разграничивают формирование путей в режиме среды разработки (IDE) и в режиме ран-тайма (экзешник, RTE). Проще всего использовать Conditional Disable Structure, задав два состояния: RUN_TIME_ENGINE == True и RUN_TIME_ENGINE == False. Для генерируются одни пути, для EXE другие. Также не забудьте включить ваш SubVI внутрь билда, если он туда не попадает автоматом.
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: вызов SubVi из главной VI
Ну, и резюмируя все вышесказанное
Для ран-тайма используйте иной путь (лучше использовать как базовый Application Directory) При билде, добавляете "динамическую" виайку как Always Included При надобности, создаете кастомный путь; или используете дефолтный путь для "Support Files" (там могут быть не только потом такие виайки, а и просто файлы, необходимые для приложения - картинки, конфиг. файлы, и т.д.). Вручную конфигурируете, что SubVI будет включена именно в путь для "Support Files" Проверяете при помощи Preview - SubVI после билда будет в папке data, и таким образом путь будет правильным.
Для ран-тайма используйте иной путь (лучше использовать как базовый Application Directory) При билде, добавляете "динамическую" виайку как Always Included При надобности, создаете кастомный путь; или используете дефолтный путь для "Support Files" (там могут быть не только потом такие виайки, а и просто файлы, необходимые для приложения - картинки, конфиг. файлы, и т.д.). Вручную конфигурируете, что SubVI будет включена именно в путь для "Support Files" Проверяете при помощи Preview - SubVI после билда будет в папке data, и таким образом путь будет правильным.
Мы делили апельсин - много наших полегло...
-
- user
- Сообщения: 94
- Зарегистрирован: 28 июл 2019, 13:16
- Версия LabVIEW: 19
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
- Контактная информация:
Re: вызов SubVi из главной VI
Не совсем понятно для какой цели.Добрый день, я пытаюсь вызвать внутри VI другой VI
Например у Вас есть несколько драйверов для разных приборов и Вам требуется 10 раз вызвать один (или несколько клонов из них)
и при этом у Вас нет цели менять эти VI в процессе работы без перекомпиляции всего проекта.
Для этого случая можно вызывать заранее загруженный VI.
Этот способ загружает только VI с опцией Shared clone reentrant execution.
- Вложения
-
- new_vi.vi
- (5.65 КБ) 205 скачиваний
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: вызов SubVi из главной VI
Динамический вызов виаек применяется всплошь и рядом. Если в программе должен быть паралельный процесс, то всегда легче сделать отдельную виайку, которую потом можно запустить с главной виайки; нежели городить все статически.ujin писал(а):Не совсем понятно для какой цели.
Еще один use case - это юзер-интерфейсы, отображаемые в сабпанелях. Очень удобно - особенно если пользовательський интерфейс составлен со многих элементов. Вместо того, чтобы все лепить в одной виайке, разбиваете на несколько, и отображаете их в сабпанелях.
Ну, и ввесь Actor Framework построен на том, что акторы вызываются асинхронно, динамически - чем позволяют делать приложение довольно гибким и масштабируемым.
Мы делили апельсин - много наших полегло...
-
- leader
- Сообщения: 932
- Зарегистрирован: 17 янв 2016, 15:02
- Награды: 1
- Версия LabVIEW: 6.1,8.5,20
Re: вызов SubVi из главной VI
Самый простой способ использовать Static VI ReferenceПодскажите пожалуйста как вызвать NEW_VI.vi чтобы при переносе TEST.exe в другое место не возникала данная ошибка?
-
- beginner
- Сообщения: 17
- Зарегистрирован: 27 июл 2018, 14:40
- Версия LabVIEW: 2015
- Контактная информация:
Re: вызов SubVi из главной VI
Мне это нужно для того чтобы передать данные из SubVi (NEW_VI) в главную VI (TEST.VI). Например в SubVI я обращаю к базе данных, сохраняю данные в базу, удаляю и т.д. После того как данные загружены из базы я хочу результаты (id записей например) передать в главную VI и после нажатия кнопки OK SubVI закрывается, а результаты появляются в главной VI.Не совсем понятно для какой цели.
В общем мне просто надо окно вызвать чтобы пользователь выбрал данные из этого окна и эти данные попали в главную VI.
-
- beginner
- Сообщения: 17
- Зарегистрирован: 27 июл 2018, 14:40
- Версия LabVIEW: 2015
- Контактная информация:
Re: вызов SubVi из главной VI
Попробовал такое проделать, это работает, но если exe перенести на например на диск C:, то та же ошибка возникает. А если этот Test.exe надо будет перенести на другой компьютер?Kosist
Есть ли какой-то другой способ вызвать окно, в котором можно получить данные из базы, выбрать нужные данные и при закрытии этого окна они должны попасть в главную vi. Получить данные из БД мне понятно как, а вот передать данные между vi не могу реализовать. Помогите пожалуйста разобраться с этим как это сделать?
-
Kosist
- expert
- Сообщения: 1236
- Зарегистрирован: 21 фев 2011, 23:44
- Награды: 2
- Версия LabVIEW: 2013-2020
- Благодарил (а): 23 раза
- Поблагодарили: 30 раз
- Контактная информация:
Re: вызов SubVi из главной VI
Значит, неправильно пробовали, и где-то допустили ошибку. Забилденный екзе можно переносить куда-угодно, все будет работать. У Вас есть проект с конфигурацией билда?mihafiz97@gmail.com писал(а):Попробовал такое проделать, это работает, но если exe перенести на например на диск C:, то та же ошибка возникает. А если этот Test.exe надо будет перенести на другой компьютер?
Мы делили апельсин - много наших полегло...
-
- user
- Сообщения: 94
- Зарегистрирован: 28 июл 2019, 13:16
- Версия LabVIEW: 19
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
- Контактная информация:
Re: вызов SubVi из главной VI
Окно можно вызвать просто установив VI с вызовом окна на диаграмму. Например я поставил на диаграмму VI с чтением данных из базы. Внутри VI выглядит так При вызове на выходе Data появляются необходимые данные и они используются в главном VI.Есть ли какой-то другой способ вызвать окно, в котором можно получить данные из базы, выбрать нужные данные и при закрытии этого окна они должны попасть в главную vi.
То есть если VI Вам заранее известен можно просто поставить его на диаграмму.
Динамические вызовы по ссылкам точно потребуются если при компиляции неизвестно какой именно VI Вы будете вызывать. Или сколько экземпляров этого VI Вам нужно параллельно запустить.
В остальных целях возможно стоит просто поставить нужный VI на диаграмму.