Labview е готова програма с описание. Различни техники за програмиране в NI LabVIEW

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

В сравнително кратка статия бих искал да говоря за езика за програмиране LabVIEW. Този много интересен продукт, за съжаление, не се радва на широка популярност и бих искал до известна степен да запълня съществуващата празнина.

Какво е LabVIEW?

LabVIEW е един от водещите продукти на National Instruments. На първо място, трябва да се отбележи, че LabVIEW е съкращение, което означава лабораторияораторско изкуство Vвиртуален азинструментариум динженерство Уоркбенч. Още в името може да се проследи ориентацията към лабораторни изследвания, измервания и събиране на данни. Наистина изграждането на SCADA система в LabVIEW е малко по-лесно от използването на "традиционни" инструменти за разработка. В тази статия бих искал да покажа, че възможният обхват на LabVIEW е малко по-широк. Това е коренно различен език за програмиране или ако искате цяла "философия" на програмиране. Функционален език, който ви кара да мислите различно и понякога предоставя абсолютно фантастични възможности за програмиста. Изобщо LabVIEW език за програмиране ли е? Това е спорен въпрос - тук няма стандарт, като например ANSI C. В тесни кръгове от разработчици казваме, че пишем на езика "G". Формално такъв език не съществува, но това е красотата на този инструмент за разработка: от версия на версия все повече и повече нови конструкции се въвеждат в езика. Трудно е да си представим, че в следващото прераждане на C, например, ще се появи нова структура за for-цикъла. А в LabVIEW това е напълно възможно.
Все пак трябва да се отбележи, че LabVIEW е включен в класацията на езиците за програмиране на TIOBE, заемайки този моменттридесетото място е някъде между Prologue и Fortran.

NI LabVIEW - история на създаването

National Instruments е основана през 1976 г. от трима основатели - Джеф Кодоски, Джеймс Тручард и Бил Ноулин в американския град Остин, Тексас. Основната специализация на фирмата са средства за измерване и автоматизация на производството.
Първата версия на LabVIEW беше пусната десет години след основаването на компанията - през 1986 г. (това беше версията за Apple Mac). Инженерите на NI решиха да предизвикат "традиционните" езици за програмиране и създадоха напълно графична среда за разработка. Джеф стана основният идеолог на графичния подход. Година след година се пускат нови версии. Първата междуплатформена версия (включително Windows) беше версия 3, издадена през 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 включва основни контролни конструкции, които имат аналози в "традиционните" езици:

  • променливи (локални или глобални)
  • разклоняване (структура на случай)
  • For - цикли със и без проверка за прекъсване.
  • докато цикли
  • Групиращи операции.

LabVIEW - програмни и езикови функции

В LabVIEW, разработен софтуерни модулисе наричат ​​"Виртуални инструменти" (Virtual Instruments) или по прост начин VI. Те се записват в *.vi файлове. VI са градивните елементи, които изграждат програма LabVIEW. Всяка програма LabVIEW съдържа поне един VI. По отношение на езика C можете съвсем спокойно да направите аналогия с функция, с единствената разлика, че в LabVIEW една функция се съдържа в един файл (можете също да създавате библиотеки с инструменти). От само себе си се разбира, че един VI може да бъде извикан от друг VI. По принцип всеки VI се състои от две части - блокова диаграма и преден панел. Блоковата схема е програмен код(по-точно визуално графично представяне на кода), а предният панел е интерфейсът. Ето как изглежда класически пример за Hello, World!:

В основата на LabVIEW е парадигмата на потока от данни. В горния пример константата и клемата на индикатора са свързани с линия. Тази линия се нарича Wire. Можете да го наречете "тел". Проводниците пренасят данни от един елемент към друг. Цялата тази концепция се нарича поток от данни. Същността на блоковата диаграма е възлите (възлите), изходите на някои възли са свързани с входовете на други възли. Възелът ще започне да се изпълнява само когато пристигнат всички данни, необходими за работа. В диаграмата по-горе има два възела. Една от тях е константа. Този възел е самодостатъчен - започва да се изпълнява незабавно. Вторият възел е индикатор. Той ще покаже данните, които константата предава (но не веднага, а веднага щом данните пристигнат от константата).

Ето още малко сложен пример: събиране и умножение на две числа. На традиционните езици бихме написали нещо подобно

int a, b, сума, mul;
//...
сума = a + b;
mul = a*b;

Ето как изглежда в LabVIEW:

Обърнете внимание, че събирането и умножението се извършват автоматично паралелно. На машина с два процесора и двата процесора ще бъдат активирани автоматично.

А ето как изглежда while / за бримкии if / then / else структура:

Както вече споменахме, всички елементи ще бъдат изпълнени паралелно. Не е нужно да мислите как да паралелизирате задача в множество нишки, които могат да работят паралелно на множество процесори. IN най-новите версииможете дори изрично да посочите на кой от процесорите трябва да се изпълни този или онзи цикъл while. Сега има добавки за текстови езици, които ви позволяват лесно да постигнете поддръжка многопроцесорни системи, но толкова просто, колкото в LabVIEW, това вероятно не се прилага никъде. (добре, все пак се подхлъзнах в сравнение с текстовите езици). Ако вече говорим за многонишковост, тогава трябва да се отбележи, че разработчикът има богат избор от инструменти за синхронизиране на нишки - семафори, опашки, рандеву и др.

LabVIEW включва богат набор от елементи за изграждане на потребителски интерфейси. Интерфейсите в Delphi бяха бързо „атакувани“ от какво, а в LabVIEW този процес е още по-бърз.

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

Често можете да чуете мнението, че графичен кодчетем лошо. Наистина, по навик, изобилието от икони и проводници е донякъде шокиращо. Също така, начинаещите разработчици създават "листови" програми и "спагети" програми. Въпреки това опитен разработчик на LabVIEW никога няма да създаде диаграми, по-големи от размера на екрана, дори ако програмата се състои от стотици модули. Една добре проектирана програма всъщност се „самодокументира“, тъй като вече е базирана на графично представяне.

