Labview готова програма з описом. Різні прийоми програмування у NI LabVIEW

Здраствуйте колеги!

У відносно невеликій статті я хотів би розповісти про мову програмування LabVIEW. Цей дуже цікавий продукт на жаль не користується широкою популярністю, і мені хотілося б певною мірою заповнити наявну прогалину.

Що ж таке LabVIEW?

LabVIEW - це один з основних продуктів компанії National Instruments. Насамперед треба відзначити, що LabVIEW - це абревіатура, яка розшифровується як Lab oratory V irtual I nstrumentation E ngineering W orkbench. Вже в назві простежується орієнтація на лабораторні дослідження, вимірювання та збирання даних. Справді, побудувати SCADA - систему в LabVIEW дещо простіше, ніж при використанні «традиційних» засобів розробки. У цій статті мені хотілося б показати, що можлива сфера застосування LabVIEW дещо ширша. Це принципово інша мова програмування, або якщо хочете ціла "філософія" програмування. Функціональна мова, що змушує трохи інакше мислити і часом надає фантастичні можливості для розробника. Чи є LabVIEW мовою програмування взагалі? Це спірне питання – тут немає стандарту, як, наприклад, ANSI C. У вузьких колах розробників ми говоримо, що пишемо мовою «G». Формально такої мови не існує, але в цьому і полягає принадність цього засобу розробки: від версії до версії в мову вводяться нові конструкції. Складно уявити, що в наступній реінкарнації Сі з'явиться, наприклад, нова структура для циклу. А у LabVIEW таке цілком можливо.
Втім, слід зазначити, що LabVIEW входить у рейтинг мов програмування TIOBE, займаючи на Наразітридцяте місце – десь між Прологом та Фортраном.

NI LabVIEW - історія створення

Компанія National Instruments була створена в 1976 році трьома засновниками - Джеффом Кодоски (Jeff Kodosky), Джеймсом Тручардом (James Truchard) та Біллом Новліним (Bill Nowlin) в американському місті Остін (Austin), штат Техас. Основною спеціалізацією компанії були інструментальні засоби для вимірювань та автоматизація виробництва.
Перша версія LabVIEW побачила світ через десять років після створення компанії – у 1986 році (це була версія для Apple Mac). Інженери NI вирішили кинути виклик «традиційним» мовам програмування та створили повністю графічне середовище розробки. Основним ідеологом графічного підходу став Джефф. Рік у рік випускалися нові версії. Першою платформою версії (включаючи Windows) була третя версія, випущена в 1993 році. Актуальною є версія 8.6, що вийшла минулого року.

В Остіні і по сьогоднішній день розташований головний офіс компанії. Сьогодні в компанії працюють майже чотири тисячі людей, а офіси знаходяться майже в сорока країнах (є також офіс і в Росії).

Моє знайомство з LabVIEW

