LabVIEW. Учебный курс. Статья 2: Типы данных, Структуры.

Начало
Сегодня мы поговорим о типах данных, затем об структурах.

Типы данных
В LabVIEW имеет богатый набор типов данных разделим их для простоты на группы:
  • Логический — классический тип Bool, принимает два значения — Истина (True) или Ложно (False), Отображаются на БД зеленым цветом.
  • Целочисленные — делятся на знаковые ( I8, I16, I32, I64) и беззнаковое (U8, U16, U32, U64). Цифра после буквы, это число бит которые занимает тип. Отображаются на БД синим цветом.
  • Числа с плавающей точкой — делятся на по точности представления (а значит и количеству битов) на расширенной, двойной, одинарной точности и тип называемый Fixet-Point, в котором можно задать нужную точность для дробной и целой части. Отображаются на БД оранжевым цветом, а Fixet-Point серым
  • Комплексные числа — числа с мнимой единицей, также делятся на по точности представления. Отображаются на БД оранжевым цветом.
  • Строковые — очень часто применяемый тип данных, замечу что символ и строка в LabVIEW понятия тождественны, точнее символов в принципе и нет. Отображаются на БД розовым цветом.
  • Массивы — тип, который представляет из себя объединение одинаковый типов. Отображаются на БД тем цветом элементами которого образован, но более толстыми линиями. Если же размерность массива двойная (массив из массивов) или тройная, то отображается двойной или тройной линией цветом элементов.
  • Кластеры — тип, который представляет из себя объединение разных типов. Если элементы кластера относятся к разным видом типов, то он отображается толстой розовой линией. Если образован только целочисленными и/или числами с плавающей точкой то толстой темно оранжевой линией(см.рис.).
  • Variant — особый тип, к которому можно привести любой другой тип. Используется для взаимодействия с компонентами ActiveX, .NET и т.д. Отображаются на БД толстым серым цветом.
  • Другие типы — в LabVIEW помимо основных имеются другие типы данных, которые не встречаются в классических языках программирования. Например, refnum — подобие указателя. Но о них в следующих статьях
Типы данных
Запоминать и заучивать наизусть все эти типы нет смысла, достаточно знать основные и понимать что они обозначают. Если хотите узнать к какому типу относится переменная или константа, то достаточно вызывать Context Help, значок вопроса на БД или CTRL+H. И навести мышку на объект. Таким же методом можно узнать назначение того или иного узла, или подпрограммы.
Context Help
Чтобы задать объекту тип нужно щелкнуть правой кнопкой по нему и затем выбрать Representation -> нужный тип.
Смена типа
Наиболее часто используется строковый, целочисленный и логический типы данных. Передача и прием данных с периферии (СОМ, USB, Ethernet) производится через строковый тип. Все кнопки, и индикаторы состояния описываются типом Boolean. Из целочисленных часто используется U8 (принимает значения от 0..255). А массив из элементов этого типа можно преобразовать в строку. А также часто используется I32 — как индекс всех циклов.

