Различные приемы программирования в NI LabVIEW



NI LabVIEW – среда потокового графического программирования. При написании программы в LabVIEW, пользователь задает последовательность операций преобразования потока данных с помощью блок-диаграммы. На блок-диаграмме помещаются изображения функциональных узлов, соединенных проводниками, по которым поток данных переходит от одного узла к другому. Также, в LabVIEW имеется ряд инструментов, нарушающих парадигму потокового программирования, однако, позволяющих в значительной степени расширить функциональность разработанных в нем приложении.
Что такое прием программирования

Термин «прием программирования» объединяет в себе выбор различных языков программирования, вычислительных моделей, уровней абстракции, методов работы с кодом и представления алгоритмов. На протяжении многих лет National Instruments развивала функционал LabVIEW, чтобы обеспечить поддержку большего количество различных приемов программирования.

Вы можете представить на блок-диаграмме код, написанный с использованием разных приемов, так же как и потоковый код G, а LabVIEW скомпилирует инструкции для соответствующих целевых устройств (обычные настольные ПК, платформы с ОСРВ, ПЛИС, мобильные устройства, встраиваемые устройства на базе ARM)

image002.jpg
Рис.1. Широкий спектр платформ и приемом программирования в LabVIEW

Подробнее о целевых устройствах и платформах.
Передача данных между участками кода, написанными с использованием разных подходов, организуется в LabVIEW весьма просто - поток данных является связующим звеном между различными вычислительными моделями и языками. В языке G ввод/вывод информации осуществляется с помощью специализированного интерфейса пользователя (лицевая панель), сетевых интерфейсов, библиотек анализа, баз данных и других инструментов.


Программирование на языке G

Появление потокового программирования в 1986 действительно было инновационным. Последовательность выполнения операций с данными в языке G определяется не порядком их следования, а наличием данных на входах этих узлов. Операторы, не связанные потоком данных, выполняются параллельно в произвольном порядке.

Узлы диаграммы представляют собой простые инструкции или их наборы - функции, виртуальные приборы (ВП). Выполнение инструкций узла происходит только после того, как на всех входных терминалах узла появляются данные. После выполнения инструкций его результат передается через выходные терминалы узла на входы следующих узлов.

image003.jpg
Рис.2. В этом примере происходит сложение A и B, умножение полученной суммы на C и отображение результата

На рис.2 представлен пример математического выражения на языке G. Диаграмма состоит из двух узлов (сложение и умножение) и трех входов (A, B и С). Вначале происходит сложение A и B. Код узла умножения не выполняется до тех пор, пока на оба его входные терминалы не поступят данные, а, следовательно, он ожидает результата выполнения узла сложения. Как только результат сложения поступит на первый вход узла умножения, его код (A+B)*C будет выполнен.

Несмотря на то, что язык G позволяет задавать тип данных в явном виде, одно из существенных отличий этого языка от других – это наличие проводников, выполняющих функции переменных. Вместо того, чтобы передавать переменные между функциями, передача данных определяется соединениями проводников. С другой стороны, в языке G присутствуют и стандартные для других языков конструкции, такие как условные циклы, циклы со счетчиком, структуры выбора, функции обратного вызова и логические функции.


Интерактивная настройка как основа программирования

В 2003 году National Instruments выпустила NI LabVIEW 7 Express, в котором впервые появилась технология Экспрессных Виртуальных Приборов (экспресс-ВП) – технология, призванная еще больше упростить процесс разработки алгоритмов приложения. В отличие от обычных ВП, экспресс-ВП представляют собой абстрактные структуры языка, реализующие прием программирования, основанный на интерактивной настройке компонентов.

image004.jpg
Рис.3. Палитра Экспресс-ВП, размещение Экспресс-ВП на блок-диаграмме и отображение Экспресс-ВП в режиме пиктограммы

Отличить экспресс-ВП от обычного ВП можно по большой пиктограмме синего цвета. Когда вы размещаете экспресс-ВП на блок-диаграмме в первый раз, появляется соответствующее диалоговое окно настройки. После того, как настройка закончена, LabVIEW автоматически создает код на основе созданной конфигурации экспресс-ВП. Вы можете посмотреть и отредактировать этот код или изменить настройки экспресс-ВП, повторно открыв диалоговое окно двойным щелчком мыши на пиктограмме экспресс-ВП.

