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

невыполнение кода

Добавлено: 18 мар 2018, 20:46
rushonda
Добрый вечер.
А как сделать так, чтобы при условии false допустим код не выполнять вообще?
disable structure не подходит, поскольку нужно менять программно менять false на true.
case тоже не подходит, так как в значение false код может быть ошибка (например отсутствие dll при работе с устройством) и тогда программа вообще покажет разорванную стрелку.
есть такое в labview?

Re: невыполнение кода

Добавлено: 18 мар 2018, 22:35
Borjomy_1
Только Case и применяется для такого случая. И с его помощью задача решается абсолютно штатно, без костылей. Все проблемы описанного рода решаются на уровне алгоритма (когда и в каких условиях что выполнять и в какой последовательности). Хотите большей конкретики - предоставьте участок кода.

Re: невыполнение кода

Добавлено: 19 мар 2018, 07:53
rushonda
Для примера: если есть библиотека OpenG то выполняем одно, если нет, то другое.
Но если такой библиотеки нет, то программа не запустится.

Re: невыполнение кода

Добавлено: 19 мар 2018, 08:36
IvanLis
Тут наверное более правильно использовать вызов сторонних функций через Call By Reference Node.
Но для этого пути к :vi: нужно знать.
Снимок экрана от 2018-03-19 08-32-03.png
Снимок экрана от 2018-03-19 08-32-03.png (6.13 КБ) 6373 просмотра
А в случае возникновения ошибки запускать свой код.

Re: невыполнение кода

Добавлено: 21 мар 2018, 15:18
dadreamer
rushonda, а не проще проверять, что OpenG установлен? Например, существует ли папка \National Instruments\LabVIEW xxxx\user.lib\_OpenG.lib и далее - подпапки, если необходимо. А сам код переключать через Conditional Disable структуру, определив кастомный символ (OPENG_AVAILABLE или что-то подобное).

Re: невыполнение кода

Добавлено: 21 мар 2018, 21:43
rushonda
dadreamer, а в какой момент проверять? если папки нет, а в программе используются функции из библиотеки OpenG, то программа и запуститься то не даст... по Conditional Disable пока мало понятной инфы нашел, если есть где-то примеры - направьте)

Re: невыполнение кода

Добавлено: 21 мар 2018, 23:15
Borjomy_1
rushonda писал(а):Для примера: если есть библиотека OpenG то выполняем одно, если нет, то другое.
Но если такой библиотеки нет, то программа не запустится.
хм. зачем тогда вообще делать код под OpenG, если и без него программа способна работать?

Re: невыполнение кода

Добавлено: 22 мар 2018, 17:05
dadreamer
rushonda писал(а):по Conditional Disable пока мало понятной инфы нашел, если есть где-то примеры - направьте)
Ну, довольно хорошо во встроенной справке по :labview: написано. Если очень коротко, то с помощью Conditional Disable Structure можно активировать определённый кусок кода в зависимости от внешних условий и деактивировать другие. Под активацией я имею в виду компиляцию кода. Деактивированный код не будет компилироваться :labview: и не будет проверяться на возможные ошибки. Таким образом, можно обойти подгрузку ненужных (или отсутствующих) в данный момент :vi: , что, как я понял, вам требуется, и что Case Structure не в состоянии обеспечить. По умолчанию для Conditional Disable Structure определено лишь несколько условных символов: CPU, OS, RUN_TIME_ENGINE, TARGET_BITNESS и TARGET_TYPE. По их именам легко догадаться, для чего они могут использоваться - например, в режиме среды разработки выполняем одну ветку, в режиме ран-тайма (exe) другую. Для этого пригодится символ RUN_TIME_ENGINE. Читайте подробнее здесь. Вы также можете определить собственные символы, о чём говорится вот тут. Для этого нужно создать проект, поместить в него ваш :vi: , а в свойствах проекта определить символ и его значение. После этого в любом :vi: проекта можно использовать данный символ в Conditional Disable Structure.
Вручную переключать символы не очень интересно, поэтому можем применить немного "чёрной магии", в результате получим возможность программного чтения и записи символов. :crazy: Запись символа выполняется на файловом уровне, поэтому символ активируется в отдельном :vi: .
Посмотрите на такой пример:
Test_for_OpenG.rar
lv2014
(12.98 КБ) 180 скачиваний
Здесь OG_Checker.vi используется, чтобы переключать символ OPENG_AVAIL в True или False, в зависимости от наличия папки \National Instruments\LabVIEW xxxx\user.lib\_OpenG.lib\numeric. В Main.vi в зависимости от состояния символа выполняется либо ветка с использованием инструмента OpenG, либо ветка со стандартными инструментами :labview: . Разрабочику, впервые получившему этот проект, требуется однократно запустить OG_Checker.vi из проекта, чтобы установить конкретное состояние переменной.
rushonda писал(а):dadreamer, а в какой момент проверять? если папки нет, а в программе используются функции из библиотеки OpenG, то программа и запуститься то не даст...
На эти два вопроса я вроде бы ответил выше.