Массивы
Как было сказано выше массив это упорядоченное объединение одинаковых типов. Причем этим типом может быть и другой массив, или кластер. Для создания массива существует несколько методов:
1. Путем объединения с помощью узла Build Array (ПК -> Programming -> Array -> Build Array). Этот элемент может растягиваться, для этого нужно поднести мышку к верхнему или нижнему краю и протянуть, добавив нужное количество входных элементов. Затем на вход этого узла нужно подать элементы, которые добавляются в массив. Оставлять входы пустыми нельзя — будет ошибка (разрушенная стрелка запуска, см. рис.), тоже произойдет при добавлении разнотипных элементов (при добавлении числа и строки например). Если объединяются схожие типы и возможно их преобразование к общему типу — это будет происходить автоматически к более широкому виду, при этом это преобразование будет показано красным шариком (см. рис.)
Build Array
2. Если нужно создать массив из N элементов с одним одинаковым значением, тогда можно использовать Initialize Array (ПК -> Programming -> Array -> Initialize Array). Включите контекстную справка (Context Help, CTRL+H). Разместите узел Initialize Array на БД. Наведите на него мышку. В справки видно, что по умолчанию данный узел имеет 3 входа и значок, что можно увеличить число входов с помощью мыши: Element (сюда нужно подсоединить элемент массив из которого вы хотите создать). для примера зададим число 10,2 типа Double. Для этого ПК на входе, затем Create -> Constant. По умолчанию создается константа тип Double (если нужен другой тип то ПК->Representation -> нужный тип.). Вводим в нее нужное нам значение (в нашем примере 10,2). Затем размерность и число элементов (Dimension Size). Размерность задается протягиванием вниз нижней границей. Так можно создавать 2D, 3D и т.д массивы. Сделаем квадратный массивы 3 на 3 элемента, для этого протянем на одну позицию нижнюю границу, получим еще один вход. ПК на входе Create -> Constant, после вбиваем туда значение 3 и соединяем со вторым входом (см. рис.). На выходе щелкаем ПК Create -> Indicator. Переходим на ФП, и за нижний край растягиваем наш индикатор массива. Запускаем программу и получаем массив заполненных значений 10,2.
Initialize Array
3. Часто нужен элемент управления в виде массива. Для его создания щелкните на ФП ПК-> Modern-> Array, Matrix &Cluster-> Array и разместит пустой контейнер массива на форме. Затем добавьте туда нужный элемент. Например, щелкните на ФП ПК-> Modern-> Numeric -> Dial и разместите его внутри контейнера. Также растяните его за нижний угол. Чтобы добавить размерность (сделать 2D массив) — ПК на нем — Add Demension. Далее можно вручную заполнить значения. Аналогично можно создать и массив константу, и индикатор.
Array Control and Constans
4. Ну и наиболее частый способ получения массива — это как вывод данных из циклов. Если любой объект разместить внутри цикла (о циклах и структурах вообще будет чуть ниже). И вывести данные из этого цикла с индексацией то получим массив. Индикация для цикла For Loop включается автоматически, а для цикла While Loopвключается с помощью щелчка ПК на терминале вывода данных из цикла и затем Enable Indexing. Также никто не запрещает ее отключить, тогда на выходе будет значение последний итерации цикла.
Array loop
Структуры
С помощью различных структур задается алгоритм работы программы. сейчас рассмотрим только основные структуры, а именно циклы For Loop и While Loop, структуру ветвления Case, Sequence (Flat и Staсked), Diagram Disable и чуть-чуть коснемся Formula Node.
For Loop
Разместите на БД структуру For Loop (щелчок ПК->Programming->Structures->For Loop и протяните небольшую область). Теперь все объекты размещенные внутри этой структуры буду выполняться циклически то число раз которое указано. Чтобы задать сколько раз нужно повторить цикл создайте константу привычным образом около символа N и установите число итераций 10. Внутри цикла есть счетчик итераций i (см. рис.) по нему можно узнать сколько раз уже выполнился цикл. Добавьте внутрь цикла узел умножения Multipay и ко второму входу подключите счетчик итераций i, затем создайте константу на одном из входов равную 2 (такая последовательно нужна для того чтобы создаваемая константа была типом I32, а не double по умолчанию для числовых констант). подключите выход умножения к границе цикла For Loop, затем правой кнопкой на образовавшимся выходном туннеле и Create->Indicator, этим мы создали одномерный массива. Теперь запустите на выполнение программу (CTL+R) и посмотрите на ФП значение массива (чтобы быстро найти индикатор на фронт панели можно два раза щелкнуть по терминалу индикатора.
For loop
While Loop
Разместите на БД структуру While Loop (щелчок ПК->Programming->Structures->While Loop и протяните небольшую область). Это цикл по условию, он выполняется до тех пор пока на вход Loop Condition не подать истинное значение. В остальном он аналогичен структуре For Loop, у него также имеет цикл итераций i. Также добавьте узел умножения и константу, затем соедините как показана на рисунке. Кроме того добавьте узел сравнения Greater (ПК->Programming->Comparison->Greater) и создайте на его входе константу. Выход узла сравнения подсоедините к Loop Condition. Цикл будет выполняться до тех пор пока результат умноженный на два не будет больше 50 (т.е. цикл выполнится 26 раз). Ко выходу умножения добавьте индикатор (ПК на линии выход->Create->Indicator). Чтобы при выполнении программы видеть как изменяется этот индикатор, добавьте задержку (т.к. иначе цикл очень быстро выполнится и вы увидите только результат), для этого ПК->Programming->Timing->Wait Unitil Next ms. Создайте у его входа константу равную 100 мс. Затем присоединит выход узла умножение к границе. В отличии от структуры For Loop LabVIEW по умолчанию сделал не индексированный туннель. Создайте на его выходе индикатор. Затем протяните еще одну нить с выхода узла умножения к границе, после ПК на тунели-> Enable Indexing. В этом случае создался массив. Запустите выполнение программы.
While Loop
Case Structure
Это структура предназначения для ветвления алгоритма программы. Она заменяет операторы if..else и switch языка С. Разместите на БД структуру Case Structure (щелчок ПК->Programming->Structures->Case Structure и протяните небольшую область). На вход Case Selector (значок вопроса) создайте контрол. Затем создайте константу внутри структуры на вкладке True со значением 100, и выведите нить к границе, после создайте константу на вкладе False со значением 50 протяните нить к тому же туннелю. Создайте индикатора на выходе структуры. Запустите выполнение программы продолжительно (Run continuously). Нажимая на созданную кнопку Boolean можно видеть как в зависимости от ее значения выполняется та или вкладка структуры. Если подать на вход Case Selector (значок вопроса) строку, или числовую переменную, то можно сделать несколько вкладом на разные значения входной переменной. Таким образом образовать ветвление больше, чем по двум входным значениям (с помощью этого механизма реализован алгоротм State Mashin, ему будет посвящен отдельная статья). Чтобы добавить еще одну вкладку нажмите ПК на структуре ->Add Case After или Add Case before. См рисунок. Если значению на входе термина Case Selector не соответствует значение вкладок, тогда выполниться вкладка обозначенная как Default.
Case
Flat и Staсked Sequence
Иногда необходимо явно указать порядок выполнения программы, для этого служат структуры Sequence. Разместите на БД структуры Staсked Sequence и Flat Sequence (щелчок ПК->Programming->Structures->Flat Sequence и Staсked Sequence). Эти структуры практически ни чем не отличаются. Когда нужно несколько кадров (до 6) тогда лучше использовать Flat Sequence, так как сразу видно всю блок диаграмму и она не скрыта за кадрами, да и передавать значения между кадрами проще. Когда вкладок больше или код внутри них очень объемный и не влазит в экран, тогда лучше использовать Staсked Sequence. Чтобы добавить новый кадр нужно щелкнуть правой кнопкой на структуре и выбрать Add Frame After, если нужно создать кадр после или Add Frame before, если до. Данные от кадра к кадру в Staсked Sequence передаются через локальные переменные последовательности. Для ее добавления нужно щелкнуть Add sequence local, затем ее можно перенести в удобное место и передать/считать с нее значение.

Sequence

Diagram Disable Structure
Для комментирования части кода на этапе отладки используется структура Diagram Disable Structure. Все что помещено внутри этой структуры не обрабатывается компилятором LabVIEW. Для ее вызова нажмите ПК->Programming->Structures->Diagram Disable Structure. У этой структуры две вкладки Disabled (выключено) и Enabled (включено). Включение и выключение производится через щелчок правой кнопкой мыши.

Disabled

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

Создание законченного EXE приложение я решил посветить отдельный следующую статью, также в ней я расскажу про проект LabVIEW, библиотеки LabVIEW и создание инсталлятора для нашего приложения. Кроме того я расскажу как настроить LabVIEW «под себя». То есть весь следующий урок будет посвящен среде LabVIEW, а не языку G.

  • +7
  • 04 апреля 2011, 20:07
  • grjgrj

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

RSS свернуть / развернуть
Если честно, заждался материала от grjgrj) Хорошая статья, с удовольствием почитал. Настраивает на позитивный ход мыслей, оказывается не так уж и страшен этот LabVIEW) Удачи в работе тебе, grjgrj!
0
Согласен задержал сильно, но работы очень много (что опять же доказывает ценность LabVIEW:), поэтому не успел малость, следующая статья будет в конце недели.
0
Буду ждать с нетерпением, и конечно же, огромнейшее спасибо за такие благие труды:)
0
В конце недели какого года? Уже 2012 подходит к концу :( Цикл статей действительно интересный, но жаль, что у grjgrj не нашлось больше времени на продолжении цикла статей. А было бы интересно прочитать про то, что он анонсировал — создание простого приложения и далее компиляцию в *.exe с последующим созданием дистрибутива. А так же работа с COM портом, разбор и обработка получаемого пакета с COM порта. Работа в режиме master/slave. Построение графиков, и т.д.
Так же не хватает вводной статьи по установке пакета, краткого описания различных модулей.
Кто силен — напишите pls продолжение, а если быстро не получится, то видимо я в процессе обучения напишу, но пока сам не готов.
0
Вопрос хороший. Может даже и 2012, может 2013. Хочется продолжить, но со временем сейчас большой напряг. Через месяц два только более менее появиться время — а там если еще мой цикл статей кто нить не продолжит, то я возьмусь.
0
Передача и прием данных с периферии (СОМ, USB, Ethernet) производится через этот тип
Не понятно, какой именно тип?
0
Вы правы, опечатка, подправил. Тип строковый.
0
Спасибо огромное. Ну, хоть что-то, в голове становится как надо. А то не знаешь с чего начинать.
Все очень правильно и доступно. Очень надеюсь, что получится классный учебник по LabVIEW.
0
Пожалуйста как нибудь напишите про связку LabVIEW+arm (без дорогого спец железа)
0
А что Вы имеете ввиду?? :-) Если честно то не совсем понятно… ЛабВью это вообщем-то полу универсальный софт который ориентирован, в большей части, на работу с оборудованием National Instruments и лабораторные исследования. Но так как он имеет всякие разные механизмы для работы с внешним миром COM, USB, TCP\IP то можно использовать и со всякими сторонними в том числи и своими железками.
На нем можно написать некоторую программу верхнего уровня. Но как правило тестовую или узко заточенную под определенную задачу прогу. По моему мнению она по идеологии чем-то напоминает SCADA системы. Кстати для ЛабИью есть плагин делающий из нее SCADA. Писать на LabView легко конфигурируемый сфот неудобно. (имеется ввиду если не известно заранее конечное кол-во некоторых объектов. Т.е. в софт делается под объект.)
Или вы имели ввиду плагины которые генерят сфот под ARM? Были плагины которые умели делать софт для наладонников… В том числи и под наладонники на ARM. (Этот вопрос я думаю покрыт мраком… Ведь тогда ваша железяка должна быть совместима с наладонником и по ОС и по железу...)