Доста дълго време, докато програмирах в LabVIEW, бях напълно убеден, че LabVIEW е интерпретатор и блоковите диаграми постоянно се интерпретират от ядрото. След разговор с инженерите на NI се оказа, че това не е така. LabVIEW е компилатор (качеството на генериране на код обаче оставя много да се желае). Но компилирането се извършва "в движение" - по всяко време на разработката програмата винаги е готова за изпълнение. Също така кодът на LabVIEW може да бъде компилиран в пълноценен изпълним файл, който може да се изпълнява на компютър без инсталиран LabVIEW (въпреки че изисква LabVIEW Run-Time). Можете също да компилирате инсталационния пакет-инсталатор, помощни програми на трети странитипът InstallShield не е необходим.

Допълнително и по-подробно описание на функциите на пакета е извън обхвата на тази статия, но аз просто предлагам да го изпробвате (връзките са дадени по-долу). Както са казали великите „... единственият начин да овладееш нов езикпрограмиране - пишете програми върху него. Е, опитни програмисти ще могат да екстраполират получените знания за собствените си нужди.

Почти всички разработчици на устройства на микроконтролери, независимо дали са аматьори или професионалисти, рано или късно трябва да свържат устройство с микроконтролер към неговия „по-голям брат“, а именно компютър. Тогава възниква въпросът с какъв софтуер да обменяме с микроконтролера, да анализираме и обработваме получените от него данни? Често, за да обменят MK с компютър, те използват интерфейса и протокола RS232 - доброто старо COM портв едно или друго изпълнение.

От страна на компютъра се използват различни терминални програми, които са стотици. Но тези програми осигуряват само приемане и предаване на информация. Трудно е да се обработи и визуализира във визуална форма.

Някои хора пишат такъв софтуер сами на някакъв език за програмиране (Delphi, C ++), като им предоставят необходимата функционалност. Но тази задача не е лесна, трябва да знаете, освен самия език, устройството операционна система, начини за работа с комуникационни портове, много други технически тънкости, които отвличат вниманието от основното - изпълнението на програмния алгоритъм. Като цяло, бъдете Windows/Unix програмист по пътя.

На фона на тези подходи концепцията за виртуални инструменти (vi) рязко се различава. Тази статия ще говори за софтуерен продукт LabView от Nationals Instruments. Тепърва започвам да овладявам този прекрасен продукт, така че мога да допускам неточности и грешки. Специалистите ще коригират :-)) Всъщност какво е LabView?

LabView е среда за разработка и платформа за изпълнение на програми, написани на графичния програмен език G на National Instruments.

говорене обикновен език, LabView - Това е среда за създаване на приложения за задачи по събиране, обработка, визуализиране на информация от различни инструменти, лабораторни съоръжения и др. А също и за управление на технологични процеси и устройства. С помощта на LabView обаче можете да създадете съвсем обикновен приложен софтуер. Нямам за цел да описвам подробно този продукт и работата с него. LabView има хиляди страници отлична документация и стотици книги. Интернет е пълен с ресурси, свързани с LabView, където можете да намерите отговори на всички ваши въпроси.

Целта на статията е да покаже колко лесно и удобно, в сравнение с традиционното програмиране, можете да създавате приложения за компютър и каква мощ носи LabView. (Всъщност това е спорно, защото в традиционното програмиране, на същия Delphi, не е по-трудно да се направи. И по отношение на ефективността едва ли е по-лошо, ако не и по-добро. Но за това трябва да изучавате Delphi много по-дълго. Всичко е бързо и ясно почти веднага "Проучих няколко ръководства и напред, за да оградя всякакви циферблати. Така че за програмистите това е като петия крак на кучето, но за такива другари, толкова далеч от компютъра, колкото съм аз, това е. Веднъж, за половин час, когато за първи път видях LabView, изградих брутална система, използвайки тънък ръчен контрол на напояването и отоплението за конопена оранжерия. С всички видове PID контролери. Донесох до потенциометрите и сензорите на лабораторния стенд, който беше в нашият техник и пусна тази адска единица. И всичко заработи веднага, без отстраняване на грешки. Между другото, цялото оборудване на адронния колайдер работи на LabView, както и много научно оборудване. бележка DI HALT)В крайна сметка повечето инженери по електроника са чужди на програмирането за компютър, нали? Това се опитваме да поправим. За да не изучаваме сферични вакуумни коне, ние си поставяме и изпълняваме проста задача. Задачата е наистина проста, но въз основа на нея можете да разберете основните принципи на програмиране в LabView. Ще използваме LabView версия 2010. За другите версии разликите ще са минимални.

Задача
Имаме платка с AVR микроконтролер, свързан към компютър чрез RS232. Контролерът е зареден с фърмуер, според който контролерът измерва стойността на напрежението на един от входовете на ADC и предава кода на ADC (от 0 до 1023) към компютъра чрез сериен канал. Необходимо е да се напише компютърна програма, която да получава поток от данни от ADC, да показва кода на ADC, да преобразува кода на ADC в стойност на напрежение във волтове, да показва стойността на напрежението във волтове, да чертае промяната на напрежението във времето.

Е, може би стига с текстовете, може би да започнем!

И така, какво трябва да работим:

  • Всъщност самият 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 го има).

Получаваме нещо подобно:


И така, какво имаме. Работното пространство се състои от два големи панела Преден панел и Блокова диаграма. На предния панел ще съставим интерфейса на нашата програма, използвайки контроли от контролния панел. Тези елементи са познатите ни дръжки на променливи резистори, светодиоди, бутони, показалки, екран на осцилоскоп и др. Те служат за въвеждане на информация в програмата и извеждане на резултатите от изпълнението. В панела с блокова диаграма програмният код се намира директно. Тук трябва да се отдръпнем малко и да обясним принципа на програмиране в LabView. Малък пример. Обичайно е да се започне работа по програмата с дизайна на интерфейса и след това изпълнението на работния алгоритъм върху блоковата диаграма. Нека направим най-простата програма за умножение на две числа. За да направим това, ще поставим на предния панел чрез плъзгане три контроли, да речем елементите на копчето и цифровия индикатор, за да покажем резултата.