Моє знайомство з LabVIEW відбулося майже десять років тому. Я почав працювати за новим контрактом, і мій тодішній шеф вручив мені пачку дисків зі словами «тепер ти працюватимеш на цьому». Я встановив LabVIEW (це була п'ята версія), і погравшись деякий час заявив, що на цьому нічого серйозного не зробити, вже краще я «по-старому» на Delphi ... На що він мені сказав - ти просто не розкуштував. Попрацюй тиждень-другий. Через деякий час я зрозумію, що ні на чому іншому, окрім LabVIEW, я вже писати не зможу. Я просто закохався в цю мову, хоч це й не було «кохання з першого погляду».

Взагалі кажучи, досить складно порівнювати графічну та текстову мови програмування. Це, мабуть, порівняння з розряду "PC" проти "MAC" або "Windows" проти "Linux" - можна сперечатися скільки завгодно, але суперечка абсолютно позбавлена ​​сенсу - кожна система має право на існування і у кожної знайдуться як прихильники так і противники, крім того, у кожного продукту своя ніша. LabVIEW – лише інструмент, хоча й дуже гнучкий.

То що таке LabVIEW?

LabVIEW - це платформа графічне середовище розробки додатків. LabVIEW – у принципі універсальна мова програмування. І хоча цей продукт часом тісно пов'язаний з апаратним забезпеченням National Instruments, проте він не пов'язаний з конкретною машиною. Існують версії Windows, Linux, MacOS. Вихідні тексти переносяться, а програми виглядатимуть однаково у всіх системах. Код, згенерований LabVIEW, також може бути також виконаний на Windows Mobileабо PalmOS (заради справедливості треба відзначити, що підтримка PalmOS припинена, проте тут сама Palm більше винна). Ця мова може успішно використовуватися для створення великих систем, для обробки текстів, зображень і роботи з базами даних.

LabVIEW – дуже високорівнева мова. Однак ніщо не заважає включати «низькорівневі» модулі до LabVIEW-програм. Навіть якщо ви хочете використовувати асемблерні вставки - це також можливо, треба лише згенерувати DLL і вставити дзвінки в код. З іншого боку, високорівнева мова дозволяє запросто робити дуже нетривіальні операції з даними, на які в звичайній мові могли піти багато рядків (якщо не десятки рядків) коду. Втім, заради справедливості слід зазначити, що деякі операції низькорівневих мов (наприклад, роботу з покажчиками), не так просто реалізувати в LabVIEW через його «високрівневість». Зрозуміло, мова LabVIEW включає основні конструкції управління, що мають аналоги і в «традиційних» мовах:

  • змінні (локальні чи глобальні)
  • розгалуження (case structure)
  • For – цикли з перевіркою завершення та без.
  • While – цикли
  • Угруповання операцій.

LabVIEW – програма та можливості мови

У LabVIEW розроблювані програмні модуліназиваються Virtual Instruments (Віртуальні Інструменти) або VI. Вони зберігаються у файлах із розширенням *.vi. VIs – це цегла, з яких складається LabVIEW – програма. Будь-яка LabVIEW програма містить щонайменше один VI. У термінах мови Сі можна досить сміливо провести аналогію з функцією з тією різницею, що в LabVIEW одна функція міститься в одному файлі (можна також створювати бібліотеки інструментів). Зрозуміло, один VI може бути викликаний з іншого VI. У принципі кожен VI складається з двох частин – Блок-Діаграма (Block Diagram) та Передня Панель (Front Panel). Блок-діаграма – це програмний код(Точніше візуальне графічне представлення коду), а Передня панель - це інтерфейс. Ось як виглядає класичний приклад Hello, World!

В основі LabVIEW лежить парадигма потоків даних. У наведеному прикладі константа і термінал індикатора з'єднані між собою лінією. Ця лінія називається Wire. Можна назвати її «дротом». По дротах передаються дані від одних елементів іншим. Уся ця концепція називається Data Flow. Суть Блок Діаграми – це вузли (ноди), виходи одних вузлів приєднані до входів інших вузлів. Вузол розпочне виконання лише тоді, коли прибудуть усі необхідні для роботи дані. На діаграмі вгорі дві ноди. Одна з них – константа. Цей вузол самодостатній – він починає виконання негайно. Другий вузол – індикатор. Він відобразить дані, які передає константа (але не відразу, як тільки дані прибудуть від константи).

Ось трохи більше складний приклад: додавання та множення двох чисел У традиційних мовах ми напишемо щось на зразок

Inta, b, sum, mul;
//...
sum = a + b;
mul = a * b;

Ось як це виглядає в LabVIEW:

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

А ось як виглядають while for циклита if / then / else структура:

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

LabVIEW включає багаті набори елементів для побудови інтерфейсів користувача. На що швидко «накидалися» інтерфейси в Дельфі, а в LabVIEW цей процес відбувається ще швидше.

Стандартне постачання LabVIEW включає також блоки для роботи з ini файлами, реєстром, функції для роботи з двійковими і тестовими файлами, математичні функції, потужні інструменти для побудови графіків (а куди ж без цього в лабораторії-то), а на додаток до вже згаданої можливості викликів DLL LabVIEW дозволяє працювати з ActiveX компонентами і.net. Починаючи з восьмої версії в LabVIEW була додана підтримка класів – мова стала об'єктно-орієнтованою. Реалізовану підтримку не можна назвати повною, проте основні риси об'єктно-орієнтованих мов – спадкування та поліморфізм присутні. Також функціональність мови можна розширити додатковими модулями, наприклад, NI Vision Toolkit – для обробки зображень та машинного зору та інші. А за допомогою модуля Applcation Builder можна згенерувати exe-файл, що виконується. За допомогою Internet Toolkit можна працювати з ftp серверами, За допомогою Database Connectivity Toolkit - з базами даних і т.д.

Часто можна почути думку, що графічний кодпогано читаємо. Справді, з незвички велика кількість іконок і провідників дещо шокує. Також розробники-початківці створюють програми-«простирадла» і програми-«спагетті». Однак досвідчений LabVIEW-розробник ніколи не створить діаграм, що перевищують розмір екрану, навіть якщо програма складається із сотень модулів. Добре розроблена програма фактично «самодокументується», оскільки в основі лежить графічне уявлення.

Досить довгий час, програмуючи на LabVIEW, я був у повній впевненості, що LabVIEW – це інтерпретатор і блок-діаграми постійно інтерпретуються ядром. Після розмов із інженерами NI з'ясувалося, що це не так. LabVIEW – це компілятор (якість кодогенерації, втім залишає бажати кращого). Натомість компіляція відбувається «на льоту» - будь-якої миті розробки програма завжди готова до запуску. Також LabVIEW-код може бути скомпільований у повноцінний файл, який може бути запущений на комп'ютері без встановленої LabVIEW (правда він вимагає LabVIEW Run-Time). Також можна зібрати інсталяційний пакет-інсталятор, сторонніх утиліттипу InstallShield не потрібно.

Подальший і детальніший опис можливостей пакета виходить за рамки цієї статті, я ж просто пропоную спробувати (посилання наведені нижче). Як говорили великі «… єдиний спосіб освоїти нова мовапрограмування – писати на ньому програми». Ну а досвідчені програмісти зможуть екстраполювати отримані знання на власні потреби.

Практично у всіх розробників пристроїв на мікроконтролерах, будь то любителі або професіонали, рано чи пізно виникає необхідність підключити мікроконтролерний девайс до його "старшого брата", а саме до PC. Ось тоді і постає питання, а який софт використовувати для обміну з мікроконтролером, аналізувати та обробляти отримані від нього дані? Часто для обміну МК з комп'ютером використовують інтерфейс та протокол RS232 – старий добрий COM порту тій чи іншій реалізації.

На стороні комп'ютера використовують різні термінальні програми, яких сотні. Але ці програми забезпечують лише прийом та передачу інформації. Як обробляти і візуалізувати її в наочній формі важко.

Деякі пишуть подібне ПЗ самостійно якоюсь мовою програмування (Delphi, C++), наділяючи необхідним функціоналом. Але це завдання не з легких, потрібно знати, крім самої мови, пристрій операційної системи, способи роботи з комунікаційними портами, безліч інших технічних тонкощів, які відволікають від головного реалізації алгоритму програми. Загалом, бути попутним ще Windows/Unix програмістом.

З огляду на цих підходів різко відрізняється концепція віртуальних приладів (vi). У цій статті йтиметься про програмному продукті LabView фірми Nationals Instruments. Я тільки починаю освоювати цей чудовий продукт, тому можу припускатися неточностей та помилок. Фахівці виправлять:-)) Що таке LabView?

LabView – це середовище розробки та платформа для виконання програм, створених графічною мовою програмування G фірми National Instruments.

Говорячи простою мовою, LabView — Це середовище створення програм для завдань збору, обробки, візуалізації інформації від різних приладів, лабораторних установок тощо. А також для управління технологічними процесами та пристроями. Однак за допомогою LabView можна створювати цілком звичайне прикладне ПЗ. У мене немає мети докладно описувати цей продукт та роботу з ним. За LabView написані тисячі сторінок чудової документації та сотні книг. В інтернеті повно ресурсів, присвячених LabView, на яких можна отримати відповіді на всі запитання.

