LabVIEW. Учебный курс. Статья 1: Вводная. DataFlow

Всем привет
По предложению ув. foxit начинаю учебный курс по LabVIEW (англ. Laboratory Virtual Instrumentation Engineering Workbench).
Долго думал с чего начать и что осветить в этом курсе. В итоге решил начать с основ, так как без их знания дело дальше чтения этих строк не пойдет. Если вас будет интересовать что-то конкретное, то пишите, опишу отдельной статьей. Таким образом будет идти две ветки:
  1. Статьи учебного курса — где будет идти изложение с основ, и называться как Статья №1…
  2. Обзор конкретной задачи или проблемы, будет называться как Статья А…
Итак вводная статья.
Ув. Bomond в статье Знакомимся с LabView уже начал вводный рассказ об этой среде программирования я же его дополню и продолжу. Эта статья вводная поэтому расскажу о том что дает нам LabVIEW, для чего ее следует использовать, ее плюсы и минусу. Итак плюс LabVIEW:
  1. LabVIEW изначально создавалась для инженеров, а не для программистов. Поэтому эта среда (и язык программирования G) сделаны максимально интуитивно понятным. Поэтому скорость его освоения просто потрясающая.
  2. LabVIEW графический язык программирования, поэтому не нужно тратить время на проверку синтаксиса, поиск ошибок и опечаток. LabVIEW оперирует "объектами" (Терминалы, узлы, функции и т.д.).
  3. LabVIEW изначально создано для написания программа для автоматизации в промышленности и учебных лабораторий, поэтому для работы с периферией в своем составе имеет очень большой набор библиотек (работа с RS-232 (COM порт), LPT, USB, протоколы TCP/IP, UDP и т.д.). Сейчас очень многие известные производители плат сбора данных, камер машинного зрения, промышленного оборудования поставляются вмести с ним готовый набор библиотек для их оборудование в LabVIEW, с большим количеством примеров. Что позволяет в сжатые сроки начать работу с оборудование и подстроить его под свои задачи.
  4. Само собой LabVIEW поддерживает работы с оборудование компании National Instruments (список оборудования можно посмотреть здесь.
  5. В LabVIEW имеется коллосальный набор библиотек для обработки и анализа сигнала, различные преобразования, фильтры и т.д. А при использовании дополнительных модулей обработки сигнала в нужной области этот список расширяется практически бесконечно.
  6. LabVIEW модульная система. Поэтому установив нужный модуль или тулкит, можно расширить ее возможности. Так есть модуль для машинного зрения, модуль работы со звуком, шаговыми двигателями, модуль для генерации отчетов в MS office, Internet модуль для передачи и публикации данных в сети.
  7. LabVIEW позволяет создавать законченные приложения и компилировать полноценное exe приложение.
  8. LabVIEW кроссплатформенная среда. Помимо написания программ под разные виды операционных систем, их список можно глянуть здесь, она позволяет писать ПО для Windows Mobile, встраиваемых система (СompactRIO, систем на основе Linux и Windows Embeded), поддерживает ARM микроконтроллеры (хотя список их небольшой, на данный момент лично я пишу ПО для LM3S8962 от TI, очень быстро и эффективно), Blackfin, есть модуль для FPGA (в основном для оборудования National Instruments, однако можно писать ПО и для некоторых FPGA от Xilinx).
  9. LabVIEW позволяет создавать законченные приложение, в ОЧЕНЬ сжатые сроки, в ней очень проста отладка и тестирования программ.
  10. LabVIEW очень легко работает с параллельными потоками, они очень легко создаются и управляются, что очень важно в больших проектов.
  11. LabVIEW позволяет создавать как маленькие простые приложения, так и огромные проекты с большим числом датчиков и сложным интерфейсом пользователя.
Это был неполный список достоинств данного продукта.

Теперь о недостатках:
  1. Несмотря на огромную гибкость данной среды, есть некоторые ограничения, например утилиты в LabVIEW писать неудобно, да и игрушка или текстовый процессор типа Word не напишешь
  2. LabVIEW несколько уступает по производительности другим языкам программирования (это цена за скорость и гибкость), но не значительно. Да и в наше время это не большой недостаток
  3. Чтобы запустить приложение созданное с помощью LabVIEW на компьютере в котором сама среда не установлена, нужно ставить LabVIEW Run-Time (или делать инсталлятор, при установке которого Run-Time поставиться сам), он бесплатный и легко качается с сайта www.ni.com. Но имеет достаточно большой объем (для простого приложения порядка 200 mb)
  4. LabVIEW все же предназначена для решения круга задач связанных с автоматизацией, сбором и обработкой данных с датчиков и т.д. поэтому в более общих задачах проигрывает классическим средам программирования. Но как говорится под все свой инструмент

Для чего же нужна LabVIEW электронщикам? С ее помощью очень легко и быстро проверить алгоритм работы устройства, смоделировать, посмотреть поведение модели, а потом перенести на конечное устройство. Конечно же для сбора данных с устройств изготавливаемых на основе микроконтроллеров, а также для их отладки. Для написания ПО к различным средствам измерения (осциллографы, лог.анализаторы и т.д.).

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

Принцеп DataFlow
Dataflow (= dataflow) поток данных — общий термин, относящийся к алгоритмам или архитекторам параллельных вычислений, в которых выполнение каждой операции производится при готовности всех её операндов, при этом последовательность выполнения команд заранее не задаётся. Впервые графическую модель вычислений, управляемых потоком данных, предложил в 1968 г. в своей докторской диссертации сотрудник Стэнфордского университета Дуайн Эдэмс (он же ввел термин dataflow )

Ну, а теперь на примерах, чтобы было понятно что это такое.
Запустите LabVIEW.
Создайте новый виртуальный прибор (New -> Blank VI).
Разместите на Front Panel два контрола (Controls), для этого щелчок правой кнопкой (далее ПК) -> Numeric -> Numeric Controls и один индикатор ПК -> Numeric -> Numeric Indicator. Не смотря на то что имена в LabVIEW, в отличии от классических текстовых языков программирования, можно давать произвольные (русские в том числе) и даже одинаковые, желательно называть их осмысленно, чтобы в большом проекте затем не путаться какой терминал к чему относится. Назовите элементы как на рисунке ниже. После создания элементов управления, перейдите на блок диаграмму ( Block Diagram'у). Для этого нажмите CTRL+E. Block Diagram это «код» наших программ, здесь описывает алгоритм работы программы, тогда как Front Panel взаимодействует с пользователями (или другой подпрограммой, об это позже). После создания элементов управления и отображения на Front Panel'е, на Block Diagram'е появились 3 терминала (см. рис). Терминал это представление элементов управления в блок диаграмме, через них мы получаем данные и передаем назад в Front Panel. Имеются еще другие методы управления контролами и индикаторами на Front Panel'e, такие как Property Node и Virables, но об них позже.

Терминалы

Теперь добавьте на Блок диаграмму (далее БД) три элемента:
  • Add (ПК -> Numeric -> Add на БД) — сложение
  • Multiply (ПК -> Numeric -> Multiply на БД) умножение.
  • Square (ПК -> Numeric -> Multiply на БД) возведение в квадрат.

Присоедините их как показано на рисунке. Чтобы создать константу (число 10, как второй множитель, нужно нажать ПК возле ввода к узлу умножения, -> Create -> Constant):

БД

Теперь запустите приложение (да это уже полностью рабочая хотя и бесполезная программа). Для этого нажмите CTRL+R (или стрелочку), Так как программа у нас не содержит циклов, то она выполнится один раз и завершит свою работу. Чтобы мы могли посмотреть как она работает, существует «Продолжительный запуск» (Run Continousy), для этого нажмите кольцевую стрелку (см. рис.). Продолжительный запуск очень удобный инструмент на этапе отладки, им очень удобно пользоваться при отладки подпрограмм. Поменяйте значения контролов на Фронт панели (далее ФП) и посмотрите как меняется значения на индикаторе Результат.
ЗапускТеперь перейдите на БД и нажмите Highlight Execution (Подсветить выполнение). Этим мы запустили режим отладки, теперь видно как идут данные по «проводникам», и видно их значения. Здесь можно наблюдать принцип DataFlow: пока к узлу (умножение, либо сложение, либо любой другой элемент БД) на каждый ввод не придут данные, он не начинает выполняться и не передаст данные дальше. Так элемент Add ожидает когда узел Multiply выполнит умножение контрола на константу и только затем производит сложение и передает данные на узел возведения в квадрат.
При разработки программ нужно стараться чтобы проводники были ровные, с минимальными изгибами, стараться не пересекать проводники между собой (см. рис.). Также принято располагать контролы слева, а индикаторы справа. Так программа выглядит более читабельно и наглядно видно выполнение принципа потока данных. Для приведения блок диаграммы к красивому виду с версии 8.6 появился инструмент CleanUP Diagram. С версии 2009 появилась возможно «подчищать» только выделенную часть блок диаграммы. Но лично я его использую только с маленькими блок диаграммами, при очистке сразу больших проектов, код получается еще более нечитабельным, хотя и компактным.

Неправельна БД
CleanUP БД

Теперь сделаем следующие: скопируем нашу блок диаграмму (выделить мышью и нажмем CTRL+C, затем CTRL+V, как в других программа Windows). К скопированным контролам и индикатором автоматически добавились цифры 2. И на ФП появились одноименные элементы, чтобы найти какой терминал какому элементу соответствует, можно использовать двойной щелчок.
Потоки

Теперь у нас в программе два НЕЗАВИСИМЫХ потока внутри одного приложения. Потоки независимы если при выполнение не один из узлов не ожидает данных с другого узла. А теперь представьте сколько бы кода ушло чтобы сделать два независимых потока внутри одной программе в текстовых языках программирования (не важно С или Delphi или...). Обычно потоки используются в более-менее серьезных программа. И очень часто при связи с периферией. Так например, в одном потоке происходит прием данных с COM порта, в другом обработка сообщений от пользователя, а третьем обработка и запись данных в файл.
Запустит выполнение программы в Продолжительном запуске и включите подсветку кода (Highlight Execution). Сначала может показаться что потоки выполняются последовательно и зависят друг от друга, на самом деле это сделано, для того чтобы программист успевал следить за выполнением программа. Также хочется отметить, что если у вас на компьютере процессор с двумя ядрами, то тогда LabVIEW сама разделяет потоки, так что каждому ядру достается свой поток. Если же у вас одноядренный процессор, тогда он быстро переключается между двумя потоками, но скорость выполнения будет значительно выше, нежели если бы приложение выполнялось в одном потоке. Начиная с версии 2009 в LabVIEW, появилась возможность указывать какой цикл на каком ядре выполнять, но об этом позже.
В следующей уроке опишу как cкомпилировать нашу программу в исполняемый файл .exe. Расскажу про типы данных, массивы и основные структуры. И тем кто уже знаком с LabVIEW напишу отдельную статью об правильно работе с COM портом.
Если хотите узнать о чем то другом, пишите в комментариях, учту.
P.S. Это моя первая статья, поэтому сильно не пинайте, говорите что исправить/дополнить с радостью сделаю.
LabVIEW. Учебный курс. Статья 2: Типа данны, Структуры.

Выдвигаю этот цикл статей на конкурс :)

  • +6
  • 25 марта 2011, 12:12
  • grjgrj

Комментарии (46)

RSS свернуть / развернуть
Тема хорошая, приветствую. И с хорошим циклом у вас есть реальные шансы :)

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