Добре, сега трябва да приложим действителното умножение. Отидете до панела с блокова диаграма и вижте, че за всеки от нашите контроли е създадена съответна икона. Най-добре е веднага да превключите режима на показване под формата на терминали. Диаграмата няма да е толкова претрупана. Освен това в терминалите се вижда типът на данните, с които работи този или онзи контрол. За да направите това, щракнете с десния бутон върху иконата и премахнете отметката от Преглед като икона. В горната част на екрана управлението е под формата на терминал, в долната част и вдясно под формата на икона. За да конфигурирате изгледа на блоковата диаграма като терминали по подразбиране, трябва да изберете елемента от менюто Инструменти->Опции, да изберете Блокова диаграма отляво и да премахнете отметката от Поставете терминалите на предния панел като икони. Много полезно за показване на контекстна помощ. Можете да го покажете с комбинацията Ctrl + H. Този прозорец показва информация за обекта, върху който в момента е поставен курсорът. Мега удобен артикул.

Най-важната концепция в програмирането на LabView е концепцията DataFlow. Изводът е следният: За разлика от императивните езици за програмиране, където операторите се изпълняват в последователен ред, в LabView функциите работят само ако има информация за всички входове на функции (всяка функция има входни и изходни стойности). Едва тогава функцията изпълнява своя алгоритъм и резултатът се изпраща към изход, който може да се използва от друга функция. По този начин в рамките на един и същи VI функциите могат да работят независимо една от друга.

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

За да свържете елементи на блокова диаграма, използвайте инструмента Connect Wire от панела с инструменти. Изберете го и начертайте нашите връзки.

Както можете да видите, изглежда, че няма нищо сложно. Но в същото време LabView ви позволява да решавате проблеми с всякаква сложност! Ept, системата за управление на TANK е направена на него! Така че.

Е, сега нека направим по-интересни неща, а именно ще направим нашия най-прост волтметър, за който говорих в самото начало.

И така, какво трябва да направим. Първо трябва да конфигурирате и инициализирате серийния порт. Стартирайте безкраен цикъл. В цикъла използваме функцията за четене от порта и получаване на информация. Нека преобразуваме информацията за показване на графиката, преизчислим ADC кода в стойността на напрежението във волтове. При излизане от цикъла затваряме порта.
Така че в интерфейса на нашата програма няма да има други контролни елементи освен бутона Stop, но ще има само показване на резултата, ще направим следното: първо ще създадем блокова диаграма и след това ще добавим липсващите елементи към предния панел. Въпреки че трябва да направите обратното! Но в този случай е по-удобно.

В панела с блокова диаграма поставяме елемента While Loop от палитрата Structures, това е нашият безкраен цикъл. Ограждаме областта с циклична рамка, достатъчна да се побере в алгоритъма. В долния десен ъгъл има червена точка, щракнете с десния бутон върху нея и изберете Създаване на контрола. Бутонът Stop веднага ще се появи на предния панел. Когато щракнете върху него, нашата програма ще приключи.

Трябва да създадете контроли за функцията за инициализация на порт. Две са ни достатъчни - скоростта на порта и името на порта. По същия начин, както създадохме константа за функцията за четене, ние създаваме контроли. RMB върху необходимите входове на функцията за инициализация и елемент

Създаване->Контрол.

Създаване->Контрол.

Интересуваме се от два входа: Име на ресурса на VisaИ Скорост на предаване(по подразбиране 9600). Сега нека отидем на предния панел и да добавим необходимите компоненти, а именно екрана за чертане на графиката и етикетите за показване на ADC кода и напрежението във волтове.
Съответно, това са елементи на Waveform Chart от палитрата Graph и два елемента Numeric Indicator от палитрата Numeric.

Нека се върнем към блоковата диаграма и преместим елементите, които са се появили вътре в цикъла. Пред завършване сме! Единственото нещо е, че все още трябва да преобразуваме низа от знаци, идващ от изхода на функцията Read, във формат, който нашите индикатори ще усвоят. И също така да се приложи най-простата математика за преобразуване на ADC кода във волтове. По-долу са екранни снимки на предния панел и включена блокова диаграма този етап:



За да конвертираме низ, ще използваме функцията Scan from string от палитрата String. Поставяме го вътре в цикъла. Сега математика. За да преобразувате ADC кода в стойност на напрежение във волтове, трябва да умножите кода по стойността на референтното напрежение (в моя случай това е пет волта) и да разделите получената стойност на 1023 (тъй като ADC има a 10-битов капацитет). Необходимите функции за умножение и деление, както и константи (5 и 1023) ще бъдат поставени в цикъл. Няма да правя екранни снимки на всяка връзка, защото вече има dofiga снимки. Ще дам последния екран на всички връзки. Там всичко е изключително просто.


Мисля, че всичко е ясно, ако имате въпроси, попитайте в коментарите. Нека да го разберем заедно :-))) Междувременно програмата е готова.

Нека да преминем към нашия интерфейс и да променим малко графиката. Изберете долната стойност на оста Y и я задайте на 0. Изберете горната стойност и я задайте на 5. Така нашата скала по оста Y е в диапазона от 0-5 волта. Е, избираме COM порта, въвеждаме обменния курс, стартираме нашата програма с помощта на бутона със стрелката и силно завъртаме резистора на платката, докато наблюдаваме резултата от нашата работа на екрана. Щракнете върху бутона Стоп, за да спрете програмата.

Можете също така да комбинирате части във функционални блокове, така че да не претрупват веригата.

Почти всички разработчици на устройства на микроконтролери, независимо дали са аматьори или професионалисти, рано или късно трябва да свържат устройство с микроконтролер към неговия „по-голям брат“, а именно компютър. Тогава възниква въпросът с какъв софтуер да обменяме с микроконтролера, да анализираме и обработваме получените от него данни? Често, за да обменят MK с компютър, те използват интерфейса и протокола RS232 - добрият стар COM порт в една или друга реализация.

