- Компания National Instruments выпустила бесплатные LabVIEW 2020 и NXG 5.0 Community Edition
- LabVIEW 2020 и LabVIEW NXG 5.0
- Ссылки по теме:
- LabWindows / CVI — LabWindows/CVI
- История выпуска
- Создание панелей функций NI LabWindows™/CVI™ из файлов заголовков
- Overview
- Contents
- Генерация панели функций
- Добавление иерархии с классами
- Пример
- Исправление имен функций
- Пример
- Добавление специализированных типов данных
- Пример
- Создание элементов управления Ring, Slider и Binary Switch
- Пример
- Пример
- Пример
- Пример
- Объявление выходных параметров
- Пример
- Определение значений по умолчанию для параметров
- Пример
- Изменение типов параметров
- Пример
- Использование функций SetAttribute и GetAttribute
- Пример
- Использование аргументов-переменных
- Пример
- Настройка параметров
- Пример
- Добавление справки
- Пример
- Ссылки по теме
Компания National Instruments выпустила бесплатные LabVIEW 2020 и NXG 5.0 Community Edition
В конце апреля произошло событие, которого так ждали поклонники рисования кода мышкой: компания National Instruments наконец-то выпустила бесплатную редакцию своей системы графического программирования — LabVIEW Community Edition.
Название перекликается с Visual Studio Community, но в отличие от Студии среда разработки LabVIEW абсолютно бесплатна лишь для некоммерческих проектов, и для обучения в школах (для ВУЗов потребуется Academic Site License).
Ну а теперь все желающие могут приобщиться к увлекательному миру графического программирования, скачать LabVIEW и играть с ней так долго, насколько хватит желания (и терпения).
NI двигается в общем-то в правильном направлении в деле популяризации LabVIEW (настолько, насколько оно может быть правильным в столь специфической области, как графическое программирование). Легального способа пользоваться по истечении триального срока до настоящего момента просто не было, а покупать — так профессиональная версия стоит шесть с лишним тысяч, а если с несколькими тулкитами, то стоимость запросто выливается в пятизначную сумму и отнюдь не рублей. Даже простая базовая версия стоит четыре сотни в год и явно не предназначена для хобби. А продукт сам по себе весьма любопытен — я с удовольствием слежу за комментариями и вижу, что мнения полярны — от ярого неприятия до любви, но мало кого эта штука оставляет абсолютно равнодушным.
LabVIEW 2020 и LabVIEW NXG 5.0
Вначале нужно дать небольшое пояснение, чтобы избежать путаницы, поскольку на данный момент нам доступны две редакции LabVIEW. Первая называется «LabVIEW 2020». Это продолжение «классической» линейки LabVIEW, которая берёт начало аж с октября 1986 года. Фактически это двадцатая версия (начиная с девятой версии нумерация совпадает с годом). В основном в «продакшене» используется именно она. У этой линейки интерфейс в какой-то мере «привет из девяностых», но за двадцать реинкарнаций эта классическая линейка обросла огромным количеством библиотек и тулкитов.
Вторая версия, доступная для скачивания, это «LabVIEW NXG 5.0». «NXG» означает «NeXt Generation» — следующее поколение. Эта линейка берёт начало с 2017 года и в отдалённой перспективе скорее всего должна заменить «классическую» линейку. В настоящий момент элементы классической LabVIEW от версии к версии всё больше переносятся в NXG (LabVIEW NXG RoadMap), но она всё ещё остаётся во многом «догоняющей», хотя при наличии некоторого оборудования NI среда NXG значительно упрощает настройку и конфигурирование. Вообще это довольно-таки непростая задача выпустить новое поколение инструментария при постоянном расширении предыдущего поколения.
Принципиальное различие этих двух линеек кроется также и в инструментах, использованных для разработки. Если основная часть LabVIEW 2020 написана на «плюсах», то NXG — это .net. Отсюда и некоторая «тормознутость» NXG при старте и начале работы, хотя пятая версия субъективно стала немного «резвее».
Ещё одно отличие «классической» LabVIEW и LabVIEW NXG заключается в том, что LabVIEW вообще говоря кроссплатформенна — есть версии не только для Windows, но также и для Mac OS (10.13 или 10.14) и Linux (официально для openSUSE Leap 42.3/15.0, Red Hat Enterprise Linux 7/8 и CentOS 7/8), а вот NXG — только для Windows (ну оно и понятно — там используется WPF для интерфейса).
Однако бесплатная LabVIEW Community Edition предлагается только для Windows, причём LabVIEW 2020 Community Edition — исключительно в 32-х битном варианте (а NXG Community Edition только в 64 битном, ибо 32-х битной NXG в природе не существует). Странно не видеть Community Edition для Линукса.
Я бы порекомендовал скачать и установить обе редакции (ссылки в конце статьи). В какой-то момент вам может потребоваться зарегистрироваться на сайте NI (это в любом случае имеет смысл сделать, чтобы иметь возможность пообщаться на форуме, тем более что это совершенно бесплатно и без СМС). В процессе инсталляции вам будет предложено отключить Windows fast startup — делать это не нужно, если только у вас нет оборудования NI, которое не умеет корректно инициализироваться при включённой опции быстрого старта (которая включена по умолчанию).
Обе версии — и 2020 и NXG — прекрасно «уживаются» на одном компьютере и друг другу не мешают. Для «классической» LabVIEW накоплено довольно большое количество примеров, к тому же там есть вещи, недоступные в NXG (ну вот 2D и 3D Picture Control, например).
Однако для обучения графическому программированию «с нуля» я бы посоветовал не «классику», а именно NXG — там чуть более современный и приятный интерфейс, а идеологически они весьма похожи. Также у новой версии всё в порядке с Юникодом, ну и на мониторах высокого разрешения она заметно лучше выглядит, ну а в общем и целом наброс кода на Блок-Диаграмму выглядит схожим образом, примерно вот так в старой доброй LabVIEW 2020:
А вот так в современной NXG:
Кроме того, в NXG есть неплохие интерактивные обучающие уроки по основам — базовым типам, массивам, кластерам, циклам, и т.д.:
В случае конкретных вопросов я смело могу порекомендовать пару форумов: официальный на сайте NI (на английском) и русскоязычный LabVIEW Portal. И там и там с удовольствием помогают новичкам, ну и на какие-то базовые вопросы я могу ответить в комментариях.
Ссылки по теме:
Страничка для скачивания LabVIEW Community Edition
Прямая ссылка LabVIEW 2020 Community Edition — 1,91 ГБ iso образ
Скачивание LabVIEW NXG Community Edition
Прямая ссылка на скачивание LabVIEW NXG 5.0 — 4,02ГБ iso образ.
LabWindows / CVI — LabWindows/CVI
Разработчики) | Национальные инструменты |
---|---|
изначальный выпуск | Январь 1989 г . ; 32 года назад ( 1989-01 ) |
Стабильный выпуск | |
Операционная система | Windows XP Windows Vista Windows 7 Windows 8 Windows 10 Поддержка среды выполнения Linux и поддержка Pharlap в режиме реального времени |
Тип | Сбор данных , управление приборами , автоматизация испытаний , анализ и обработка сигналов |
Интернет сайт | ni .com / cvi |
LabWindows / CVI (CVI — сокращение от C для Virtual Instrumentation ) — это среда программирования ANSI C для тестирования и измерений, разработанная National Instruments . Программа была первоначально выпущена как LabWindows для DOS в 1987 году, но вскоре была переработана (и переименована) для платформы Microsoft Windows . Текущая версия LabWindows / CVI (обычно называемая CVI) — 2019.
LabWindows / CVI использует те же библиотеки и модули сбора данных, что и более известный продукт LabVIEW от National Instrument, и поэтому хорошо с ним совместим.
LabVIEW больше ориентирован на экспертов и ученых в предметной области, а CVI — на инженеров-программистов, которым удобнее работать с текстовыми линейными языками, такими как Си .
История выпуска
Начиная с LabVIEW 8.0, основные версии выпускаются примерно в первую неделю августа, что совпадает с ежегодной конференцией National Instruments NI Week, за которой следует выпуск с исправлением ошибок в феврале следующего года.
В 2009 году National Instruments начала называть выпуски по году, в котором они были выпущены. Исправление называется пакетом обновления (например, выпуск 2009 г. с пакетом обновления 1 был опубликован в феврале 2010 г.).
Создание панелей функций NI LabWindows™/CVI™ из файлов заголовков
Overview
LabWindows/CVI предлагает различные средства документирования исходного кода, что делает процесс написания кода более простым и удобным для разработчиков. Одним из таких средств является способность генерировать панели функций из файлов заголовков с помощью тегов ///.
Используя теги файлов заголовков, Вы можете ускорить процесс создания панелей функций, одновременно открывая их преимущества, такие как возможность легко генерировать и тестировать вызовы функций в LabWindows/CVI и выполнять эти функции в окне Interactive Execution немедленно.
В этом руководстве подробно рассматриваются различные теги файлов заголовков (.h), включая примеры использования.
Contents
Генерация панели функций
Если Вы откроете файл заголовка/включения (.h) в LabWindows/CVI, Вы можете создать панель функций, используя команду Options»Generation Function Tree (Параметры»Генерация дерева функций). Чтобы четко определить структуру дерева функций, Вы должны использовать теги файлов заголовков. С другой стороны, если Вы генерируете панели функций из файла заголовка, который не включает теги файла заголовка, все панели функций будут расположены в корне дерева инструментов, и все параметры будут созданы как входные данные.
Рис. 1. Диалог создания дерева функций
Например, если Вы сгенерируете панель функций из следующего файла заголовка, результирующий файл панели функций (.fp) будет выглядеть как на рис. 2. Обратите внимание на плоскую структуру дерева на панели функций.
int __stdcall fn1(int a);
int __stdcall fn2(int b);
int __stdcall fn3(int a, int b);
float __stdcall fn4(float a);
float __stdcall fn5(float b);
float __stdcall fn6(float a, float b);
Рис. 2. Сгенерированная панель функций из файла заголовков без тегов
Примечание: Поле квалификатора по умолчанию в диалоговом окне Generate Function Tree (Создать дерево функций) должно соответствовать полю квалификатора по умолчанию, используемому в исходном файле заголовка.
Используя теги файлов заголовков, обозначенные /// ключевые слова, у Вас есть возможность:
- упорядочить функции
- настроить имена функций
- изменить типы параметров управления и имена
- добавить настройку параметров
- отобразить значения по умолчанию
- добавить справку к функциям, параметрам и классам
- и многое другое.
Добавление иерархии с классами
Во-первых, для создания иерархии в файле .fp Вы можете использовать классы. Следующий тег идентифицирует начало класса:
Следующий тег указывает на конец класса:
Примечание: Для этого тега имя класса является необязательным и помогает улучшить читаемость кода. Кроме того, теги -> и могут быть вложенными.
Пример
/// -> Integers
int __stdcall fn1(int a);
int __stdcall fn2(int b);
int __stdcall fn3(int a, int b);
/// Floats
float __stdcall fn4(float a);
float __stdcall fn5(float b);
float __stdcall fn6(float a, float b);
///
На рис. 3 показаны получившиеся панели функций, сгенерированные из приведенного выше кода.
Рис. 3. Сгенерированные панели функций с тегами ->
Исправление имен функций
Чтобы создать согласованный стиль для автоматически сгенерированных панелей функций, для каждой создаваемой панели функций LabWindows/CVI выполняет следующие действия:
Имя сгенерированной панели функций может отличаться от предполагаемого имени из-за механизма автоматического разделения слов. Для коррекции сгенерированных названий панелей функций используйте тег XCHG. Также Вы можете указать несколько пар строк для замены, разделенных запятыми.
Примечание: Для замены строк в элементах управления панели функцийВы также можете использовать тег PXCH.
Пример
/// XCHG Fn/Function
/// -> Integers
int __stdcall fn1(int a);
int __stdcall fn2(int b);
int __stdcall fn3(int a, int b);
///
/// -> Floats
float __stdcall fn4(float a);
float __stdcall fn5(float b);
float __stdcall fn6(float a, float b);
///
На рисунке 4 показана панель функций, сгенерированная из кода, приведенного выше.
Рис. 4. Сгенерированные панели функций с тегами XCHG
Добавление специализированных типов данных
Поскольку генератор панели функций не основан на компиляторе и не анализирует типы данных, определенные в файлах заголовков, любое использование типов данных не-ANSI приведет к синтаксической ошибке. Чтобы исправить это, используйте тег ADDT. Это позволит генератору быть в курсе о любых специализированных типах данных, которые Вы собираетесь использовать в файле заголовков.
Пример
/// ADDT int8
/// ADDT uInt8
Генератор добавит на панели функций имя типа плюс некоторые производные типы массивов и указателей.
int8 int8 [] int8 * int8 ** int8 *** int8 *[] | uInt8 uInt8 [] uInt8 * uInt8 ** uInt8 *** uInt8 *[] |
Создание элементов управления Ring, Slider и Binary Switch
По умолчанию генератор панелей функций создает элементы управления для ввода. С другой стороны, если генератор обнаруживает тип enum, он автоматически создает для этого параметра элемент управления Ring. Однако, у Вас есть возможность создавать элементы управления других типов с помощью тегов RNG, SLD и BIN.
Каждый тег требует двух параметров, разделенных косой чертой. Первый параметр — это положение ( одномерный индекс), а второй параметр является необязательным и может представлять имя enum, если тип данных параметра функции имеет тип enum
Примечание: Тег BIN может быть связан только с перечислением, которое имеет ровно два значения.
Пример
typedef enum <
ON=1,
OFF=0,
> MyBinaryEnumType;
/// BIN 1
int __stdcall fnX(MyBinaryEnumType binaryInput);
Рис. 5. Элемент управления Binary
Если Вы хотите использовать набор значений, которые определены с помощью команды препроцессора #define, то Вы можете сгруппировать их в поименованный enum, используя тег ENUM.
Примечание: За группой значений #define должна следовать пустая строка. Это позволит генератору распознать конец enum.
Пример
/// ENUM enum1
#define ON 1
#define OFF 0
/// ENUM enum2
#define ONE 1
#define TWO 2
#define THREE 3
#define FOUR 4
/// BIN 1/enum1
/// SLD 2/enum2,3/enum2
/// RNG 4/enum2,5/enum2
int __stdcall fnX(int a, int b, int c, int d, int e);
На рис. 6 показаны элементы управления, сгенерированные из приведенного выше кода.
Рис. 6. Созданные элементы управления с использованием тегов BIN, SLD и RNG
Если Вам нужно добавить к существующему enum дополнительное значение по умолчанию, используйте тег EHDV для элемента управления slider или binary. Генератор добавит дополнительное значение вверху списка значений, на метке появится надпись «Default» (По умолчанию), а для элемента управления будет установлено указанное значение.
Пример
typedef enum <
kLeftAligned=0,
kRightAlighed=1,
> AlignmentEnumType;
/// SLD 1
/// EHDV 1/-1
int __stdcall fnX(AlignmentEnumType alignment);
На рис. 7 показан элемент управления, сгенерированный вышеуказанным кодом.
Рис. 7. Элемент управления, сгенерированный с помощью тега EHDV
Если Вы хотите создать для элементов управления ring, binary или slider разные метки значений, то Вы можете сделать это, добавив комментарии к каждому значению enum. Генератор заменит имена значений enum текстом из комментария.
Примечание: Избегайте использования точек с запятой в комментариях enum.
Пример
typedef enum <
kLeftAligned= 0, // Left aligned
kRightAlighed=1, // Right aligned
> AlignmentEnumType;
/// SLD 1
/// EHDV 1/-1
int __stdcall fnX(AlignmentEnumType alignment);
На рис. 8 показан элемент управления, сгенерированный вышеуказанным кодом.
Рис. 8. Использование комментариев с тегом SLD
Объявление выходных параметров
Для объявления выходных параметров используйте тег OUT. Обратите внимание, что выходными параметрами могут быть только указатели и массивы. Любой другой тип данных приведет к ошибке.
Пример
/// OUT 2,3
int __stdcall Sphere_Calc(float radius, float *surface, float *volume);
На рисунке 9 показано, что генерируется из приведенного выше кода.
Рис. 9. Сгенерированные элементы управления с использованием тега OUT
Определение значений по умолчанию для параметров
Генератор панели функций создает пустые входные и выходные параметры и устанавливает все параметры типа ring, binary или slider на первый элемент. Если Вам нужно изменить значение параметра по умолчанию, используйте тег DFLT.
Пример
На рис. 10 показаны сгенерированные элементы управления для приведенного выше кода.
Рис. 10. Элементы управления, созданные с помощью тега DFLT
Изменение типов параметров
Если Вам на панели функций нужно использовать определенный тип параметра, используйте тег PTYP, чтобы изменить его с типа данных ANSI-C на любой другой тип, который активен на панели функций. Например, параметр функции, объявленный как void* но используемый для числовых массивов, может быть изменен с void* на тип Numeric Array (Числовой массив) из LabWindows/CVI
Пример
/// PTYP 1/Numeric Array
float __stdcall CalcArrayMean(void *array, int dataType);
На рис. 11 показаны элементы управления, сгенерированные из приведенного выше кода.
Рис. 11. Элементы управления, созданные с использованием тега PTYP
Использование функций SetAttribute и GetAttribute
Для определенных атрибутов прибора в драйверах IVI часто используются файлы .SUB . Если вашему прибору требуются функции SetAttribute или GetAttribute, атрибуты которых хранятся в файле .SUB , используйте тег ERNG для параметра атрибута и тег PTYP для параметра значения. Для параметра атрибута генератор создаст пустой ring, однако при загрузке прибора содержимое параметра ring будет заполнено атрибутами из файла .SUB . Для параметра значения генератор изменит тип параметра с void* на тип Any Type (Любой тип) из LabWindows/CVI
Примечание: Структуру файлов .sub можно найти в главе 7 Спецификации интерфейса интерактивного разработчика драйвера прибора
Пример
/// ERNG 1
/// PTYP 2/Any Type
/// OUT 2
int __stdcall GetAttribute(int attribute, void *value);
Примечание:Файлы .SUB должны находиться в той же папке, что и связанный с ними файл .fp, и иметь общее корневое имя.
Для этого примера для заполнения атрибутов прибора мы будем использовать прикрепленный файл FPGen.sub. После создания панели функций откройте функцию GetAttribute и выберите Options»Operate Function Panel(Параметры »Панель функций управления) (F9). На рис. 12 показаны элементы управления, сгенерированные из приведенного выше кода.
Рис. 12. Элементы управления, сгенерированные с использованием тега ERNG
Использование аргументов-переменных
В некоторых случаях Вам может понадобиться использовать в объявлении функции аргументы-переменные. Таким образом, если Вам нужны дополнительные элементы управления параметрами на панели функций, Вы можете добавить их, используя тег VARG.
Пример
/// VARG int/More Numbers Ending With Zero
int __stdcall Sum(int number, . );
На рис. 13 показаны элементы управления, сгенерированные из приведенного выше кода.
Рис. 13. Элементы управления, сгенерированные с использованием тега VARG
При использовании панели функций с аргументами-переменными Вы можете ввести первое число в первом элементе управления, а остальные числа, разделенные запятыми и оканчивающиеся нулем, во втором элементе управления. В итоге вызов функции будет выглядеть так:
Рис. 14. Сгенерированные элементы управления с последовательностью
Настройка параметров
К параметрам панели функций могут быть добавлены дополнительные настройки. Настройки обозначаются кнопкой «. » справа от элемента управления параметрами. Чтобы настроить параметр, используйте тег CUST. Укажите положение параметра, библиотеку DLL, которая содержит желаемую функцию настройки и имя точки входа. Дополнительная помощь по созданию функций настройки и DLL можно найти в справке LabWindows/CVI.
Примечание: Чтобы DLL-библиотека настройки могла быть найдена, она должна находиться в системной папке или в той же папке, где находится прибор. В спецификации DLL Вы также можете использовать относительный или абсолютный путь.
Пример
/// CUST 1/cviLibCust.dll/SelectAnyFile
int __stdcall SaveDataToFile(char filePath[], void *data);
Для этого примера мы будем использовать прикрепленный файл cviLibCust.dll. После генерации панели функций откройте функцию SaveDatatoFile и выберите Options»Operate Function Panel (Параметры » Работа с панелью функций) (F9). Если теперь Вы нажмете кнопку настройки (или нажмете Enter с курсором внутри параметра), появится диалоговое окно Open File (открыть файл), как показано на рис. 15.
Рис. 15. Настройка параметров
Добавление справки
Кроме того, для документирования Ваших панелей функций Вы можете добавить справку для инструмента, справку для каждого класса, справку для каждой функции и даже справку для каждого параметра с помощью тегов HFP, HCL, HFUN, HPAR, а также HRET. Также Вы можете добавить справку в виде отформатированного текста HTML, но содержание справки необходимо сохранить в файле. Каждое имя файла может быть связано с одним или несколькими тегами генерации справки.
Пример
/// HFP FPfileHelp.htm
/// HCL IntegerClassHelp.htm
/// -> Integers
/// HFUN Fn1Help.htm
/// HPAR 1/ParameterAHelp.htm
int __stdcall fn1(int a);
/// HFUN Fn2Help.htm
/// HPAR 1/ParameterBHelp.htm
int __stdcall fn2(int b);
/// HFUN Fn3Help.htm
/// HPAR 1/ParameterAHelp.htm,2/ParameterBHelp.htm
int __stdcall fn3(int a, int b);
///
Примечание: Ниже для справки прилагаются HTML-файлы, используемые в этом примере.
После генерации файла панели функций Вы можете установить курсор на первый параметр функции fn3 и выбрать меню Edit » Show Prototype (Изменить » Показать прототип) (или нажать Ctrl + Shift + Space). Прототип функции отобразится во всплывающей подсказке.
Вы можете вызвать справку по параметру, нажав на кнопку вопросительного знака (или нажав клавишу F1).
Рис. 16. Справка по функции HTML
Ссылки по теме
Проверенная среда разработки LabWindows/CVI может повысить эффективность разработки приложений ANSI C с помощью различных инструментов документирования, включая теги исходного кода, возможность генерировать панели функций из файлов заголовков и возможность генерировать HTML-документацию из функциональных панелей.