В качестве примера рассмотрим задачу ввода данных для осуществления их программного анализа. LabVIEW позволяет очень легко осуществлять взаимодействие с различным оборудованием, так как включает в себя драйверы для тысяч устройств. Задача сбора данных может быть реализована не только конструкцией из нескольких ВП, но и более простым вариантом – экспресс-ВП.

Достаточно указать в настройках экспресс-ВП DAQ Assistance каналы чтения/записи и сконфигурировать такие параметры как частота дискретизации, шкалирование, синхронизация и триггеры. Кроме того, экспресс-ВП предоставляет возможность предварительно собрать данные с устройства для проверки правильности выбранных настроек сбора данных.

image005.jpg
Рис.4. Экспресс-ВП DAQ Assistant Express VI значительно упрощает настройку синхронизации запуска и параметров каналов

image006.jpg
Рис.5. Код на языке G, эквивалентный экспресс-ВП DAQ Assistant

Несмотря на все свои преимущества Экспресс-ВП не предоставляют возможности низкоуровневого управления и настройки режима работы с устройством, которое реализуется с помощью обычных виртуальных приборов. Пользователи, недавно познакомившиеся с LabVIEW, могут использовать встроенную функцию, преобразующую ранее настроенный экспресс-ВП в последовательность из обычных ВП. Это может помочь новичкам изучить низкоуровневый код. Достаточно выбрать строку Open Front Panel в контекстном меню экспресс-ВП на блок-диаграмме. Следует отметить, что любой экспресс-ВП может быть заменен комбинацией нескольких обычных ВП, к тому же, версия LabVIEW Professional Development System позволяет создавать собственные экспресс-ВП.


Поддержка сценариев .m файлов

С помощью модуля LabVIEW MathScript RT, вы можете импортировать, редактировать и выполнять сценарии *.m файлов, традиционно используемые в области математического моделирования и анализа, обработки сигналов и сложных математических вычислений. Вы можете использовать их совместно с кодом на языке G и создавать самостоятельные приложения для настольных ПК или оборудования, работающего в режиме реального времени.
 
Существует несколько способов работы с MathScript в LabVIEW. Для работы со сценариями в интерактивном режиме используется окно MathScript, показанное на рис. 6

image007.jpg
Рис.6. Интерактивная разработка текстовых алгоритмом в окне MathScript

Чтобы использовать сценарии *.m в приложении LabVIEW и объединить возможности текстового и графического программирования, следует использовать узел MathScript, который изображен на рис.7. Использование узла MathScript позволяет внедрить текстовые алгоритмы в код ВП и использовать графические возможности интерфейса для управления параметрами сценария (кнопки, слайдеры, регуляторы, графики и прочие элементы).

image008.jpg
Рис.7. Узел MathScript обеспечивает простое использование сценариев .m в коде на языке G
 
Модуль LabVIEW MathScript RT имеет собственный обработчик сценариев *.m и не требует установки стороннего программного обеспечения. Использование узла MathScript позволяет объединить в одном приложении преимущества текстовых алгоритмов, высокую степень интеграции LabVIEW с оборудованием, интерактивный интерфейс пользователя и прочие приемы программирования, рассматриваемые в этой статье.


Объектно-ориентированное программирование

Объектно-ориентированное программирование является одним из наиболее популярных видов программирования. Этот подход позволяет объединить множество разрозненных компонентов в программе в единые классы объектов. Определение класса содержит характеристики объекта и описание действий, которые объект может совершать, обычно называемые свойствами и методами. Классы могут иметь потомков, которые наследуют свойства и методы и могут переопределять их или добавлять новые.

image009.jpg
Рис.8. Объектно-ориентированный поход основан на классах (пример на изображении) и связанных с ним свойствах и функциях ВП

Использование ООП в LabVIEW стало возможным начиная с версии 8.2