И было бы хорошо, если бы вы первую же жирную порцию инфы о лабвью просто дописали в этот же пост после вводной. Так оно будет и логичней и весомей.
0
Согласен полностью. Хорошо, сделаем.
0
А что хотелось бы видеть:

Обьяснение датафлоу. Т.е. как там идут данные. Как представляются массивы. Когда данные начинают движение (т.е. обьяснить тот момент, что пока блок не соберет всю инфу он данные дальше не пнет).
Как работать с массивами через циклы. А то пока я вывод в массив организовал так чуть бошку себе не свернул.

Про то как данные проходят внутрь и сквозь через разные структуры (циклы, кейсы).

О связи с вненшним миром по усб. ком и прочим портам.

О создании графиков причем не только вида вейвчарт, где одна ось шкала времени, а и что то вида ХУ графиков. Где идут данные по х и по у и строятся круговые диаграммы, например.

Немножко о всяких кнопочках и отом что они выдают и как это применять.

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

Лучше на примерах. Т.к. лабьвю это тот случай, где пример большой проги или узла наглядней и лучше чем десятки страниц описания. Тем более версии лавью разные и бывает порой хрен поймешь что куда.
0
Хотелось бы узнать про способы связи мк с компьютером без использования дорогого железа от NI. Например, посылать пакеты данных с помощью UART на USB (FT232RL), а в LabVIEW эти пакеты принимать, разбивать на части и обрабатывать — такое реально?
0
Реально. По крайней мере с COM портом можно связываться через библиотеку VISA и еще какую то. А для битбанга фтди тоже какая то сторонняя либа есть, но не уверен.
0
Реально и то и другое. С FT232RL, сам работал — без проблем. В режиме UART можно VISA и через .NET, а для битбанга dll подключить нужно. Visa скоро опишу, битбанг чуть позже.
0
Проблема в том, что на ноутбуке нет COM-порта, поэтому без FT232RL не обойтись.
Так что с нетерпением жду курса)
0
Ну так фтди она же ком порт делает.
0
Настоящий com или ущербный, но работающий? Я просто не знаю, как оно все работает на аппаратном уровне.
0
Ну формально он не отличается для софта от нормального. РХ ТХ есть. Всякие кст ртс дтс тоже. Правда они обычно не нужны.
0
Полноценный рабочий com-port, и даже лучше чем обычный, так как битрейт там выше. Использовал его в коммерческом проекта, писал ПО на LabVIEW — все отлично работает.
+1
Согласен с DIHALT по поводу того что хотелось бы видеть.Добавлю ещё, что хотелось бы узнать как писать прогрмаммы в LABVIEW под Линукс(для встраиваемых систем) или хотя бы в каком направлении рыть инфу.Под WinCe там есть специальный модуль, но среди встраиваемых систем он не так распространён, как Linux.
Естственно протоколы связи с внешним миром самое интересное.Если с com-портом, лично мне, всё более меннее понятно, то остальные способы тёмный лес.
0
Очень бы хотелось увидеть работу с СОМ портом в режиме Master-Slave.Компьютер делает запрос, а устройство на МК отвечает. Программа на Labview разбирает полученный пакет и выдает результат.Можно на примере стандартного, например Modbus устройства.
0
атлична, атлична… Автору респект!
0
Еще очень хотелось бы почитать про парсинг данных с периферии типа COM-потов и т.д. В каком виде надо данные отправлять с мк, чтобы можно было их обрабатывать в ЛВ, и как собственно их обрабатывать.
0
Тема действительно очень насущная. Увидив ее сразу же зарегился) Автору огромнейшее спасибо! DIHALT довольно подробно расписал желаемое, мне остается только подписаться под этим. Буду с нетерпением ждать продолжения. grjgrj успехов в работе!
0
тока cut покороче делайте.
0
Добавил в эту статью про DataFlow, Остальное напишу дальше :). DIHALT для конкурса этот цикл статей годится? что нужно еще сделать? И нельзя ли выделить отдельный блог для LabVIEW? А то раздел софт для CAD не очень подходит.
0
Почитал, сразу попробовал в ЛВ.
Вполне понятно, но есть два момента, которые желательно поправить и учесть в будущем:
1. При описании объектов Блок-Диаграммы пожалуйста подробней расписывайте где искать новые элементы. У меня ЛВ 2009, упарился искать математические операции. Спасло то что я с ним уже ковырялся немного.
2. Желательно больше внимания уделять грамматическим ошибкам. Обычные опечатки, но довольно частые.