Все что написано чисто мое мнение… :-) Возможно не совпадающие с мнением автора кторый взвалил на свои плечи тяжкий и благородный труд рассказать об этом прекрасном ПО. Кстати есть еще и CVI… того же поля и производителя ягода… Но гибче. НО СЛОЖНЕЕ!
0
Я просто слышал что у них есть что-то связанное с arm, даже дорогая плата есть для этого.
Когда гуглил не нашел чего-нибудь достаточно внятного, но думаю это оно.
Вот и хотелось про это узнать.
P.S. Заранее извиняюсь если что-то нарушил на этом замечательном сайте.
0
Кстати весьма возможно! Я не знал об этой приблуде. Хотя, к примеру. для BlackFin у них есть нечто подобное.
Из опыта работы с LV там все просто. Вы пишите(а вернее рисуете) что-то свое, то что вам надо, а потом LV перегоняет это все в С-код и компилит под нужную вам платформу. Не уверен что код будет сильно оптимальным. :-) Хотя к чести разработчиков LV сама LV работает на редкость стабильно и быстро. ПОжалуй самая устойчивая система для Windows.

Дык а что вы могли нарушить?? :-)
0
Да Вы правы. Есть LabVIEW ARM module. Я с ним работал на плате от TI (Liminare). Впечатление положительное. Реализовано практически все периферия. Работал с SD, TCP/IP, UDP, SPI, I2C. Все модули работают. Делал несколько проектов презентаций на нем. Отлаживал железо на нем. Она использует Keil и его ОСь для контроллеров. (RTE вроде). Есть режим отладки, для програмирования и отладки не нужен JTAG, используется FTDI микросхема расположенная на плате. На счет поддерживаемых контроллеров. Там есть два типа поддержки. Полная поддержка (когда можно писать и для ядра и для периферии) и частичная поддержка (не поддерживается периферия). К первому относится только 3 микроконтроллера. От TI, стилярис какой-то и два микроконтроллера LPC. Ко второй группе поддерживаются практически все контроллеры ARM которые поддерживает ОСь keil RTE (в том числе и STM32).
Чтобы использовать полноценно этот модуль от LabVIEW. Нужно купить или самому распаять какой нить из контроллеров первой группы. От TI очень интересный чип тем, что он аппаратно поддерживает Ethernet.
Код он генерирует не очень оптимизированный. И нельзя именовать контроллы и переменные кирилицей. А так модуль заслуживает внимания, особенно если он получит дальнейшее развитие.
Если какие вопросы есть по нему пишите, отвечу.
0
Это все? Две лекции?
0
  • avatar
  • gadz
  • 15 января 2019, 20:12