Мета статті - показати наскільки просто і зручно, в порівнянні з традиційним програмуванням, можна створювати додатки для ПК і яку силу несе LabView. (Насправді спірно, тому що в традиційному програмуванні, на тій же Delphi зробити не складніше. І за ефективністю навряд чи гірше, якщо не краще. Але для цього дельфу треба набагато довше вивчати. ​​Тут же все швидко і зрозуміло майже відразу Пару методичок проштудіював і вперед городити циферблати всякі.Так що для програмістів воно як собаці п'ята нога, а ось таким далеким від компа товаришам як я - саме те.Я колись, за півгодини, вперше побачивши LabView, за тоненькою методичкою створив звірську систему керування поливом та опаленням для конопляної теплиці.З ПІД регуляторами всякими.Вивів на потенціометри та датчики лабораторного стенду, що стояв у нашому технарі і запустив цей пекельний агрегат.Причому все запрацювало відразу, без налагодження.До речі, на LabView працює вся апаратура адронного колла а також дуже багато наукової апаратури.Адже більшості електронників чуже програмування для PC, чи не так? Ось це ми спробуємо виправити. Щоб не вивчати сферичних вакуумних коней, поставимо собі і реалізуємо просте завдання. Завдання справді просте, але основі її можна зрозуміти основні принципи програмування в LabView. Ми будемо використовувати версію LabView 2010. Для інших версій відмінності будуть мінімальні.

Завдання
Ми маємо плату з мікроконтролером AVR, з'єднану з комп'ютером за RS232. У контролер залита прошивка, згідно з якою контролер вимірює значення напруги на одному з входів АЦП, і передає код АЦП (від 0 до 1023) комп'ютер по послідовному каналу. Необхідно написати програму для ПК, яка прийматиме потік даних від АЦП, відображати код АЦП, перетворювати код АЦП на значення напруги у вольтах, відображати значення напруги у вольтах, будувати графік зміни напруги в часі.

Ну, напевно, вистачить лірики, почнемо мабуть!

Отже нам знадобиться для роботи:

  • Власне сама LabView. Можна завантажити із сайту NI тріал версію: http://www.ni.com/trylabview/. Також без проблем нагуглюється піратська версія. До речі, на rutracker.org, крім прорви піратських, лежить і версія під Linux на яку реєстрація начебто не потрібна взагалі. NI вирішила піти назустріч опенсорцю?
  • Також обов'язково потрібно завантажити компонент NI VISA. Без цієї програми LabView не побачить COM порт на комп'ютері. VISA містить функції для роботи з комунікаційними портами і багато чого ще. Завантажити її можна з joule.ni.com. Встановлюємо LabView та VISA. Установка цього ПЗ стандартна, якихось особливостей немає.

Насамперед нам потрібно переконатися, що VISA знайшла у системі COM порт і коректно з ним працює. Перевірити це можна так: запускаємо програму Measurement & Automation. Вона ставиться разом із LabView. Якщо вона не встановилася, можна встановити вручну. На диску (образ з LabView вона є).

Отримуємо ось таку штуку:


Тож ми маємо. Робоча область складається з двох великих панелей Front Panel та Block Diagram. На лицьовій панелі ми складатимемо інтерфейс нашої програми, використовуючи елементи управління з панелі Controls. Ці елементи є звичні нам ручки змінних резисторів, світлодіоди, кнопки, стрілочні прилади, екран осцилографа і т.п. Вони служать для введення інформації в програму та відображення результатів виконання. На панелі Block Diagram розташований безпосередньо програмний код. Тут треба трохи відступити та пояснити принцип програмування на LabView. Невеликий приклад. Прийнято роботу над прогою розпочинати з оформлення інтерфейсу, а потім реалізації алгоритму роботи на блок-діаграмі. Зробимо найпростішу прогу множення двох чисел. Для цього розмістимо на лицьовій панелі шляхом перетягування три елементи керування, скажімо елементи Knob та Numeric Indicator для відображення результату.

Ок, тепер нам необхідно реалізувати власне множення. Переходимо на панель Block diagram і бачимо, що для кожного з наших контролів створився відповідний знак. Найкраще відразу перевести режим відображення у вигляді терміналів. Не буде так захаращуватися діаграма. Крім того, у терміналах видно тип даних, якими оперує той чи інший контрол. Для цього клацаємо ПКМ по значку та знімаємо галку View as icon. Вгорі на скрині контроль у вигляді терміналу, внизу та праворуч у вигляді іконки. Для того, щоб налаштувати вид на блок-діаграму у вигляді терміналів за замовчуванням, потрібно вибрати пункт меню Tools->Options, ліворуч вибрати Block diagram і зняти галку Place front panel terminals as icons. Дуже корисно вивести контекстну довідку. Вивести його можна комбінацією Ctrl+H. У цьому вікні відображається інформація про об'єкт, на якому на даний момент налагодиться курсор. Мега зручна річ.

Найважливішою концепцією програмування LabView є концепція потоків даних DataFlow. Суть така: На відміну від імперативних мов програмування, де оператори виконуються в порядку прямування, у LabView функції працюють лише якщо на всіх входах функції є інформація (кожна функція має вхідні та вихідні значення). Тільки тоді функція реалізує свій алгоритм, а результат спрямовує на вихід, який може бути використаний іншою функцією. Таким чином, в межах одного віртуального приладу функції можуть працювати незалежно один від одного.

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

Для з'єднання елементів на блок-діаграмі використовується інструмент Connect Wire із панелі Tools. Вибираємо його та малюємо наші з'єднання.

Як видно, нічого складного начебто немає. Але водночас LabView дозволяє вирішувати завдання будь-якої складності! Епт, система управління ВАК на ньому зроблена! Так то.

Ну а тепер займемося цікавішими речами, а саме зробимо наш найпростіший вольтметр, про який я говорив на самому початку.

Отже, що нам потрібно зробити. Спочатку потрібно налаштувати та проініціалізувати послідовний порт. Запустити безкінечний цикл. У циклі ми використовуємо функцію читання з порту та приймаємо інформацію. Перетворимо інфу для відображення на графіці, перераховуємо код АЦП значення напруги у вольтах. При виході із циклу закриваємо порт.
Так в інтерфейсі нашої проги не буде ніяких керуючих елементів крім кнопки Стоп, а буде лише відображення результату, ми зробимо так: спочатку створимо блок-діаграму, а потім додамо елементи, що відсутні, на лицьову панель. Хоча робити треба навпаки! Але в цьому випадку так зручніше.

На панелі блок-діаграми розміщуємо з палітри Structures елемент While Loop, це наш нескінченний цикл. Обводимо рамкою циклу область, достатню розміщення всередині алгоритму. У правому нижньому кутку є червона точка, клацнемо по ній ПКМ та оберемо Create Control. На лицьовій панелі ми відразу з'явиться кнопка Stop. При натисканні на ній наша прога завершиться.

Потрібно створити контроль для функції ініціалізації порту. Нам цілком вистачить двох – швидкість порту та ім'я порту. Так само як ми створювали константу для функції читання, створюємо контроли. ПКМ на потрібних входах функції ініціалізації та пункт

Create->Control.

Create->Control.

Нас цікавлять два входи: Visa resourse nameі Baud Rate(за замовчуванням 9600). Тапер перейдемо на лицьову панель і додамо необхідні компоненти, а саме екран відображення графіка та мітки для відображення коду АЦП та напруги у вольтах.
Відповідно це елементи Waweform Chart з палітри Graph та два елементи Numeric Indicator з палітри Numeric.

Повернемося до блок-діаграми і перемістимо елементи, що з'явилися, всередину циклу. Ми наближаємося до завершення! Єдине, нам потрібно ще перетворити рядок символів, що надходять із виходу функції Read до формату, який переварять наші індикатори. І ще продати найпростішу математику з перекладу коду АЦП у вольти. Нижче скріни лицьової панелі та блок-діаграми на даному етапі:



Для перетворення рядка ми скористаємося функцією Scan from string із панелі String. Поміщаємо її всередину циклу. Тепер математики. Для того щоб перетворити код АЦП на значення напруги у вольтах потрібно помножити код на величину опорної напруги (у моєму випадку це п'ять вольт) і значення розділити на 1023 (так як АЦП має розрядність 10 біт). Необхідні функції множення та поділу, а також константи (5 та 1023) розмістимо у циклі. Скріни кожного з'єднання робитиму не буду, бо і так картинок дофігу. Наведу фінальний скрін всіх з'єднань. Там все дуже просто.


Я думаю все зрозуміло, якщо питання запитуйте в коментах. Разом розберемося:-))) Тим часом прога готова.