Основные преимущества этого подхода таковы:

  • •     Инкапсуляция: Инкапсуляция – это объединение данных и методов в класс таким образом, что доступ к ним осуществляется только через ВП, которые являются членами класса. Такой подход позволяет обособить участки кода и гарантировать, что их изменение не повлияет на код остальной части программы.
  • •     Наследование: Наследование позволяет использовать имеющиеся классы в качестве основы для описания новых классов. При создании нового класса, он наследует типы данных и ВП члены класса и, таким образом, реализует свойства и методы родительского класса. Также возможно добавить собственные ВП для изменения функциональности класса.
  • •      Динамическая диспетчеризация: Определение методов возможно с помощью нескольких одноименных ВП в иерархии классов. Такой способ называется динамической диспетчеризацией, поскольку решение о том, какой именно ВП будет вызван принимается на этапе выполнения программы.

Эти особенности ООП позволяют сделать код более понятным и масштабируемым, а также, в случае необходимости, ограничить доступ к ВП.


Моделирование и имитация

Моделирование и имитация физических систем – популярный подход в разработке систем, которые описываются дифференциальными уравнениями. Изучение модели позволяет выявить характеристики динамических систем и разработать регулирующий узел с требуемым поведением.

На рис.9 представлен цикл Control & Simulation Loop, который осуществляет решение дифференциального уравнения с помощью алгоритмов, встроенных в LabVIEW, в режиме реального времени за определенный промежуток времени. Этот подход к программированию также основан на потоке данных, как и язык G, однако, обычно называется потоком сигналов. Как показано на рис.9, вы можете сочетать методы математического моделирования с другими методами, такими как потоки данных языка G и узел MathScript Node.

image010.jpg
Рис. 9. На имитационной диаграмме показаны распространение сигнала, оборудование ввода/вывода и узел MathScript.

Цикл Control & Simulation Loop поддерживает функции, которые используются для реализации моделей линейных стационарных систем на устройствах с установленной ОС реального времени. Вы можете использовать эти функции для определения  дискретных моделей путем задания передаточной функции, полюсно-нулевой диаграммы и системы дифференциальных уравнений. Средства анализа во временной и частотной областях, такие как функции «time-step response» или «Bode plot», позволяют вам интерактивно анализировать поведение открытых и замкнутых циклов управления/моделирования. Вы также можете использовать встроенные средства конвертации моделей, разработанных в среде программирования The MathWorks, Inc. Simulink®, что позволит использовать их в среде LabVIEW. Эти динамические системы могут быть установлены на устройства с ОС реального времени минуя различные этапы преобразования программы благодаря функциональности библиотеки LabVIEW Real-Time Module, которая отлично подходит для разработки прототипов систем управления и приложений программно-аппаратного моделирования.


Диаграммы состояний

Модуль NI LabVIEW Statechart предоставляет разработчику возможность описания функционала системы максимально абстрактным способом с помощью диаграмм состояний. Интеграция кода LabVIEW в состояния диаграммы позволяет создать фактически рабочую спецификацию приложения. Модуль NI LabVIEW Statechart добавляет к функционалу обычных диаграмм состояний возможность организации иерархической вложенности и параллельного выполнения. Следует отметить, что диаграммы состояний позволяют описать реакцию системы на события, что делает их очень удобным инструментом разработки реактивных систем, например, встроенных устройств, систем управления и сложных пользовательских интерфейсов.

image011.jpg
Рис. 10. Модуль LabVIEW Statechart описывает систему на основе диаграммы состояний.

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

Архитектура приложения на основе диаграмм состояний позволяет эффективнее разрабатывать сложные программные системы, особенно, реагирующие на события системы, такие как контроллеры динамических систем, сложные пользовательские интерфейсы и цифровые коммуникационные протоколы.

Подробнее о модуле LabVIEW Statechart.


VHDL для ПЛИС

Модуль LabVIEW FPGA позволяет использовать язык G для написания кода для ПЛИС. Однако, как и в случае с другими методиками разработки, вы можете использовать написанный ранее код или просто иметь возможность выбора способа реализации программы. Большинство ПЛИС программируются с помощью языка текстового языка потокового программирования VHDL. Вместо того, чтобы переписывать уже имеющиеся IP-блоки на языке G, вы можете импортировать VHDL код с помощью узла Component-Level IP (CLIP). Обычно требуется наличие файла CLIP XML для настройки интерфейса между элементами блок-диаграммы, однако в LabVIEW имеется мастер импорта CLIP, позволяющий выполнить эту настройку автоматически. Он выводит перечень входов и выходов IP-блока, которые можно перетащить с помощью мыши на блок-диаграмму и использовать в работе приложения, как показано на рис. 11.

