Zautomatyzowane systemy sterowania CPU i bezpieczeństwo przemysłowe. Poznaj LabView Lab View

Cześć koledzy!

W stosunkowo krótkim artykule chciałbym omówić język programowania LabVIEW. Ten bardzo ciekawy produkt niestety nie cieszy się dużą popularnością i chciałbym w pewnym stopniu wypełnić istniejącą lukę.

Co to jest LabVIEW?

LabVIEW to jeden z flagowych produktów National Instruments. Przede wszystkim należy zauważyć, że LabVIEW to skrót oznaczający Laboratorium kaplica V wirtualny I oprzyrządowanie mi inżynieria Wławka ork. Już w nazwie można prześledzić orientację na badania laboratoryjne, pomiary i gromadzenie danych. Rzeczywiście, budowanie systemu SCADA w LabVIEW jest nieco łatwiejsze niż używanie „tradycyjnych” narzędzi programistycznych. W tym artykule chciałbym pokazać, że możliwy zakres LabVIEW jest nieco szerszy. Jest to zasadniczo inny język programowania lub, jeśli chcesz, całą „filozofię” programowania. Funkcjonalny język, który sprawia, że ​​myślisz inaczej, a czasami daje absolutnie fantastyczne możliwości dla programisty. Czy LabVIEW jest w ogóle językiem programowania? To kontrowersyjna kwestia – nie ma tu standardu, jak np. ANSI C. W wąskich kręgach deweloperów mówimy, że piszemy w języku „G”. Formalnie taki język nie istnieje, ale na tym polega piękno tego narzędzia programistycznego: z wersji na wersję do języka wprowadzanych jest coraz więcej nowych konstrukcji. Trudno sobie wyobrazić, że w kolejnej reinkarnacji np. C pojawi się nowa struktura for-loop. A w LabVIEW jest to całkiem możliwe.
Należy jednak zaznaczyć, że LabVIEW znajduje się w rankingu języków programowania TIOBE, zajmując obecnie trzydzieste miejsce – gdzieś pomiędzy Prologiem a Fortranem.

NI LabVIEW - historia powstania

Firma National Instruments została założona w 1976 roku przez trzech założycieli - Jeffa Kodosky'ego, Jamesa Trucharda i Billa Nowlina w amerykańskim mieście Austin w Teksasie. Główną specjalizacją firmy były: narzędzia do pomiarów i automatyzacji produkcji.
Pierwsza wersja LabVIEW została wydana dziesięć lat po założeniu firmy – w 1986 roku (była to wersja dla Apple Mac). Inżynierowie NI postanowili rzucić wyzwanie „tradycyjnym” językom programowania i stworzyli w pełni graficzne środowisko programistyczne. Jeff stał się głównym ideologiem podejścia graficznego. Z roku na rok wypuszczane były nowe wersje. Pierwszą wersją wieloplatformową (w tym Windows) była wersja 3 wydana w 1993 roku. Obecna wersja to 8.6, która została wydana w zeszłym roku.

Firma do dziś ma swoją siedzibę w Austin. Dziś firma zatrudnia prawie cztery tysiące osób, a biura znajdują się w prawie czterdziestu krajach (jest też biuro w Rosji)

Moje wprowadzenie do LabVIEW

Moje wprowadzenie do LabVIEW miało miejsce prawie dziesięć lat temu. Zacząłem pracować na nowym kontrakcie, a mój ówczesny szef wręczył mi paczkę płyt z napisem „teraz będziesz nad tym pracował”. Zainstalowałem LabVIEW (była to piąta wersja) i po zabawie przez chwilę stwierdziłem, że nic poważnego nie da się zrobić na TYM, lepiej użyć Delphi „w staromodny sposób”… Na co mi powiedział - po prostu tego nie spróbowałeś. Pracuj przez tydzień lub dwa. Po chwili zrozumiem, że nie będę mógł pisać na niczym innym niż LabVIEW. Po prostu zakochałem się w tym języku, chociaż nie była to „miłość od pierwszego wejrzenia”.

Ogólnie rzecz biorąc, porównanie graficznych i tekstowych języków programowania jest dość trudne. Jest to być może porównanie z kategorii „PC” do „MAC” lub „Windows” do „Linuksa” – można się spierać do woli, ale argument jest absolutnie bezsensowny – każdy system ma prawo istnieć i każdy będzie miał zarówno zwolenników, jak i przeciwników, poza tym każdy produkt ma swoją niszę. LabVIEW to tylko narzędzie, choć bardzo elastyczne.

Czym więc jest LabVIEW?

LabVIEW to platforma wieloplatformowa środowisko graficzne tworzenie aplikacji. LabVIEW jest w zasadzie uniwersalnym językiem programowania. I chociaż ten produkt jest czasem ściśle kojarzony ze sprzętem National Instruments, to jednak nie jest kojarzony z konkretną maszyną. Istnieją wersje dla Windows, Linux, MacOS. Teksty źródłowe przenośny, a programy będą wyglądać tak samo we wszystkich systemach. Kod generowany przez LabVIEW może być również wykonywany w Windows Mobile lub PalmOS (w uczciwości należy zauważyć, że wsparcie dla PalmOS zostało przerwane, ale bardziej winny jest tutaj sam Palm). Ten język można z powodzeniem wykorzystać do tworzenia duże systemy, do przetwarzania tekstu, obrazów i baz danych.

LabVIEW to język bardzo wysokiego poziomu. Jednak nic nie stoi na przeszkodzie, aby włączyć moduły "niskopoziomowe" do programów LabVIEW. Nawet jeśli chcesz używać wstawek asemblera - to również jest możliwe, wystarczy wygenerować DLL i wstawić wywołania do kodu. Z drugiej strony język wysokiego poziomu pozwala na łatwe wykonywanie bardzo nietrywialnych operacji na danych, które w zwykłym języku mogą zająć wiele linii (jeśli nie dziesiątki) kodu. Jednak w trosce o uczciwość należy zauważyć, że niektóre operacje języków niskopoziomowych (na przykład praca ze wskaźnikami) nie są tak łatwe do zaimplementowania w LabVIEW ze względu na jego „wysoki poziom”. Oczywiście język LabVIEW zawiera podstawowe konstrukcje sterujące, które mają odpowiedniki w „tradycyjnych” językach:

  • zmienne (lokalne lub globalne)
  • rozgałęzienie (struktura sprawy)
  • For - pętle z lub bez sprawdzania zakończenia.
  • podczas gdy pętle
  • Operacje grupowania.

LabVIEW - funkcje programu i języka

W LabVIEW, rozwijane moduły oprogramowania nazywane są „Virtual Instruments” (Virtual Instruments) lub po prostu VI. Są one zapisywane w plikach *.vi. VI są elementami budulcowymi, które składają się na program LabVIEW. Każdy program LabVIEW zawiera przynajmniej jeden VI. Jeśli chodzi o język C, można całkiem bezpiecznie narysować analogię do funkcji, z tą różnicą, że w LabVIEW jedna funkcja jest zawarta w jednym pliku (można też tworzyć biblioteki narzędzi). Jest rzeczą oczywistą, że jeden VI może być wywołany z innego VI. Zasadniczo każdy VI składa się z dwóch części - Schematu Blokowego i Panelu Przedniego. Schemat blokowy to kod programu (a dokładniej wizualizacja reprezentacja graficzna kod) i Panel przedni jest interfejsem. Oto jak wygląda klasyczny przykład Hello, World!:

Sercem LabVIEW jest paradygmat przepływu danych. W powyższym przykładzie stała i zacisk wskaźnika są połączone linią. Ta linia nazywa się Drut. Możesz to nazwać „drutem”. Przewody przenoszą dane z jednego elementu do drugiego. Cała ta koncepcja nazywa się przepływem danych. Istotą Schematu Blokowego są węzły (węzły), wyjścia niektórych węzłów są połączone z wejściami innych węzłów. Węzeł rozpocznie wykonywanie dopiero wtedy, gdy dotrą wszystkie dane niezbędne do pracy. Na powyższym schemacie są dwa węzły. Jeden z nich jest stały. Ten węzeł jest samowystarczalny - zaczyna działać natychmiast. Drugi węzeł to wskaźnik. Wyświetli dane, które przekazuje stała (ale nie natychmiast, ale jak tylko dane dotrą ze stałej).

Oto nieco bardziej złożony przykład: dodawanie i mnożenie dwóch liczb. W tradycyjnych językach pisalibyśmy coś takiego

int a, b, suma, mul;
//...
suma = a + b;
mul = a*b;

Oto jak to wygląda w LabVIEW:

Zauważ, że dodawanie i mnożenie są automatycznie wykonywane równolegle. W maszynie dwuprocesorowej oba procesory zostaną automatycznie włączone.

A oto jak wyglądają pętle while / for i if / then / else:

Jak już wspomniano, wszystkie elementy będą wykonywane równolegle. Nie musisz myśleć o tym, jak zrównoleglić zadanie na wiele wątków, które mogą działać równolegle na wielu procesorach. W najnowsze wersje możesz nawet wyraźnie określić, na którym z procesorów ta lub inna pętla while ma być wykonywana. Teraz pojawiły się dodatki do języków tekstowych, które pozwalają łatwo osiągnąć wsparcie dla systemów wieloprocesorowych, ale prawdopodobnie nie jest to nigdzie zaimplementowane tak prosto jak w LabVIEW. (cóż, wciąż poślizgnąłem się w porównaniu z językami tekstowymi). Jeśli mówimy już o wielowątkowości, to należy również zauważyć, że programista ma szeroki wybór narzędzi do synchronizacji wątków - semaforów, kolejek, spotkań itp.

