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

Темы связанные с инженерными разработками, но не подходящие в другие ветки форума

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

Postby rushonda on 18 Mar 2018, 20:46

Добрый вечер.
А как сделать так, чтобы при условии false допустим код не выполнять вообще?
disable structure не подходит, поскольку нужно менять программно менять false на true.
case тоже не подходит, так как в значение false код может быть ошибка (например отсутствие dll при работе с устройством) и тогда программа вообще покажет разорванную стрелку.
есть такое в labview?
rushonda
assistant
assistant
 
Posts: 115
Joined: 26 Feb 2016, 06:31
LabVIEW Version: 14
Karma: 6

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

Postby Borjomy_1 on 18 Mar 2018, 22:35

Только Case и применяется для такого случая. И с его помощью задача решается абсолютно штатно, без костылей. Все проблемы описанного рода решаются на уровне алгоритма (когда и в каких условиях что выполнять и в какой последовательности). Хотите большей конкретики - предоставьте участок кода.
Borjomy_1
expert
expert
 
Posts: 1786
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 310
VIP

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

Postby rushonda on 19 Mar 2018, 07:53

Для примера: если есть библиотека OpenG то выполняем одно, если нет, то другое.
Но если такой библиотеки нет, то программа не запустится.
Attachments
невыполнение кода.vi
скрипт
(10.21 KiB) Downloaded 30 times
невыполнение кода.png
картинка
rushonda
assistant
assistant
 
Posts: 115
Joined: 26 Feb 2016, 06:31
LabVIEW Version: 14
Karma: 6

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

Postby IvanLis on 19 Mar 2018, 08:36

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

А в случае возникновения ошибки запускать свой код.
User avatar
IvanLis
professor
professor
 
Posts: 4562
Joined: 02 Dec 2009, 17:44
Location: СССР
Medals: 7
Activity (2) Professionalism (1) Tutorials (1) Gold (1) Man of the year 2012 (1)
Автор (1)
LabVIEW Version: 2010
Karma: 721
hardware VIP bloggers teachers

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

Postby dadreamer on 21 Mar 2018, 15:18

rushonda, а не проще проверять, что OpenG установлен? Например, существует ли папка \National Instruments\LabVIEW xxxx\user.lib\_OpenG.lib и далее - подпапки, если необходимо. А сам код переключать через Conditional Disable структуру, определив кастомный символ (OPENG_AVAILABLE или что-то подобное).
User avatar
dadreamer
professor
professor
 
Posts: 3039
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 748
I/O VIP vision internet

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

Postby rushonda on 21 Mar 2018, 21:43

dadreamer, а в какой момент проверять? если папки нет, а в программе используются функции из библиотеки OpenG, то программа и запуститься то не даст... по Conditional Disable пока мало понятной инфы нашел, если есть где-то примеры - направьте)
rushonda
assistant
assistant
 
Posts: 115
Joined: 26 Feb 2016, 06:31
LabVIEW Version: 14
Karma: 6

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

Postby Borjomy_1 on 21 Mar 2018, 23:15

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

хм. зачем тогда вообще делать код под OpenG, если и без него программа способна работать?
Borjomy_1
expert
expert
 
Posts: 1786
Joined: 28 Jun 2012, 09:32
Location: город семи холмов
Medals: 3
Activity (1) Professionalism (1) Silver (1)
LabVIEW Version: 4-8.6,9-14
Karma: 310
VIP

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

Postby dadreamer on 22 Mar 2018, 17:05

rushonda wrote:по 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 KiB) Downloaded 33 times

Здесь OG_Checker.vi используется, чтобы переключать символ OPENG_AVAIL в True или False, в зависимости от наличия папки \National Instruments\LabVIEW xxxx\user.lib\_OpenG.lib\numeric. В Main.vi в зависимости от состояния символа выполняется либо ветка с использованием инструмента OpenG, либо ветка со стандартными инструментами :labview: . Разрабочику, впервые получившему этот проект, требуется однократно запустить OG_Checker.vi из проекта, чтобы установить конкретное состояние переменной.
rushonda wrote:dadreamer, а в какой момент проверять? если папки нет, а в программе используются функции из библиотеки OpenG, то программа и запуститься то не даст...

На эти два вопроса я вроде бы ответил выше.

Хотя, честно говоря, у меня вызывает некоторые сомнения ваш подход. Понятно, что речь о режиме разработки, т.к. в скомпиленном варианте между разными ветками кода переключаться не имеет смысла. Да и не получится без "танцев с бубнами". Получается, что вы хотите предоставить неким сторонним программистам ваш проект с целью модификации?.. Почему бы тогда сразу не оговорить, что требуется пакет OpenG (или не требуется, если не собираетесь его использовать)? Попытка "подстрелить двух зайцев" может обернуться дополнительными сложностями в дальнейшем.
User avatar
dadreamer
professor
professor
 
Posts: 3039
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 748
I/O VIP vision internet

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

Postby rushonda on 04 Jun 2018, 11:01

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


Нет, просто есть программа, котороая использут dll, для которой в свою очередь необходим драйвер или еще что-то. Если этого драйвера нет, прога ругается на эту dll. Поэтому не желательно менять все структуры, использующие dll, а сделать так, чтобы программа работала и без драйвера...
rushonda
assistant
assistant
 
Posts: 115
Joined: 26 Feb 2016, 06:31
LabVIEW Version: 14
Karma: 6

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

Postby dadreamer on 04 Jun 2018, 19:41

rushonda wrote:Нет, просто есть программа, котороая использут dll, для которой в свою очередь необходим драйвер или еще что-то. Если этого драйвера нет, прога ругается на эту dll. Поэтому не желательно менять все структуры, использующие dll, а сделать так, чтобы программа работала и без драйвера...

Обычно в таких случаях производится динамическая загрузка DLL - если драйвер существует, то LoadLibrary, иначе ошибка и действия в этой ситуации. Это условие нужно выполнять одним из первых в вашей программе, а уже после - все блоки CLFN, использующие вашу библиотеку. Чтобы :labview: не начал автоматом подгружать DLL при открытии :vi: , путь к библиотеке также надо формировать динамически и в настройках CLFN указывать, что путь задаётся на диаграмме.
User avatar
dadreamer
professor
professor
 
Posts: 3039
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 748
I/O VIP vision internet

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

Postby rushonda on 04 Jun 2018, 22:49

dadreamer, с net dll тоже так можно?
нельзя ли пример ?
rushonda
assistant
assistant
 
Posts: 115
Joined: 26 Feb 2016, 06:31
LabVIEW Version: 14
Karma: 6

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

Postby dadreamer on 04 Jun 2018, 23:52

rushonda wrote:dadreamer, с net dll тоже так можно?

Боюсь, что нет. :cry: NI почему-то не предусмотрели динамическую загрузку .NET сборок. Ну, если очень хочется, то можно написать враппер, но это потребует базовых знаний C#.
User avatar
dadreamer
professor
professor
 
Posts: 3039
Joined: 17 Feb 2013, 16:33
Medals: 4
Activity (1) Professionalism (1) Автор (2)
LabVIEW Version: 2.5 — 2018
Karma: 748
I/O VIP vision internet

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

Postby rushonda on 05 Jun 2018, 18:36

dadreamer, ясно, спасибо)
dadreamer, а не посмотрите мою тему "Labview+Google Chrome" - последнее сообщение...?
rushonda
assistant
assistant
 
Posts: 115
Joined: 26 Feb 2016, 06:31
LabVIEW Version: 14
Karma: 6


Return to Общие

Who is online

Users browsing this forum: No registered users and 4 guests

cron