Введение
Предполагается, что вы уже справились с установкой и активацией LabVIEW NXG.
Основное отличие от имеющихся учебных материалов будет заключаться в том, что мы будем изучать этот язык с точки зрения средства разработки «общего назначения». В процессе изложения я буду пытаться также проводить параллели с текстовыми языками чтобы показать некоторые отличия от «традиционных» средств разработки. Для иллюстрации я буду использовать C# (в минимальном варианте, доступном и тем, кто понимает базовый синтаксис языка С). Изложение будет настолько подробным, насколько возможно, по мере углубления в дебри LabVIEW степень «подробности» основ будет уменьшаться. Также потребуется минимальное знание английского — русской локализации LabVIEW пока нет.
Итак, LabVIEW программа собирается из отдельных «кирпичиков», которые называются «Виртуальные Инструменты» («Virtual Instruments») или коротко VI. Первые версии LabVIEW предназначались для превращения ПК в измерительный прибор-инструмент, так что исторически за ними и закрепилось такое вот название. Также как С# программа собирается из отдельных *.cs файлов, также и LabVIEW программа собирается из VI файлов (в классической LabVIEW 2020 у них расширение *.vi, а в NXG — *.gvi). Множественные файлы объединяются в проекты. Единственное отличие — представьте себе, что вы организуете проект таким образом, что в каждом файле лежит только одна функция (ну или метод класса, если будет угодно). В небольшом проекте счёт отдельных виртуальных инструментов может идти на десятки, в проектах средних размеров — на сотни, а в больших проектах — тысячи их (предполагается, что размер кода в каждом отдельном инструменте находится в пределах разумного). Вот сейчас я работаю над проектом, в котором семь с лишним тысяч VI и это довольно большой проект.
При первом запуске LabVIEW NXG покажет нам вот такое окно:
Здесь перечислены шесть основных направлений, в которых применяется LabVIEW. В принципе без разницы, что вы здесь выберете, просто для некоторых направлений разработки или обучения нам рекомендуется «классическая» LabVIEW, а для некоторых — NXG, поскольку функциональность NXG пока проигрывает классической LabVIEW, но команда NI работает в этом направлении, а нам для изучения и NXG хватит с лихвой.
На этот вопрос нужно ответить всего один раз, после этого NXG будет запускаться вот так:
Введение
Предполагается, что вы уже справились с установкой и активацией LabVIEW NXG.
Основное отличие от имеющихся учебных материалов будет заключаться в том, что мы будем изучать этот язык с точки зрения средства разработки «общего назначения». В процессе изложения я буду пытаться также проводить параллели с текстовыми языками чтобы показать некоторые отличия от «традиционных» средств разработки. Для иллюстрации я буду использовать C# (в минимальном варианте, доступном и тем, кто понимает базовый синтаксис языка С). Изложение будет настолько подробным, насколько возможно, по мере углубления в дебри LabVIEW степень «подробности» основ будет уменьшаться. Также потребуется минимальное знание английского — русской локализации LabVIEW пока нет.
Итак, LabVIEW программа собирается из отдельных «кирпичиков», которые называются «Виртуальные Инструменты» («Virtual Instruments») или коротко VI. Первые версии LabVIEW предназначались для превращения ПК в измерительный прибор-инструмент, так что исторически за ними и закрепилось такое вот название. Также как С# программа собирается из отдельных *.cs файлов, также и LabVIEW программа собирается из VI файлов (в классической LabVIEW 2020 у них расширение *.vi, а в NXG — *.gvi). Множественные файлы объединяются в проекты. Единственное отличие — представьте себе, что вы организуете проект таким образом, что в каждом файле лежит только одна функция (ну или метод класса, если будет угодно). В небольшом проекте счёт отдельных виртуальных инструментов может идти на десятки, в проектах средних размеров — на сотни, а в больших проектах — тысячи их (предполагается, что размер кода в каждом отдельном инструменте находится в пределах разумного). Вот сейчас я работаю над проектом, в котором семь с лишним тысяч VI и это довольно большой проект.
При первом запуске LabVIEW NXG покажет нам вот такое окно:
Здесь перечислены шесть основных направлений, в которых применяется LabVIEW. В принципе без разницы, что вы здесь выберете, просто для некоторых направлений разработки или обучения нам рекомендуется «классическая» LabVIEW, а для некоторых — NXG, поскольку функциональность NXG пока проигрывает классической LabVIEW, но команда NI работает в этом направлении, а нам для изучения и NXG хватит с лихвой.
На этот вопрос нужно ответить всего один раз, после этого NXG будет запускаться вот так:
Пример LabVIEW: включение светодиода при нажатии кнопки
Для начала осуществим добавление элементов управления на лицевую панель. Элементы управления на лицевой панели имитируют механизм ввода на физическом инструменте и подают данные на блок-схему виртуальных инструментов (программы LabVIEW называются VI или Virtual Instruments). Выберите View — Controls Palette (Вид — Палитра элементов управления), чтобы палитра элементов управления или функций постоянно находилась на экране, или щелкните правой кнопкой мыши любое пустое место на лицевой панели или окно блок-схемы, чтобы временно отобразить ее.
Наведите курсор на значки в палитре Modern, чтобы найти нужные элементы управления (Boolean Controls Palette или палитра логических элементов управления). Щелкните на значок Boolean controls, чтобы отобразить палитру логических элементов управления. Щелкните на button control на палитре логических элементов управления Boolean controls, чтобы прикрепить элемент управления, а затем добавьте кнопку на лицевую панель.
Вы будете использовать эту кнопку управления светодиодом.
Таким образом, кнопка управления была добавлена на лицевую панель. Теперь добавим индикатор на лицевую панель. Аналогичным образом добавьте кнопку из палитры Boolean. Затем создайте соединение, как показано ниже.
Чтобы запустить виртуальный инструмент, выберете Select Operate — Run/Run Continuously. Или вы можете использовать значки, которые отображены на рисунке выше. Чтобы остановить выполнение, снова нажмите значок run continuously. Во время работы программы светодиод будет светиться при нажатии на кнопку. Если кнопка запуска не работает, значит, в программе LabVIEW произошла ошибка. Чтобы узнать, что это за ошибка, нажмите эту кнопку запуска, вы увидите диалоговое окно с описанием ошибки.
digitrode.ru
Про именование ВП
Ни для кого не секрет, что в классическом программировании всем пользовательским объектам и функциям нужно давать осмысленные имена, то же можно сказать и о LabVIEW, особенно, если в роли объектов выступает SubVI. Я привык имена файлам ВП давать на основе их места в иерархии разрабатываемого ПО. В текущем приложении можно выделить четыре уровня абстракции:
- Самый низкий уровень — это ВП, выполняющие непосредственное взаимодействие с FTDI, в большинстве своем они сводятся к вызову соответствующей функции из API D2XX. В своем проекте имена ВП этого уровня я начинал с префикса «FT», например FT_Close.vi или FT_Read.vi.
- Второй уровень — это взаимодействие с процессором MPSSE. Имена ВП этого уровня начинаются с префикса «MPSSE». Пример: MPSSE_open.vi, MPSSE_Set_LByte.vi, MPSSE_Get_LByte.vi.
- Третий уровень — это реализация протокола «Passive Serial» поверх MPSSE. Все файлы имеют префикс «SР». Например, SP_FT_MPSSE_FPGA.vi (жуткое имя, состоящее из аббревиатур) и SP_LBYTE_BITS.ctl.
- Уровень приложения. ВП верхнего уровня. Имя может быть произвольным, человекоориентированным.
Если проект достаточно большой (десятки ВП), то для каждого уровня файлы лучше хранить в отдельных директориях с соответствующим названием. В нашем проекте все ВП разместились в одной папке subVI.
Запуск LabVIEW
Сначала загрузите программное обеспечение LabVIEW от National Instruments (http://www.ni.com/ru-ru/shop/labview.html). После запуска этого программного обеспечения открывается окно Getting Started (Начало работы).
Нажмите Ctrl + N, чтобы открыть новый проект. Открыв новый проект, вы увидите лицевую панель и окно блок-схем.
Окно Getting Started исчезает, когда вы открываете новый или существующий проект. Оно появляется снова, когда вы закрываете все лицевые панели и блок-схемы. Вы также можете открыть это окно с лицевой панели или блок-схемы, выбрав View — Getting Started. Нажмите Ctrl + T, чтобы расположить лицевую панель и окно блок-схем рядом, как это показано ниже.
В LabVIEW вы будете создавать пользовательский интерфейс, то есть лицевую панель, с элементами управления и индикаторами. Элементы управления – это не что иное, как вводимые вами данные, такие как ручки, переключатели и т. д. Индикаторы – это не что иное, как создаваемые вами выходы, такие как светодиоды, графики и т. д. Сейчас объясним все на примере, чтобы вы поняли лучше.
Виртуальный инструмент
Создадим наш первый инструмент, выбрав в меню File->New VI…:
После этого откроется основное окно — это наше рабочее пространство. При первом запуске нам покажут подсказки (если вы их закроете, то для того, чтобы их вызвать снова, надо нажать вопросик в правом верхнем углу).
Элементы рабочего пространства:
В левой части находится дерево для навигации по файлам проекта (Navigation Pane), в середине — основное пространство для программирования (VI), там же слева палитра инструментов (Palette), а справа — свойства для конфигурирования, вид которых меняется в зависимости от выбранных элементов (Configuration Pane), а снизу будет панель ошибок и предупреждений.
Нас в данный момент интересует средняя панель (VI). Вообще Виртуальный Инструмент VI обычно состоит из двух основных частей — Блок-Диаграммы (Block Diagram) и Передней Панели (Front Panel). Переключатель расположен в верхней части — Panel и Diagram (Icon — это иконка инструмента, мы её разберём попозже).
Работа с файлом
ПЛИС готова принять файл конфигурации. А готовы ли мы передать файл в ПЛИС?
LabVIEW содержит обширный набор инструментов для работы с файлами. Не скажу, что функционала хватает на абсолютно весь спектр задач, однако базовые операции типа чтение и запись выполняются легко и приятно. Основной набор VI для работы с файлами можно найти в палитре «File I/O». Для решаемой задачи требуется открыть файл конфигурации, оценить его размер (нам нужно знать, сколько байт отправлять ПЛИС), прочесть его и закрыть. Все просто и друг за другом. Используем ВП , , , , объединяем их цепочкой потока ошибок и — число, типа файлового дескриптора, создается при открытии файла и должно быть передано на вход другим ВП, работающим с этим файлом.
Пока нам некуда утилизировать считанные данные, но если очень хочется проверить работоспособность цепочки, то можно создать индикатор типа и немножко настроить его. В контекстном меню активируем опцию «Hex Display», включаем вертикальный скроллбар (Visible Items -> Vertical Scrollbar) и после запуска наблюдаем содержимое бинарного файла конфигурации.
На блок-диаграмме ВП образовалось две независимые параллельные линии кода, поэтому для них используются раздельные цепочки ошибок. Для того, чтобы свести параллельные потоки в один терминал , используется функция . Эта функция просматривает ошибки на входе сверху вниз (да, там может более двух входных терминалов, растягивается мышкой) и возвращает первую, которую найдет. Если ошибок нет, то возвращает первое попавшееся предупреждение. Если и предупреждений не обнаружено, то на выходе ошибка отсутствует
Важно отметить, что порядок подключения входов определяет приоритет ошибок, и если ошибка возникнет сразу в двух цепочках, то нижняя ошибка будет проигнорирована. К этому нужно относиться внимательно
Если мы попытаемся в ВП верхнего уровня нажать кнопку «Программировать» не выбрав файл, то на вход SP_FT_MPSSE_FPGA.vi поступит пустой путь, что вызовет ошибку «Error 1430. LabVIEW: (Hex 0x596) The path is empty or relative. You must use an absolute path.» Как говорит мой друг детства: «Пустяки, дело-то житейское!». И ошибка эта — вовсе не ошибка, а так, невнимательность пользователя. Останавливать программу и ругаться на него окном с красным крестиком мы не будем, просто удалим ошибку с этим кодом из потока и в диалоговом окне порекомендуем пользователю определиться с файлом. Для фильтрации ошибки используем ВП «Clear Errors» из палитры «Dialog&User Interface». Для вывода сообщения — «One Button Dialog».
Подключение кода LabVIEW к Arduino
Выполните следующую последовательность действий:
- После создания графической программы выберите пункт меню Tools >> Makerhub >> LINX >> LINX Firmware wizard.
2. После этого откроется окно LINX Firmware wizard, в котором выберите в качестве семейства устройств (Device Family) Arduino, тип устройства (Device type) — Arduino Uno, метод загрузки программы (Firmware Upload Method) — Serial/USB. Затем нажмите кнопку Next.
3. Соедините плату Arduino с вашим компьютером (ПК) с помощью USB кабеля.
4. В следующем открывшемся окне LINX Firmware wizard (см. рисунок ниже) выберите порт для Arduino из выпадающего списка – выберите в нем COM4. Затем нажмите Next дважды.
5. Нажмите кнопку Finish (закончить).
6. Поздравляем, вы подключили плату Arduino к LabVIEW по последовательному порту связи.
Открыть и закрыть FTDI
Итак, возвращаемся к функции . Создаем новый VI. Первым делом, добавляем терминалы для потока ошибок. Добавляем структуру выбора и на селектор подаем вход . В зеленом кейсе делаем импорт функций в порядке и с параметрами как в Сишном прототипе. Все узлы соединяем в цепочку потоком ошибок. В красном кейсе через тунель соединяем с выходным терминалом ошибки.
Картинка кликабельная
ВП MPSSE_open.vi
На вход SubVI подается строка с описанием FTDI (), на выходе — и инициализированный чип FTDI в режиме MPSSE.
Создадим ВП, завершающий работу с FTDI и можно уже проверить работоспособность на железе.
В предыдущей статье для отладки интерфейса мы сделали ВП заглушку SP_FT_MPSSE_FPGA.vi, сейчас настало время наполнить его. Добавляем на его блок-диаграмму MPSSE_open.vi и FT_Close.vi. На данном этапе достаточно сложно оценить, верно ли прошла инициализация, однако ненулевое значение на выходе MPSSE_open.vi и отсутствие ошибки нам уже о многом скажет.
Блок-диаграмма SP_FT_MPSSE_FPGA.vi
Для того, чтобы посмотреть значение можно воспользоваться окном «Probe Watch Window». Это удобный инструмент отладки, позволяющий вывести значение данных на любом (почти любом) проводе в процессе выполнения прибора. Для того чтобы установить пробу на линию, нужно в контекстном меню этой самой линии выбрать пункт «Probe». Откроется окно «Probe Watch Window», а на линии появится циферка с номером пробы. На рисунке выше это «3».
Отлично! Запускаем ВП верхнего уровня, подключаем к компьютеру отладочную плату. В списке «Выберите устройство» появляется описание подключенной микросхемы FTDI, нажимаем кнопку «Программировать» и… ничего не происходит. Только в окне «Probe Watch» появилось значение . И это хорошо.
Отключаем плату, список устройств очищается. Нажимаем «Программировать». Вот тут-то выскакивает окно с отчетом об ошибке.
После нажатия кнопки «Continue», ВП завершает свою работу.
Стоит запретить нажимать кнопку, если не найдено ни одного устройства. Модифицируем кейс «Timeout» обработчика событий. Напомню, два раза в секунду сканируются подключенные к ПК чипы FTDI, если таковые обнаружены и могут быть использованы для программирования ПЛИС, то через свойство их дескрипторы добавляются в . Создаем для «Программировать» свойство , и, если годных устройств не обнаружено, то отключаем и затемняем кнопку.
Почему стоит отдать предпочтение LabVIEW?
Тот, кто не имеет никаких базовых знаний о программировании, может использовать LabVIEW. Чтобы заниматься программированием на LabVIEW, нужно обладать практическими знаниями и умением логического мышления. Программисту LabVIEW не нужно знать какой-либо синтаксис программирования или какую-либо структуру программирования, такую как языки программирования C, C ++, Java.
Можно использовать LabVIEW, когда программа слишком велика. Здесь так же просто подключить аппаратные компоненты для вашего проекта. На рисунке ниже показана разница между текстовым и графическим программированием. С левой стороны есть программа Arduino, которая мигает светодиодом с задержкой в 1 секунду, а с правой стороны ее графическая копия была сделана с использованием программного обеспечения LabVIEW. Всякий раз, когда вы нажимаете кнопку ОК, светодиод будет мигать с задержкой в 1 секунду.
Запуск программы
Выберите Continuously Run Icon, затем в окне (см. рисунок) выберите порт и введите номер цифрового контакта. Затем с помощью нажатия Output Value (который здесь работает как переключатель On & Off – включить/выключить) вы можете увидеть как встроенный в плату Arduino мигает, он будет мигать до тех пор пока вы не выключите Output Value.
Более подробно все описанные в статье процессы можно посмотреть на следующем видео:
https://youtube.com/watch?v=V1JzPu7IOTk
Если эта статья вызовет интерес, то могу перевести статью и про начало работы со средой LabVIEW с того же самого сайта, с которого я перевел эту статью.
Чем LabVIEW отличается от других программ проектирования и моделирования схем?
Все программное обеспечение для проектирования и моделирования схем представляет собой программу создания симуляции, которая позволяет вам проверять выходные данные различных цепей, собирая компоненты и рисуя схемы. Тем не менее, LabVIEW представляет собой виртуальный рабочий стол для графического программирования путем захвата и сопряжения виртуальных цепей, созданных в любых программах проектирования и моделирования схем.
Методы программирования могут быть двух типов. Они основаны на текстовом и графическом программировании. C, C ++, Java и т. д. (все текстовые языки программирования) относятся к текстовому программированию (MATLAB – язык промежуточного уровня), тогда как LabVIEW – язык программирования на графической основе.
Осваиваем GPIO
После того, как MPSSE активирован, работа с ним осуществляется через так называемые «op-code», а из функций API D2XX используется только , и (чтобы узнать статус буфера приемника). По наторенной дорожке создаем соответствующие VI: FT_Write.vi, FT_Read.vi, FT_Queue.vi.
Теперь из этих трех кирпичиков выкладываем ВП для чтения параллельного порта и записи в него. Значение удобно представить в виде массива булевых переменных.
Как говорилось в самой первой статье протокол загрузки ПЛИС «Passive Serial» есть ничто иное как SPI с дополнительной манипуляцией флагами. Всего используется пять ножек: линии DCLK, DATA, nCONFIG должны быть сконфигурированы как выхода, линии nSTATUS, CONF_DONE — как входы.
Нам понадобится ВП, который сможет менять значение на выбранной ножке не затрагивая все остальные. Первым делом создаем с порядковыми номерами ножек в порту, сохраняем в виде «Strict Type Def» в файл SP_LBYTE_BITS.ctl. Создаем новый ВП, добавляем привычные терминалы потока ошибок. Считываем текущее значение параллельного порта с помощью MPSSE_Get_LByte.vi, с помощью функции модифицируем нужный бит и записываем значение обратно в порт (MPSSE_Set_LByte.vi).
Для начала конфигурации контроллер MPSSE должен генерировать переход из низкого уровня в высокий на линии nCONFIG. Как только ПЛИС будет готова к приему данных, она сформирует высокий уровень на линии nSTATUS. На данном этапе у нас все готово для эксперимента в железе. На блок-диаграмму SP_FT_MPSSE_FPGA.v добавляем управление линией nCONFIG — после инициализации MPSSE подаем низкий уровень, а затем высокий. После каждой операции (для отладки) считываем состояние ножек порта.
В целом, во время запуска VI видно, что ПЛИС реагирует на переход на линии nCONFIG — на ножке nSTATUS устанавливается ноль, а затем единица. Но не будет лишним проконтролировать это с помощью осциллографа. Годится почти любой двуканальный осциллограф с возможностью запуска по триггеру (ждущий режим). Канал А (синий трек) я ставлю в контрольную точку цепи nCONFIG, канал B (красный трек) — цепь nSTATUS. Триггер настроен на спадающий фронт канала A.
Картинка кликабельна. С подробностями!
Виртуальный инструмент
Создадим наш первый инструмент, выбрав в меню File->New VI…:
После этого откроется основное окно — это наше рабочее пространство. При первом запуске нам покажут подсказки (если вы их закроете, то для того, чтобы их вызвать снова, надо нажать вопросик в правом верхнем углу).
Элементы рабочего пространства:
В левой части находится дерево для навигации по файлам проекта (Navigation Pane), в середине — основное пространство для программирования (VI), там же слева палитра инструментов (Palette), а справа — свойства для конфигурирования, вид которых меняется в зависимости от выбранных элементов (Configuration Pane), а снизу будет панель ошибок и предупреждений.
Нас в данный момент интересует средняя панель (VI). Вообще Виртуальный Инструмент VI обычно состоит из двух основных частей — Блок-Диаграммы (Block Diagram) и Передней Панели (Front Panel). Переключатель расположен в верхней части — Panel и Diagram (Icon — это иконка инструмента, мы её разберём попозже).
Загрузка конфигурации
Для последовательной передачи данных процессору MPSSE нужно послать op-code 0x18, аргументами команды будет длина передаваемой последовательности (два байта, начиная с младшего), и сама последовательность данных. Длина кодируется за вычетом единицы. Отправку блока данных оформим в виде ВП MPSSE_send.
Размер входного буфера () преобразовываем к двухбайтовому типу , отнимаем единицу, меняем местами младший и старший байт () — отправлять длину нужно начиная с младшего, и преобразовываем двухбайтовое число в однобайтный массив ().
Функция заслуживает отдельного внимания. Это такой универсальный преобразователь типов, сообразительность которого порою сильно удивляет. Если коротко, то:
Наглядно для програмиста
Однако это не просто приведение данных к другому типу, это еще и эвристическая интерпретация. Эта функция позволяет выполнять преобразование между несовместимыми типами данных, при этом функция не брезгует выравниванием входных данных и даже удалением «лишних» частей. Если запрошенный тип данных требует памяти больше, чем у входных данных, то функция выделит недостающий объем. Для начинающего разработчика LabVIEW может стать палочкой-выручалочкой, но с взрослением, лучше от такого преобразователя отказаться — сильно много скрыто от глаз и может стать источником непредвиденных ошибок. Лучше использовать более явные методы преобразования, например, .
При инициализации процессора MPSSE, мы задали максимально допустимый размер буфера для передачи данных в 65536 байт, следовательно файл конфигурации мы должны разделить на фрагменты, размер которых не превышает указанный размер. Воспользуемся функцией , эта функция выделяет из массива подмассив начиная с элемента и длинною . Разбивать будем в цикле , каждую итерацию индекс будем увеличивать на 65536, между итерациями значение передадим через сдвиговый регистр. Как только не удастся от основного массива отщипнуть 65536 байта, берем все, что осталось, отправляем и останавливаем цикл.
Согласно протоколу загрузки, после того, как все данные были переданы, нужно подать еще два тактовых импульса, чтобы началась инициализация ПЛИС. Для этого после цикла выполняем отправку еще одного «пустого» байта.
Для того, чтобы понять успех прошивки, считаем флаги, и, если CONF_DONE установлен в единицу, рапортуем ВП верхнему уровня, что все ОК.
Программа завершена. Осталось убедиться, что ПЛИС успешно прошивается, а плата счастливо мигает светодиодиками.
Про именование ВП
Ни для кого не секрет, что в классическом программировании всем пользовательским объектам и функциям нужно давать осмысленные имена, то же можно сказать и о LabVIEW, особенно, если в роли объектов выступает SubVI. Я привык имена файлам ВП давать на основе их места в иерархии разрабатываемого ПО. В текущем приложении можно выделить четыре уровня абстракции:
- Самый низкий уровень — это ВП, выполняющие непосредственное взаимодействие с FTDI, в большинстве своем они сводятся к вызову соответствующей функции из API D2XX. В своем проекте имена ВП этого уровня я начинал с префикса «FT», например FT_Close.vi или FT_Read.vi.
- Второй уровень — это взаимодействие с процессором MPSSE. Имена ВП этого уровня начинаются с префикса «MPSSE». Пример: MPSSE_open.vi, MPSSE_Set_LByte.vi, MPSSE_Get_LByte.vi.
- Третий уровень — это реализация протокола «Passive Serial» поверх MPSSE. Все файлы имеют префикс «SР». Например, SP_FT_MPSSE_FPGA.vi (жуткое имя, состоящее из аббревиатур) и SP_LBYTE_BITS.ctl.
- Уровень приложения. ВП верхнего уровня. Имя может быть произвольным, человекоориентированным.
Если проект достаточно большой (десятки ВП), то для каждого уровня файлы лучше хранить в отдельных директориях с соответствующим названием. В нашем проекте все ВП разместились в одной папке subVI.
Необходимые инструменты
Для подключения LabVIEW к плате Arduino нам будет необходимо следующее программное обеспечение:
- LabVIEW (software);
- (software);
- VI packet manager (software);
- Arduino IDE (software);
- LINX — эта программа доступна внутри VI package manager, откройте VI package manager и поищите пакет (программу) LINX внутри него, после того как найдете дважды кликните на ней. После этого запустится окно установки программы, нажмите там кнопку install и установите данную программу;
- LabVIEW Interface for Arduino (интерфейс LabVIEW для Arduino) – будет доступен внутри пакета VI package manager, откройте VI package manager и поищите LabVIEW Interface for Arduino внутри него, после того как найдете дважды кликните на нем. После этого запустится окно установки программы (на рисунке ниже), нажмите там кнопку install и установите данную программу.
Виртуальный инструмент
Создадим наш первый инструмент, выбрав в меню File->New VI…:
После этого откроется основное окно — это наше рабочее пространство. При первом запуске нам покажут подсказки (если вы их закроете, то для того, чтобы их вызвать снова, надо нажать вопросик в правом верхнем углу).
Элементы рабочего пространства:
В левой части находится дерево для навигации по файлам проекта (Navigation Pane), в середине — основное пространство для программирования (VI), там же слева палитра инструментов (Palette), а справа — свойства для конфигурирования, вид которых меняется в зависимости от выбранных элементов (Configuration Pane), а снизу будет панель ошибок и предупреждений.
Нас в данный момент интересует средняя панель (VI). Вообще Виртуальный Инструмент VI обычно состоит из двух основных частей — Блок-Диаграммы (Block Diagram) и Передней Панели (Front Panel). Переключатель расположен в верхней части — Panel и Diagram (Icon — это иконка инструмента, мы её разберём попозже).
Мигание светодиодом с помощью Arduino и LabVIEW
Выполните следующую последовательность действий (более подробно они показаны на видео, приведенном в конце статьи):
- Запустите LabVIEW.
2. Запустите графическое кодирование (graphical coding);
3. В окне с блоковыми диаграммами (Block diagram window) сделайте правый клик мышкой на Makerhub >> LINX >> Open, перетащите (drag & drop) его в открытое окно (Open box). Затем создайте управление (control) с помощью клика правой кнопки мыши на первом проводнике (его тонком конце) и выберите Create >> Control. Таким образом создастся последовательный порт;
4. В Block diagram window сделайте клик правой кнопкой мыши и выберите Makerhub >> LINX >> Close. Drag & drop Close.
5. В Block diagram window сделайте клик правой кнопкой мыши и выберите Makerhub >> LINX >> Digital >>Write. Drag & drop Write. Затем создайте управление (controls) на втором и третьем тонком конце проводника кликнув на каждом из них индивидуально и выбрав Create >> Control. Таким образом создастся канал D0 (D0 channel) и выходное значение (Output Value).
6. В Block diagram window сделайте клик правой кнопкой мыши и выберите Structures >> While loop. Перетащите While loop через Digital write. Затем создайте регистр сдвига (Shift register) с помощью клика правой кнопкой мыши на While loop.
7. В Block diagram window сделайте клик правой кнопкой мыши и выберите Makerhub >> LINX >> Utilities >> Loop rate. Drag & drop его в While loop.
8. В Block diagram window сделайте клик правой кнопкой мыши и выберите Boolean >> or. Drag & drop его внутрь While loop.
9. В Block diagram window сделайте клик правой кнопкой мыши и выберите Timing >> Wait(ms). Drag & drop Wait(ms) в While loop и создайте константу для него при помощи клика правой кнопкой мыши на конце проводника, который относится к Wait(ms) и выберите Create >> Constant.
10. В Front panel window сделайте клик правой кнопкой мыши и выберите Boolean >> Stop button. После этого stop button (кнопка останова) появится в Block diagram window. Drag & drop его внутрь While loop.
11. После этого соедините все эти созданные блоки с помощью проводников и вы будете готовы к созданию графической программы мигания светодиодом и подключения ее к плате Arduino.
LabVIEW NXG 5.0 — Основы и Блок-Диаграмма +10
- 11.05.20 14:44
•
AndreyDmitriev
•
#501406
•
Хабрахабр
•
Tutorial
•
•
1500
LabVIEW
Это первая статья из небольшого цикла о графическом языке программирования G, который используется в LabVIEW. Язык этот пока не очень популярен — по индексу TIOBE на май 2020 года LabVIEW находится на сороковом месте аккурат между Julia и Haskell. Выпуск LabVIEW Community Edition даёт возможность значительно расширить аудиторию пользователей (раньше можно было пользоваться только триальной версией, а по истечении 45-и дней учиться «вприглядку»).
Что ж, как говорили великие Керниган и Ритчи — «единственный способ научиться новому языку программирования — это начать на нём программировать». Этим и займёмся.
В первой части мы разберём основные элементы среды разработки, и нарисуем на блок-диаграмме наш первый «Hello, World!»
Статья-туториал рассчитана на тех, кто видит LabVIEW впервые. Под катом полсотни картинок примерно на семь мегабайт.
Работа с файлом
ПЛИС готова принять файл конфигурации. А готовы ли мы передать файл в ПЛИС?
LabVIEW содержит обширный набор инструментов для работы с файлами. Не скажу, что функционала хватает на абсолютно весь спектр задач, однако базовые операции типа чтение и запись выполняются легко и приятно. Основной набор VI для работы с файлами можно найти в палитре «File I/O». Для решаемой задачи требуется открыть файл конфигурации, оценить его размер (нам нужно знать, сколько байт отправлять ПЛИС), прочесть его и закрыть. Все просто и друг за другом. Используем ВП , , , , объединяем их цепочкой потока ошибок и — число, типа файлового дескриптора, создается при открытии файла и должно быть передано на вход другим ВП, работающим с этим файлом.
Пока нам некуда утилизировать считанные данные, но если очень хочется проверить работоспособность цепочки, то можно создать индикатор типа и немножко настроить его. В контекстном меню активируем опцию «Hex Display», включаем вертикальный скроллбар (Visible Items -> Vertical Scrollbar) и после запуска наблюдаем содержимое бинарного файла конфигурации.
На блок-диаграмме ВП образовалось две независимые параллельные линии кода, поэтому для них используются раздельные цепочки ошибок. Для того, чтобы свести параллельные потоки в один терминал , используется функция . Эта функция просматривает ошибки на входе сверху вниз (да, там может более двух входных терминалов, растягивается мышкой) и возвращает первую, которую найдет. Если ошибок нет, то возвращает первое попавшееся предупреждение. Если и предупреждений не обнаружено, то на выходе ошибка отсутствует
Важно отметить, что порядок подключения входов определяет приоритет ошибок, и если ошибка возникнет сразу в двух цепочках, то нижняя ошибка будет проигнорирована. К этому нужно относиться внимательно
Если мы попытаемся в ВП верхнего уровня нажать кнопку «Программировать» не выбрав файл, то на вход SP_FT_MPSSE_FPGA.vi поступит пустой путь, что вызовет ошибку «Error 1430. LabVIEW: (Hex 0x596) The path is empty or relative. You must use an absolute path.» Как говорит мой друг детства: «Пустяки, дело-то житейское!». И ошибка эта — вовсе не ошибка, а так, невнимательность пользователя. Останавливать программу и ругаться на него окном с красным крестиком мы не будем, просто удалим ошибку с этим кодом из потока и в диалоговом окне порекомендуем пользователю определиться с файлом. Для фильтрации ошибки используем ВП «Clear Errors» из палитры «Dialog&User Interface». Для вывода сообщения — «One Button Dialog».