LabVIEW zawiera bogaty zestaw elementów do budowania interfejsów użytkownika. Interfejsy w Delphi zostały szybko „zaatakowane” na co, aw LabVIEW proces ten jest jeszcze szybszy.

W skład standardowej dostawy LabVIEW wchodzą również bloki do pracy z plikami ini, rejestr, funkcje do pracy z plikami binarnymi i testowymi, funkcje matematyczne, potężne narzędzia do kreślenia (i gdzie bez nich w laboratorium), a oprócz wspomnianej już możliwości wywołań DLL, LabVIEW pozwala na pracę z komponentami ActiveX i .net. Począwszy od ósmej wersji, do LabVIEW dodano obsługę klas - język stał się zorientowany obiektowo. Zaimplementowanej obsługi nie można nazwać kompletną, ale obecne są główne cechy języków obiektowych - dziedziczenie i polimorfizm. Ponadto funkcjonalność języka można rozszerzyć o dodatkowe moduły, takie jak NI Vision Toolkit - do przetwarzania obrazu i widzenia maszynowego i inne. Za pomocą modułu Application Builder można wygenerować wykonywalny plik exe. Dzięki Internet Toolkit możesz pracować z serwery ftp, za pomocą Database Connectivity Toolkit - z bazami danych itp.

Często można usłyszeć opinię, że kod graficzny jest słabo czytelny. Rzeczywiście, z przyzwyczajenia obfitość ikon i dyrygentów nieco szokuje. Ponadto początkujący programiści tworzą programy „arkuszowe” i programy „spaghetti”. Jednak doświadczony programista LabVIEW nigdy nie stworzy diagramów większych niż rozmiar ekranu, nawet jeśli program składa się z setek modułów. Dobrze zaprojektowany program jest w rzeczywistości „samo-dokumentujący się”, ponieważ jest już oparty na reprezentacji graficznej.

Wystarczająco przez długi czas Podczas programowania w LabVIEW byłem w pełni przekonany, że LabVIEW jest interpreterem, a diagramy blokowe są stale interpretowane przez jądro. Po rozmowie z inżynierami NI okazało się, że tak nie jest. LabVIEW jest kompilatorem (jakość generowania kodu pozostawia jednak wiele do życzenia). Ale kompilacja odbywa się „w locie” - w dowolnym momencie rozwoju program jest zawsze gotowy do uruchomienia. Ponadto kod LabVIEW można skompilować do pełnoprawnego pliku wykonywalnego, który można uruchomić na komputerze bez zainstalowanego LabVIEW (chociaż wymaga to LabVIEW Run-Time). Możesz także skompilować instalator pakietu instalacyjnego, narzędzia innych firm typ InstallShield nie jest wymagany.

Dalszy i bardziej szczegółowy opis funkcji pakietu wykracza poza zakres tego artykułu, ale sugeruję tylko spróbować (linki znajdują się poniżej). Jak powiedzieli wielcy: „...jedynym sposobem nauczenia się nowego języka programowania jest pisanie w nim programów”. Otóż ​​doświadczeni programiści będą mogli ekstrapolować zdobytą wiedzę na własne potrzeby.

Cześć koledzy!

W stosunkowo krótkim artykule chciałbym omówić język programowania LabVIEW. Ten bardzo ciekawy produkt niestety nie cieszy się dużą popularnością i chciałbym w pewnym stopniu wypełnić istniejącą lukę.

Co to jest LabVIEW?

LabVIEW to jeden z flagowych produktów National Instruments. Przede wszystkim należy zauważyć, że LabVIEW to skrót oznaczający Laboratorium kaplica V wirtualny I oprzyrządowanie mi inżynieria Wławka ork. Już w nazwie można prześledzić orientację na badania laboratoryjne, pomiary i gromadzenie danych. Rzeczywiście, budowanie systemu SCADA w LabVIEW jest nieco łatwiejsze niż używanie „tradycyjnych” narzędzi programistycznych. W tym artykule chciałbym pokazać, że możliwy zakres LabVIEW jest nieco szerszy. Jest to zasadniczo inny język programowania lub, jeśli chcesz, całą „filozofię” programowania. Funkcjonalny język, który sprawia, że ​​myślisz inaczej, a czasami daje absolutnie fantastyczne możliwości dla programisty. Czy LabVIEW jest w ogóle językiem programowania? To kontrowersyjna kwestia – nie ma tu standardu, jak np. ANSI C. W wąskich kręgach deweloperów mówimy, że piszemy w języku „G”. Formalnie taki język nie istnieje, ale na tym polega piękno tego narzędzia programistycznego: z wersji na wersję do języka wprowadzanych jest coraz więcej nowych konstrukcji. Trudno sobie wyobrazić, że w kolejnej reinkarnacji np. C pojawi się nowa struktura for-loop. A w LabVIEW jest to całkiem możliwe.
Należy jednak zaznaczyć, że LabVIEW znajduje się w rankingu języków programowania TIOBE, zajmując obecnie trzydzieste miejsce – gdzieś pomiędzy Prologiem a Fortranem.

NI LabVIEW - historia powstania

Firma National Instruments została założona w 1976 roku przez trzech założycieli - Jeffa Kodosky'ego, Jamesa Trucharda i Billa Nowlina w amerykańskim mieście Austin w Teksasie. Główną specjalizacją firmy były narzędzia do pomiarów i automatyzacji produkcji.
Pierwsza wersja LabVIEW została wydana dziesięć lat po założeniu firmy – w 1986 roku (była to wersja dla Apple Mac). Inżynierowie NI postanowili rzucić wyzwanie „tradycyjnym” językom programowania i stworzyli w pełni graficzne środowisko programistyczne. Jeff stał się głównym ideologiem podejścia graficznego. Z roku na rok wypuszczane były nowe wersje. Pierwszą wersją wieloplatformową (w tym Windows) była wersja 3 wydana w 1993 roku. Obecna wersja to 8.6, która została wydana w zeszłym roku.

Firma do dziś ma swoją siedzibę w Austin. Dziś firma zatrudnia prawie cztery tysiące osób, a biura znajdują się w prawie czterdziestu krajach (jest też biuro w Rosji)

Moje wprowadzenie do LabVIEW

Moje wprowadzenie do LabVIEW miało miejsce prawie dziesięć lat temu. Zacząłem pracować na nowym kontrakcie, a mój ówczesny szef wręczył mi paczkę płyt z napisem „teraz będziesz nad tym pracował”. Zainstalowałem LabVIEW (była to piąta wersja) i po zabawie przez chwilę stwierdziłem, że nic poważnego nie da się zrobić na TYM, lepiej użyć Delphi „w staromodny sposób”… Na co mi powiedział - po prostu tego nie spróbowałeś. Pracuj przez tydzień lub dwa. Po chwili zrozumiem, że nie będę mógł pisać na niczym innym niż LabVIEW. Po prostu zakochałem się w tym języku, chociaż nie była to „miłość od pierwszego wejrzenia”.

Ogólnie rzecz biorąc, porównanie graficznych i tekstowych języków programowania jest dość trudne. Jest to być może porównanie z kategorii „PC” do „MAC” lub „Windows” do „Linuksa” – można się spierać do woli, ale argument jest absolutnie bezsensowny – każdy system ma prawo istnieć i każdy będzie miał zarówno zwolenników, jak i przeciwników, poza tym każdy produkt ma swoją niszę. LabVIEW to tylko narzędzie, choć bardzo elastyczne.

Czym więc jest LabVIEW?

LabVIEW to wieloplatformowe środowisko do tworzenia aplikacji graficznych. LabVIEW jest w zasadzie uniwersalnym językiem programowania. I chociaż ten produkt jest czasem ściśle kojarzony ze sprzętem National Instruments, to jednak nie jest kojarzony z konkretną maszyną. Istnieją wersje dla Windows, Linux, MacOS. Kod źródłowy jest przenośny, a programy będą wyglądać tak samo na wszystkich systemach. Kod generowany przez LabVIEW może być również uruchamiany na Windows Mobile lub PalmOS (by być uczciwym, wsparcie dla PalmOS zostało porzucone, choć bardziej winny jest tutaj sam Palm). Język ten z powodzeniem można wykorzystać do tworzenia dużych systemów, przetwarzania tekstów, obrazów oraz pracy z bazami danych.

LabVIEW to język bardzo wysokiego poziomu. Jednak nic nie stoi na przeszkodzie, aby włączyć moduły "niskopoziomowe" do programów LabVIEW. Nawet jeśli chcesz używać wstawek asemblera - to również jest możliwe, wystarczy wygenerować DLL i wstawić wywołania do kodu. Z drugiej strony język wysokiego poziomu pozwala na łatwe wykonywanie bardzo nietrywialnych operacji na danych, które w zwykłym języku mogą zająć wiele linii (jeśli nie dziesiątki) kodu. Jednak w trosce o uczciwość należy zauważyć, że niektóre operacje języków niskopoziomowych (na przykład praca ze wskaźnikami) nie są tak łatwe do zaimplementowania w LabVIEW ze względu na jego „wysoki poziom”. Oczywiście język LabVIEW zawiera podstawowe konstrukcje sterujące, które mają odpowiedniki w „tradycyjnych” językach:

  • zmienne (lokalne lub globalne)
  • rozgałęzienie (struktura sprawy)
  • For - pętle z lub bez sprawdzania zakończenia.
  • podczas gdy pętle
  • Operacje grupowania.

LabVIEW - funkcje programu i języka

W LabVIEW, rozwijane moduły oprogramowania nazywane są „Virtual Instruments” (Virtual Instruments) lub po prostu VI. Są one zapisywane w plikach *.vi. VI są elementami budulcowymi, które składają się na program LabVIEW. Każdy program LabVIEW zawiera przynajmniej jeden VI. Jeśli chodzi o język C, można całkiem bezpiecznie narysować analogię do funkcji, z tą różnicą, że w LabVIEW jedna funkcja jest zawarta w jednym pliku (można też tworzyć biblioteki narzędzi). Jest rzeczą oczywistą, że jeden VI może być wywołany z innego VI. Zasadniczo każdy VI składa się z dwóch części - Schematu Blokowego i Panelu Przedniego. Schemat blokowy to kod programu (a dokładniej wizualna graficzna reprezentacja kodu), podczas gdy panel przedni to interfejs. Oto jak wygląda klasyczny przykład Hello, World!:

Sercem LabVIEW jest paradygmat przepływu danych. W powyższym przykładzie stała i zacisk wskaźnika są połączone linią. Ta linia nazywa się Drut. Możesz to nazwać „drutem”. Przewody przenoszą dane z jednego elementu do drugiego. Cała ta koncepcja nazywa się przepływem danych. Istotą Schematu Blokowego są węzły (węzły), wyjścia niektórych węzłów są połączone z wejściami innych węzłów. Węzeł rozpocznie wykonywanie dopiero wtedy, gdy dotrą wszystkie dane niezbędne do pracy. Na powyższym schemacie są dwa węzły. Jeden z nich jest stały. Ten węzeł jest samowystarczalny - zaczyna działać natychmiast. Drugi węzeł to wskaźnik. Wyświetli dane, które przekazuje stała (ale nie natychmiast, ale jak tylko dane dotrą ze stałej).

Oto nieco bardziej złożony przykład: dodawanie i mnożenie dwóch liczb. W tradycyjnych językach pisalibyśmy coś takiego

int a, b, suma, mul;
//...
suma = a + b;
mul = a*b;

Oto jak to wygląda w LabVIEW:

Zauważ, że dodawanie i mnożenie są automatycznie wykonywane równolegle. W maszynie dwuprocesorowej oba procesory zostaną automatycznie włączone.

A oto jak wyglądają pętle while / for i if / then / else:

Jak już wspomniano, wszystkie elementy będą wykonywane równolegle. Nie musisz myśleć o tym, jak zrównoleglić zadanie na wiele wątków, które mogą działać równolegle na wielu procesorach. W ostatnich wersjach można nawet wyraźnie określić, na którym procesorze ma być wykonywana ta lub inna pętla while. Teraz pojawiły się dodatki do języków tekstowych, które pozwalają łatwo osiągnąć wsparcie dla systemów wieloprocesorowych, ale prawdopodobnie nie jest to nigdzie zaimplementowane tak prosto jak w LabVIEW. (cóż, wciąż poślizgnąłem się w porównaniu z językami tekstowymi). Jeśli mówimy już o wielowątkowości, to należy również zauważyć, że programista ma szeroki wybór narzędzi do synchronizacji wątków - semaforów, kolejek, spotkań itp.

LabVIEW zawiera bogaty zestaw elementów do budowania interfejsów użytkownika. Interfejsy w Delphi zostały szybko „zaatakowane” na co, aw LabVIEW proces ten jest jeszcze szybszy.

W skład standardowej dostawy LabVIEW wchodzą również bloki do pracy z plikami ini, rejestr, funkcje do pracy z plikami binarnymi i testowymi, funkcje matematyczne, potężne narzędzia do kreślenia (i gdzie bez nich w laboratorium), a oprócz wspomnianej już możliwości wywołań DLL, LabVIEW pozwala na pracę z komponentami ActiveX i .net. Począwszy od ósmej wersji, do LabVIEW dodano obsługę klas - język stał się zorientowany obiektowo. Zaimplementowanej obsługi nie można nazwać kompletną, ale obecne są główne cechy języków obiektowych - dziedziczenie i polimorfizm. Ponadto funkcjonalność języka można rozszerzyć o dodatkowe moduły, takie jak NI Vision Toolkit - do przetwarzania obrazu i widzenia maszynowego i inne. Za pomocą modułu Application Builder można wygenerować wykonywalny plik exe. Korzystając z Internet Toolkit, możesz pracować z serwerami ftp, korzystając z Database Connectivity Toolkit - z bazami danych itp.

Często można usłyszeć opinię, że kod graficzny jest słabo czytelny. Rzeczywiście, z przyzwyczajenia obfitość ikon i dyrygentów nieco szokuje. Ponadto początkujący programiści tworzą programy „arkuszowe” i programy „spaghetti”. Jednak doświadczony programista LabVIEW nigdy nie stworzy diagramów większych niż rozmiar ekranu, nawet jeśli program składa się z setek modułów. Dobrze zaprojektowany program jest w rzeczywistości „samo-dokumentujący się”, ponieważ jest już oparty na reprezentacji graficznej.

Przez dość długi czas programując w LabVIEW byłem całkowicie przekonany, że LabVIEW jest interpreterem, a diagramy blokowe są stale interpretowane przez jądro. Po rozmowie z inżynierami NI okazało się, że tak nie jest. LabVIEW jest kompilatorem (jakość generowania kodu pozostawia jednak wiele do życzenia). Ale kompilacja odbywa się „w locie” - w dowolnym momencie rozwoju program jest zawsze gotowy do uruchomienia. Ponadto kod LabVIEW można skompilować do pełnoprawnego pliku wykonywalnego, który można uruchomić na komputerze bez zainstalowanego LabVIEW (chociaż wymaga to LabVIEW Run-Time). Możesz także zbudować instalator pakietu instalacyjnego, narzędzia innych firm, takie jak InstallShield, nie są wymagane.

Dalszy i bardziej szczegółowy opis funkcji pakietu wykracza poza zakres tego artykułu, ale sugeruję tylko spróbować (linki znajdują się poniżej). Jak powiedzieli wielcy: „...jedynym sposobem nauczenia się nowego języka programowania jest pisanie w nim programów”. Otóż ​​doświadczeni programiści będą mogli ekstrapolować zdobytą wiedzę na własne potrzeby.

Prawie wszyscy twórcy urządzeń na mikrokontrolerach, zarówno amatorzy, jak i profesjonaliści, prędzej czy później muszą podłączyć urządzenie z mikrokontrolerem do jego „starszego brata”, czyli komputera. Wtedy pojawia się pytanie, jakiego oprogramowania użyć, aby wymieniać się z mikrokontrolerem, analizować i przetwarzać otrzymane z niego dane? Często do wymiany MK z komputerem używają interfejsu RS232 i protokołu - starego dobrego Port COM w takiej czy innej realizacji.

Po stronie komputera używane są różne programy terminalowe, których są setki. Ale te programy zapewniają jedynie odbiór i transmisję informacji. Trudno to przetworzyć i zwizualizować w formie wizualnej.

Niektórzy piszą takie oprogramowanie samodzielnie w jakimś języku programowania (Delphi, C++), wyposażając je w niezbędną funkcjonalność. Ale to zadanie nie jest łatwe, musisz znać, oprócz samego języka, urządzenie system operacyjny, sposoby pracy z portami komunikacyjnymi, wiele innych szczegółów technicznych, które odwracają uwagę od najważniejszego - implementacji algorytmu programu. Ogólnie rzecz biorąc, po drodze bądź programistą Windows/Unix.

Na tle tych podejść koncepcja instrumentów wirtualnych (vi) znacznie się różni. Ten artykuł skupi się na oprogramowaniu Nationals Instruments LabView. Dopiero zaczynam opanowywać ten wspaniały produkt, więc mogę popełniać nieścisłości i błędy. Specjaliści poprawią :-)) Właściwie, czym jest LabView?

LabView to środowisko programistyczne i platforma do uruchamiania programów napisanych w język graficzny programowanie "G" firmy National Instruments.

mówić zwykły język, LabView - Jest to środowisko do tworzenia aplikacji do zadań zbierania, przetwarzania, wizualizacji informacji z różnych urządzeń, obiektów laboratoryjnych itp. Również do zarządzania procesy technologiczne i urządzenia. Jednak z pomocą LabView można stworzyć całkiem zwyczajne oprogramowanie użytkowe. Nie jest moim celem szczegółowe opisywanie tego produktu i praca z nim. LabView ma tysiące stron doskonałej dokumentacji i setki książek. Internet jest pełen zasobów związanych z LabView, gdzie można znaleźć odpowiedzi na wszystkie pytania.

Celem artykułu jest pokazanie jak łatwo i wygodnie, w porównaniu do tradycyjnego programowania, można tworzyć aplikacje na PC oraz jaką moc niesie ze sobą LabView. (Właściwie jest to dyskusyjne, ponieważ w tradycyjnym programowaniu, na tym samym Delphi, nie jest to trudniejsze do zrobienia. A pod względem wydajności jest niewiele gorsze, jeśli nie lepsze. Ale do tego trzeba dużo dłużej uczyć się Delphi. Wszystko jest szybki i jasny, prawie od razu przestudiowałem kilka podręczników i przodem do ogrodzenia wszelkiego rodzaju tarcz.Więc dla programistów to jak piąta noga psa, ale dla takich towarzyszy daleko od komputera jak ja, to wszystko. Raz na pół godzinę, kiedy po raz pierwszy zobaczyłem LabView, zbudowałem brutalny system przy użyciu cienkiego ręcznego sterowania nawadnianiem i ogrzewaniem dla szklarni konopnej. Z wszelkiego rodzaju regulatorami PID. uruchomił tę piekielną jednostkę. I wszystko działało od razu, bez debugowania. Nawiasem mówiąc, cały sprzęt zderzacza hadronów działa na LabView, a także wiele sprzętu naukowego. uwaga DI HALT) W końcu większość inżynierów elektroników jest obca programowaniu na PC, prawda? To właśnie próbujemy naprawić. Aby nie studiować kulistych koni próżniowych, stawiamy się i realizujemy proste zadanie. Zadanie jest naprawdę proste, ale na jego podstawie można zrozumieć podstawowe zasady programowania w LabView. Użyjemy LabView w wersji 2010. W przypadku innych wersji różnice będą minimalne.

Zadanie
Mamy opłatę Mikrokontroler AVR podłączony do komputera przez RS232. Do sterownika wgrany jest firmware, zgodnie z którym sterownik mierzy wartość napięcia na jednym z wejść ADC i przesyła do komputera kod ADC (od 0 do 1023) kanałem szeregowym. Konieczne jest napisanie programu na PC, który odbierze strumień danych z ADC, wyświetli kod ADC, przekonwertuje kod ADC na wartość napięcia w woltach, wyświetli wartość napięcia w woltach, wykreśli zmianę napięcia w czasie.

Cóż, prawdopodobnie dość tekstów, zacznijmy może!

Więc czego potrzebujemy do pracy:

  • Właściwie sam LabView. Wersję próbną można pobrać ze strony internetowej NI: http://www.ni.com/trylabview/. Ponadto piracką wersję można łatwo wyszukać w Google. Nawiasem mówiąc, na rutracker.org, oprócz otchłani pirackich, jest też wersja dla Linuksa, dla której rejestracja wydaje się w ogóle nie być wymagana. NI postanowiło spotkać się z open source?
  • Musisz również pobrać komponent NI VISA. Bez tego programu LabView nie „widzi” portu COM na komputerze. VISA zawiera funkcje do pracy z portami komunikacyjnymi i wiele więcej. Możesz go pobrać ze strony joule.ni.com. Zainstaluj LabView i VISA. Instalacja tego oprogramowania jest standardowa, nie posiada żadnych specjalnych funkcji.

Przede wszystkim musimy upewnić się, że VISA znalazła port COM w systemie i poprawnie z nim współpracuje. Możesz to sprawdzić w następujący sposób: uruchom program Measurement & Automation. Pochodzi z LabView. Jeśli nie jest zainstalowany, możesz go zainstalować ręcznie. Na dysku (ma go obraz z LabView).

Po lewej stronie okna widzimy sprzęt znaleziony w systemie. Między innymi znajdziemy nasz port COM. Po prawej stronie znajduje się przycisk panelu Open Visa test. Dzięki niemu możesz przetestować wybrane urządzenie. W przypadku portu COM można tam wysłać lub odebrać domyślną lub dowolną sekwencję znaków. Jeśli wszystko jest w porządku z portem, możesz przejść bezpośrednio do tworzenia naszego programu.

Uruchamiamy LabView. W oknie Pierwsze kroki wybierz Blank Vi, co oznacza nowy wirtualny instrument.

Otrzymujemy coś takiego:

Więc co mamy. Przestrzeń robocza składa się z dwóch dużych paneli Panel przedni i Schemat blokowy. Na przednim panelu skomponujemy interfejs naszego programu za pomocą kontrolek z panelu Controls. Te elementy to znane nam uchwyty rezystorów zmiennych, diody LED, przyciski, urządzenia wskaźnikowe, ekran oscyloskopu itp. Służą do wprowadzania informacji do programu i wyświetlania wyników realizacji. W panelu Diagram blokowy kod programu znajduje się bezpośrednio. Tutaj musimy się trochę cofnąć i wyjaśnić zasadę programowania w LabView. Mały przykład. Zwyczajowo pracę nad programem rozpoczyna się od projektu interfejsu, a następnie implementacji algorytmu pracy na schemacie blokowym. Zróbmy najprostszy program do mnożenia dwóch liczb. Aby to zrobić, umieścimy na przednim panelu, przeciągając trzy kontrolki, powiedzmy elementy pokrętła i wskaźnika numerycznego, aby wyświetlić wynik.

Utworzymy interfejs tak, jak zapragnie nasze serce, na przykład tak:

Ok, teraz musimy zaimplementować faktyczne mnożenie. Przejdź do panelu Schemat blokowy i zobacz, że dla każdej z naszych kontrolek została utworzona odpowiednia ikona. Najlepiej od razu przełączyć tryb wyświetlania w postaci terminali. Schemat nie będzie tak zagracony. Poza tym w terminalach widoczny jest typ danych, z którymi działa ta lub inna kontrolka. Aby to zrobić, kliknij prawym przyciskiem myszy ikonę i odznacz Wyświetl jako ikonę. U góry ekranu kontrolka ma postać terminala, na dole i po prawej stronie w postaci ikony. Aby domyślnie skonfigurować widok schematu blokowego jako zaciski, należy wybrać z menu Narzędzia->Opcje, wybrać Schemat blokowy po lewej stronie i odznaczyć Umieść zaciski panelu przedniego jako ikony. Bardzo przydatne do wyświetlania pomocy kontekstowej. Możesz go wyświetlić za pomocą kombinacji Ctrl + H. W tym oknie wyświetlane są informacje o obiekcie, na który aktualnie nałożony jest kursor. Mega poręczny przedmiot.

Teraz musimy dodać funkcję mnożenia do schematu blokowego. Kliknij prawym przyciskiem myszy na schemacie blokowym i wybierz funkcję Multiply z palety Numeric. Umieśćmy to na schemacie. Warto zauważyć, że LabView ma po prostu ogromny zestaw funkcji. Obejmuje to różne matematyki, statystyki, analizę sygnału, sterowanie PID, przetwarzanie wideo, dźwięku i obrazu. Nie możesz wymienić wszystkiego.

Najważniejszą koncepcją w programowaniu LabView jest koncepcja DataFlow. Najważniejsze jest to: W przeciwieństwie do imperatywnych języków programowania, w których instrukcje są wykonywane w kolejności sekwencyjnej, w LabView funkcje działają tylko wtedy, gdy są informacje o wszystkich wejściach funkcji (każda funkcja ma wartości wejściowe i wyjściowe). Dopiero wtedy funkcja realizuje swój algorytm, a wynik jest wysyłany na wyjście, które może być wykorzystane przez inną funkcję. Tak więc w ramach tego samego VI funkcje mogą działać niezależnie od siebie.

Teraz, aby ożywić nasz przykład, musimy postępować zgodnie z tą koncepcją i nadać funkcji wejściowej wartości liczbowe, które ustawiamy kontrolki, a następnie uzyskać wynik z danych wyjściowych i wyświetlić go.

Aby połączyć elementy na schemacie blokowym, użyj narzędzia Połącz przewód z panelu Narzędzia. Wybierz go i narysuj nasze połączenia.

To wszystko, możesz uruchomić ten głupi program do cyklicznego wykonywania i kręcić gałkami, obserwując wynik mnożenia.

Jak widać, wydaje się, że nie ma nic skomplikowanego. Ale jednocześnie LabView pozwala rozwiązywać problemy o dowolnej złożoności! Ept, system sterowania TANK jest na nim zrobiony! Aby.

Cóż, teraz zróbmy więcej interesujące rzeczy, a mianowicie zrobimy nasz najprostszy woltomierz, o którym mówiłem na samym początku.

Więc co musimy zrobić. Najpierw musisz skonfigurować i zainicjować Port szeregowy. Rozpocznij niekończącą się pętlę. W pętli wykorzystujemy funkcję do odczytywania z portu i odbierania informacji. Przekształćmy informacje do wyświetlenia na wykresie, przeliczmy kod ADC na wartość napięcia w woltach. Wychodząc z pętli zamykamy port.
Czyli w interfejsie naszego programu nie będzie elementów sterujących innych niż przycisk Stop, ale będzie tylko wyświetlenie wyniku, zrobimy tak: najpierw stworzymy schemat blokowy, a następnie dodamy brakujące elementy do panel przedni. Chociaż musisz zrobić coś przeciwnego! Ale w tym przypadku jest to wygodniejsze.