А что ты хочешь? Просто студент или какая иная мартышка-выскочка и недоучка быстро выдохлась и утомилась (вполне возможно просто из-за элементарного отсутствия знаний, в т.ч. нормальных академических) ну и наконец сдулась. Это, кстати, вполне типично.
0
Нельзя так к молодому поколению относится, может он заболел, или не дай бог умер.
0
Слонёнок всё спрашивал и спрашивал, а попугай всё отвечал и отвечал, и в конце концов слонёнок сказал:
— Мне, попугай, теперь почти всё понятно. Мне теперь только одно непонятно: откуда ты, попугай, всё знаешь?
— Да уж знаю! — сказал попугай.
— Всё-всё?
— Всё! Всё!
Вокруг слонёнка и попугая лежали орехи, которые созрели и попадали с кокосовых пальм. Слонёнок посмотрел на эти орехи и спросил:
— Попугай, как ты думаешь, сколько тут орехов нападало?
— Куча! — сказал попугай, оглядевшись по сторонам. — Целая куча нападала.
— А сколько нужно орехов, — спросил слонёнок, — чтобы получилась куча?
— Куча — это когда много, — сказал попугай.
— А много — это сколько?
— Много — это много.
— Давай всё-таки разберёмся, — предложил слонёнок. — Десять орехов — это куча?
Слонёнок подобрал десять орехов и сложил их вместе. Попугай обошёл вокруг десяти орехов и осмотрел их с разных сторон. Потом он залез на орехи и поглядел на них сверху.
— Да! — сказал попугай. — Десять орехов — это куча!
Слонёнок подобрал ещё два ореха и положил их отдельно.
— А два? — спросил слонёнок.
Попугай подошёл к двум орехам и немножко рядом с ними постоял.
— Нет, — сказал попугай, — два — это не куча. Что это за куча, когда всего два ореха? Два — не куча!
Тогда слонёнок взял один орех от десяти и переложил его к двум орехам. Теперь у него с одной стороны получилось девять орехов, а с другой — три.
— Три ореха — это куча? — спросил слонёнок.
— Три — это тоже не куча, — сказал попугай, — всё равно мало.
— А девять? — спросил слонёнок.
— Девять — куча!
— А четыре? — спросил слонёнок.
— Не куча.
— А восемь?
— Куча.
— А пять?
— Не куча.
— А семь?
— Куча.
— Ну, а шесть орехов?
Спрашивая, слонёнок всё время брал орехи оттуда, где их было больше, и перекладывал туда, где было меньше. И вот теперь перед попугаем лежали две совершенно одинаковые кучки. По шесть орехов в к каждой.
— Не ку… — сказал попугай. — Нет. Ку… Или — не ку?.. Ку, ку! Тьфу! Что ты меня путаешь?! — закричал он.
— Ничего я не путаю, — обиделся слонёнок. — Ты сказал, что пять орехов — это ещё не куча, а семь — уже куча. Вот я и спрашиваю: шесть орехов — это куча или не куча?
Попугай немного помолчал, а потом сказал:
— Нда!
— Значит, «много» от «мало» никак не отличить? — спросил слонёнок.
— Да нет, — сказал попугай, — отличить можно.
— Как?
— Очень просто. Мало — это когда всё съел и ещё хочется. А много — это когда уже больше не хочется.
И тут из зарослей выскочила мартышка.
— Как вам не стыдно! — закричала она. — Вы тут сидите, а я вас там ищу.
— Надо было искать не там, — заметил попугай, — надо было искать тут.
— Вы тут сидите, — возмущённо сказала мартышка, — а там удава надо спасать.
— От чего спасать? — удивились попугай и слонёнок.
— От болезни. Удав очень болен. Он уже никогда не сможет ходить! — Мартышка всхлипнула. — Он сам сказал!
— Сам сказал? — испугался слонёнок.
— Сам! — подтвердила мартышка. — Скорей! Надо что-то делать!
— Что же мы тут стоим?! — воскликнул попугай.
И все трое кинулись бежать.
0
Не забудь на утренник со своим выступлением пригласить.
0
Да ладно, расслабься,
все события и персонажи вымышленные, любые совпадения случайны.
:)
Вообще то середина 70х прошлого века, золотое время программирования,
персонажи размышляют над проблемой сколько выделить динамической памяти под кучу.
Опять же они же изобрели стандартную единица си измерения «в попугаях».
0
Посоветуй бесплатные курсы labview.
0
Рейган с нами возится,
да чтоб он был здоров,
кормит одевает обувает,
сделал бы еще он нам бесплатных докторов,
но такого в жизни не бывает!
:)
0
бесплатные курсы labview
Современному школьнику/студенту, вместо того, чтобы узнать где_какие_кнопки_тыкать_в_компе, лучше для начала БЕСПЛАТНО скачать из сети и прочитать научно-популярную книжку Рихарда Куранта «Что такое математика» (ее можно читать не напрягая особо мозгов, как беллетристику — лежа на диване).

А затем уже, можно прочитать весьма годную книжку Николая Николаевича Лузина «Дифференциальное исчисление» 1961 года издания (тоже есть в СЕТИ и, ВНЕЗАПНО, — тоже за_бисплатно), у него же есть и продолжение под названием «Интегральное исчисление», тоже 1960-х годов издания. Ну и дальше, дальше, уже по накатанной дорожке и уже с некой начальной кинетической энергией, накопленной массы знаний…

А там смотришь, и необходимость знания того, где какие кнопки тыкать в labview, сама собой отсохнет или не будет столь остро актуальна.
0
Спасибо конечно, но это старье я читал, когда ты в школу ходил. Понимаю это написал бы старпер берди.
0
— Я последний раз на море была еще в маме.
— Представляешь, а я первый раз на море был еще в папе…
0
это старье я читал, когда ты в школу ходил
Вай малаца, капитальный красавчик ты, gadz! Э-э… а почему сам себя хвалишь — это не хорошо… Э-э… а может ты просто еще один киндервуд (коих здесь, есно, более 100%)?
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.