От страна на компютъра се използват различни терминални програми, които са стотици. Но тези програми осигуряват само приемане и предаване на информация. Трудно е да се обработи и визуализира във визуална форма.

Някои хора пишат такъв софтуер сами на някакъв език за програмиране (Delphi, C ++), като им предоставят необходимата функционалност. Но тази задача не е лесна, трябва да знаете, освен самия език, устройството на операционната система, как да работите с комуникационни портове и много други технически тънкости, които отвличат вниманието от основното - изпълнението на програмата алгоритъм. Като цяло, бъдете Windows/Unix програмист по пътя.

На фона на тези подходи концепцията за виртуални инструменти (vi) рязко се различава. Тази статия ще се фокусира върху софтуерния продукт на Nationals Instruments LabView. Тепърва започвам да овладявам този прекрасен продукт, така че мога да допускам неточности и грешки. Специалистите ще коригират :-)) Всъщност какво е LabView?

LabView е среда за разработка и платформа за изпълнение на програми, написани на графичния програмен език G на National Instruments.

С прости думи LabView е среда за създаване на приложения за задачи по събиране, обработка, визуализиране на информация от различни инструменти, лабораторни настройки и др. А също и за управление на технологични процеси и устройства. С помощта на LabView обаче можете да създадете съвсем обикновен приложен софтуер. Нямам за цел да описвам подробно този продукт и работата с него. LabView има хиляди страници отлична документация и стотици книги. Интернет е пълен с ресурси, свързани с LabView, където можете да намерите отговори на всички ваши въпроси.

Целта на статията е да покаже колко лесно и удобно, в сравнение с традиционното програмиране, можете да създавате приложения за компютър и каква мощ носи LabView. (Всъщност това е спорно, защото в традиционното програмиране, на същия Delphi, не е по-трудно да се направи. И по отношение на ефективността едва ли е по-лошо, ако не и по-добро. Но за това трябва да изучавате Delphi много по-дълго. Всичко е бързо и ясно почти веднага Проучих няколко ръководства и напред да оградя всякакви циферблати.Така че за програмистите е като петия крак на кучето, но за такива другари далеч от компютър като мен, това е. Веднъж, на половин час, когато за първи път видях LabView, изградих брутална система, използвайки тънък ръчен контрол на напояването и отоплението за конопена оранжерия. С всички видове PID контролери. Донесох се до потенциометрите и сензорите на лабораторния стенд, който беше в нашия техник и стартира тази адска единица. И всичко заработи веднага, без отстраняване на грешки. Между другото, цялото оборудване на адронния колайдер работи на LabView, както и много научно оборудване. забележка DI HALT)В крайна сметка повечето инженери по електроника са чужди на програмирането за компютър, нали? Това се опитваме да поправим. За да не изучаваме сферични вакуумни коне, ние си поставяме и изпълняваме проста задача. Задачата е наистина проста, но въз основа на нея можете да разберете основните принципи на програмиране в LabView. Ще използваме LabView версия 2010. За другите версии разликите ще са минимални.

Задача
Имаме платка с AVR микроконтролер, свързан към компютър чрез RS232. Контролерът е зареден с фърмуер, според който контролерът измерва стойността на напрежението на един от входовете на ADC и предава кода на ADC (от 0 до 1023) към компютъра чрез сериен канал. Необходимо е да се напише компютърна програма, която да получава поток от данни от ADC, да показва кода на ADC, да преобразува кода на ADC в стойност на напрежение във волтове, да показва стойността на напрежението във волтове, да чертае промяната на напрежението във времето.

Е, може би стига с текстовете, може би да започнем!

И така, какво трябва да работим:

  • Всъщност самият 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. С него можете да тествате избраното устройство. В случай на COM порт, можете да изпращате или получавате по подразбиране или произволна последователност от знаци там. Ако всичко е наред с порта, можете да продължите директно към създаването на нашата програма.

Стартираме LabView. В прозореца Getting Started изберете Blank Vi, което означава нов виртуален инструмент.

Получаваме нещо подобно:

И така, какво имаме. Работното пространство се състои от два големи панела Преден панел и Блокова диаграма. На предния панел ще съставим интерфейса на нашата програма, използвайки контроли от контролния панел. Тези елементи са познатите ни дръжки на променливи резистори, светодиоди, бутони, показалки, екран на осцилоскоп и др. Те служат за въвеждане на информация в програмата и извеждане на резултатите от изпълнението. В панела с блокова диаграма програмният код се намира директно. Тук трябва да се отдръпнем малко и да обясним принципа на програмиране в LabView. Малък пример. Обичайно е да се започне работа по програмата с дизайна на интерфейса и след това изпълнението на работния алгоритъм върху блоковата диаграма. Нека направим най-простата програма за умножение на две числа. За да направим това, ще поставим на предния панел чрез плъзгане три контроли, да речем елементите на копчето и цифровия индикатор, за да покажем резултата.

Ще формираме интерфейса, както сърцето ни желае, например така:

Добре, сега трябва да приложим действителното умножение. Отидете до панела с блокова диаграма и вижте, че за всеки от нашите контроли е създадена съответна икона. Най-добре е веднага да превключите режима на показване под формата на терминали. Диаграмата няма да е толкова претрупана. Освен това в терминалите се вижда типът на данните, с които работи този или онзи контрол. За да направите това, щракнете с десния бутон върху иконата и премахнете отметката от Преглед като икона. В горната част на екрана управлението е под формата на терминал, в долната част и вдясно под формата на икона. За да конфигурирате изгледа на блоковата диаграма като терминали по подразбиране, трябва да изберете елемента от менюто Инструменти->Опции, да изберете Блокова диаграма отляво и да премахнете отметката от Поставете терминалите на предния панел като икони. Много полезно за показване на контекстна помощ. Можете да го покажете с комбинацията Ctrl + H. Този прозорец показва информация за обекта, върху който в момента е поставен курсорът. Мега удобен артикул.