Na panelu schematu blokowego umieszczamy element While Loop z palety Structures, to jest nasza nieskończona pętla. Zakreślamy obszar ramką cyklu, wystarczającą, aby zmieścić się w algorytmie. W prawym dolnym rogu znajduje się czerwona kropka, kliknij ją prawym przyciskiem myszy i wybierz Utwórz kontrolę. Na panelu przednim natychmiast pojawi się przycisk Stop. Kiedy na nią klikniesz, nasz program się zakończy.

Teraz, poza pętlą, musimy umieścić funkcje inicjowania i zamykania portu. Inicjalizacja po lewej, zamykanie po prawej. Ponownie kliknij prawym przyciskiem myszy i wybierz funkcje Konfiguruj port, Odczytaj i Zamknij. Funkcje te znajdują się w palecie Instrument I/O –> Serial. Funkcja odczytu jest umieszczona w pętli. Wyjścia i wejścia funkcji łączymy za pomocą cewki z przewodami. W przypadku funkcji Read musimy określić liczbę akceptowanych bajtów. Klikamy prawym przyciskiem myszy na środkowym wejściu funkcji Read i wybieramy Create-> Constant, wpisujemy wartość np. 200. Na tym etapie powinno być tak jak na zrzucie ekranu.

Musisz utworzyć kontrolki dla funkcji inicjalizacji portu. Wystarczą nam dwa - prędkość portu i nazwa portu. W ten sam sposób, w jaki stworzyliśmy stałą dla funkcji read, tworzymy kontrolki. RMB na wymagane wejścia funkcji inicjującej i pozycji

Utwórz->Kontrola.

Interesują nas dwa wejścia: Nazwa zasobu wizowego oraz Szybkość transmisji(domyślnie 9600). Przejdźmy teraz do panelu przedniego i dodajmy niezbędne elementy, a mianowicie ekran do rysowania wykresów i etykiety do wyświetlania kodu ADC i napięcia w woltach.
W związku z tym są to elementy Waveform Chart z palety Graph i dwa elementy Numeric Indicator z palety Numeric.

Wróćmy do schematu blokowego i przenieśmy elementy, które pojawiły się wewnątrz pętli. Jesteśmy na ukończeniu! Jedyną rzeczą jest to, że nadal musimy przekonwertować ciąg znaków pochodzący z wyjścia funkcji Read do formatu, który przetrawi nasze wskaźniki. A także zaimplementować najprostszą matematykę do tłumaczenia kodu ADC na wolty. Poniżej zrzuty ekranu panelu przedniego i schemat blokowy na tym etapie:

Do konwersji ciągu użyjemy funkcji Scan from string z palety String. Wkładamy go do pętli. Teraz matematyka. Aby przekonwertować kod ADC na wartość napięcia w woltach, należy pomnożyć kod przez wartość napięcia odniesienia (w moim przypadku jest to pięć woltów) i podzielić wynikową wartość przez 1023 (ponieważ ADC ma 10-bitowa pojemność). Niezbędne funkcje mnożenia i dzielenia oraz stałe (5 i 1023) zostaną umieszczone w pętli. Nie będę robił zrzutów ekranu z każdego połączenia, bo są już zdjęcia dofiga. Podam końcowy ekran wszystkich połączeń. Tam wszystko jest niezwykle proste.

Myślę, że wszystko jest jasne, jeśli masz pytania, zadaj je w komentarzach. Zastanówmy się razem :-))) W międzyczasie program jest gotowy.

Przejdźmy do naszego interfejsu i podkręćmy nieco wykres. Wybierz dolną wartość na osi Y i ustaw ją na 0. Wybierz górną wartość i ustaw ją na 5. Tak więc nasza skala na osi Y jest w zakresie 0-5 woltów. Otóż ​​wybieramy port COM, wpisujemy kurs wymiany, uruchamiamy nasz program przyciskiem ze strzałką i gwałtownie przekręcamy rezystor na płytce, obserwując wynik naszej pracy na ekranie. Kliknij przycisk Zatrzymaj, aby zatrzymać program.

Jak widać, wszystko jest dość proste. Ten przykład to tylko niewielka część wszystkich możliwości LabView. Jeśli ten artykuł komuś pomoże, będę zadowolony. Tylko nie uderzaj mocno w komentarzach, nie jestem profesjonalistą. Kolejna mała sztuczka. Jeśli diagram wygląda jak Cthulhu, możesz spróbować użyć przycisku Oczyść diagram. Przyniesie diagramowi mniej lub bardziej boską formę, ale należy go używać ostrożnie. Oto efekt jej pracy

Możesz także łączyć elementy w funkcjonalne bloki, aby nie zaśmiecały obwodu.

Prawie wszyscy twórcy urządzeń na mikrokontrolerach, zarówno amatorzy, jak i profesjonaliści, prędzej czy później muszą podłączyć urządzenie z mikrokontrolerem do jego „starszego brata”, czyli komputera. Wtedy pojawia się pytanie, jakiego oprogramowania użyć, aby wymieniać się z mikrokontrolerem, analizować i przetwarzać otrzymane z niego dane? Często do wymiany MK z komputerem używają interfejsu i protokołu RS232 - starego dobrego portu COM w takiej czy innej implementacji.

Po stronie komputera używane są różne programy terminalowe, których są setki. Ale te programy zapewniają jedynie odbiór i transmisję informacji. Trudno to przetworzyć i zwizualizować w formie wizualnej.

Niektórzy piszą takie oprogramowanie samodzielnie w jakimś języku programowania (Delphi, C++), wyposażając je w niezbędną funkcjonalność. Ale to zadanie nie jest łatwe, oprócz samego języka musisz wiedzieć, urządzenie systemu operacyjnego, jak pracować z portami komunikacyjnymi i wiele innych technicznych subtelności, które odwracają uwagę od najważniejszego - implementacji programu algorytm. Ogólnie rzecz biorąc, po drodze bądź programistą Windows/Unix.

Na tle tych podejść koncepcja instrumentów wirtualnych (vi) znacznie się różni. Ten artykuł skupi się na oprogramowaniu Nationals Instruments LabView. Dopiero zaczynam opanowywać ten wspaniały produkt, więc mogę popełniać nieścisłości i błędy. Specjaliści poprawią :-)) Właściwie, czym jest LabView?

LabView to środowisko programistyczne i platforma do wykonywania programów napisanych w graficznym języku programowania G firmy National Instruments.

W uproszczeniu LabView to środowisko do tworzenia aplikacji do zadań zbierania, przetwarzania, wizualizacji informacji z różnych instrumentów, ustawień laboratoryjnych itp. A także do kontroli procesów i urządzeń technologicznych. Jednak z pomocą LabView można stworzyć całkiem zwyczajne oprogramowanie użytkowe. Nie jest moim celem szczegółowe opisywanie tego produktu i praca z nim. LabView ma tysiące stron doskonałej dokumentacji i setki książek. Internet jest pełen zasobów związanych z LabView, gdzie można znaleźć odpowiedzi na wszystkie pytania.

Celem artykułu jest pokazanie jak łatwo i wygodnie, w porównaniu do tradycyjnego programowania, można tworzyć aplikacje na PC oraz jaką moc niesie ze sobą LabView. (Właściwie jest to dyskusyjne, ponieważ w tradycyjnym programowaniu, na tym samym Delphi, nie jest to trudniejsze do zrobienia. A pod względem wydajności jest niewiele gorsze, jeśli nie lepsze. Ale do tego trzeba dużo dłużej uczyć się Delphi. Wszystko jest szybki i jasny prawie od razu „Przestudiowałem kilka podręczników i przodem do ogrodzenia wszelkiego rodzaju tarcz. Czyli dla programistów to jak piąta noga psa, ale dla takich towarzyszy tak daleko od komputera jak ja, to tyle. Kiedyś, w pół godziny, kiedy po raz pierwszy zobaczyłem LabView, zbudowałem brutalny system przy użyciu cienkiego ręcznego sterowania nawadnianiem i ogrzewaniem dla szklarni konopnej. Z wszelkiego rodzaju regulatorami PID. nasz technik i uruchomił tę piekielną jednostkę. I wszystko działało od razu, bez debugowania. Nawiasem mówiąc, cały sprzęt zderzacza hadronów działa na LabView, a także wiele sprzętu naukowego. uwaga DI HALT) W końcu większość inżynierów elektroników jest obca programowaniu na PC, prawda? To właśnie próbujemy naprawić. Aby nie studiować kulistych koni próżniowych, stawiamy się i realizujemy proste zadanie. Zadanie jest naprawdę proste, ale na jego podstawie można zrozumieć podstawowe zasady programowania w LabView. Użyjemy LabView w wersji 2010. W przypadku innych wersji różnice będą minimalne.

Zadanie
Mamy płytkę z mikrokontrolerem AVR podłączoną do komputera przez RS232. Do sterownika wgrany jest firmware, zgodnie z którym sterownik mierzy wartość napięcia na jednym z wejść ADC i przesyła do komputera kod ADC (od 0 do 1023) kanałem szeregowym. Konieczne jest napisanie programu na PC, który odbierze strumień danych z ADC, wyświetli kod ADC, przekonwertuje kod ADC na wartość napięcia w woltach, wyświetli wartość napięcia w woltach, wykreśli zmianę napięcia w czasie.