image012.jpg
Рис. 11. Узел CLIP.

Поскольку NI использует ПЛИС Xilinix и набор программных инструментов Xilinx в модуле LabVIEW FPGA, вы можете использовать генератор ядер Xilinx для создания совместимого ядра. Вы также можете использовать набор разработчика Xilinx Embedded для создания любого программного микропроцессора. И, наконец, множество сторонних разработчиков предоставляют различные типы IP-блоков для управления шинами, обработки сигналов и специфических ядер.

Подробнее о модуле NI LabVIEW FGPA и узле CLIP .


Интеграция C-подобного кода

Вы можете использовать последовательный текстовый код в своих ВП на блок-диаграмме в нескольких вариантах. Первый способ - узел Formula Node, который поддерживает C-подобный синтаксис, с определением переменных и точкой с запятой в конце строк.

Узел Inline C Node похож на узел Formula Node и предоставляет дополнительные возможности низкоуровневого программирования и поддержку файлов заголовков без лишних накладных расходов на вызовы процедур. Вы можете использовать узел Inline C Node для встраивания любого кода на языке C, включая операторы #defines, которые синтаксически заключены в округлые скобки в коде C.


Взаимодействие с исполняемыми файлами

При программировании в среде LabVIEW часто необходимо обращаться из приложения, написанного в среде LabVIEW, к скомпилированным файлам и библиотекам для повторного использования ранее разработанных в других средах алгоритмов. Также при создании проекта необходимо обращаться к приложениям, написанным на языке LabVIEW, из других приложений.

Для решение этих задач LabVIEW предоставляет широкий спектр различных инструментов. Во-первых, LabVIEW может осуществлять вызов функций библиотеки DLL, а также задействовать интерфейсы ActiveX и .NET.

Во-вторых, приложение, написанное на языке LabVIEW, может предоставлять другому приложению свой функционал в качестве библиотеки DLL или с помощью средств ActiveX.

В случае, если у вас есть исходный код C, который вы хотите использовать в своем приложении на LabVIEW, вы можете скомпилировать библиотеку DLL и подключить ее с помощью узла Call Library Function. К примеру, вы можете организовать параллельные вычисления с помощью алгоритмов, написанных на C, в то время как управлением параллельно выполняющимися потоками будет заниматься программа, написанная на LabVIEW. Для упрощения работы с внешними библиотеками в LabVIEW есть мастер импорта (Import Shared Library Wizard), который позволяет автоматически создать или обновить враппер для вызова соответствующих библиотек (Windows .dll файл, Mac OS .framework файл или Linux .so файл).

Также, с помощью System Exec.vi, можно использовать интерфейс командной строки операционной системы.

Комбинация нескольких приемов программирования в одной среде разработки дает возможность повторно использовать алгоритмы, разработанные на других языках. Кроме того, разработчик может сочетать в одном приложении высокоуровневые и низкоуровневые операции, делая код более гибким и наглядным. Различные уровни абстракции позволяют представить сложные алгоритмы в наглядном виде, и в то же время сохраняется возможность контроля приложения и оборудования на низком уровне. Благодаря тесной интеграции с оборудованием, вы можете использовать оба подхода для работы с сигналами на платформах с многоядерными процессорами, ПЛИС и процессорами встраиваемых систем.

Обычно задачи имеют несколько вариантов решения, а среда программирования LabVIEW обладает достаточной гибкостью, чтобы вы могли выбрать наиболее подходящий метод решения.



Simulink® - зарегистрированная торговая марка компании The MathWorks, Inc.

ARM, Keil, и µVision торговые марки и зарегистрированные торговые марки  ARM Ltd or its subsidiaries.



 

© 2016 National Instruments Russia. All rights reserved.
Яндекс.Метрика