Хотя, честно говоря, у меня вызывает некоторые сомнения ваш подход. Понятно, что речь о режиме разработки, т.к. в скомпиленном варианте между разными ветками кода переключаться не имеет смысла. Да и не получится без "танцев с бубнами". Получается, что вы хотите предоставить неким сторонним программистам ваш проект с целью модификации?.. Почему бы тогда сразу не оговорить, что требуется пакет OpenG (или не требуется, если не собираетесь его использовать)? Попытка "подстрелить двух зайцев" может обернуться дополнительными сложностями в дальнейшем.

Re: невыполнение кода

Добавлено: 04 июн 2018, 11:01
rushonda
Получается, что вы хотите предоставить неким сторонним программистам ваш проект с целью модификации?.. Почему бы тогда сразу не оговорить, что требуется пакет OpenG (или не требуется, если не собираетесь его использовать)?
Нет, просто есть программа, котороая использут dll, для которой в свою очередь необходим драйвер или еще что-то. Если этого драйвера нет, прога ругается на эту dll. Поэтому не желательно менять все структуры, использующие dll, а сделать так, чтобы программа работала и без драйвера...

Re: невыполнение кода

Добавлено: 04 июн 2018, 19:41
dadreamer
rushonda писал(а):Нет, просто есть программа, котороая использут dll, для которой в свою очередь необходим драйвер или еще что-то. Если этого драйвера нет, прога ругается на эту dll. Поэтому не желательно менять все структуры, использующие dll, а сделать так, чтобы программа работала и без драйвера...
Обычно в таких случаях производится динамическая загрузка DLL - если драйвер существует, то LoadLibrary, иначе ошибка и действия в этой ситуации. Это условие нужно выполнять одним из первых в вашей программе, а уже после - все блоки CLFN, использующие вашу библиотеку. Чтобы :labview: не начал автоматом подгружать DLL при открытии :vi: , путь к библиотеке также надо формировать динамически и в настройках CLFN указывать, что путь задаётся на диаграмме.

Re: невыполнение кода

Добавлено: 04 июн 2018, 22:49
rushonda
dadreamer, с net dll тоже так можно?
нельзя ли пример ?

Re: невыполнение кода

Добавлено: 04 июн 2018, 23:52
dadreamer
rushonda писал(а):dadreamer, с net dll тоже так можно?
Боюсь, что нет. :cry: NI почему-то не предусмотрели динамическую загрузку .NET сборок. Ну, если очень хочется, то можно написать враппер, но это потребует базовых знаний C#.

Re: невыполнение кода

Добавлено: 05 июн 2018, 18:36
rushonda
dadreamer, ясно, спасибо)
dadreamer, а не посмотрите мою тему "Labview+Google Chrome" - последнее сообщение...?