Cóż, prawdopodobnie dość tekstów, zacznijmy może!

Więc czego potrzebujemy do pracy:

  • Właściwie sam LabView. Wersję próbną można pobrać ze strony internetowej NI: http://www.ni.com/trylabview/. Ponadto piracką wersję można łatwo wyszukać w Google. Nawiasem mówiąc, na rutracker.org, oprócz otchłani pirackich, jest też wersja dla Linuksa, dla której rejestracja wydaje się w ogóle nie być wymagana. NI postanowiło spotkać się z open source?
  • Musisz również pobrać komponent NI VISA. Bez tego programu LabView nie "widzi" portu COM na komputerze. VISA zawiera funkcje do pracy z portami komunikacyjnymi i wiele więcej. Możesz go pobrać ze strony joule.ni.com. Zainstaluj LabView i VISA. Instalacja tego oprogramowania jest standardowa, nie posiada żadnych specjalnych funkcji.

Przede wszystkim musimy upewnić się, że VISA znalazła port COM w systemie i poprawnie z nim współpracuje. Możesz to sprawdzić w następujący sposób: uruchom program Measurement & Automation. Pochodzi z LabView. Jeśli nie jest zainstalowany, możesz go zainstalować ręcznie. Na dysku (ma go obraz z LabView).

Otrzymujemy coś takiego:


Więc co mamy. Przestrzeń robocza składa się z dwóch dużych paneli Panel przedni i Schemat blokowy. Na przednim panelu skomponujemy interfejs naszego programu za pomocą kontrolek z panelu Controls. Te elementy to znane nam uchwyty rezystorów zmiennych, diody LED, przyciski, urządzenia wskaźnikowe, ekran oscyloskopu itp. Służą do wprowadzania informacji do programu i wyświetlania wyników realizacji. W panelu Diagram blokowy kod programu znajduje się bezpośrednio. Tutaj musimy się trochę cofnąć i wyjaśnić zasadę programowania w LabView. Mały przykład. Zwyczajowo pracę nad programem rozpoczyna się od projektu interfejsu, a następnie implementacji algorytmu pracy na schemacie blokowym. Zróbmy najprostszy program do mnożenia dwóch liczb. Aby to zrobić, umieścimy na przednim panelu, przeciągając trzy kontrolki, powiedzmy elementy pokrętła i wskaźnika numerycznego, aby wyświetlić wynik.

Ok, teraz musimy zaimplementować faktyczne mnożenie. Przejdź do panelu Schemat blokowy i zobacz, że dla każdej z naszych kontrolek została utworzona odpowiednia ikona. Najlepiej od razu przełączyć tryb wyświetlania w postaci terminali. Schemat nie będzie tak zagracony. Poza tym w terminalach widoczny jest typ danych, z którymi działa ta lub inna kontrolka. Aby to zrobić, kliknij prawym przyciskiem myszy ikonę i odznacz Wyświetl jako ikonę. U góry ekranu kontrolka ma postać terminala, na dole i po prawej stronie w postaci ikony. Aby domyślnie skonfigurować widok schematu blokowego jako zaciski, należy wybrać z menu Narzędzia->Opcje, wybrać Schemat blokowy po lewej stronie i odznaczyć Umieść zaciski panelu przedniego jako ikony. Bardzo przydatne do wyświetlania pomocy kontekstowej. Możesz go wyświetlić za pomocą kombinacji Ctrl + H. W tym oknie wyświetlane są informacje o obiekcie, na który aktualnie nałożony jest kursor. Mega poręczny przedmiot.

Najważniejszą koncepcją w programowaniu LabView jest koncepcja DataFlow. Najważniejsze jest to: W przeciwieństwie do imperatywnych języków programowania, w których instrukcje są wykonywane w kolejności sekwencyjnej, w LabView funkcje działają tylko wtedy, gdy są informacje o wszystkich wejściach funkcji (każda funkcja ma wartości wejściowe i wyjściowe). Dopiero wtedy funkcja realizuje swój algorytm, a wynik jest wysyłany na wyjście, które może być wykorzystane przez inną funkcję. Tak więc w ramach tego samego VI funkcje mogą działać niezależnie od siebie.

Teraz, aby ożywić nasz przykład, musimy postępować zgodnie z tą koncepcją i nadać funkcji wejściowej wartości liczbowe, które ustawiamy kontrolki, a następnie uzyskać wynik z danych wyjściowych i wyświetlić go.

Aby połączyć elementy na schemacie blokowym, użyj narzędzia Połącz przewód z panelu Narzędzia. Wybierz go i narysuj nasze połączenia.

Jak widać, wydaje się, że nie ma nic skomplikowanego. Ale jednocześnie LabView pozwala rozwiązywać problemy o dowolnej złożoności! Ept, system sterowania TANK jest na nim zrobiony! Aby.

Cóż, teraz zróbmy ciekawsze rzeczy, a mianowicie zrobimy nasz najprostszy woltomierz, o którym mówiłem na samym początku.

Więc co musimy zrobić. Najpierw musisz skonfigurować i zainicjować port szeregowy. Rozpocznij niekończącą się pętlę. W pętli wykorzystujemy funkcję do odczytywania z portu i odbierania informacji. Przekształćmy informacje do wyświetlenia na wykresie, przeliczmy kod ADC na wartość napięcia w woltach. Wychodząc z pętli zamykamy port.
Czyli w interfejsie naszego programu nie będzie elementów sterujących innych niż przycisk Stop, ale będzie tylko wyświetlenie wyniku, zrobimy tak: najpierw stworzymy schemat blokowy, a następnie dodamy brakujące elementy do panel przedni. Chociaż musisz zrobić coś przeciwnego! Ale w tym przypadku jest to wygodniejsze.

Na panelu schematu blokowego umieszczamy element While Loop z palety Structures, to jest nasza nieskończona pętla. Zakreślamy obszar ramką cyklu, wystarczającą, aby zmieścić się w algorytmie. W prawym dolnym rogu znajduje się czerwona kropka, kliknij ją prawym przyciskiem myszy i wybierz Utwórz kontrolę. Na panelu przednim natychmiast pojawi się przycisk Stop. Kiedy na nią klikniesz, nasz program się zakończy.

Musisz utworzyć kontrolki dla funkcji inicjalizacji portu. Wystarczą nam dwa - prędkość portu i nazwa portu. W ten sam sposób, w jaki stworzyliśmy stałą dla funkcji read, tworzymy kontrolki. RMB na wymagane wejścia funkcji inicjującej i pozycji

Utwórz->Kontrola.

Utwórz->Kontrola.

Interesują nas dwa wejścia: Nazwa zasobu wizowego oraz Szybkość transmisji(domyślnie 9600). Przejdźmy teraz do panelu przedniego i dodajmy niezbędne elementy, a mianowicie ekran do rysowania wykresów i etykiety do wyświetlania kodu ADC i napięcia w woltach.
W związku z tym są to elementy Waveform Chart z palety Graph i dwa elementy Numeric Indicator z palety Numeric.

Wróćmy do schematu blokowego i przenieśmy elementy, które pojawiły się wewnątrz pętli. Jesteśmy na ukończeniu! Jedyną rzeczą jest to, że nadal musimy przekonwertować ciąg znaków pochodzący z wyjścia funkcji Read do formatu, który przetrawi nasze wskaźniki. A także zaimplementować najprostszą matematykę do tłumaczenia kodu ADC na wolty. Poniżej zrzuty ekranu panelu przedniego i schemat blokowy na tym etapie:



Do konwersji ciągu użyjemy funkcji Scan from string z palety String. Wkładamy go do pętli. Teraz matematyka. Aby przekonwertować kod ADC na wartość napięcia w woltach, należy pomnożyć kod przez wartość napięcia odniesienia (w moim przypadku jest to pięć woltów) i podzielić wynikową wartość przez 1023 (ponieważ ADC ma 10-bitowa pojemność). Niezbędne funkcje mnożenia i dzielenia oraz stałe (5 i 1023) zostaną umieszczone w pętli. Nie będę robił zrzutów ekranu z każdego połączenia, bo są już zdjęcia dofiga. Podam końcowy ekran wszystkich połączeń. Tam wszystko jest niezwykle proste.


Myślę, że wszystko jest jasne, jeśli masz pytania, zadaj je w komentarzach. Zastanówmy się razem :-))) W międzyczasie program jest gotowy.

Przejdźmy do naszego interfejsu i podkręćmy nieco wykres. Wybierz dolną wartość na osi Y i ustaw ją na 0. Wybierz górną wartość i ustaw ją na 5. Tak więc nasza skala na osi Y jest w zakresie 0-5 woltów. Otóż ​​wybieramy port COM, wpisujemy kurs wymiany, uruchamiamy nasz program przyciskiem ze strzałką i gwałtownie przekręcamy rezystor na płytce, obserwując wynik naszej pracy na ekranie. Kliknij przycisk Zatrzymaj, aby zatrzymać program.

Możesz także łączyć elementy w funkcjonalne bloki, aby nie zaśmiecały obwodu.