Сега трябва да добавим функцията за умножение към блоковата диаграма. Щракнете с десния бутон върху блоковата диаграма и изберете функцията Multiply от палитрата Numeric. Нека го поставим на диаграма. Струва си да се отбележи, че LabView има просто огромен набор от функции. Това включва различна математика, статистика, анализ на сигнали, PID контрол, обработка на видео, звук и изображения. Не можете да изброите всичко.

Най-важната концепция в програмирането на LabView е концепцията DataFlow. Изводът е следният: За разлика от императивните езици за програмиране, където операторите се изпълняват в последователен ред, в LabView функциите работят само ако има информация за всички входове на функции (всяка функция има входни и изходни стойности). Едва тогава функцията изпълнява своя алгоритъм и резултатът се изпраща към изход, който може да се използва от друга функция. По този начин в рамките на един и същи VI функциите могат да работят независимо една от друга.

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

За да свържете елементи на блокова диаграма, използвайте инструмента Connect Wire от панела с инструменти. Изберете го и начертайте нашите връзки.

Това е всичко, можете да стартирате тази глупава програма за циклично изпълнение и да завъртите копчетата, наблюдавайки резултата от умножението.

Както можете да видите, изглежда, че няма нищо сложно. Но в същото време LabView ви позволява да решавате проблеми с всякаква сложност! Ept, системата за управление на TANK е направена на него! Така че.

Е, сега нека направим по-интересни неща, а именно ще направим нашия най-прост волтметър, за който говорих в самото начало.

И така, какво трябва да направим. Първо трябва да конфигурирате и инициализирате серийния порт. Стартирайте безкраен цикъл. В цикъла използваме функцията за четене от порта и получаване на информация. Нека преобразуваме информацията за показване на графиката, преизчислим ADC кода в стойността на напрежението във волтове. При излизане от цикъла затваряме порта.
Така че в интерфейса на нашата програма няма да има други контролни елементи освен бутона Stop, но ще има само показване на резултата, ще направим следното: първо ще създадем блокова диаграма и след това ще добавим липсващите елементи към предния панел. Въпреки че трябва да направите обратното! Но в този случай е по-удобно.

В панела с блокова диаграма поставяме елемента While Loop от палитрата Structures, това е нашият безкраен цикъл. Ограждаме областта с циклична рамка, достатъчна да се побере в алгоритъма. В долния десен ъгъл има червена точка, щракнете с десния бутон върху нея и изберете Създаване на контрола. Бутонът Stop веднага ще се появи на предния панел. Когато щракнете върху него, нашата програма ще приключи.

Сега, извън цикъла, трябва да поставим функциите за инициализиране и затваряне на порта. Инициализация отляво, затваряне отдясно. Отново щракнете с десния бутон и изберете функциите Configure Port, Read и Close. Тези функции се намират в палетата Instrument I/O –> Serial. Функцията за четене е поставена вътре в цикъла. Свързваме изходите и входовете на функции с помощта на бобина с проводници. За функцията Read трябва да посочим броя байтове, които тя ще приеме. Щракваме с десния бутон върху средния вход на функцията Read и избираме Create-> Constant, въвеждаме стойност, например 200. На този етап трябва да се окаже, както на екранната снимка.

Трябва да създадете контроли за функцията за инициализация на порт. Две са ни напълно достатъчни - скоростта на порта и името на порта. По същия начин, както създадохме константа за функцията за четене, ние създаваме контроли. RMB върху необходимите входове на функцията за инициализация и елемент

Създаване->Контрол.

Интересуваме се от два входа: Име на ресурса на VisaИ Скорост на предаване(по подразбиране 9600). Сега нека отидем на предния панел и да добавим необходимите компоненти, а именно екрана за чертане на графиката и етикетите за показване на ADC кода и напрежението във волтове.
Съответно, това са елементи на Waveform Chart от палитрата Graph и два елемента Numeric Indicator от палитрата Numeric.

Нека се върнем към блоковата диаграма и преместим елементите, които са се появили вътре в цикъла. Пред завършване сме! Единственото нещо е, че все още трябва да преобразуваме низа от знаци, идващ от изхода на функцията Read, във формат, който нашите индикатори ще усвоят. И също така да се приложи най-простата математика за преобразуване на ADC кода във волтове. По-долу са екранни снимки на предния панел и блокова диаграма на този етап:

За да конвертираме низ, ще използваме функцията Scan from string от палитрата String. Поставяме го вътре в цикъла. Сега математика. За да преобразувате ADC кода в стойност на напрежение във волтове, трябва да умножите кода по стойността на референтното напрежение (в моя случай това е пет волта) и да разделите получената стойност на 1023 (тъй като ADC има a 10-битов капацитет). Необходимите функции за умножение и деление, както и константи (5 и 1023) ще бъдат поставени в цикъл. Няма да правя екранни снимки на всяка връзка, защото вече има dofiga снимки. Ще дам последния екран на всички връзки. Там всичко е изключително просто.

Мисля, че всичко е ясно, ако имате въпроси, попитайте в коментарите. Нека да го разберем заедно :-))) Междувременно програмата е готова.

Нека да преминем към нашия интерфейс и да променим малко графиката. Изберете долната стойност на оста Y и я задайте на 0. Изберете горната стойност и я задайте на 5. Така нашата скала по оста Y е в диапазона от 0-5 волта. Е, избираме COM порта, въвеждаме обменния курс, стартираме нашата програма с помощта на бутона със стрелката и силно завъртаме резистора на платката, докато наблюдаваме резултата от нашата работа на екрана. Щракнете върху бутона Стоп, за да спрете програмата.

Както можете да видите, всичко е съвсем просто. Този пример е само малка част от всички възможности на LabView. Ако тази статия помогне на някого, ще се радвам. Просто не удряйте силно в коментарите, не съм професионалист. Още един малък трик. Ако диаграмата изглежда като Cthulhu, можете да опитате да използвате бутона CleanUp Diagram. Тя ще приведе диаграмата в повече или по-малко божествена форма, но трябва да се използва с повишено внимание. Ето резултата от нейния труд

