LabVIEW портал

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

LabVIEW уроки
В этом разделе ты найдёшь уроки как для начинающих так и для продвинутых пользователей LabVIEW.

Уроки разделены по тематике и по возрастающей сложности (см. меню слева). Для просмотра видеоуроков требуется плагин Adobe Flash Player, который можно бесплатно скачать с сайта Adobe: Get Adobe Flash Player

Если у тебя возникли какие либо вопросы или предложения по уроку, то можно задать этот вопрос в коментарии к уроку.

Приятного просмотра!

Dataflow + G = LabVIEW

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

Dataflow + G = LabVIEW

цикл for в labview

Некоторое время назад я сменил специализацию. Это был не просто переход к другому языку программирования или сосредоточение на иной области задач, но и весьма ощутимое изменение парадигмы, которой я придерживался. Год назад я окунулся в мир dataflow и визуального программирования. Наиболее ярким и мощным представителем этой ветви средств разработки является LabVIEW (National Instruments).

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

* * *

В этой публикации мне хотелось бы вкратце рассказать о том, как реализовать на LabVIEW простейший автомат. Не буду вдаваться в объяснения о том, что такое автоматное программирование, изображения скажут больше. Грамотно продуманная диаграмма состояний автомата позволит сделать код удобным для разработчика, а программу - стабильной. Но в начале, небольшое отступление. Я проясню некоторые моменты LabVIEW.

Туннели и шифт-регистры.

цикл for в labview

Итак, слева от цикла мы видим скалярную переменную со значением, раным нулю. Пятерка присоединенная к N говорит циклу о пяти итерациях, т.е. i = 0..4.

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

Посмотрим теперь на "проводки", которые в цикле заводятся на узел сложения. Складывать будем с переменной i, т.е. с номером итерации.

Что же будет на выходе? Поскольку мы складываем с нулем (та переменная, что заведена снаружи цикла), мы увидим на четвертом выходе (с автоиндексацией) массив [0,1,2,3,4]. Логично. Что же будет в пятом? Последнее значение i. Туннель не имеет автоиндексации и перезаписывается.

А что в последнем выходе? А вот там будет 10. (0 + 1 + 2 +3 +4) Почему? Потому что сдвиговый регистр на входе будет передавать в следующую итерацию цикла предыдущее значение выхода, и, лишь на первой итерации - внешний нолик, который мы подали на вход.

Проверим.

лицевая панель

Задача

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

Диаграмма приложения, реализующего этот сервис будет такой:

диаграмма

Теперь, взглянем на исходный код.

Главный цикл программы выглядит так:

главный цикл while

Кейсы основной структуры и определяют состояния автомата: init, listen, say, quit.

А вот маленькие вложенные кейсы (обработка ошибки соединения и обработка нажатия кнопки выхода) подробнее:

   

   

Остальные кейсы основной структуры:

Запускаем программу, соединяемся telnet localhost 10000 и видим в консоли "hello, world!". Затем соединение рвется.

Сухой остаток

Одна из главных особенностей визуального программирования - код действительно может быть наглядным и красивым! С другой стороны, он может запросто превратиться в лапшу, все-таки мы имеем дело с "проводками" dataflow. Однако в LabVIEW есть ряд средств (очереди, локальные, глобальные, сетевые переменные, свойства элементов управления и прочее), который позволяет улучшить читаемость кода. Правда, в ущерб идеологии dataflow. Да что там говорить, есть даже специальные структуры для контроля за событиями пользовательского интерфейса. Есть ООП! А в LabVIEW 2009 есть даже рекурсия, которая ну никак не вписывается в dataflow. Однако, несмотря ни на что, LabVIEW более чем достоин того, чтобы иметь его ввиду при выборе инструмента разработки.

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

Спасибо за внимание.

Павел Ш. Китьян / Этот e-mail адрес защищен от спам-ботов, для его просмотра у Вас должен быть включен Javascript
 

Введение в LVOOP

Что означает LVOOP и какие плюсы имеет объектно-ориентированное программирование по сравнению с обычным программированием?

LVOOP это нативное  объектно-ориентированное программирование в LabVIEW. Нативное оно потому, что оно было встроено в LabVIEW его непосредственным производителем National Instruments и предполагает поддержку и далнейшее развитие этого дополнения.

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

Но что подразумевается при обращении с виртуальными объектами как с обычными? А конкретно то, что сказано выше, то есть  обращение с объектами как в реальной жизни. То есть объектом может быть любой "предмет" вокруг нас: ванна, часы, телевизор, собака, автомобиль... Ну а самое главное для программиста нашего профиля это какой нибудь девайс, например АЦП, мультиметр, мотор, сенсор и прочее.

Возьмём для примера настенные часы. Для чего нужны настенные часы? Ну наверное в основном для того чтобы узнать время. Иногда нужно часы перевести на правильное время, иногда завести механизм. Но при чём тут часы? Нужны реальные примеры, которые могут пригодится мне в проектах.

Да, мы, как програмисты, имеем дело со сложными системами, состоящими из подсистем, но к каждой системе и подсистеме и дальше к сенсорам можно относится как к объектам. Допустим есть конкретное задание - создать программу контроля и измерения. Имеется нагревающая установка-печка и например металлический куб. Нужно измерить зависимость объёма куба от заданной температуры используя тензорезисторы (несколько т.к. это куб). Ну и конечно АЦП измеряющий сопротивления тензорезисторов.

Получается у нас имеется шесть реальных, а так же шесть виртуальных объектов, которые отображают реальные:

печка,  3 x тензорезистор, металлический куб и АЦП. При этом 4 класса, т.к. тензорезисторы одинаковые.

Получается в этом и похожих проектах можно и нужно/желательно применять LVOOP  и если посмотреть на уже проделанные проекты или на настоящие или же предстоящие по-новому, конкретно со стороны объектного ореинтирования, то можно найти параллели.

Основным плюсом объектно-ориентированного программирования является то, что с реальными объектами (которые отображаются в программе виртуально) можно делать то (опять же виртуально), что  делается в реале. Получается, что программист думает как человек, а не как программист, которого никто, кроме его самого не понимает. То есть уровень проекта переходит на более высокий и мышление при осуществлении проекта меняется.

 

Видеоурок: Параллельные циклы

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

Советы и правила

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

1. Старайтесь умещать блок диаграмму виртуального инструмента в размер экрана, а лучше ещё меньше. Создавайте подприборы, это поможет быстрее найти ошибки в программе и избежания редундантности кода. Ведь один и тот же подприбор можно использовать в программе много раз.

2. Используйте кластеры. Блок диаграммы с использованием кластеров "удобочитаемы", помогают при поиске ошибок в программе, уменьшают количество соединений, входов и выходов подприборов.

Подробнее...
 

Видеоурок: Создание EXE из прибора

В этом видеоуроке показывается как создавать приложение EXE из прибора VI. Это видео без звука!
Подробнее...
 


Страница 1 из 2