NI LabVIEW jest strumieniowym środowiskiem programowania graficznego. Pisząc program w LabVIEW, użytkownik określa sekwencję operacji przekształcania strumienia danych za pomocą diagramu blokowego. Obrazy są umieszczone na schemacie blokowym jednostki funkcjonalne, połączone przewodami, przez które przepływ danych przechodzi z jednego węzła do drugiego. Ponadto LabVIEW posiada szereg narzędzi łamiących paradygmaty programowanie strumieniowe, pozwalając jednak na znaczne rozszerzenie funkcjonalności tworzonych w nim aplikacji.

Czym jest technika programowania

Termin „technika programowania” obejmuje wybór różnych języków programowania, modeli obliczeniowych, poziomów abstrakcji, metod pracy z kodem i reprezentowania algorytmów. Przez lata firma National Instruments rozwijała funkcjonalność LabVIEW, aby wspierać więcej technik programowania.


Możesz zaprezentować kod napisany przy użyciu różnych technik na schemacie blokowym, a także strumieniować kod G, a LabVIEW skompiluje instrukcje dla odpowiednich urządzeń docelowych (zwykłe komputery stacjonarne, platformy RTOS, FPGA, urządzenia mobilne, urządzenia wbudowane oparte na architekturze ARM)

Rys.1. Szeroka gama platform i technik programowania w LabVIEW



Transfer danych pomiędzy sekcjami kodu napisanego przy użyciu różnych podejść jest zorganizowany w LabVIEW po prostu - przepływ danych jest łącznikiem pomiędzy różnymi modelami obliczeniowymi i językami. W języku G wprowadzanie/wydawanie informacji odbywa się za pomocą specjalistycznego interfejsu użytkownika (panel przedni), interfejsów sieciowych, bibliotek analitycznych, baz danych i innych narzędzi.

Programowanie G
Pojawienie się programowania strumieniowego w 1986 roku było naprawdę nowatorskie. O kolejności wykonywania operacji na danych w języku G decyduje nie kolejność ich pojawiania się, ale obecność danych na wejściach tych węzłów. Instrukcje, które nie są połączone przepływem danych, są wykonywane równolegle w dowolnej kolejności.

Węzły diagramów to proste instrukcje lub ich zestawy - funkcje, wirtualne instrumenty (VI). Wykonanie instrukcji węzła następuje dopiero po pojawieniu się danych na wszystkich terminalach wejściowych węzła. Po wykonaniu instrukcji jej wynik jest przekazywany przez terminale wyjściowe węzła na wejścia kolejnych węzłów.


Rys.2. W tym przykładzie dodawane są A i B, wynikowa suma jest mnożona przez C i wyświetlany jest wynik


Rysunek 2 przedstawia przykład wyrażenia matematycznego w języku G. Diagram składa się z dwóch węzłów (dodawanie i mnożenie) oraz trzech wejść (A, B i C). Jako pierwsze dodawane są A i B. Kod węzła mnożenia nie jest wykonywany, dopóki oba jego terminale wejściowe nie otrzymają danych i dlatego czeka na wynik węzła dodawania. Gdy tylko wynik dodawania dotrze do pierwszego wejścia węzła mnożenia, jego kod (A+B)*C zostanie wykonany.

Chociaż język G pozwala jednoznacznie określić typ danych, jedną z istotnych różnic tego języka od innych jest obecność przewodników pełniących funkcje zmiennych. Zamiast przekazywania zmiennych między funkcjami, przekazywanie danych jest definiowane przez połączenia przewodowe. Z drugiej strony język G posiada również standardowe konstrukcje dla innych języków, takie jak pętle warunkowe, pętle licznikowe, struktury wyboru, wywołania zwrotne i funkcje logiczne.

Interaktywna konfiguracja jako podstawa programowania
W 2003 roku firma National Instruments wydała NI LabVIEW 7 Express, która była pionierem technologii Express VI, technologii zaprojektowanej w celu dalszego uproszczenia procesu opracowywania algorytmów aplikacji. W przeciwieństwie do zwykłych VI, Express VI to abstrakcyjne struktury językowe, które implementują technikę programowania opartą na: konfiguracja interaktywna składniki.


Rys.3. Paleta Express VI, umieszczanie Express VI na schemacie blokowym i wyświetlanie Express VI w trybie miniatur


Możesz odróżnić ekspresowe PZ od zwykłych PZ po dużej niebieskiej ikonie. Gdy po raz pierwszy umieścisz Express VI na schemacie blokowym, pojawi się odpowiednie okno dialogowe konfiguracji. Po zakończeniu dostosowywania, LabVIEW automatycznie generuje kod na podstawie wygenerowanej konfiguracji Express VI. Możesz wyświetlić i edytować ten kod lub zmienić ustawienia Express VI, ponownie otwierając okno dialogowe, klikając dwukrotnie ikonę Express VI.

Jako przykład rozważ zadanie wprowadzania danych do ich realizacji. analiza programu. LabVIEW bardzo ułatwia interakcję z różnymi urządzeniami, ponieważ zawiera sterowniki dla tysięcy urządzeń. Zadanie zbierania danych można zrealizować nie tylko za pomocą projektu kilku VI, ale także z prostszą opcją - ekspresowym VI.

Po prostu określ kanały odczytu/zapisu w ustawieniach DAQ Assistance Express VI i skonfiguruj parametry, takie jak częstotliwość próbkowania, skalowanie, taktowanie i wyzwalacze. Ponadto Express VI zapewnia możliwość wstępnego zbierania danych z urządzenia w celu sprawdzenia, czy wybrane ustawienia gromadzenia danych są prawidłowe.


Rys.4. DAQ Assistant Express VI znacznie upraszcza konfigurację czasu wyzwalania i parametrów kanału



Rys.5. Kod G odpowiednik DAQ Assistant Express VI


Mimo wszystkich swoich zalet, Express VIs nie zapewniają niskopoziomowej kontroli i konfiguracji trybu pracy urządzenia, co jest realizowane przy użyciu konwencjonalnych VI. Użytkownicy nowi w LabVIEW mogą korzystać z wbudowanej funkcji, która konwertuje wcześniej skonfigurowany Express VI na sekwencję regularnych VI. Może to pomóc początkującym w nauce kodu niskiego poziomu. Wystarczy wybrać linię Otwórz panel przedni w menu kontekstowe express VI na schemacie blokowym. Zauważ, że każdy Express VI może być zastąpiony przez kombinację kilku zwykłych VI, a edycja LabVIEW Professional Development System pozwala na tworzenie własnych Express VI.

Skryptowe pliki support.m
Dzięki modułowi LabVIEW MathScript RT możesz importować, edytować i wykonywać skrypty plików *.m tradycyjnie używane w modelowaniu i analizie matematycznej, przetwarzaniu sygnałów i złożonych obliczeniach matematycznych. Możesz ich używać z kodem G do tworzenia samodzielnych aplikacji na komputer stacjonarny lub sprzęt czasu rzeczywistego.

Istnieje kilka sposobów pracy z MathScript w LabVIEW. Aby interaktywnie pracować ze skryptami, użyj okna MathScript pokazanego na rys. 6


Rys.6. Rozwój interaktywny algorytmy tekstowe w oknie MathScript


Aby użyć skryptów *.m w aplikacji LabVIEW i połączyć moc programowania tekstowego i graficznego, użyj węzła MathScript pokazanego na rysunku 7. Korzystanie z węzła MathScript pozwala na osadzenie algorytmów tekstowych w kodzie VI i użycie możliwości graficzne interfejs do zarządzania parametrami scenariusza (przyciski, suwaki, kontrolery, wykresy i inne elementy).


Rys.7. Węzeł MathScript ułatwia używanie scripts.m w kodzie G


Moduł LabVIEW MathScript RT posiada własny silnik skryptowy *.m i nie wymaga instalacji strony trzeciej oprogramowanie. Korzystanie z węzła MathScript pozwala na połączenie zalet algorytmów tekstowych, wysokiego stopnia integracji LabVIEW ze sprzętem, interaktywnego interfejsu użytkownika i innych technik programowania omówionych w tym artykule w jednej aplikacji.

Programowanie obiektowe
Programowanie obiektowe jest jednym z najpopularniejszych rodzajów programowania. Takie podejście umożliwia łączenie wielu różnych komponentów w programie w pojedyncze klasy obiektów. Definicja klasy zawiera charakterystykę obiektu oraz opis działań, które obiekt może wykonywać, powszechnie określanych jako właściwości i metody. Klasy mogą mieć dzieci, które dziedziczą właściwości i metody oraz mogą je zastępować lub dodawać nowe.


Rys.8. Podejście obiektowe opiera się na klasach (przykład na obrazku) i związanych z nimi właściwościach i funkcjach VI


Używanie OOP w LabVIEW jest możliwe od wersji 8.2

Główne zalety tego podejścia to:

  • . Enkapsulacja: Enkapsulacja to połączenie danych i metod w klasie, dzięki czemu można do nich uzyskać dostęp tylko za pośrednictwem VI, które są członkami klasy. Takie podejście pozwala wyizolować sekcje kodu i upewnić się, że ich zmiana nie wpłynie na kod reszty programu.
  • . Dziedziczenie: Dziedziczenie pozwala na wykorzystanie istniejących klas jako podstawy do opisywania nowych klas. Kiedy tworzona jest nowa klasa, dziedziczy ona typy danych i członków VI klasy, a tym samym implementuje właściwości i metody klasy nadrzędnej. Możliwe jest również dodanie niestandardowych VI, aby zmienić funkcjonalność klasy.
  • . Dysponowanie dynamiczne: Metody mogą być definiowane przy użyciu kilku VI o tej samej nazwie w hierarchii klas. Ta metoda nazywana jest dynamiczną dyspozytornią, ponieważ decyzja o tym, które VI zostanie wywołane, jest podejmowana w momencie wykonywania programu.