Можете също така да комбинирате части във функционални блокове, така че да не претрупват веригата.

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

В сравнително кратка статия бих искал да говоря за езика за програмиране LabVIEW. Този много интересен продукт, за съжаление, не се радва на широка популярност и бих искал до известна степен да запълня съществуващата празнина.

Какво е LabVIEW?

LabVIEW е един от водещите продукти на National Instruments. На първо място, трябва да се отбележи, че LabVIEW е съкращение, което означава лабораторияораторско изкуство Vвиртуален азинструментариум динженерство Уоркбенч. Още в името може да се проследи ориентацията към лабораторни изследвания, измервания и събиране на данни. Наистина изграждането на SCADA система в LabVIEW е малко по-лесно от използването на "традиционни" инструменти за разработка. В тази статия бих искал да покажа, че възможният обхват на LabVIEW е малко по-широк. Това е коренно различен език за програмиране или ако искате цяла "философия" на програмиране. Функционален език, който ви кара да мислите различно и понякога предоставя абсолютно фантастични възможности за програмиста. Изобщо LabVIEW език за програмиране ли е? Това е спорен въпрос - тук няма стандарт, като например ANSI C. В тесни кръгове от разработчици казваме, че пишем на езика "G". Формално такъв език не съществува, но това е красотата на този инструмент за разработка: от версия на версия все повече и повече нови конструкции се въвеждат в езика. Трудно е да си представим, че в следващото прераждане на C, например, ще се появи нова структура за for-цикъла. А в LabVIEW това е напълно възможно.
Все пак трябва да се отбележи, че LabVIEW е включен в класацията на езиците за програмиране на TIOBE, като в момента заема тридесето място - някъде между Prolog и Fortran.

NI LabVIEW - история на създаването

National Instruments е основана през 1976 г. от трима основатели - Джеф Кодоски, Джеймс Тручард и Бил Ноулин в американския град Остин, Тексас. Основната специализация на фирмата са средства за измерване и автоматизация на производството.
Първата версия на LabVIEW беше пусната десет години след основаването на компанията - през 1986 г. (това беше версията за Apple Mac). Инженерите на NI решиха да предизвикат "традиционните" езици за програмиране и създадоха напълно графична среда за разработка. Джеф стана основният идеолог на графичния подход. Година след година се пускат нови версии. Първата междуплатформена версия (включително Windows) беше версия 3, издадена през 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 включва основни контролни конструкции, които имат аналози в "традиционните" езици:

  • променливи (локални или глобални)
  • разклоняване (структура на случай)
  • For - цикли със и без проверка за прекъсване.
  • докато цикли
  • Групиращи операции.

LabVIEW - програмни и езикови функции

В LabVIEW разработените софтуерни модули се наричат ​​„Виртуални инструменти“ (Virtual Instruments) или просто VI. Те се записват в *.vi файлове. VI са градивните елементи, които изграждат програма LabVIEW. Всяка програма LabVIEW съдържа поне един VI. По отношение на езика C можете съвсем спокойно да направите аналогия с функция, с единствената разлика, че в LabVIEW една функция се съдържа в един файл (можете също да създавате библиотеки с инструменти). От само себе си се разбира, че един VI може да бъде извикан от друг VI. По принцип всеки VI се състои от две части - блокова диаграма и преден панел. Блоковата диаграма е програмният код (по-точно визуално графично представяне на кода), докато предният панел е интерфейсът. Ето как изглежда класически пример за Hello, World!:

В основата на LabVIEW е парадигмата на потока от данни. В горния пример константата и клемата на индикатора са свързани с линия. Тази линия се нарича Wire. Можете да го наречете "тел". Проводниците пренасят данни от един елемент към друг. Цялата тази концепция се нарича поток от данни. Същността на блоковата диаграма е възлите (възлите), изходите на някои възли са свързани с входовете на други възли. Възелът ще започне да се изпълнява само когато пристигнат всички данни, необходими за работа. В диаграмата по-горе има два възела. Една от тях е константа. Този възел е самодостатъчен - започва да се изпълнява незабавно. Вторият възел е индикатор. Той ще покаже данните, които константата предава (но не веднага, а веднага щом данните пристигнат от константата).

Ето малко по-сложен пример: събиране и умножение на две числа. На традиционните езици бихме написали нещо подобно

int a, b, сума, mul;
//...
сума = a + b;
mul = a*b;

Ето как изглежда в LabVIEW:

Обърнете внимание, че събирането и умножението се извършват автоматично паралелно. На машина с два процесора и двата процесора ще бъдат активирани автоматично.

И ето как изглеждат циклите while / for и if / then / else структурата:

Както вече споменахме, всички елементи ще бъдат изпълнени паралелно. Не е нужно да мислите как да паралелизирате задача в множество нишки, които могат да работят паралелно на множество процесори. В последните версии можете дори изрично да посочите на кой от процесорите трябва да се изпълни този или онзи цикъл while. Сега има добавки за текстови езици, които ви позволяват лесно да постигнете поддръжка за многопроцесорни системи, но това вероятно не се прилага никъде толкова просто, колкото в LabVIEW. (добре, все пак се подхлъзнах в сравнение с текстовите езици). Ако вече говорим за многонишковост, тогава трябва да се отбележи, че разработчикът има богат избор от инструменти за синхронизиране на нишки - семафори, опашки, рандеву и др.

LabVIEW включва богат набор от елементи за изграждане на потребителски интерфейси. Интерфейсите в Delphi бяха бързо „атакувани“ от какво, а в LabVIEW този процес е още по-бърз.

Стандартната доставка на LabVIEW включва също блокове за работа с ini файлове, регистър, функции за работа с бинарни и тестови файлове, математически функции, мощни инструменти за чертане (и къде без него в лабораторията) и в допълнение към вече споменатата възможност на DLL извиквания, LabVIEW ви позволява да работите с ActiveX компоненти и .net. Започвайки с осмата версия, към LabVIEW беше добавена поддръжка за класове - езикът стана обектно-ориентиран. Реализираната поддръжка не може да се нарече пълна, но основните характеристики на обектно-ориентираните езици - наследяване и полиморфизъм са налице. Също така функционалността на езика може да бъде разширена с допълнителни модули, като NI Vision Toolkit – за обработка на изображения и машинно зрение и др. А с помощта на модула Application 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 ще компилира инструкциите за подходящите целеви устройства (нормални настолни компютри, RTOS платформи, FPGA, мобилни устройства, базирани на ARM вградени устройства)

Фиг. 1. Широка гама от платформи и техники за програмиране в LabVIEW



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

G Програмиране
Появата на поточното програмиране през 1986 г. беше наистина иновативно. Последователността на извършване на операции с данни на езика G се определя не от реда, в който се появяват, а от наличието на данни на входовете на тези възли. Изявленията, които не са свързани с поток от данни, се изпълняват паралелно в произволен ред.

Възлите на диаграмата са прости инструкции или техните набори - функции, виртуални инструменти (VI). Изпълнението на инструкциите на възела става само след като данните се появят на всички входни терминали на възела. След изпълнение на инструкциите резултатът от него се предава през изходните клеми на възела към входовете на следващите възли.


Фиг.2. В този пример A и B се събират, получената сума се умножава по C и резултатът се показва


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

Въпреки че езикът G ви позволява изрично да посочите типа данни, една от съществените разлики на този език от другите е наличието на проводници, които изпълняват функциите на променливи. Вместо да се предават променливи между функциите, предаването на данни се определя от кабелни връзки. От друга страна, езикът G също има стандартни конструкции за други езици, като условни цикли, броячи, структури за избор, обратни извиквания и булеви функции.

Интерактивна настройка като основа на програмирането
През 2003 г. National Instruments пусна NI LabVIEW 7 Express, който е пионер в технологията Express VI, технология, предназначена да опрости допълнително процеса на разработване на алгоритми за приложения. За разлика от конвенционалните VI, Express VI са абстрактни езикови структури, които прилагат техника за програмиране, базирана на интерактивната конфигурация на компонентите.


Фиг.3. Палета Express VI, поставяне на Express VI върху блоковата диаграма и показване на Express VI в режим на миниатюра


Можете да различите експресния VP от обикновения VP по голямата синя икона. Когато поставите Express VI върху блокова диаграма за първи път, се появява съответният диалогов прозорец за настройка. След като персонализирането приключи, LabVIEW автоматично генерира код въз основа на генерираната конфигурация на Express VI. Можете да видите и редактирате този код или да промените настройките на Express VI, като отворите отново диалоговия прозорец, като щракнете двукратно върху иконата Express VI.

Като пример, разгледайте проблема с въвеждането на данни за техния програмен анализ. LabVIEW прави много лесно взаимодействието с различен хардуер, тъй като включва драйвери за хиляди устройства. Задачата за събиране на данни може да се реализира не само с дизайн на няколко VI, но и с по-опростен вариант - експресен VI.

Просто задайте канали за четене/запис в настройките на DAQ Assistance Express VI и конфигурирайте параметри като честота на дискретизация, мащабиране, синхронизация и тригери. В допълнение, Express VI предоставя възможност за предварително събиране на данни от устройството, за да се провери дали избраните настройки за събиране на данни са правилни.


Фиг.4. DAQ Assistant Express VI значително опростява настройката на времето за задействане и параметрите на канала



Фиг.5. G код, еквивалентен на DAQ Assistant Express VI


Въпреки всичките си предимства, Express VI не осигуряват контрол на ниско ниво и конфигурация на режима на работа на устройството, който се реализира с помощта на конвенционални VI. Потребителите, които са нови за LabVIEW, могат да използват вградена функция, която преобразува предварително конфигуриран Express VI в поредица от обикновени VI. Това може да помогне на начинаещите да научат код на ниско ниво. Достатъчно е да изберете реда Open Front Panel in контекстно менюизразете VI на блоковата диаграма. Имайте предвид, че всеки Express VI може да бъде заменен от комбинация от няколко обикновени VI, а изданието на LabVIEW Professional Development System ви позволява да създавате свои собствени Express VI.

Скрипт support.m файлове
С модула LabVIEW MathScript RT можете да импортирате, редактирате и изпълнявате *.m файлови скриптове, традиционно използвани в математическото моделиране и анализ, обработка на сигнали и сложни математически изчисления. Можете да ги използвате с G код за създаване на самостоятелни приложения за десктоп или хардуер в реално време.

Има няколко начина за работа с MathScript в LabVIEW. За да работите със скриптове интерактивно, използвайте прозореца MathScript, показан на фиг. 6


Фиг.6. Интерактивно разработване на текстови алгоритми в прозореца на MathScript


За да използвате *.m скриптове в приложение на LabVIEW и да комбинирате силата на текстовото и графичното програмиране, използвайте възела MathScript, показан на Фигура 7. Използването на възела MathScript ви позволява да вграждате текстови алгоритми в кода на VI и да използвате графичните възможности на интерфейса за управление на параметрите на скрипта (бутони, плъзгачи, контроли, графики и други елементи).


Фиг.7. Възелът MathScript улеснява използването на scripts.m в G код


Модулът LabVIEW MathScript RT има собствен *.m скриптов двигател и не изисква инсталиране на трета страна софтуер. Използването на възела MathScript ви позволява да комбинирате предимствата на текстовите алгоритми в едно приложение, висока степенинтегриране на LabVIEW с хардуер, интерактивен потребителски интерфейс и други техники за програмиране, обсъдени в тази статия.

Обектно ориентирано програмиране
Обектно-ориентираното програмиране е един от най-популярните видове програмиране. Този подход ви позволява да комбинирате много различни компоненти в една програма в единични класове обекти. Дефиницията на клас съдържа характеристиките на обект и описание на действията, които обектът може да извърши, обикновено наричани свойства и методи. Класовете могат да имат деца, които наследяват свойства и методи и могат да ги заместват или да добавят нови.


