невыполнение кода
-
- developer
- Сообщения: 289
- Зарегистрирован: 26 фев 2016, 06:31
- Версия LabVIEW: 18-20
- Благодарил (а): 6 раз
- Поблагодарили: 7 раз
- Контактная информация:
невыполнение кода
Добрый вечер.
А как сделать так, чтобы при условии false допустим код не выполнять вообще?
disable structure не подходит, поскольку нужно менять программно менять false на true.
case тоже не подходит, так как в значение false код может быть ошибка (например отсутствие dll при работе с устройством) и тогда программа вообще покажет разорванную стрелку.
есть такое в labview?
А как сделать так, чтобы при условии false допустим код не выполнять вообще?
disable structure не подходит, поскольку нужно менять программно менять false на true.
case тоже не подходит, так как в значение false код может быть ошибка (например отсутствие dll при работе с устройством) и тогда программа вообще покажет разорванную стрелку.
есть такое в labview?
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: невыполнение кода
Только Case и применяется для такого случая. И с его помощью задача решается абсолютно штатно, без костылей. Все проблемы описанного рода решаются на уровне алгоритма (когда и в каких условиях что выполнять и в какой последовательности). Хотите большей конкретики - предоставьте участок кода.
-
- developer
- Сообщения: 289
- Зарегистрирован: 26 фев 2016, 06:31
- Версия LabVIEW: 18-20
- Благодарил (а): 6 раз
- Поблагодарили: 7 раз
- Контактная информация:
Re: невыполнение кода
Для примера: если есть библиотека OpenG то выполняем одно, если нет, то другое.
Но если такой библиотеки нет, то программа не запустится.
Но если такой библиотеки нет, то программа не запустится.
- Вложения
-
- невыполнение кода.vi
- скрипт
- (10.21 КБ) 203 скачивания
-
IvanLis
- guru
- Сообщения: 5467
- Зарегистрирован: 02 дек 2009, 17:44
- Награды: 7
- Версия LabVIEW: 2015, 2016
- Откуда: СССР
- Благодарил (а): 28 раз
- Поблагодарили: 88 раз
Re: невыполнение кода
Тут наверное более правильно использовать вызов сторонних функций через Call By Reference Node.
Но для этого пути к нужно знать. А в случае возникновения ошибки запускать свой код.
Но для этого пути к нужно знать. А в случае возникновения ошибки запускать свой код.
Знание нескольких принципов освобождает от знания многих фактов!
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
Правила форума
Как добавить в сообщение картинку или файл
Конвертация / версий (форматов) VI
Как правильно задать вопрос...
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: невыполнение кода
rushonda, а не проще проверять, что OpenG установлен? Например, существует ли папка \National Instruments\LabVIEW xxxx\user.lib\_OpenG.lib и далее - подпапки, если необходимо. А сам код переключать через Conditional Disable структуру, определив кастомный символ (OPENG_AVAILABLE или что-то подобное).
-
- developer
- Сообщения: 289
- Зарегистрирован: 26 фев 2016, 06:31
- Версия LabVIEW: 18-20
- Благодарил (а): 6 раз
- Поблагодарили: 7 раз
- Контактная информация:
Re: невыполнение кода
dadreamer, а в какой момент проверять? если папки нет, а в программе используются функции из библиотеки OpenG, то программа и запуститься то не даст... по Conditional Disable пока мало понятной инфы нашел, если есть где-то примеры - направьте)
-
- doctor
- Сообщения: 2211
- Зарегистрирован: 28 июн 2012, 09:32
- Награды: 3
- Версия LabVIEW: 2009..2020
- Откуда: город семи холмов
- Благодарил (а): 27 раз
- Поблагодарили: 27 раз
Re: невыполнение кода
хм. зачем тогда вообще делать код под OpenG, если и без него программа способна работать?rushonda писал(а):Для примера: если есть библиотека OpenG то выполняем одно, если нет, то другое.
Но если такой библиотеки нет, то программа не запустится.
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: невыполнение кода
Ну, довольно хорошо во встроенной справке по написано. Если очень коротко, то с помощью Conditional Disable Structure можно активировать определённый кусок кода в зависимости от внешних условий и деактивировать другие. Под активацией я имею в виду компиляцию кода. Деактивированный код не будет компилироваться и не будет проверяться на возможные ошибки. Таким образом, можно обойти подгрузку ненужных (или отсутствующих) в данный момент , что, как я понял, вам требуется, и что Case Structure не в состоянии обеспечить. По умолчанию для Conditional Disable Structure определено лишь несколько условных символов: CPU, OS, RUN_TIME_ENGINE, TARGET_BITNESS и TARGET_TYPE. По их именам легко догадаться, для чего они могут использоваться - например, в режиме среды разработки выполняем одну ветку, в режиме ран-тайма (exe) другую. Для этого пригодится символ RUN_TIME_ENGINE. Читайте подробнее здесь. Вы также можете определить собственные символы, о чём говорится вот тут. Для этого нужно создать проект, поместить в него ваш , а в свойствах проекта определить символ и его значение. После этого в любом проекта можно использовать данный символ в Conditional Disable Structure.rushonda писал(а):по Conditional Disable пока мало понятной инфы нашел, если есть где-то примеры - направьте)
Вручную переключать символы не очень интересно, поэтому можем применить немного "чёрной магии", в результате получим возможность программного чтения и записи символов. Запись символа выполняется на файловом уровне, поэтому символ активируется в отдельном .
Посмотрите на такой пример: Здесь OG_Checker.vi используется, чтобы переключать символ OPENG_AVAIL в True или False, в зависимости от наличия папки \National Instruments\LabVIEW xxxx\user.lib\_OpenG.lib\numeric. В Main.vi в зависимости от состояния символа выполняется либо ветка с использованием инструмента OpenG, либо ветка со стандартными инструментами . Разрабочику, впервые получившему этот проект, требуется однократно запустить OG_Checker.vi из проекта, чтобы установить конкретное состояние переменной.
На эти два вопроса я вроде бы ответил выше.rushonda писал(а):dadreamer, а в какой момент проверять? если папки нет, а в программе используются функции из библиотеки OpenG, то программа и запуститься то не даст...
Хотя, честно говоря, у меня вызывает некоторые сомнения ваш подход. Понятно, что речь о режиме разработки, т.к. в скомпиленном варианте между разными ветками кода переключаться не имеет смысла. Да и не получится без "танцев с бубнами". Получается, что вы хотите предоставить неким сторонним программистам ваш проект с целью модификации?.. Почему бы тогда сразу не оговорить, что требуется пакет OpenG (или не требуется, если не собираетесь его использовать)? Попытка "подстрелить двух зайцев" может обернуться дополнительными сложностями в дальнейшем.
-
- developer
- Сообщения: 289
- Зарегистрирован: 26 фев 2016, 06:31
- Версия LabVIEW: 18-20
- Благодарил (а): 6 раз
- Поблагодарили: 7 раз
- Контактная информация:
Re: невыполнение кода
Нет, просто есть программа, котороая использут dll, для которой в свою очередь необходим драйвер или еще что-то. Если этого драйвера нет, прога ругается на эту dll. Поэтому не желательно менять все структуры, использующие dll, а сделать так, чтобы программа работала и без драйвера...Получается, что вы хотите предоставить неким сторонним программистам ваш проект с целью модификации?.. Почему бы тогда сразу не оговорить, что требуется пакет OpenG (или не требуется, если не собираетесь его использовать)?
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: невыполнение кода
Обычно в таких случаях производится динамическая загрузка DLL - если драйвер существует, то LoadLibrary, иначе ошибка и действия в этой ситуации. Это условие нужно выполнять одним из первых в вашей программе, а уже после - все блоки CLFN, использующие вашу библиотеку. Чтобы не начал автоматом подгружать DLL при открытии , путь к библиотеке также надо формировать динамически и в настройках CLFN указывать, что путь задаётся на диаграмме.rushonda писал(а):Нет, просто есть программа, котороая использут dll, для которой в свою очередь необходим драйвер или еще что-то. Если этого драйвера нет, прога ругается на эту dll. Поэтому не желательно менять все структуры, использующие dll, а сделать так, чтобы программа работала и без драйвера...
-
dadreamer
- professor
- Сообщения: 3926
- Зарегистрирован: 17 фев 2013, 16:33
- Награды: 4
- Версия LabVIEW: 2.5 — 2022
- Благодарил (а): 11 раз
- Поблагодарили: 127 раз
- Контактная информация:
Re: невыполнение кода
Боюсь, что нет. NI почему-то не предусмотрели динамическую загрузку .NET сборок. Ну, если очень хочется, то можно написать враппер, но это потребует базовых знаний C#.rushonda писал(а):dadreamer, с net dll тоже так можно?
-
- developer
- Сообщения: 289
- Зарегистрирован: 26 фев 2016, 06:31
- Версия LabVIEW: 18-20
- Благодарил (а): 6 раз
- Поблагодарили: 7 раз
- Контактная информация:
Re: невыполнение кода
dadreamer, ясно, спасибо)
dadreamer, а не посмотрите мою тему "Labview+Google Chrome" - последнее сообщение...?
dadreamer, а не посмотрите мою тему "Labview+Google Chrome" - последнее сообщение...?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение