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

Темы связанные с инженерными разработками, но не подходящие в другие ветки форума
Ответить
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

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

Сообщение rushonda »

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

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

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

Сообщение Borjomy_1 »

Только Case и применяется для такого случая. И с его помощью задача решается абсолютно штатно, без костылей. Все проблемы описанного рода решаются на уровне алгоритма (когда и в каких условиях что выполнять и в какой последовательности). Хотите большей конкретики - предоставьте участок кода.
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

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

Сообщение rushonda »

Для примера: если есть библиотека OpenG то выполняем одно, если нет, то другое.
Но если такой библиотеки нет, то программа не запустится.
Вложения
невыполнение кода.vi
скрипт
(10.21 КБ) 202 скачивания
картинка
картинка
Аватара пользователя
IvanLis

Activity Professionalism Tutorials Gold Man of the year 2012
Автор
guru
guru
Сообщения: 5462
Зарегистрирован: 02 дек 2009, 17:44
Награды: 7
Версия LabVIEW: 2015, 2016
Откуда: СССР
Благодарил (а): 28 раз
Поблагодарили: 86 раз

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

Сообщение IvanLis »

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

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение dadreamer »

rushonda, а не проще проверять, что OpenG установлен? Например, существует ли папка \National Instruments\LabVIEW xxxx\user.lib\_OpenG.lib и далее - подпапки, если необходимо. А сам код переключать через Conditional Disable структуру, определив кастомный символ (OPENG_AVAILABLE или что-то подобное).
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

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

Сообщение rushonda »

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

Activity Professionalism Silver
doctor
doctor
Сообщения: 2210
Зарегистрирован: 28 июн 2012, 09:32
Награды: 3
Версия LabVIEW: 2009..2020
Откуда: город семи холмов
Благодарил (а): 27 раз
Поблагодарили: 26 раз

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

Сообщение Borjomy_1 »

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

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение 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 (или не требуется, если не собираетесь его использовать)? Попытка "подстрелить двух зайцев" может обернуться дополнительными сложностями в дальнейшем.
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

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

Сообщение rushonda »

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

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение dadreamer »

rushonda писал(а):Нет, просто есть программа, котороая использут dll, для которой в свою очередь необходим драйвер или еще что-то. Если этого драйвера нет, прога ругается на эту dll. Поэтому не желательно менять все структуры, использующие dll, а сделать так, чтобы программа работала и без драйвера...
Обычно в таких случаях производится динамическая загрузка DLL - если драйвер существует, то LoadLibrary, иначе ошибка и действия в этой ситуации. Это условие нужно выполнять одним из первых в вашей программе, а уже после - все блоки CLFN, использующие вашу библиотеку. Чтобы :labview: не начал автоматом подгружать DLL при открытии :vi: , путь к библиотеке также надо формировать динамически и в настройках CLFN указывать, что путь задаётся на диаграмме.
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

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

Сообщение rushonda »

dadreamer, с net dll тоже так можно?
нельзя ли пример ?
Аватара пользователя
dadreamer

Activity Professionalism Автор
professor
professor
Сообщения: 3926
Зарегистрирован: 17 фев 2013, 16:33
Награды: 4
Версия LabVIEW: 2.5 — 2022
Благодарил (а): 11 раз
Поблагодарили: 126 раз
Контактная информация:

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

Сообщение dadreamer »

rushonda писал(а):dadreamer, с net dll тоже так можно?
Боюсь, что нет. :cry: NI почему-то не предусмотрели динамическую загрузку .NET сборок. Ну, если очень хочется, то можно написать враппер, но это потребует базовых знаний C#.
rushonda
developer
developer
Сообщения: 289
Зарегистрирован: 26 фев 2016, 06:31
Версия LabVIEW: 18-20
Благодарил (а): 6 раз
Поблагодарили: 7 раз
Контактная информация:

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

Сообщение rushonda »

dadreamer, ясно, спасибо)
dadreamer, а не посмотрите мою тему "Labview+Google Chrome" - последнее сообщение...?
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Общие»