Te funkcje OOP pozwalają uczynić kod bardziej zrozumiałym i skalowalnym, a także, jeśli to konieczne, ograniczyć dostęp do VI.

Modelowanie i symulacja
Modelowanie i symulacja systemy fizyczne- popularne podejście w rozwoju systemów opisywanych równaniami różniczkowymi. Badanie modelu umożliwia ujawnienie charakterystyk układów dynamicznych i opracowanie jednostki sterującej o wymaganym zachowaniu.

Rysunek 9 przedstawia pętlę sterowania i symulacji, która rozwiązuje równanie różniczkowe za pomocą algorytmów wbudowanych w LabVIEW w czasie rzeczywistym przez określony czas. To podejście programistyczne jest również oparte na przepływie danych, podobnie jak język G, ale jest powszechnie określane jako przepływ sygnałów. Jak pokazano na rysunku 9, można łączyć techniki modelowania matematycznego z innymi technikami, takimi jak strumienie danych G i węzeł MathScript.


Ryż. 9. Diagram symulacji przedstawia propagację sygnału, sprzęt we/wy i węzeł MathScript.


Pętla sterowania i symulacji obsługuje funkcje używane do implementacji liniowych modeli systemów stacjonarnych na urządzeniach z zainstalowanym systemem operacyjnym czasu rzeczywistego. Funkcji tych można używać do definiowania modeli dyskretnych przez określenie funkcji przenoszenia, diagramu bieguna zerowego i układu równań różniczkowych. Narzędzia do analizy w dziedzinie czasu i częstotliwości, takie jak odpowiedź krokowa lub funkcje wykresu wróżebnego, umożliwiają interaktywną analizę zachowania otwartych i zamkniętych pętli sterowania/symulacji. Możesz także użyć wbudowanych narzędzi do konwersji modeli opracowanych w środowisku programistycznym The MathWorks, Inc. Simulink®, co pozwoli na ich wykorzystanie w środowisku LabVIEW. Te dynamiczne systemy mogą być instalowane na urządzeniach z systemem operacyjnym czasu rzeczywistego bez przechodzenia przez różne etapy konwersji programu dzięki funkcjonalności biblioteki LabVIEW Real-Time Module, która doskonale nadaje się do tworzenia prototypów systemów sterowania i aplikacji symulacyjnych.

Diagramy stanów
Moduł NI LabVIEW Statechart zapewnia programiście możliwość opisania funkcjonalności systemu w najbardziej abstrakcyjny możliwy sposób przy użyciu wykresów stanów. Integracja kodu LabVIEW ze stanami diagramu pozwala na stworzenie wirtualnej specyfikacji pracy dla twojej aplikacji. Moduł NI LabVIEW Statechart dodaje hierarchiczne zagnieżdżanie i równoległe wykonywanie do konwencjonalnej funkcjonalności wykresów stanów. Należy zauważyć, że diagramy stanów pozwalają opisać reakcję systemu na zdarzenia, co czyni je bardzo wygodnym narzędziem do tworzenia systemów reaktywnych, takich jak urządzenia wbudowane, systemy sterowania i złożone interfejsy użytkownika.


Ryż. dziesięć. Moduł LabVIEW Statechart opisuje system oparty na wykresie stanów.


Dość często do podziału aplikacji na podsystemy, takie jak akwizycja danych, wyprowadzanie danych, komunikacja sieciowa, rejestrowanie danych i zarządzanie interfejsem użytkownika, używa się wykresów stanu. W tym przypadku diagramy stanów określają, jakie informacje są przesyłane między stanami (podsystemami) iw jakiej kolejności działają.

Architektura aplikacji oparta na schemacie stanów umożliwia bardziej wydajne tworzenie złożonych systemów oprogramowania, zwłaszcza systemów sterowanych zdarzeniami, takich jak dynamiczne kontrolery systemowe, złożone interfejsy użytkownika i protokoły komunikacji cyfrowej.

VHDL dla FPGA
Moduł LabVIEW FPGA pozwala na użycie języka G do pisania kodu dla FPGA. Jednak, podobnie jak w przypadku innych technik programistycznych, możesz użyć gotowego kodu lub po prostu wybrać sposób implementacji programu. Większość FPGA jest programowana przy użyciu tekstowego języka programowania strumieniowego VHDL. Zamiast przepisywać istniejące bloki G IP, możesz zaimportować kod VHDL za pomocą węzła Component-Level IP (CLIP). Zazwyczaj do skonfigurowania interfejsu pomiędzy elementami diagramu blokowego potrzebny jest plik CLIP XML, ale LabVIEW dostarcza kreatora importu CLIP, który robi to automatycznie. Zawiera listę wejść i wyjść bloku IP, które można przeciągnąć myszą na schemat blokowy i wykorzystać w aplikacji, jak pokazano na rys. jedenaście.


Ryż. jedenaście. Węzeł CLIP.


Ponieważ NI używa Xilinix FPGA i oprogramowania Xilinx toolkit w module LabVIEW FPGA, możesz użyć Xilinx Core Generator do stworzenia kompatybilnego rdzenia. Możesz również użyć zestawu Xilinx Embedded Development Kit do stworzenia dowolnego mikroprocesora programowego. I wreszcie wielu programiści zewnętrzni dostarczać różne rodzaje Bloki IP do zarządzania magistralą, przetwarzania sygnałów i określonych rdzeni.

Integracja kodu podobnego do C
Możesz użyć sekwencyjnego kodu tekstowego w swoim diagramie blokowym na kilka sposobów. Pierwszy sposób to Formula Node, który obsługuje składnię podobną do C, z definicjami zmiennych i średnikami na końcu linii.

Węzeł Inline C jest podobny do węzła Formuły i zapewnia dodatkowe funkcje programowanie niskopoziomowe i obsługa plików nagłówkowych bez narzutu wywołań procedur. Możesz użyć wbudowanego węzła C, aby osadzić dowolny kod C, w tym instrukcje #defines, które są składniowo ujęte w nawiasy w kodzie C.

Interakcja z plikami wykonywalnymi
Podczas programowania w środowisku LabVIEW często konieczny jest dostęp do skompilowanych plików i bibliotek z aplikacji napisanych w środowisku LabVIEW w celu ponownego wykorzystania algorytmów opracowanych wcześniej w innych środowiskach. Ponadto podczas tworzenia projektu konieczne jest uzyskanie dostępu do aplikacji napisanych w języku LabVIEW z innych aplikacji.

Aby rozwiązać te problemy, LabVIEW dostarcza szeroką gamę różnych narzędzi. Po pierwsze, LabVIEW może wywoływać funkcje DLL, a także używać interfejsów ActiveX i .NET.

Po drugie, aplikacja napisana w języku LabVIEW może udostępnić swoją funkcjonalność innej aplikacji jako DLL lub przy użyciu narzędzi ActiveX.

Jeśli masz kod źródłowy C, którego chcesz użyć w swojej aplikacji LabVIEW, możesz skompilować DLL i połącz go za pomocą węzła funkcji biblioteki wywołań. Na przykład możesz zorganizować Równoległe obliczenia używając algorytmów napisanych w C, podczas gdy program napisany w LabVIEW będzie zarządzał równolegle działającymi wątkami. Aby uprościć pracę z zewnętrznymi bibliotekami, LabVIEW posiada Kreatora importu współdzielonej biblioteki, który pozwala automatycznie tworzyć lub aktualizować opakowanie w celu wywołania odpowiednich bibliotek (Windows . plik dll, plik .framework systemu Mac OS lub plik .so systemu Linux).

Ponadto, korzystając z System Exec.vi, możesz korzystać z interfejsu wiersz poleceń system operacyjny.

Połączenie kilku technik programowania w jednym środowisku programistycznym umożliwia ponowne wykorzystanie algorytmów opracowanych w innych językach. Ponadto programista może połączyć operacje wysokiego i niskiego poziomu w jednej aplikacji, dzięki czemu kod jest bardziej elastyczny i wizualny. Różne poziomy abstrakcji umożliwiają wizualizację złożonych algorytmów przy jednoczesnym zachowaniu kontroli aplikacji i sprzętu na niskim poziomie. Dzięki ścisłej integracji sprzętu można stosować oba podejścia do przetwarzania sygnałów na platformach z procesorami wielordzeniowymi, układami FPGA i procesorami wbudowanymi.

Problemy zwykle mają wiele rozwiązań, a środowisko programistyczne LabVIEW jest wystarczająco elastyczne, aby umożliwić Ci wybór metody rozwiązania, która najlepiej Ci odpowiada.

Simulink® jest zastrzeżonym znakiem towarowym The MathWorks, Inc.

ARM, Keil i µVision są znakami towarowymi i zastrzeżonymi znakami towarowymi firmy ARM Ltd lub jej spółek zależnych.