Rozdział 2
Podstawy
programowania
graficznego
2.1. Co to jest i jak działa LabVIEW
LabVIEW jest środowiskiem programowym związanym z językiem
programowania graficznego – językiem G. Język ten zachowując większość
możliwości języka C/C++ (którego jest w dużej mierze graficznym
odpowiednikiem) pozwala znacznie łatwiej programować użytkownikom nie
znającym klasycznych - tekstowo zorientowanych języków programowania.
Celowo użyto tu słowa programować zamiast pisać programy, ponieważ
programu graficznego nie pisze się a tworzy się jego graficzny diagram
poprzez łączenie określonego typu liniami (przewodami) elementy
reprezentujące graficzne symbole (ikony). Ikony te są graficzną reprezentacją
funkcji i struktur tego języka. Nie bez znaczenia jest fakt, że kompilacja
programu odbywa się automatycznie, na bieżąco, w trakcie tworzenia
diagramu, natomiast uruchomienie lub zatrzymanie wykonania programu
odbywa się przez kliknięcie tylko jednej ikony.
Programować w środowisku LabVIEW można, mając małe doświadczenie
w programowaniu. Wystarczy umieć poruszać się w środowisku Windows.
Diagram programu jest tworzony w sposób wygodny dla użytkowników
ponieważ wykorzystuje się znane w technice symbole (na ikonach) i łączy je
tak jak ma działać program.
LabVIEW jest przeznaczone dla budowy własnych instrumentów
wirtualnych różnego typu. W tym celu w LabVIEW są zaimplementowane
drajwery do szerokiej gamy urządzeń od najprostszych komputerowych kart
62 M.Metzger: Programowanie graficzne układów sterowania
We/Wy
do
specjalizowanych
urządzeń
i
przyrządów.
Oczywiście
przewidziano obsługę standardów RS-232 i RS-485 oraz TCP/IP, UDP oraz
OPC.
Dla
ułatwienia
rozwiązywania
skomplikowanych
problemów
numerycznych nawet wersja podstawowa LabVIEW posiada bardzo bogatą
bibliotekę
matematyczną
gdzie
standardowe
procedury
numeryczne
przedstawione są za pomocą gotowych do wykorzystania ikon.
Aczkolwiek podstawowym przeznaczeniem LabVIEW jest budowa
własnych
instrumentów
wykorzystujących
komunikację
fizyczną
z
otoczeniem komputera, to bardzo atrakcyjne mogą być instrumenty
komunikujące się z użytkownikiem tylko za pomocą myszki i klawiatury oraz
obrazu a monitorze.
Dla budowy własnego panelu operatorskiego na ekranie monitora,
LabVIEW oferuje wyjątkowo obfity zestaw gotowych do wykorzystania
wskaźników i zadajników. Elementy te można dowolnie ustawiać na panelu,
zmieniać ich rozmiary i kolory. Każdy z tych elementów ma też możliwość
wyboru wielu opcji i atrybutów jego wyglądu i działania.
Przy użyciu LabVIEW tworzymy 32 bitowe programy, o szybkości
wykonania odpowiadającej językowi C. Wykorzystując ”Application Builder”
możemy
tworzyć
samodzielne
32
bitowe
aplikacje
możliwe
do
rozpowszechniania. LabVIEW posiada również mechanizmy dla przyłączenia
zewnętrznych procedur poprzez, między innymi, DLL i ActiveX.
2.2. Instalacja oprogramowania
Jak większość narzędzi działających w środowisku Windows oprogramowanie
LabVIEW samo się instaluje po odpowiedniej komendzie. I tak:
LabVIEW wersja studencka jest oferowana jako dodatek do książki [79].
Celem instalacji należy włożyć płytę CD do napędu i w Windows wykonać
komendę: setup. Następnie należy wykonywać polecenia programu
instalującego.
Wszystkie profesjonalne wersje są rozpowszechniane na płytach CD lub
DVD. Należy włożyć płytę do czytnika i uruchomić program setup.exe.
Następnie program instalacyjny prowadzi użytkownika przez instalację.
Należy pamiętać o podaniu kodu, który jest zabezpieczeniem programu. W
każdym legalnym zestawie LabVIEW jest podany kod dla danego
M.Metzger: Podstawy programowania graficznego
63
egzemplarza oprogramowania. Wersje studencka i demonstracyjna nie są
chronione kodem. Politechnika Śląska wykupiła dla swoich pracowników i
studentów licencję na nieograniczoną liczbę stanowisk.
2.3. Otwarcie LabVIEW oraz panel
operatorski i diagram programu
Po uaktywnieniu w Windows ikony reprezentującej LabVIEW pojawia się na
chwilę plansza informacyjna a następnie okno dialogowe przedstawione na
rysunku 2.1.a
Korzystając z okna dialogowego można rozpocząć edycję nowego
programu, otworzyć program już istniejący oraz wyjść z LabVIEW. Bardzo
ważna jest możliwość skorzystania z bogatej biblioteki gotowych przykładów
– patrz Rysunek 2.1.b. W tym dla nas automatyków istotne są przykłady
aplikacji przemysłowych.
Rysunek 2.1.a. Okno dialogowe LabVIEW
64 M.Metzger: Programowanie graficzne układów sterowania
Rysunek 2.1.b. Okno dialogowe LabVIEW Examples
Po przejściu do nowego programu, lub otworzeniu już istniejącego, otwierają
się dwa okna: okno panelu operatorskiego oraz okno diagramu programu w
języku G (rysunek 2.2.).
Jeśli panel operatorski (graficzny interfejs użytkownika) dla danego
programu, budowany w oknie panelu operatorskiego oraz diagram programu
w oknie diagramu, są niewielkie to można te okna mieć na ekranie
komputerowego monitora jednocześnie. Gdy jednakże jedno z okien zajmuje
większość ekranu to przechodzenie z okna do okna wymaga wykorzystania
odpowiedniego mechanizmu. Należy z paska menu (w obu oknach jest ten
sam) wybrać opcję Windows a następnie odpowiednio: Show Diagram lub
Show Panel.
M.Metzger: Podstawy programowania graficznego
65
a)
b)
Rysunek 2.2. Okna programu w środowisku LabVIEW,
a) okno panelu operatorskiego,
b) okno diagramu
2.4. Program jako instrument wirtualny
Program napisany w środowisku LabVIEW nazywamy instrumentem
wirtualnym (nawet jeśli dotyczy tylko pewnych obliczeń numerycznych i nie
wykorzystuje, oprócz klawiatury, myszki i monitora, żadnych urządzeń
We/Wy). Program taki zapisany na dysku przyjmuje automatyczne nazwę z
rozszerzeniem „vi” – skrót od angielskiej nazwy virtual instrument.
Każdy program po dodaniu końcówek umożliwiających jego komunikację
może stać się podprogramem innego programu (instrumentu) nadrzędnego.
Reasumując, instrument wirtualny składa się z panelu operatorskiego i
diagramu programu. Oba te elementy są zapisywane razem do jednego pliku
dyskowego o rozszerzeniu „vi”.
Przy wykonaniu programu korzystamy z panelu operatorskiego
aczkolwiek możliwe jest również uruchomienie programu w oknie diagramu
ale z okna diagramu nie mamy możliwości komunikacji z instrumentem.
66 M.Metzger: Programowanie graficzne układów sterowania
2.5. Palety podstawowych narzędzi.
W wersji LabVIEW 2010 narzędzia służące do budowy programu zebrane są
na paletach, które pojawiają się w osobnych oknach. Poniżej przedstawione są
te palety wraz ze sposobem ich uaktywnienia.
2.5.1. Paleta narzędzi edycyjnych i manipulacyjnych
Paletę tę wywołujemy z paska menu w następujący sposób: View>>Tools
Palette.
Rysunek 2.3. Paleta narzędzi edycyjnych i manipulacyjnych
Paleta zawiera szereg narzędzi edycyjnych, które działają w obu oknach
programu. Przedstawione na ikonach palety narzędzia, po uaktywnieniu
(kliknięcie lewym klawiszem
myszki) ujawniają się
jako kursor
odpowiadający symbolowi na ikonie. I tak.
M.Metzger: Podstawy programowania graficznego
67
narzędzie manipulacyjne dla zadajników panelu operatorskiego
(zmienia wartości zadajników poprzez ruch np. suwakiem lub
uaktywnia zmianę zapisu wartości w okienku zadajnika)
kursor wskazujący – pozwala wybierać, zaznaczać, przesuwać lub
zmieniać wymiary obiektów (w obu oknach)
narzędzie edycji tekstu (zarówno w etykietach obiektów jak i przy
zapisie etykiet z komentarzami)
szpulka - pozwala na łączenie przewodami obiektów w oknie
diagramu
narzędzie pozwalające rozwijać menu obiektów
Przesuwanie (skrollowanie) zawartości okien (bez użycia pasków
przesuwania)
ustawienie punktów przerwania w programie
próbnik – pozwala na “podgląd” przewodów w oknie diagramu
smoczek – pozwala “zassać” kolor z jakiegoś obiektu celem
skopiowania
do
innego
obiektu,
skopiowany
kolor
jes
automatycznie umieszczony w pędzelku
pędzelek – narzędzie kolorowania obiektów; lewy klawisz
myszki koloruje wskazany przez kursor obiekt (kolorem
zaznaczonym na ikonie); prawy klawisz myszki otwiera
paletę kolorów celem wyboru tego koloru.
68 M.Metzger: Programowanie graficzne układów sterowania
2.5.2. Paleta kontrolek ( zadajników i wskaźników)
Paletę tę wywołujemy z paska menu w następujący sposób: View >> Controls
Palette.
Rysunek 2.4. Paleta kontrolek z rozwinięciem wskaźników o postaci
wykresów i monitorów .
Paleta kontrolek udostępnia zadajniki i wskaźniki możliwe do wykorzystania
przy programowaniu graficznego interfejsu użytkownika w oknie panelu.
Może zajmować oczywiście dowolne miejsce na ekranie komputera ale jest
M.Metzger: Podstawy programowania graficznego
69
widoczna tylko razem z oknem panelu. Również kontrolki mogą być użyte
tylko w oknie panelu.
Zestaw oferowanych kontrolek jest zaiście imponujący. Od kontrolek
analogowych i dwupołożeniowych do okienek monitorowania przebiegów (w
tym animowane przebiego 3D) i dekoracji. Większość kontrolek może być
zarówno zadajnikiem (wprowadzającym dane do programu) lub też
wskaźnikiem (pokazującym wartości i przebiegi). Użytkownik sam wybiera
czy dana kontrolka jest zadajnikiem czy też wskaźnikiem.
Paleta kontrolek jest dwustopniowa. Podstawowa paleta ma tylko ikony
rodzaju kontrolek a uaktywniona lewym klawiszem myszki udostępnia paletę
ikon konkretnych kontrolek. Na rysunku 2.4 przedstawiono rozwinięcie dla
następujących rodzajów wskaźników wykresy XY, monitory przebiegów
czasowych i monitory pokazujące zmiany wartości przy użyciu zmiany
intensywności barw. Na rysunku 2.5. przedstawiono najważniejsze kontrolki
numeryczne – o działaniu ciągłym. W zależności od ustawień, kontrolki te
mogą być zarówno wskaźnikami jak i zadajnikami. W przypadku zadajników
zmiany wartości ustawiamy przy użyciu kursora manipulacyjnego.
Rysunek 2.5. Kontrolki numeryczne.
70 M.Metzger: Programowanie graficzne układów sterowania
2.5.3. Funkcje (elementy i struktury języka G)
Paletę tę wywołujemy z paska menu w następujący sposób: Show Functions
Palette.
Rysunek 2.6. Paleta funkcji z rozwinięciem funkcji arytmetycznych.
Paleta funkcji udostępnia funkcje możliwe do wykorzystania przy tworzeniu
programu w języku G w oknie diagramu. Okienko palety funkcji może
zajmować oczywiście dowolne miejsce na ekranie komputera ale jest
widoczne tylko razem z oknem diagramu. Również funkcje mogą być użyte
tylko w oknie diagramu.
Paleta oferuje wszystkie elementy języka G oraz elementy dodatkowych
narzędzi (np. bogata biblioteka procedur analizy matematycznej). W
zależności od rodzaju funkcji może być rozwijana wielostopniowo. Na
rysunku przedstawiono rozwinięcie dla funkcji realizujących operacje
arytmetyczne z dodatkowym rozwinięciem funkcji trygonometrycznych.
Przy wielostopniowym rozwijaniu palety, ikony wymagające rozwinięcia
mają kolor szary. Dopiero konkretne funkcje do wykorzystania w programie
można przenieść do diagramu.
M.Metzger: Podstawy programowania graficznego
71
Rysunek 2.7. Ważniejsze przykłady rozwinięcia palety funkcji.
a) struktury (w tym pętle), b)Opis Formula Node
Rysunek 2.7. Ważniejsze przykłady rozwinięcia palety funkcji -
Macierze
72 M.Metzger: Programowanie graficzne układów sterowania
Rysunek 2.7. Ważniejsze przykłady rozwinięcia palety funkcji.
Klastry
Rysunek 2.7. Ważniejsze przykłady rozwinięcia palety funkcji:
funkcje operacji porównania.
Rysunek 2.7. Ważniejsze przykłady rozwinięcia palety funkcji:
operacje logiczne
M.Metzger: Podstawy programowania graficznego
73
Większość symboli na ikonach funkcji powinna być zrozumiała dla
programisty (nawet początkującego). Tym niemniej środowisko LabVIEW
oferuje również bieżącą pomoc.
Paleta
struktur
(Rys.
2.7.a)
zawiera
graficzną
reprezentację
najważniejszych struktur programowych języka G. Są to między innymi:
struktura sekwencji, struktura przypadku, pętla for, pętla while oraz węzeł
formuł matematycznych.
Działanie struktur jest identyczne jak w konwencjonalnych językach
programowania (w języku graficznym nawet lepiej jest zrozumiały żargonowy
termin „zawartość pętli” ponieważ obliczenia prowadzone w pętli muszą być
zaprogramowane graficznie wewnątrz graficznego symbolu pętli).
2.6. Bieżąca pomoc.
Ś
rodowisko LabVIEW oferuje bardzo przydatną usługę w postaci bieżącej
pomocy. Usługę tę wywołujemy z paska menu w następujący sposób:
Help>>Show Help. Na ekranie pojawi się dodatkowe okienko Help.
Dotykając kursorem interesujących nas ikon funkcji (patrz Rys. 2.8)
spowodujemy, że w oknie Help pojawi się automatycznie wyczerpujący opis
funkcji i możliwości jej wykorzystania.
Programista może napisać instrukcje pomocy również dla swoich
własnych funkcji.
Rysunek 2.8. Uaktywnienie bieżącej pomocy
74 M.Metzger: Programowanie graficzne układów sterowania
2.7. Pasek menu
Pasek menu jest taki sam w obu oknach (panelu i diagramu). Oferuje
następujące usługi.
File – Standardowe działania na plikach w środowisku Windows, takie jak
m.in.: New (nowy plik), Open (otwórz), Close (zamknij), Save
(zapisz), Save as (zapisz jako), Exit (opuszczenie LabVIEW).
Szczególnie ważna jest usługa VI properties. Umożliwia ona zapis
specjalny programu np. bez belek skrollingu lub bez możliwości
dostępu do pasków menu oraz sterowania. Ważne to jest przy
zapisie programu jako osobnej aplikacji.
Edit – Standardowe działania edycyjne, takie jak m.in.: Undo (cofnij
ostatnie działanie), Redo (powtórzenie anulowanego działania),
Copy (skopiuj do schowka zaznaczony obiekt), Paste (wstawienie
zawartości schowka w zaznaczone kursorem miejsce), Import
Picture (wstawienie rysunku/obrazu z pliku). Opcja Remove
Broken Wires umożliwia usunięcie złych połączeń w diagramie
programu graficznego.
Operate – Opcje związane z uruchamieniem programu np. Run. Dla
typowych aplikacji rzadziej stosowane ponieważ program
wygodniej uruchomić klawiszem w pasku sterowania.
Tools – Zaawansowane usługi związane budową aplikacji. Jeśli LabVIEW
jest wyposażony w Application Builder to tu znajdują się opcje:
Build Application (zbuduj samodzielnie działającą aplikację –
plik ”.exe”).
Windows – Usługi związane z aktywacją okien takie jak m.in.: Show
Diagram (przejście do okna diagramu jeśli jesteśmy w oknie
panelu), Show Panel (przejście do okna panelu jeśli jesteśmy
w oknie diagramu),
M.Metzger: Podstawy programowania graficznego
75
View- Show Controls Palette (uaktywnienie palety kontrolek), Show
Functions Palette (uaktywnienie palety funkcji), Show Tools
Palette (uaktywnienie palety narzędzi),
Help – Pomoc. Opcja Show Help uaktywnia okno bieżącej pomocy. W
trakcie budowania programu w języku G dotknięcie kursorem
ikony funkcji (bez kliknięcia) powoduje pokazanie się w oknie
bieżącej pomocy instrukcji użycia tej funkcji).
2.8. Pasek sterowania
Pasek sterowania okna diagramu przedstawiony jest na rysunku 2.9. Pasek
sterowania okna panelu jest prawie identyczny, z tym że w pasku sterowania
okna panelu nie występują klawisze 7,8,9.
Klawisz enter (1) pojawia się tylko wtedy gdy wpisujemy w danym oknie
jakiś tekst – klawisz ten kończy edycję tekstu np. w etykiecie (na rys.2.9
numerki oznaczające klawisze są właśnie etykietami na pustym diagramie).
Dodajmy, że z kolei klawisz ENTER (klawiatury komputera) kończy linię
tekstu.
Rysunek 2.9. Pasek sterowania okna diagramu
Poszczególne klawisze oferują następujące usługi.
1. zapis aktu alnie pisanego tekstu,
2. uruchomienie programu (run),
76 M.Metzger: Programowanie graficzne układów sterowania
3. uruchomienie z kontynuacją,
4. zatrzymanie wykonania programu,
5. przerwa w wykonaniu programu,
6. wykonanie z podglądem (graficzny debugging)
7. zatrzymaj się przed danym elementem programu,
8. zatrzymaj się za danym elementem programu,
9. zatrzymaj się po tym elemencie programu i zakończ wykonanie,
10. ustawienie rodzajów, wielkości kolorów czcionek (fontów),
11. ustawienie zaznaczonych obiektów (np. w jednej linii)
12. rozproszenie zaznaczonych obiektów,
13. zmiana kolejności ułożonych na sobie obiektów graficznych.
2.9. Idea programowania graficznego –
pierwszy prosty przykład programu
Aczkolwiek język G jest graficznym odpowiednikiem języka C i w zasadzie
ma takie same możliwości, to jednak (ze względu na inną filozofię
programowania) jego zastosowanie jest szczególnie wygodne w tych
dziedzinach techniki, które związane są ze sterowaniem, przetwarzaniem
różnego typu sygnałów oraz szeroko rozumianymi miernictwem i kontrolą.
Najprostszy program przedstawiony był już bez wyjaśnień w podrozdziale
2.3 dla pokazania okienek programu. Na rysunku 2.10 przedstawiony jest
diagram tego samego programu z dopisanymi dodatkowo komentarzami.
Przypomnijmy, że przedstawiony na rysunku 2.2 panel operatorski
programu (lub inaczej graficzny interfejs użytkownika) ma tylko dwa
elementy. Przełącznik „noise” właczający lub wyłączający sygnał szumu
(wartości przypadkowe w przedziale od zera do jeden) oraz monitor
pokazujący otrzymany przebieg sygnału w funkcji czasu. Program ma działać
M.Metzger: Podstawy programowania graficznego
77
w ten sposób, że dla wciśniętego przełącznika (położenie „ON”) na monitorze
ma być rejestrowany sygnał szumu, natomiast przy położeniu „OFF”
przełącznika sygnał rejestrowany ma mieć stałą wartość równą 0.5.
Aby rejestrowana była nie jedna wartość ale przebieg sygnału w funkcji
czasu, rejestracja musi się powtarzać a więc obliczenia muszą być
zorganizowane w pętli. Diagram takiego programu w języku G jest wyjątkowo
prosty (Czytelnik w ramach ćwiczenia raczy się zastanowić jak taki program
wygłądałby w języku C).
Program przy pierwszym spojrzeniu może się wydawać niezrozumiały dla
Czytelnika, który nauczył się już, klasycznych języków tekstowych (takich jak
np. Pascal, C i MATLAB) ponieważ nie ma ani jednej litery tekstu (wszystkie
teksty na diagramie są komentarzami i można je z diagramu wyeliminować).
Przed analizą tego diagramu należy przestawić się na taki sposób myślenia
jaki związany jest z tworzeniem choćby najprostszych obwodów
elektrycznych.
Kluczowa jest tu interpretacja zmiennych. Krótko mówiąc, zmienne na
diagramie w języku G możemy zinterpretować jako przewody (jest to
zrozumiałe dla każdego kto choć raz podłączył żarówkę do baterii i
interpretuje sobie, że w przewodzie płynie prąd reprezentowany przez pewną
wartość zmiennej o symbolu i).
Ikony które są połączone przewodami reprezentują w języku G funkcje
(pewne operacje na zmiennych) lub końcówki (stałe lub zadawane wartości).
Struktura programowa pętli (w tym przypadku jest to pętla „while”) jest
czytelna, mając graficzny kształt pętli obejmującej wszystkie elementy mające
być realizowane wielokrotnie.
Funkcja wyboru (graficzny odpowiednik instrukcji „if”) sprawdza wartość
logiczną s, która jest generowana przez przełącznik na panelu operatorskim.
Jeśli jest to wartość TRUE, na wyściu będzie wartość podłączona przewodem
z generatora liczb przypadkowych, w przeciwnym razie „przepuszczona”
zostanie wartość generowana przez stałą o wartości równej 0.5.
Wyjście funkcji wyboru podłączone jest na wejście monitora
rejestrującego. Aby, jak już wspominiano, nie rejestrować jednej wartości a
ich ciąg (przebieg) w funkcji czasu, obliczenia zorganizowano wewnątrz pętli
„while”. Do warunku logicznego pętli podłączono stałą o wartości TRUE
(program jest włączany i wyłączany klawiszami z paska sterującego). Ikona
reprezentująca zmienną indeksową pętli w tym przykładzie nie jest
wykorzystywana.
78 M.Metzger: Programowanie graficzne układów sterowania
Rysunek 2.10. Diagram programu rejestrującego sygnał szumu.
Ikony warunku logicznego pętli oraz zmiennej indeksu pętli pojawiają się
automatycznie wraz ze strukturą pętli i nie można ich usunąć.
Bardzo pouczające jest dla początkującego programisty w języku G
uaktywnienie graficznego debuggera (klawisz z symbolem żarówki w pasku
sterującym) ponieważ pozwala to na pokazanie jak przebiegają obliczenia w
tym programie (ściślej jak sterowany jest przez program przepływ danych).
Kluczowe znaczenie dla aplikacji typu systemy SCADA, regulatory i
sterowniki lub symulatory procesów przemysłowych ma realizacja obliczeń w
„czasie rzeczywistym”. Automatyka i informatyka przemysłowa do dzisiaj nie
dorobiły się ścisłej definicji tego terminu ale jest on dobrze rozumiany przez
inżynierów. Chodzi o to aby wszelkie obliczenia i obsługa zdarzeń były
niezależne od czasu obliczeniowego natomiast ściśle zsynchronizowane z
czasem „astronomicznym”. Standardowy program w LabVIEW jest
realizowany w warunkach tzw. „soft real-time”, natomiast ten sam program
M.Metzger: Podstawy programowania graficznego
79
skompilowany w środowisku LabVIEW-RT i załadowany (wraz z dołączanym
automatycznie systemem operacyjnym czasu rzeczywistego) do specjalnych
kart NI-DAQ-RT lub modułu sterującego FieldPoint serii 2010 realizuje
działanie tzw. „hard real-time”.
O ile realizacja aplikacji w czasie rzeczywistym w standardowych
językach programowania jest trudnym zadaniem to w środowisku LabVIEW
to narzędzie jest już przygotowane w postaci odpowiednich gotowych
procedur. Przedstawiona na rys. 2.11 ikona realizuje tzw. „synchronized
waiting” a umieszczona w pętli powoduje synchroniczne wykonywanie pętli z
określonym czasem wykonania. Przedstawiony na rys. 2.11 program to
program z rys. 2.10 uzupełniony o realizację wykonania w czasie
rzeczywistym.
Rys. 2.11. Zaprogramowanie realizacji aplikacji w czasie rzeczywistym
(real-time).