Перейдемо до нашого інтерфейсу та трохи налаштуємо графік. Виділимо нижнє значення по осі Y і поставимо 0. Виділимо верхнє і поставимо 5. Таким чином, наша шкала по осі Y в діапазоні 0-5 вольт. Ну що, вибираємо COM порт, вводимо швидкість обміну, запускаємо по кнопці зі стрілкою нашу прогу і люто крутимо резистор на платі, непомітно спостерігаючи при цьому на екрані результат нашої праці. Клацаємо на кнопці Stop, щоб зупинити прогу.

А ще можна шматки об'єднувати у функціональні блоки, щоб вони не захаращували схему.

Практично у всіх розробників пристроїв на мікроконтролерах, будь то любителі або професіонали, рано чи пізно виникає необхідність підключити мікроконтролерний девайс до його "старшого брата", а саме до PC. Ось тоді і постає питання, а який софт використовувати для обміну з мікроконтролером, аналізувати та обробляти отримані від нього дані? Часто для обміну МК з комп'ютером використовують інтерфейс та протокол RS232 – старий добрий COM порт у тій чи іншій реалізації.

На стороні комп'ютера використовують різні термінальні програми, яких сотні. Але ці програми забезпечують лише прийом та передачу інформації. Як обробляти і візуалізувати її в наочній формі важко.

Деякі пишуть подібне ПЗ самостійно якоюсь мовою програмування (Delphi, C++), наділяючи необхідним функціоналом. Але це завдання не з легких, потрібно знати, крім самої мови, будову операційної системи, способи роботи з комунікаційними портами, безліч інших технічних тонкощів, які відволікають від головного - реалізації алгоритму програми. Загалом, бути попутним ще Windows/Unix програмістом.

З огляду на цих підходів різко відрізняється концепція віртуальних приладів (vi). У цій статті йтиметься про програмний продукт LabView фірми Nationals Instruments. Я тільки починаю освоювати цей чудовий продукт, тому можу припускатися неточностей та помилок. Фахівці виправлять:-)) Що таке LabView?

LabView - це середовище розробки та платформа для виконання програм, створених графічною мовою програмування G фірми National Instruments.

Говорячи простою мовою, LabView – це середовище створення програм для завдань збору, обробки, візуалізації інформації від різних приладів, лабораторних установок тощо. А також для управління технологічними процесами та пристроями. Однак за допомогою LabView можна створювати цілком звичайне прикладне ПЗ. У мене немає мети докладно описувати цей продукт та роботу з ним. За LabView написані тисячі сторінок чудової документації та сотні книг. В інтернеті повно ресурсів, присвячених LabView, на яких можна отримати відповіді на всі запитання.