А так, респект, хорошая статья.
0
По поводу поиска в Блок Диаграмме, напишу немного в следующей стать, а также скажу как ее лучше и удобнее настроить. Ошибка, да они есть, исправлю.
0
Первую статью вижу уже тоже дополнил. Годится. Принимаю. Блог по ЛАВЭ щас будет. Запилю и перенсу туда. Потом главное сам туде не забудь вступить иначе при правках. В конкурс годится вполне.

Да, еще один техническим момент. Старайся заголовок статьи придумывать раз и навсегда. Дело в том, что когда ты ее переименовыаешь (как сейчас, но то было необходимо) то меняется ее адрес. И если на нее где то были линки, то они становятся битыми.
0
Присоединяюсь хорошая статья, молодца)!

DIHALT, прими мои извинения, не на ту стрелку нажал, блин… конечно же +1)
0
Хорошая игрушка
0
  • avatar
  • DVF
  • 27 марта 2011, 00:30
Судя по содержанию этой книги LabVIEW. LabVIEW FPGA. Реконфигурируемые измерительные и управляющие системы Баран Е. ДМК Пресс — я так понял, что реализованные в Labview программы можно загружать в FPGA? Так ли это?
0
Да, это так. Кроме того есть модуль NI LabVIEW Embedded Module for ARM Microcontrollers
+1
На самом деле не все так радужно. Модуль LabVIEW FPGA может компилировать код только для оборудования которое уже описано. А в этом списки всё оборудование от NI с FPGA, и пока что только один стартер кит от Xilinx Sparten-3E. Конечно ручками можно описать и свою микруху, но кто это будет делать и кто знает как? Но в качестве обучения вот для этого стартер кита можно программить с LabVIEW.
По поводу ARM тоже все не так хорошо. LabVIEW поддерживает полностью только ТРИ ARM-контроллера (ядро и периферию). Это три стартер кита. Остальные сотни АRM-а он поддерживает только ядро без описания периферии. То есть программу он скомпилет, а вот UART, Ethernet модули работать не будут. Чтобы они заработали нужно также ручками партировать, это не сложно но нужно знать Keil for ARM. А если значешь KEIL, зачем тогда LabVIEW ARM? Сейчас я работаю с EK-LM3S8962 в LabVIEW ARM — впечатление положительное, Ethernet, UART, SD, OLED и даже дебаг работает.
0
Поздравляю с первой статьей.
Что хотелось бы увидеть.
— Связка МК+LV по протоколу RS232.
— Использование портов ПК(Com-порт, LPT, USB)
— Работа с данными, их обработка, визуализация, сохранение, накопление.
0
Ваш LabVIEW фигня. Нет у него плюсов по сравнению со стандартными средствами разработки(к сожалению :( ).
0
Смешно и только. Вы программист LabVIEW? Как вы можете оценивать то с чем не работали? И тогда скажите почему есть сотни (скорее даже тысячи) коммерческих проектов с использованием LabVIEW? Тот же нашумевший Большой адронный коллайдер с помощью LabVIEW, а там согласитесь не дураки сидят. Применение LabVIEW сильно сокращает сроки выхода проекта, а также экономит на человека-часах. За сколько времени на С вы напишете программу которая просто будет отправлять AT команду в модем и получать? Или за сколько вы напишете программу для обработки и калибровки изображения с камеры и получение размеров объекта да и напишите ли вовсе(я имею ввиду с нуля, без примеров и чужих библиотек)?
0
Или за сколько вы напишете программу для обработки и калибровки изображения с камеры и получение размеров объекта да и напишите ли вовсе(я имею ввиду с нуля, без примеров и чужих библиотек)?
Самое смешное, что примерно это он и пишет.
За сколько времени на С вы напишете программу которая просто будет отправлять AT команду в модем и получать?
Мелкие программы не очень показательны. А на мало-мальски крупных инициализация компорта (1-15 строк на С) уже малозаметна.
+2
Такими комментариями, здесь можно плохую карму заработать :)
0
Согласен, просто как говорится за живое задели :). Закончим холливар, кто с чем хочет тот с тем и работает. Если есть вопросы с радостью отвечу. А если уважаемый ANTPro хочет поспорить, то можно через форум мне личное сообщение отправить :).
0
ANTPro предпочитает C#. Его задачи на шарпе решать быстрее (да и к тому же, он программист, я тоже в большинстве случаев предпочту текстовый язык).
+1
Вот вот, LabView к сожалению не рисует за тебя схемы :(
0
Ну тогда по вашему и BMW тоже полная фигня, так как на ней нельзя быстро перевести 7 тонн угля, а вот ЗИЛ это вешь!!! :). Просто под все свои инструменты. Сайт делать на paskale никто не будет, также как и игрушки на LabVIEW писать нерационально, и так же как и автоматизацию производить на C#. С# тоже текст за вас к сожалению не пишет. Просто называя инструмент которым я (и не только я) зарабатываю на жизнь в течении 5 лет — фигней, равносильно сказать, что и я 5 лет болду пинаю :).
0
5 лет… Требую большую статью с описанием законченного большого проекта!!! А не это недоразумение коих в сети полно — будем считать первым блином :)
0
Согласен, просто как говорится за живое задели :). Если кого обидел — извеняюсь. Закончим холливар, кто с чем хочет тот с тем и работает. Если есть вопросы с радостью отвечу. А если уважаемый ANTPro хочет поспорить, то можно через форум мне личное сообщение отправить :).
0
+100 за статьи…