Фиг.8. Обектно-ориентираният подход се основава на класове (пример в изображението) и свързани свойства и функции на VI


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

Основните предимства на този подход са:

  • . Encapsulation: Encapsulation е комбинацията от данни и методи в клас, така че те да могат да бъдат достъпни само чрез VI, които са членове на класа. Този подход ви позволява да изолирате секции от код и да гарантирате, че тяхната промяна не засяга кода на останалата част от програмата.
  • . Наследяване: Наследяването позволява съществуващи класове да бъдат използвани като основа за описание на нови класове. Когато се създаде нов клас, той наследява типовете данни и VI членовете на класа и по този начин имплементира свойствата и методите на родителския клас. Възможно е също така да добавите потребителски VI, за да промените функционалността на клас.
  • . Динамично изпращане: Методите могат да бъдат дефинирани с помощта на няколко VI с едно и също име в йерархията на класовете. Този метод се нарича динамично диспечиране, тъй като решението кой VI ще бъде извикан се взема по време на изпълнение на програмата.
Тези OOP функции ви позволяват да направите кода по-разбираем и мащабируем, както и, ако е необходимо, да ограничите достъпа до VI.

Моделиране и симулация
Моделирането и симулирането на физически системи е популярен подход за разработване на системи, които се описват с диференциални уравнения. Изследването на модела дава възможност да се разкрият характеристиките на динамичните системи и да се разработи управляващ блок с необходимото поведение.

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


Ориз. 9. Симулационната диаграма показва разпространението на сигнала, I/O хардуера и MathScript възел.


Control & Simulation Loop поддържа функции, които се използват за внедряване на линейни модели. стационарни системина устройства с инсталирана операционна система в реално време. Можете да използвате тези функции, за да дефинирате дискретни модели, като посочите трансферна функция, диаграми полюс-нула и системи диференциални уравнения. Инструментите за анализ на времеви и честотни домейни, като реакция на времева стъпка или функции на Bode plot, ви позволяват да анализирате интерактивно поведението на отворени и затворени контури за управление/симулация. Можете също така да използвате вградени инструменти за преобразуване на модели, разработени в средата за програмиране на The MathWorks, Inc. Simulink®, което ще им позволи да се използват в среда LabVIEW. Тези динамични системи могат да бъдат инсталирани на устройства с операционна система в реално време, без да преминават през различни стъпки за преобразуване на програмата, благодарение на функционалността на библиотеката LabVIEW Real-Time Module, която е чудесна за разработване на прототипи на системи за управление и симулационни приложения.

Диаграми на състоянието
NI LabVIEW Statechart Module предоставя на разработчика възможността да опише функционалността на системата по възможно най-абстрактен начин с помощта на диаграми на състояния. Интегрирането на LabVIEW код в състояния на диаграма ви позволява да създадете виртуална работна спецификация за вашето приложение. Модулът NI LabVIEW Statechart добавя йерархично влагане и паралелно изпълнение към функционалността на конвенционалната диаграма на състоянието. Трябва да се отбележи, че диаграмите на състоянието ви позволяват да опишете реакцията на системата към събития, което ги прави много удобен инструмент за разработване на реактивни системи, като вградени устройства, системи за управление и сложни потребителски интерфейси.


Ориз. 10. Модулът LabVIEW Statechart описва система, базирана на диаграма на състоянието.


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

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

VHDL за FPGA
Модулът LabVIEW FPGA ви позволява да използвате езика G за писане на код за FPGA. Въпреки това, както при други техники за разработка, можете да използвате предварително написан код или просто да имате избор как да бъде внедрена програмата. Повечето FPGA са програмирани с помощта на VHDL текстов език за програмиране на потоци. Вместо да пренаписвате съществуващи G IP блокове, можете да импортирате VHDL код с помощта на възела IP на ниво компонент (CLIP). Обикновено се нуждаете от CLIP XML файл, за да настроите интерфейса между елементите на блоковата диаграма, но LabVIEW предоставя CLIP Import Wizard, за да направите това автоматично. Той изброява входовете и изходите на IP блока, които могат да бъдат плъзгани с мишката върху блоковата диаграма и използвани в приложението, както е показано на фиг. единадесет.


Ориз. единадесет. CLIP възел.


Тъй като NI използва Xilinix FPGA и софтуерния инструментариум Xilinx в модула LabVIEW FPGA, можете да използвате Xilinx Core Generator, за да създадете съвместимо ядро. Можете също така да използвате Xilinx Embedded Development Kit, за да създадете произволен софтуерен микропроцесор. И накрая, много разработчици на трети страни предоставят Различни видове IP блокове за управление на шини, обработка на сигнали и специфични ядра.

Интегриране на C-подобен код
Можете да използвате последователен текстов код във вашата блокова диаграма VI по няколко начина. Първият начин е 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 има съветник за импортиране на споделена библиотека, който ви позволява автоматично да създавате или актуализирате обвивка за извикване на подходящите библиотеки (Windows . dll файл, Mac OS .framework файл или Linux .so файл).

Също така, като използвате System Exec.vi, можете да използвате интерфейса командна линияоперационна система.

Комбинацията от няколко техники за програмиране в една среда за разработка прави възможно повторното използване на алгоритми, разработени на други езици. В допълнение, разработчикът може да комбинира операции на високо и ниско ниво в едно приложение, което прави кода по-гъвкав и визуален. Различните нива на абстракция позволяват сложни алгоритми да бъдат визуализирани, като същевременно поддържат приложение и хардуерен контрол на ниско ниво. С тясна хардуерна интеграция можете да използвате и двата подхода за обработка на сигнали на платформи с многоядрени процесори, FPGA и вградени процесори.

Проблемите обикновено имат множество решения и средата за програмиране на LabVIEW е достатъчно гъвкава, за да ви позволи да изберете метода за решаване, който работи най-добре за вас.

Simulink® е регистрирана търговска марка на The MathWorks, Inc.

ARM, Keil и µVision са търговски марки и регистрирани търговски марки на ARM Ltd или неговите филиали.



Зареждане...
Връх