Мета статті – показати наскільки просто і зручно, в порівнянні з традиційним програмуванням, можна створювати програми для ПК і яку міць несе у собі LabView. (Насправді спірно, тому що в традиційному програмуванні, на тій же Delphi зробити не складніше. І за ефективністю навряд чи гірше, якщо не краще. Але для цього дельфу треба набагато довше вивчати. ​​Тут же все швидко і зрозуміло майже відразу Пару методичок проштудіював і вперед городити циферблати всякі.Так що для програмістів воно як собаці п'ята нога, а ось таким далеким від компа товаришам як я - саме те.Я колись, за півгодини, вперше побачивши LabView, за тоненькою методичкою створив звірську систему керування поливом і опаленням для конопляної теплиці.З ПІД регуляторами всякими.Вивів на потенціометри та датчики лабораторного стенду, що стояв у нашому технарі і запустив цей пекельний агрегат.Причому все запрацювало відразу, без налагодження.До речі, на LabView працює вся апаратура адронного колла а також дуже багато наукової апаратури.Адже більшості електронників чуже програмування для PC, чи не так? Ось це ми спробуємо виправити. Щоб не вивчати сферичних вакуумних коней, поставимо собі і реалізуємо просте завдання. Завдання справді просте, але основі її можна зрозуміти основні принципи програмування в LabView. Ми будемо використовувати версію LabView 2010. Для інших версій відмінності будуть мінімальні.

Завдання
Ми маємо плату з мікроконтролером AVR, з'єднану з комп'ютером за RS232. У контролер залита прошивка, згідно з якою контролер вимірює значення напруги на одному з входів АЦП, і передає код АЦП (від 0 до 1023) комп'ютер по послідовному каналу. Необхідно написати програму для ПК, яка прийматиме потік даних від АЦП, відображати код АЦП, перетворювати код АЦП на значення напруги у вольтах, відображати значення напруги у вольтах, будувати графік зміни напруги в часі.

Ну, напевно, вистачить лірики, почнемо мабуть!

Отже нам знадобиться для роботи:

  • Власне сама LabView. Можна завантажити із сайту NI тріал версію: http://www.ni.com/trylabview/. Також без проблем нагуглюється піратська версія. До речі, на rutracker.org, крім прорви піратських, лежить і версія під Linux на яку реєстрація начебто не потрібна взагалі. NI вирішила піти назустріч опенсорцю?
  • Також обов'язково потрібно завантажити компонент NI VISA. Без цієї програми LabView не побачить COM порт на комп'ютері. VISA містить функції для роботи з комунікаційними портами і багато чого ще. Завантажити її можна з joule.ni.com. Встановлюємо LabView та VISA. Установка цього ПЗ стандартна, якихось особливостей немає.

Насамперед нам потрібно переконатися, що VISA знайшла у системі COM порт і коректно з ним працює. Перевірити це можна так: запускаємо програму Measurement & Automation. Вона ставиться разом із LabView. Якщо вона не встановилася, можна встановити вручну. На диску (образ з LabView вона є).

У лівій частині вікна бачимо обладнання, виявлене у системі. Серед іншого знаходимо наш COM порт. Справа є кнопка Open Visa Test Panel. За допомогою неї можна протестувати вибраний пристрій. У випадку з COM портом можна відправити або прийняти задану за замовчуванням або довільну послідовність символів. Якщо з портом все гаразд, можна розпочинати безпосередньо створення нашої програми.

Запускаємо LabView. У вікні Getting Started вибираємо пункт Blank Vi, тобто новий віртуальний прилад.

Отримуємо ось таку штуку:

Тож ми маємо. Робоча область складається з двох великих панелей Front Panel та Block Diagram. На лицьовій панелі ми складатимемо інтерфейс нашої програми, використовуючи елементи управління з панелі Controls. Ці елементи є звичні нам ручки змінних резисторів, світлодіоди, кнопки, стрілочні прилади, екран осцилографа і т.п. Вони служать для введення інформації в програму та відображення результатів виконання. На панелі Block Diagram розташований безпосередньо програмний код. Тут треба трохи відступити та пояснити принцип програмування на LabView. Невеликий приклад. Прийнято роботу над прогою розпочинати з оформлення інтерфейсу, а потім реалізації алгоритму роботи на блок-діаграмі. Зробимо найпростішу прогу множення двох чисел. Для цього розмістимо на лицьовій панелі шляхом перетягування три елементи керування, скажімо елементи Knob та Numeric Indicator для відображення результату.

Сформуємо інтерфейс як душа забажає, наприклад ось так:

Ок, тепер нам необхідно реалізувати власне множення. Переходимо на панель Block diagram і бачимо, що для кожного з наших контролів створився відповідний знак. Найкраще відразу перевести режим відображення у вигляді терміналів. Не буде так захаращуватися діаграма. Крім того, у терміналах видно тип даних, якими оперує той чи інший контрол. Для цього клацаємо ПКМ по значку та знімаємо галку View as icon. Вгорі на скрині контроль у вигляді терміналу, внизу та праворуч у вигляді іконки. Для того, щоб налаштувати вид на блок-діаграму у вигляді терміналів за замовчуванням, потрібно вибрати пункт меню Tools->Options, ліворуч вибрати Block diagram і зняти галку Place front panel terminals as icons. Дуже корисно вивести контекстну довідку. Вивести його можна комбінацією Ctrl+H. У цьому вікні відображається інформація про об'єкт, на якому на даний момент налагодиться курсор. Мега зручна річ.

Тепер необхідно додати на блок-діаграму функцію множення. Клацаємо ПКМ на блок-діаграмі та з палітри Numeric вибираємо функцію множення Multiply. Переносимо її на діаграму. Варто зауважити, що LabView має просто великий набір функцій. Це і різна математика, статистика, аналіз сигналів, PID регулювання, обробка відео, звуку та зображень. Усього не перерахуєш.

Найважливішою концепцією програмування LabView є концепція потоків даних DataFlow. Суть така: На відміну від імперативних мов програмування, де оператори виконуються в порядку прямування, у LabView функції працюють лише якщо на всіх входах функції є інформація (кожна функція має вхідні та вихідні значення). Тільки тоді функція реалізує свій алгоритм, а результат спрямовує на вихід, який може бути використаний іншою функцією. Таким чином, в межах одного віртуального приладу функції можуть працювати незалежно один від одного.

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

Для з'єднання елементів на блок-діаграмі використовується інструмент Connect Wire із панелі Tools. Вибираємо його та малюємо наші з'єднання.

Власне, можна запустити цю тупу програму на циклічне виконання і покрутити ручки, спостерігаючи результат множення.

Як видно, нічого складного начебто немає. Але водночас LabView дозволяє вирішувати завдання будь-якої складності! Епт, система управління ВАК на ньому зроблена! Так то.

Ну а тепер займемося цікавішими речами, а саме зробимо наш найпростіший вольтметр, про який я говорив на самому початку.

Отже, що нам потрібно зробити. Спочатку потрібно налаштувати та проініціалізувати послідовний порт. Запустити безкінечний цикл. У циклі ми використовуємо функцію читання з порту та приймаємо інформацію. Перетворимо інфу для відображення на графіці, перераховуємо код АЦП значення напруги у вольтах. При виході із циклу закриваємо порт.
Так в інтерфейсі нашої проги не буде ніяких керуючих елементів крім кнопки Стоп, а буде лише відображення результату, ми зробимо так: спочатку створимо блок-діаграму, а потім додамо елементи, що відсутні, на лицьову панель. Хоча робити треба навпаки! Але в цьому випадку так зручніше.

На панелі блок-діаграми розміщуємо з палітри Structures елемент While Loop, це наш нескінченний цикл. Обводимо рамкою циклу область, достатню розміщення всередині алгоритму. У правому нижньому кутку є червона точка, клацнемо по ній ПКМ та оберемо Create Control. На лицьовій панелі ми відразу з'явиться кнопка Stop. При натисканні на ній наша прога завершиться.

Тепер поза циклом ми повинні розмістити функції ініціалізації та закриття порту. Ліворуч ініціалізація, справа закриття. Знову ж таки клацаємо ПКМ і вибираємо функції Configure Port, Read і Close. Ці функції знаходяться на панелі Instrument I/O -> Serial. Функцію читання вміщуємо всередину циклу. З'єднуємо за допомогою котушки з проводами виходи та входи функцій. Для функції Read ми повинні встановити кількість байт, яку вона прийматиме. Натискаємо ПКМ на середньому вході функції Read і вибираємо Create->Constant, вводимо значення, наприклад 200. На даному етапі має вийде як на скрині.

Потрібно створити контроль для функції ініціалізації порту. Нам цілком вистачить двох – швидкість порту та ім'я порту. Так само як ми створювали константу для функції читання, створюємо контроли. ПКМ на потрібних входах функції ініціалізації та пункт

Create->Control.

Нас цікавлять два входи: Visa resourse nameі Baud Rate(за замовчуванням 9600). Тапер перейдемо на лицьову панель і додамо необхідні компоненти, а саме екран відображення графіка та мітки для відображення коду АЦП та напруги у вольтах.
Відповідно це елементи Waweform Chart з палітри Graph та два елементи Numeric Indicator з палітри Numeric.

Повернемося до блок-діаграми і перемістимо елементи, що з'явилися, всередину циклу. Ми наближаємося до завершення! Єдине, нам потрібно ще перетворити рядок символів, що надходять із виходу функції Read до формату, який переварять наші індикатори. І ще продати найпростішу математику з перекладу коду АЦП у вольти. Нижче скріни лицьової панелі та блок-діаграми на даному етапі:

Для перетворення рядка ми скористаємося функцією Scan from string із панелі String. Поміщаємо її всередину циклу. Тепер математики. Для того щоб перетворити код АЦП на значення напруги у вольтах потрібно помножити код на величину опорної напруги (у моєму випадку це п'ять вольт) і значення розділити на 1023 (так як АЦП має розрядність 10 біт). Необхідні функції множення та поділу, а також константи (5 та 1023) розмістимо у циклі. Скріни кожного з'єднання робитиму не буду, бо і так картинок дофігу. Наведу фінальний скрін всіх з'єднань. Там все дуже просто.

Я думаю все зрозуміло, якщо питання запитуйте в коментах. Разом розберемося:-))) Тим часом прога готова.