Побольше примеров работы с разными портами, парсерами и обработчиками строк, массивов.

Кто нибудь использует LabView совместно с осциллографами RIGOL? Ведь эти осциллографы изначально заточены под LabView. Меня очень интересует обработка сигналов высокой частоты в «реальном» времени (насколько возможно). Ну а если еще и генератор сигналов!
Насколько это возможно/реализовано/используется ???
0
Ну в «реально» времени не зря в кавычках, максимально что позволит Windows — 10 ms. Но если осцил передает данные массивом данных (что скорее всего) то проблем с обработкой возникнуть не должно. А если он и заточен еще под LabVIEW, то там должны идти библиотеки к ней с примерами, гляньте на их сайте, или на пишите в сапорт — помогу.
0
Ну в «реально» времени не зря в кавычках, максимально что позволит Windows — 10 ms. Но если осцил передает данные массивом данных (что скорее всего) то проблем с обработкой возникнуть не должно. А если он и заточен еще под LabVIEW, то там должны идти библиотеки к ней с примерами, гляньте на их сайте, или на пишите в сапорт — помогут.
Если генератор в этом осциле есть, и описаны драйвера к нему то можно.
0
Объясните чайнику, как править/удалять свои сообщения? или слово не воробей вылетело не поймаешь?
0
Методом челобитной DI HALT'у. Придет — выпилит.
0
Использовал когда-то какой-то плагин к LV для осцилла Tectronix. Работало все с тормозами, а может просто ноут был стар.
Кстати в LV DAQ от NI можно использовать в режиме ПК-осцилла. Коллега так использует, когда несколько каналов нужно посмотреть. Генератор сигналов делется без проблем. Главное иметь DAQ.
0
Под «реальным» временем поднимаю — обрабатывать по мере прихода данных, а не после когда нажму кнопку «обработать».
Пояснения. Осциллографы RIGOL комплектуются компашкой с демо версией LabView и примерами — полное копирование панели, только виртуальной. Соответственно что на компе нажимать что вручную одинаково. При какой нибудь автоматизации измерений это было бы очень удобно.
Еще есть (отдельные устройства) генераторы RIGOL которые могут делать любой сигнал. То же есть управление через LabView.
Получается магнитофон: осцилограф записывает — LabView обрабатывает — генератор воспроизводит. Есть модели которые работают до 350 МГц!!! Возможности обработки сигналов колоссальные.
Вот только у кого есть такая аппаратура LabView не использует…
В идеале примерно так. Хотя могу ошибаться опыта мало.
P.S. гдето в инете видел реализацию обработки SDR (софтовое радио) на LabView (vi где то сохранял себе).
0
Ну тогда не вижу проблем. Задача точно решаема. Особенно если подключить в LabVIEW для обработки сигналов.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.