Перейдемо до нашого інтерфейсу та трохи налаштуємо графік. Виділимо нижнє значення по осі Y і поставимо 0. Виділимо верхнє і поставимо 5. Таким чином, наша шкала по осі Y в діапазоні 0-5 вольт. Ну що, вибираємо COM порт, вводимо швидкість обміну, запускаємо по кнопці зі стрілкою нашу прогу і люто крутимо резистор на платі, непомітно спостерігаючи при цьому на екрані результат нашої праці. Клацаємо на кнопці Stop, щоб зупинити прогу.

Як бачите, все досить просто. Цей приклад це лише мізерна частина всіх можливостей LabView. Якщо комусь допоможе ця стаття, буду радий. Тільки в коментах сильно не бийте я не профі. Ще один маленький трюк. Якщо діаграма стала схожою на Ктулху, можна спробувати скористатися кнопкою CleanUp Diagram. Вона наведе діаграму у більш-менш божеський вигляд, але користуватися треба обережно. Ось результат її роботи

А ще можна шматки об'єднувати у функціональні блоки, щоб вони не захаращували схему.

Здраствуйте колеги!

У відносно невеликій статті я хотів би розповісти про мову програмування LabVIEW. Цей дуже цікавий продукт на жаль не користується широкою популярністю, і мені хотілося б певною мірою заповнити наявну прогалину.

Що ж таке LabVIEW?

LabVIEW - це один з основних продуктів компанії National Instruments. Насамперед треба відзначити, що LabVIEW - це абревіатура, яка розшифровується як Lab oratory V irtual I nstrumentation E ngineering W orkbench. Вже в назві простежується орієнтація на лабораторні дослідження, вимірювання та збирання даних. Справді, побудувати SCADA - систему в LabVIEW дещо простіше, ніж при використанні «традиційних» засобів розробки. У цій статті мені хотілося б показати, що можлива сфера застосування LabVIEW дещо ширша. Це принципово інша мова програмування, або якщо хочете ціла "філософія" програмування. Функціональна мова, що змушує трохи інакше мислити і часом надає фантастичні можливості для розробника. Чи є LabVIEW мовою програмування взагалі? Це спірне питання – тут немає стандарту, як, наприклад, ANSI C. У вузьких колах розробників ми говоримо, що пишемо мовою «G». Формально такої мови не існує, але в цьому і полягає принадність цього засобу розробки: від версії до версії в мову вводяться нові конструкції. Складно уявити, що в наступній реінкарнації Сі з'явиться, наприклад, нова структура для циклу. А у LabVIEW таке цілком можливо.
Втім, слід зазначити, що LabVIEW входить у рейтинг мов програмування TIOBE, займаючи на даний момент тридцяте місце - десь між Прологом і Фортраном.

NI LabVIEW - історія створення

Компанія National Instruments була створена в 1976 році трьома засновниками - Джеффом Кодоски (Jeff Kodosky), Джеймсом Тручардом (James Truchard) та Біллом Новліним (Bill Nowlin) в американському місті Остін (Austin), штат Техас. Основною спеціалізацією компанії були інструментальні засоби для вимірювань та автоматизація виробництва.
Перша версія LabVIEW побачила світ через десять років після створення компанії – у 1986 році (це була версія для Apple Mac). Інженери NI вирішили кинути виклик «традиційним» мовам програмування та створили повністю графічне середовище розробки. Основним ідеологом графічного підходу став Джефф. Рік у рік випускалися нові версії. Першою платформою версії (включаючи Windows) була третя версія, випущена в 1993 році. Актуальною є версія 8.6, що вийшла минулого року.

В Остіні і по сьогоднішній день розташований головний офіс компанії. Сьогодні в компанії працюють майже чотири тисячі людей, а офіси знаходяться майже в сорока країнах (є також офіс і в Росії).

Моє знайомство з LabVIEW

Моє знайомство з LabVIEW відбулося майже десять років тому. Я почав працювати за новим контрактом, і мій тодішній шеф вручив мені пачку дисків зі словами «тепер ти працюватимеш на цьому». Я встановив LabVIEW (це була п'ята версія), і погравшись деякий час заявив, що на цьому нічого серйозного не зробити, вже краще я «по-старому» на Delphi ... На що він мені сказав - ти просто не розкуштував. Попрацюй тиждень-другий. Через деякий час я зрозумію, що ні на чому іншому, окрім LabVIEW, я вже писати не зможу. Я просто закохався в цю мову, хоч це й не було «кохання з першого погляду».

Взагалі кажучи, досить складно порівнювати графічну та текстову мови програмування. Це, мабуть, порівняння з розряду "PC" проти "MAC" або "Windows" проти "Linux" - можна сперечатися скільки завгодно, але суперечка абсолютно позбавлена ​​сенсу - кожна система має право на існування і у кожної знайдуться як прихильники так і противники, крім того, у кожного продукту своя ніша. LabVIEW – лише інструмент, хоча й дуже гнучкий.

То що таке LabVIEW?

LabVIEW - це платформа графічне середовище розробки додатків. LabVIEW – у принципі універсальна мова програмування. І хоча цей продукт часом тісно пов'язаний з апаратним забезпеченням National Instruments, проте він не пов'язаний з конкретною машиною. Існують версії Windows, Linux, MacOS. Вихідні тексти переносяться, а програми виглядатимуть однаково у всіх системах. Код, згенерований LabVIEW також може бути також виконаний на Windows Mobile або PalmOS (заради справедливості треба відзначити, що підтримка PalmOS припинена, проте тут сама Palm більше винна). Ця мова може успішно використовуватися для створення великих систем, для обробки текстів, зображень і роботи з базами даних.

LabVIEW – дуже високорівнева мова. Однак ніщо не заважає включати «низькорівневі» модулі до LabVIEW-програм. Навіть якщо ви хочете використовувати асемблерні вставки - це також можливо, треба лише згенерувати DLL і вставити дзвінки в код. З іншого боку, високорівнева мова дозволяє запросто робити дуже нетривіальні операції з даними, на які в звичайній мові могли піти багато рядків (якщо не десятки рядків) коду. Втім, заради справедливості слід зазначити, що деякі операції низькорівневих мов (наприклад, роботу з покажчиками), не так просто реалізувати в LabVIEW через його «високрівневість». Зрозуміло, мова LabVIEW включає основні конструкції управління, що мають аналоги і в «традиційних» мовах:

  • змінні (локальні чи глобальні)
  • розгалуження (case structure)
  • For – цикли з перевіркою завершення та без.
  • While – цикли
  • Угруповання операцій.

LabVIEW – програма та можливості мови

У LabVIEW програмні модулі називаються Virtual Instruments (Віртуальні Інструменти) або VI. Вони зберігаються у файлах із розширенням *.vi. VIs – це цегла, з яких складається LabVIEW – програма. Будь-яка LabVIEW програма містить щонайменше один VI. У термінах мови Сі можна досить сміливо провести аналогію з функцією з тією різницею, що в LabVIEW одна функція міститься в одному файлі (можна також створювати бібліотеки інструментів). Зрозуміло, один VI може бути викликаний з іншого VI. У принципі кожен VI складається з двох частин – Блок-Діаграма (Block Diagram) та Передня Панель (Front Panel). Блок-діаграма – це програмний код (точніше візуальне графічне уявлення коду), а Передня панель – це інтерфейс. Ось як виглядає класичний приклад Hello, World!

В основі LabVIEW лежить парадигма потоків даних. У наведеному прикладі константа і термінал індикатора з'єднані між собою лінією. Ця лінія називається Wire. Можна назвати її «дротом». По дротах передаються дані від одних елементів іншим. Уся ця концепція називається Data Flow. Суть Блок Діаграми – це вузли (ноди), виходи одних вузлів приєднані до входів інших вузлів. Вузол розпочне виконання лише тоді, коли прибудуть усі необхідні для роботи дані. На діаграмі вгорі дві ноди. Одна з них – константа. Цей вузол самодостатній – він починає виконання негайно. Другий вузол – індикатор. Він відобразить дані, які передає константа (але не відразу, як тільки дані прибудуть від константи).

Ось трохи складніший приклад: додавання та множення двох чисел. У традиційних мовах ми напишемо щось на зразок

Inta, b, sum, mul;
//...
sum = a + b;
mul = a * b;

Ось як це виглядає в LabVIEW:

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

А ось як виглядають while/for цикли та if/then/else структура:

Як уже згадувалося, всі елементи виконуватимуться паралельно. Вам не потрібно замислюватися над тим, як розпаралелити завдання на кілька потоків, які можна виконувати паралельно на кількох процесорах. В останніх версіях можна навіть явно вказати на якому з процесорів повинен виконуватися той чи інший while-цикл. Зараз існують надбудови і для текстових мов, що дозволяють просто домогтися підтримки багатопроцесорних систем, але так просто, як на LabVIEW, це ніде не реалізовано. (ну ось, я все ж таки скотився на порівняння з текстовими мовами). Якщо вже ми заговорили про багатопоточність, то треба також відзначити, що у розпорядженні розробника багатий вибір інструментів для синхронізації потоків - семафори, черги, рандеву, і т.д.

LabVIEW включає багаті набори елементів для побудови інтерфейсів користувача. На що швидко «накидалися» інтерфейси в Дельфі, а в LabVIEW цей процес відбувається ще швидше.

Стандартне постачання LabVIEW включає також блоки для роботи з ini файлами, реєстром, функції для роботи з двійковими і тестовими файлами, математичні функції, потужні інструменти для побудови графіків (а куди ж без цього в лабораторії-то), а на додаток до вже згаданої можливості викликів DLL LabVIEW дозволяє працювати з ActiveX компонентами і.net. Починаючи з восьмої версії в LabVIEW була додана підтримка класів – мова стала об'єктно-орієнтованою. Реалізовану підтримку не можна назвати повною, проте основні риси об'єктно-орієнтованих мов – спадкування та поліморфізм присутні. Також функціональність мови можна розширити додатковими модулями, наприклад, NI Vision Toolkit – для обробки зображень та машинного зору та інші. А за допомогою модуля Applcation Builder можна згенерувати exe-файл, що виконується. За допомогою Internet Toolkit можна працювати з FTP серверами, за допомогою Database Connectivity Toolkit - з базами даних і т.д.

Часто можна почути думку, що графічний код читаємо погано. Справді, з незвички велика кількість іконок і провідників дещо шокує. Також розробники-початківці створюють програми-«простирадла» і програми-«спагетті». Однак досвідчений LabVIEW-розробник ніколи не створить діаграм, що перевищують розмір екрану, навіть якщо програма складається із сотень модулів. Добре розроблена програма фактично «самодокументується», оскільки в основі лежить графічне уявлення.

Досить довгий час, програмуючи на LabVIEW, я був у повній впевненості, що LabVIEW – це інтерпретатор і блок-діаграми постійно інтерпретуються ядром. Після розмов із інженерами NI з'ясувалося, що це не так. LabVIEW – це компілятор (якість кодогенерації, втім залишає бажати кращого). Натомість компіляція відбувається «на льоту» - будь-якої миті розробки програма завжди готова до запуску. Також LabVIEW-код може бути скомпільований у повноцінний файл, який може бути запущений на комп'ютері без встановленої LabVIEW (правда він вимагає LabVIEW Run-Time). Також можна зібрати інсталяційний пакет-інсталятор, сторонніх утиліт типу InstallShield при цьому не потрібно.

Подальший і детальніший опис можливостей пакета виходить за рамки цієї статті, я ж просто пропоную спробувати (посилання наведені нижче). Як говорили великі «…єдиний спосіб освоїти нову мову програмування – писати нею програми». Ну а досвідчені програмісти зможуть екстраполювати отримані знання на власні потреби.



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

Що таке прийом програмування

Термін «прийом програмування» поєднує у собі вибір різних мов програмування, обчислювальних моделей, рівнів абстракції, методів роботи з кодом та уявлення алгоритмів. Протягом багатьох років National Instruments розвивала функціонал LabVIEW, щоб забезпечити підтримку більшої кількості різних прийомів програмування.


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

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



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

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

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


Рис.2. У цьому прикладі відбувається додавання A та B, множення отриманої суми на C та відображення результату


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

Незважаючи на те, що мова G дозволяє задавати тип даних у явному вигляді, одна з істотних відмінностей цієї мови від інших – це наявність провідників, що виконують функції змінних. Замість передавати змінні між функціями, передача даних визначається з'єднаннями провідників. З іншого боку, у мові G присутні стандартні для інших мов конструкції, такі як умовні цикли, цикли з лічильником, структури вибору, функції зворотного виклику та логічні функції.

Інтерактивне налаштування як основа програмування
У 2003 році National Instruments випустила NI LabVIEW 7 Express, в якому вперше з'явилася технологія Експресних Віртуальних Приладів (експрес-ВП) – технологія, покликана ще більше спростити процес розробки алгоритмів програми. На відміну від звичайних ВП, експрес-ВП є абстрактними структурами мови, що реалізують прийом програмування, заснований на інтерактивному налаштуванні компонентів.


Рис.3. Палітра Експрес-ВП, розміщення Експрес-ВП на блок-діаграмі та відображення Експрес-ВП у режимі піктограми


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

Як приклад розглянемо завдання введення даних реалізації їх програмного аналізу. LabVIEW дозволяє дуже легко здійснювати взаємодію з різним обладнанням, оскільки включає драйвери для тисяч пристроїв. Завдання збору даних може бути реалізована не тільки конструкцією з кількох ВП, але й простішим варіантом - експрес-ВП.

Достатньо вказати в налаштуваннях експрес-ВП DAQ Assistance канали читання/запису та налаштувати такі параметри як частота дискретизації, шкалювання, синхронізація та тригери. Крім того, експрес-ВП дозволяє попередньо зібрати дані з пристрою для перевірки правильності вибраних налаштувань збору даних.


Рис.4. Експрес-ВП DAQ Assistant Express VI значно спрощує налаштування синхронізації запуску та параметрів каналів



Рис.5. Код мовою G, еквівалентний експрес-ВП DAQ Assistant


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

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

Існує кілька способів роботи з MathScript у LabVIEW. Для роботи зі сценаріями в інтерактивному режимі використовується вікно MathScript, показане на мал. 6


Рис.6. Інтерактивна розробка текстових алгоритмів у вікні MathScript


Щоб використовувати сценарії *.m у програмі LabVIEW та поєднати можливості текстового та графічного програмування, слід використовувати вузол MathScript, який зображений на рис.7. Використання вузла MathScript дозволяє впровадити текстові алгоритми в код ВП та використовувати графічні можливості інтерфейсу для керування параметрами сценарію (кнопки, слайдери, регулятори, графіки та інші елементи).


Рис.7. Вузол MathScript забезпечує просте використання сценаріїв.m у коді мовою G


Модуль LabVIEW MathScript RT має власний обробник сценаріїв *.m і не вимагає встановлення стороннього програмного забезпечення. Використання вузла MathScript дозволяє об'єднати в одному додатку переваги текстових алгоритмів, високий рівеньінтеграції LabVIEW з обладнанням, інтерактивний інтерфейс користувача та інші прийоми програмування, що розглядаються у цій статті.

Об'єктно-орієнтоване програмування
Об'єктно-орієнтоване програмування одна із найпопулярніших видів програмування. Цей підхід дозволяє об'єднати безліч розрізнених компонентів у програмі на єдині класи об'єктів. Визначення класу містить характеристики об'єкта та опис дій, які об'єкт може здійснювати, зазвичай звані властивостями та методами. Класи можуть мати нащадків, які успадковують властивості та методи та можуть перевизначати їх або додавати нові.


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


Використання ООП у LabVIEW стало можливим, починаючи з версії 8.2

Основні переваги цього підходу такі:

  • . Інкапсуляція: Інкапсуляція - це об'єднання даних та методів у клас таким чином, що доступ до них здійснюється лише через ВП, які є членами класу. Такий підхід дозволяє відокремити ділянки коду та гарантувати, що їх зміна не вплине на код решти програми.
  • . Спадкування: Спадкування дозволяє використовувати наявні класи як основу для опису нових класів. При створенні нового класу, він успадковує типи даних та ВП члени класу і, таким чином, реалізує властивості та методи батьківського класу. Також можна додати власні ОП для зміни функціональності класу.
  • . Динамічна диспетчеризація: Визначення методів можливе за допомогою кількох однойменних ВП в ієрархії класів. Такий спосіб називається динамічною диспетчеризацією, оскільки рішення про те, який саме ВП буде викликаний приймається на етапі виконання програми.
Ці особливості ООП дозволяють зробити код більш зрозумілим та масштабованим, а також, у разі потреби, обмежити доступ до ОП.

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

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


Рис. 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 додає до функціоналу звичайних діаграм станів можливість організації ієрархічної вкладеності та паралельного виконання. Слід зазначити, що діаграми станів дозволяють описати реакцію системи на події, що робить їх дуже зручним інструментом розробки реактивних систем, наприклад, вбудованих пристроїв, систем управління та складних інтерфейсів користувача.


Рис. 10. Модуль LabVIEW Statechart описує систему з урахуванням діаграми станів.


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

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

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


Рис. 11. Вузол CLIP.


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

Інтеграція 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.



Завантаження...
Top