POLITECHNIKA POZNACSKA
INSTYTUT MASZYN ROBOCZYCH
I POJAZDÓW SAMOCHODOWYCH
LABORATORIUM Z POMIARÓW WIELKOŚCI
MECHANICZNYCH
Ćwiczenie nr 13
Programowanie pomiarów w środowisku
Agilent VEE
1. Cel ćwiczenia
Celem ćwiczenia jest zapoznanie się z podstawami programowania w środowisku
programowym Agilent VEE.
2. Wymagane wiadomości podstawowe
Obiekty, typy zmiennych, przepływ danych między obiektami, formuły matematyczne.
3. Charakterystyka ogólna Agilent VEE
Część teoretyczna opracowana na podstawie materiałów opracowanych przez dr in\. Bogdan
Kasprzak (www.kmeif.pwr.wroc.pl/elektron/interfejsy/hpvee/opis_vee.htm).
Agilent VEE jest środowiskiem projektowania oprogramowania systemów pomiarowych.
Za pomocą programu mo\na zrealizować:
- sterowanie przyrzÄ…dami,
- pomiar (inicjalizacja, nadzór, wykrycie ich wykonania),
- akwizycja (zebranie danych pomiarowych, zapamiętanie na stałych nośnikach),
- przetwarzanie zebranych danych (od prostych operacji matematycznych do cyfrowego
przetwarzania sygnałów),
- prezentację wyników w postaci tekstowej i graficznej,
- generacje raportów z wyników badań,
- graficzny interfejs u\ytkownika.
Charakterystyczną cechą środowiska VEE jest odejście od tradycyjnego programowania
tekstowego (np. Borlanda) na rzecz projektowania graficznego. Podstawowym elementem
programu jest ikona obiektu wykonującego określone operacje na swoich danych
wejściowych. Sekwencja wykonywania instrukcji jest zastąpiona przepływem danych
pomiędzy obiektami programu projektowanym za pomocą linii łączących wyjścia i wejścia
obiektów.
Zapis programu tworzy siÄ™ podobnie do schematu blokowego urzÄ…dzenia, przedstawiajÄ…c
elementy funkcjonalne oraz drogi przepływu danych i informacji sterujących. Po wybraniu
właściwej koncepcji rozwiązania projektowanie odbywa się poprzez konstrukcje jego
schematu blokowego. Podobnie jest w przypadku graficznego zapisu programu. Graficzne
środowisko projektowania aplikacji pomiarowej zapewnia du\e ułatwienia w projektowaniu
profesjonalnych aplikacji oraz znakomicie przyspiesza uzyskanie końcowego produktu przy
zminimalizowaniu trudności projektowych.
Agilent VEE pozwala wyposa\yć projektowaną aplikację w graficzny interfejs
u\ytkownika zawierający elementy interakcyjnej współpracy programisty z aplikacją. Do tego
celu program oferuje bogaty zestaw ró\nego rodzaju nastawników, wskazników i
wyświetlaczy. Istnieje te\ mo\liwość wykorzystania technologii ActiveX i w ten sposób
integrowania projektowanej aplikacji z innymi komercyjnymi produktami, takimi jak np.
Microsoft Excel, Word itp. Wbudowane mechanizmy wykorzystania zewnętrznych bibliotek
dynamicznych pozwalają budować hybrydowe aplikacje, których część jest kreowana za
pomocą tradycyjnych środowisk projektowych, np. w C, C++ lub Pascal.
Stworzona aplikacja mo\e być wykonywana poza środowiskiem projektowo-
uruchomieniowym przy zastosowaniu tzw. runtime'u wchodzącego w skład pakietu Agilent
VEE (program veerun.exe; polecenie wykonania: veerun [option] aplikacja.vee ).
4. Podstawowy składnik programu Agilent VEE - obiekt VEE
Elementami programu są obiekty VEE prezentowane w postaci prostokątów z
odpowiednim opisem charakteryzujÄ…cym dany obiekt. Utworzony obiekt przyjmuje nazwÄ™
domyślną, ale mo\na ją zmienić wprowadzając dowolny opis charakteryzujący precyzyjniej
2
rolę obiektu. Zadaniem obiektu jest wykonanie określonych operacji na danych wejściowych
obiektu oraz ich dostarczenie na wyjście danych. Obraz graficzny obiektu posiada dwa
przyciski: lewy-górny rozwija menu obiektu; prawy-górny minimalizuje obraz obiektu. Menu
obiektu zawiera szereg operacji ułatwiających edycję programu (Clone powielenie obiektu,
Cut usunięcie) oraz konfigurowanie obiektu (dodawanie i usuwanie końcówek oraz
określanie dodatkowych cech obiektu Properties). W zakresie cech ogólnych programista
mo\e określić opis obiektu, uaktywnić opcję prezentacji pełnego opisu końcówek, określić
zachowanie obiektu odnośnie momentu jego inicjalizacji oraz sposobu działania, np.
uaktywnienie opcji Wait for Input dla obiektu nastawczego powoduje, \e dane wyjściowe
pojawiÄ… siÄ™ dopiero po akcji ponownego ustawienia nastawnika (rys. 1). Zakres edytowanych
własności zale\y od rodzaju obiektu.
Rys. 1. Konfigurowanie ogólnych własności obiektu
Konfigurowanie obiektu obejmuje tak\e wprowadzanie dodatkowych wejść i wyjść
(rys. 1). Obiekty VEE posiadają cztery rodzaje końcówek:
- wejścia i wyjścia danych (najczęściej po jednej),
- wejście i wyjście sekwencyjne (zawsze po jednym; niektóre obiekty nie mają wyjścia),
- wejścia sterujące,
- wyjście błędu.
Domyślnie obiekt posiada wejścia i wyjścia sekwencyjne oraz najczęściej jedno wejście i
wyjście danych (rys. 2). Obiekty generacyjne nie mają wejść danych. Pozostałe końcówki nie
są uaktywnione i dopiero poprzez menu obiektu u\ytkownik mo\e je dodać. Podobnie mo\na
dodać dodatkowe wejścia dla danych a tak\e w odniesieniu do szeregu obiektów dodatkowe
wyjścia danych.
3
Rys. 2. Standardowe wejścia i wyjścia obiektu
Końcówki danych słu\ą do obsługi zasadniczych danych przetwarzanych przez program.
Z kolei końcówki sekwencyjne mo\na wykorzystać do ustalenia kolejności działania
obiektów. Wejście sekwencyjne wyznacza dodatkowo moment aktywizacji obiektu, natomiast
wyjście moment zakończenia jego działania. Wejścia danych oraz wejście sekwencyjne
obiektu synchronizują działanie obiektów, tzn. obiekt wykona swoje specyficzne operacje na
danych wówczas, gdy otrzyma wszystkie dane wejściowe oraz pobudzenie na wejście
sekwencyjne. Dodatkowo obiekt mo\e dysponować wejściami asynchronicznymi, sterującymi.
Dana na takim wejściu powoduje pewną akcję obiektu, ale bez inicjowania jego działań
zasadniczych. Obiekt wykonuje poleconÄ… operacjÄ™ natychmiast po otrzymaniu danej
sterującej. Lista mo\liwych wejść sterujących zale\y od rodzaju obiektu i najczęściej jest to
Clear (zerowanie np. wyświetlacza lub wykresu), Autoscale (autoskalowanie wykresu),
Default Value (ustalenie domyślnej wartości nastawy obiektu, np. w przypadku obiektów
nastawczych) itd.
Ka\dy obiekt dysponuje te\ wyjściem błędu, które w przypadku wystąpienia błędu
działania obiektu dostarcza danych opisujących go. Wyjścia danych i wyjście błędu działają
wykluczająco, tzn. jeśli nie ma błędu dane wyjściowe są obecne na wyjściach a wyjście błędu
jest puste i odwrotnie, gdy błąd wystąpi. Domyślnie wyjście błędu nie jest włączone i w takim
przypadku wystąpienie błędu spowoduje przerwanie działania programu z wyświetleniem
planszy informującej o powodach błędu. Uaktywnienie wyjścia błędu wyłącza automatyczne
przerywanie działania programu, ale zakłada się wtedy, \e aplikacja ma wbudowaną własną
obsługę błędów.
Rys. 3. Obiekty z unikalnym wejściem XEQ oraz dodanym wyjściem błędu
Dwa obiekty Collector oraz Sample&Hold wykorzystują dodatkowy rodzaj wejścia
asynchronicznego XEQ, za pomocą którego mo\na wymusić natychmiastowe działanie
obiektu nawet, gdy wejścia danych są puste (rys. 3). Wejście to musi być podłączone,
podobnie jak wejścia danych.
4
5. Typy zmiennych programu Agilent VEE
Agilent VEE u\ywa 14 typów danych przy czym 3 z nich są u\ywane wyłącznie w
przyrządowych transakcjach I/O. Jedenaście z nich mo\e znalezć zastosowanie w ogólnych
operacjach VEE, tzn. ka\dy kontener danych przesyłany między obiektami VEE mo\e
zawierać dane jednego z tych typów:
- całkowite 32-bitowe (Int32);
- rzeczywiste 64-bitowe (Real64, 16 cyfr znaczących w zapisie dziesiętnym);
- zespolone w reprezentacji moduł-kąt (Pcomplex) w postaci (mag, @phase). Kąt jest
podawany w ustawionych dla środowiska jednostkach: stopniach lub radianach. Oba
składniki są typu rzeczywistego;
- zespolone w reprezentacji kartezjańskiej (Complex) w postaci (real, imag). Oba
składniki są typu rzeczywistego;
- kształt sygnału (Waveform). Zespół danych, który zawiera kolejne, równomiernie
rozło\one w określonym przedziale czasowym wartości rzeczywiste reprezentujące
kształt sygnału w domenie czasowej. Dane muszą tworzyć tablicę jednowymiarową
(Array 1D);
- widmo sygnału (Spectrum). Zespół danych, który zawiera wartości zespolone
Pcomplex prą\ków częstotliwościowych oraz wartości zakresu częstotliwościowego
zespołu danych. Rozło\enie prą\ków mo\e być liniowe lub logarytmiczne. Dane
muszą tworzyć tablicę jednowymiarową;
- współrzędne (Coord). Zespół danych określających współrzędne punktu w
przestrzeni wielowymiarowej ( dwu-, trójwymiarowej itd.) w postaci (x, y, ...). Ka\dy
składnik jest typu rzeczywistego. Dana musi być skalarem lub tablicą
jednowymiarowÄ…;
- enumeryczne (Enum). Dana jest tekstem stringowym z przypisanÄ… porzÄ…dkowÄ…
wartością całkowitą. Dana enumeryczna musi być skalarem;
- tekstowe (Text). Dana tekstowa jest stringiem zło\onym ze znaków
alfanumerycznych;
- rekord (Record) jest typem zło\onym z pól. Ka\de pole ma swoją nazwę oraz
kontener, który mo\e być dowolnego typu (tak\e rekordem) i być skalarem lub
tablicÄ…;
- obiekt (Object) jest zmienną obiektową u\ywaną dla kontrolek i obiektów ActiveX.
Dane typu obiektowego mogą być przekazywane do lub z UserObject oraz
UserFunction.
Agilent VEE traktuje zawsze dane całkowite jako dane 32-bitowe oraz dane rzeczywiste
jako 64-bitowe. Urządzenia pomiarowe często wykorzystują 8-bitowe lub 16-bitowe dane
całkowite oraz 32-bitowe dane rzeczywiste. Z tego powodu Agilent VEE wspiera tak\e te trzy
typy danych, ale wyłącznie w odniesieniu do przyrządowych transakcji I/O:
- Byte - 8-bitowa dana całkowita;
- Int16 - 16-bitowa dana całkowita;
- Real32 - 32-bitowa dana rzeczywista.
Typ bajtowy (Byte) jest u\ywany w transakcjach READ BINARY, WRITE BINARY
oraz WRITE BYTE. Ostatnia transakcja jest często wykorzystywana do przesyłania do
urządzeń specyficznych znaków ASCII, np. z grupy znaków sterujących NL, CR, TAB itp.
5
6. Kontenery VEE, polimorfizm obiektów oraz konwersje typów na wejściach danych
Kontener VEE jest wewnętrznym formatem danych i charakteryzuje się typem danych
(text, real itp.) oraz wymiarem danych (pojedyncza dana - skalar lub wieloelementowa dana -
tablica jedno- lub wielowymiarowa). Pojedyncza dana (skalar) mo\e być typem zło\onym, np.
Complex, Record itp. Kontener mo\e zawierać pojedynczą daną lub tablicę z wieloma
ró\nymi danymi tego samego typu. Niezale\nie od tego tylko jeden kontener danych jest
wysyłany z wyjścia danych, gdy obiekt zakończy działanie. Wejścia danych mogą
przyjmować dowolne kontenery lub określonego typu. Decyduje o tym skonfigurowanie
wejścia obiektu, które mo\na wykonać na etapie projektowania aplikacji. Domyślnie wejścia
obiektu sÄ… ustawione w opcji przyjmowania kontenera o dowolnym typie i wymiarze (Any).
Większość obiektów cechuje się polimorfizmem (wielopostaciowością). Ich wejścia mogą
przyjmować dane ró\nego typu i o ró\nym wymiarze dostosowując jednocześnie swoje
działanie do rodzaju otrzymanych aktualnie danych. Obiekt mo\e akceptować nie tylko
numeryczne wartości skalarne lecz tak\e tablice danych numerycznych jedno lub
wielowymiarowe. W tych warunkach funkcja otrzymując wartość skalarną dostarczy równie\
wartość skalarną, ale ta sama funkcja mo\e działać na wejściowych danych tablicowych
dostarczając na wyjściu przetworzoną tablicę danych (rys. 4).
Rys. 4. Polimorfizm funkcji matematycznej
Polimorfizm dotyczy te\ szeregu operatorów. Przykładowo operacja sumowania
realizowana przez obiekt formuły A+B (rys. 5) dostarczy następujących rodzajów danych
wyjściowych dla danych wejściowych typu liczbowego (real, int):
- gdy A i B sÄ… skalarami wynik jest te\ skalarem typu real;
- gdy A jest skalarem a B tablicÄ… jednowymiarowÄ… wynik jest tablicÄ…
jednowymiarowa typu real, której elementy zostały zwiększone o A;
- gdy A i B sÄ… tablicami o takich samych rozmiarach wynik jest tablica
jednowymiarowa, której elementy są sumą odpowiadających sobie elementów tablic
wejściowych.
6
SKALAR TABLICA TABLICA
SKALAR TABLICA TABLICA
SKALAR SKALAR TABLICA
Rys. 5. Polimorfizm funkcji sumowania
W wypadku operacji dwuargumentowych występuje szereg ograniczeń. Np. dane
skalarne typu Record muszą mieć taką samą budowę a tablice muszą mieć identyczne
wymiary i rozmiary dla ka\dego wymiaru.
Polimorfizm obiektów VEE ułatwia projektowanie aplikacji, ale wymaga od projektanta
zachowania ostro\ności w pewnych sytuacjach, aby nie doprowadzić do nieoczekiwanych
rezultatów. Np. w przykładzie z sumowaniem, jeśli na wejście A wprowadzi się tekst lub
tablicę tekstową wówczas wynik będzie odpowiednio skalarem tekstowym lub tablicą
tekstową, poniewa\ wartość numeryczna z wejścia B zostanie automatycznie przetworzona do
postaci tekstowej i rezultat będzie tekstem wynikającym z połączenia obu tekstów.
Jeśli tekst lub tablica tekstowa zawiera tekstowo prezentowane wartości numeryczne (np.
wyniki pomiarów odczytane z przyrządu) a operacja miałaby dostarczyć wartości
numerycznych (np. wyeliminować offset) to wynik byłby całkowicie nie do przyjęcia choć
operacja zakończy się powodzeniem. Inna sytuacja wystąpi, jeśli na danych tekstowych
uzyskanych z przyrządu trzeba wykonać obliczenia za pomocą pewnej funkcji matematycznej,
np. przeliczyć je na decybele. Tym razem obiekt funkcji log10(x) zgłosi błąd, poniewa\ mo\e
pracować tylko na danych numerycznych. W obu przytoczonych przykładach nale\ałoby
dokonać jawnej konwersji danych tekstowych do danych numerycznych i na nich wykonać
\Ä…dane obliczenia (rys. 6).
Rys. 6. Niejawna i jawna konwersja danych Text (liczby zapisane tekstowo) do Real
7
Mo\na te\ zrezygnować z jawnej konwersji realizowanej za pomocą odpowiedniej funkcji
(From String lub asReal(x)) na rzecz specyficznego skonfigurowania wejścia obiektu - tutaj
nale\y zadeklarować przyjmowanie danych typu Real (rys. 6). Taka deklaracja nie oznacza
ograniczenia typu przyjmowanych danych lecz wymusza ich konwersjÄ™ do zadeklarowanego
typu.
Opcja ta jest bardzo wygodna, poniewa\ obiekt dokona automatycznie konwersji typów
danych wejściowych i wykona na nich \ądane operacje. Wymiar danych nie podlega zmianie;
tablica zostaje tablicą ale typ danych mo\e podlegać konwersji. Programista nie musi u\ywać
do tego celu osobnych funkcji (upraszcza się zapis programu), ale musi mieć świadomość
rodzaju dostępnych konwersji, poniewa\ nie wszystkie są mo\liwe do zrealizowania (tablica
1). Jeśli konwersja nie jest mo\liwa do zrealizowania obiekt zgłosi błąd wykonania operacji.
Większość obiektów akceptuje ka\dy typ danych na swoich wejściach, ale istnieje kilka
obiektów wymagających szczególnych typów lub wymiarów danych. W ich przypadku
równie\ następuje próba automatycznej konwersji do \ądanego typu. Jeśli nie mo\na jej
zrealizować obiekt zgłosi błąd. Przykład takiej konwersji ma miejsce, gdy na wejście wykresu
spektralnego (Magnitude Spectrum) zostanie wprowadzony kontener wyjściowy generatora
funkcji (Function Generator). Dane wejściowe są typu waveform a wymagane są dane typu
spectrum. W celu uzyskania zgodności automatycznie realizuje się operacja FFT przejścia z
prezentacji czasowej na prezentację częstotliwościową.
Tablica 1. Dopuszczalne konwersje promocyjne i obni\ające na wejściach danych
Z/Na Int32 Real64 Complex Pcomplex Waveform Spectrum Coord Enum Text
Int32 x tak tak[1] tak[1] nie nie tak[2] nie tak
Real64 (tak)[3] x tak[1] tak[1] nie nie tak[2] nie tak
Complex (nie) (nie)[4] x tak nie nie nie nie tak
Pcomplex (nie) (nie)[4] (tak) x nie nie nie nie tak
Waveform (tak)[3] (tak)[8] (nie) (nie) x tak[5] tak nie tak
Spectrum (nie) (nie) (tak)[8] (tak)[8] (tak)[5] x tak nie tak
Coord (nie) (nie) (nie) (nie) (nie) (nie) x nie tak
Enum (nie)[6] (nie) (nie) (nie) (nie) (nie) (nie) x tak
Text (tak)[7] (tak)[7] (tak)[7] (tak)[7] (nie) (nie) (tak)[7] (nie) x
x - nie dotyczy,
tak, nie - konwersja promocyjna odpowiednio mo\liwa i niemo\liwa,
(tak), (nie) - konwersja obni\ajÄ…ca odpowiednio mo\liwa i niemo\liwa,
[1] - wartość Int32 lub Real64 promowana do typu Complex (value, 0) lub Pcomplex (value, @0),
[2] - pierwsze n-1 pól n polowej danej coord są indeksami tablicy, pole n przyjmuje wartość elementu tablicy
wejściowej. Kontener wejściowy musi być tablicą,
[3] - konwersja obni\ająca powoduje błąd, gdy wartość przekracza zakres typu docelowego,
[4] - konwersja obni\ająca nie jest realizowana automatycznie, mo\na ją wykonać programowo przy u\yciu
funkcji matematycznych re(x), im(x), mag(x) oraz phase(x),
[5] - automatycznie jest realizowana operacja FFT lub inwersja FFT,
[6] - konwersja obni\ająca nie jest realizowana automatycznie, mo\na ją wykonać funkcją ordinal(x),
[7] - konwersja obni\ająca powoduje błąd, gdy tekst nie jest zapisem liczby. Tekst konwertowany do typu:
- Complex musi mieć format (liczba, liczba);
- Pcomplex musi mieć format (liczba, @liczba) a kąt musi być podany w radianach;
- Coord musi mieć format (liczba, liczba, ...).
[8] - konwersja obni\ająca zachowuje mapowanie dla typów waveform i spectrum
8
7. Przepływ danych pomiędzy obiektami VEE
Przepływ danych pomiędzy obiektami VEE ilustrują w programie linie połączeniowe
wprowadzone przez programistę. W trakcie działania programu przepływają nimi kontenery z
danymi określonego typu. Wykorzystanie tych danych zale\y od rodzaju wejść, i tak:
- Wejścia danych muszą otrzymywać wypełnione danymi kontenery. Mogą
akceptować kontenery z dowolnym typem danych lub mo\na to uściślić do
określonego typu. Zło\one typy danych (Waveform, Spectrum, Record, Coord, and
Object) wymagajÄ… wieloelementowych danych, zwykle tablic. Dlatego do obiektu z
wejściem wymagającym takich danych nie mo\na przekazać kontenera z wartością
skalarnÄ….
- Wyjście danych generuje kontener z typem danych uzale\nionym od rodzaju danych
wejściowych oraz rodzaju realizowanych operacji. W wielu przypadkach typ danych
wyjściowych jest jednoznacznie określony. Kontener z danymi wyjściowymi pojawi
się tylko wówczas, gdy wszystkie zainicjalizowane operacje synchroniczne obiektu
zakończą się bez błędu.
- Wejście sekwencyjne jest aktywowane pojawieniem się dowolnego kontenera. Jego
zawartość jest nieistotna i jest ignorowana. Mo\e to być pusty kontener (nil). Wobec
tego do inicjalizowania akcji obiektu mo\na wykorzystać dowolne dane, zarówno z
wyjść danych jak i wyjść sekwencyjnych innych obiektów.
- Wyjście sekwencyjne generuje pusty kontener (nil) na zakończenie działania obiektu.
- Wejścia sterujące wymagają ró\nego rodzaju danych w zale\ności od wejścia. Jeśli
wejście dotyczy akcji jednoznacznie określonej, np. Clear, Autoscale, Disable Editing,
Enable Editing, to zaakceptuje ono dowolny kontener (jego treść jest nieistotna).
Wejścia ustawiające pewne dane obiektu, np. wartość domyślą obiektu, potrzebują
określonego typu danych.
- Wejście EXQ jest aktywowane pojawieniem się dowolnego kontenera. Jego
zawartość jest nieistotna i jest ignorowana.
- Wyjście błędu, jeśli jest uaktywnione, propaguje kontener z numerem błędu ale tylko
gdy ten wystąpi. W warunkach wystąpienia błędu obiekt propaguje wyłącznie
kontener z informacją o błędzie oraz pusty kontener z wyjścia sekwencyjnego.
Przepływ danych pomiędzy obiektami tworzącymi program VEE decyduje o kolejności
aktywizacji obiektów i wykonania przez nie operacji obliczeniowych czy sterujących
przyrządami. Siatkę połączeniową nale\y odpowiednio zaprojektować i zrealizować.
Obowiązuje następująca zasada:
- Do wejścia mo\na dołączyć tylko jedno wyjście. Wejście mo\e mieć jedno zródło
danych. W szczególnych sytuacjach, gdy dane wejściowe mają spływać z ró\nych
zródeł nale\y wprowadzić je poprzez obiekt JCT.
- Wyjście mo\e łączyć się z wieloma wejściami, czyli mo\e być zródłem danych dla
wielu wejść.
Kolor i kształt linii połączeniowej obrazuje rodzaj połączenia oraz typ przenoszonych
danych. Środowisko projektowe automatycznie ustala charakterystykę linii połączeniowej
podczas jej kreowania. Domyślnie obowiązują następujące przyporządkowania:
- kolor niebieski dla danych numerycznych,
- kolor pomarańczowy dla danych tekstowych,
- kolor czarny dla rekordów i innych typów danych,
- kolor szary dla połączeń końcówek sekwencyjnych,
- podwójne linie dla danych tablicowych (niebieskie, pomarańczowe lub czarne),
- linie przerywane dla wejść sterujących.
9
8. Postać programu VEE
Obiekty VEE połączone liniami przepływu danych oraz sekwencyjnymi (linie ciągłe)
tworzą tzw. wątek (thread). Linie przepływu danych sterujących (przerywane) nie wią\ą
obiektów w wątek. Prosty program zawiera zwykle tylko jeden wątek natomiast bardziej
zło\one składają się z wielu wątków i subwątków (subthread). Na rysunku 7 pokazano dwa
równoległe, niezale\ne wątki. Niezale\nych, poniewa\ nie są one połączone ani liniami
danych ani liniami sekwencyjnymi.
Rys. 7. Program zło\ony z dwóch niezale\nych wątków
Rozgałęzienia wątku tworzą subwątki. Dwa subwątki rozpoczynające się od tego samego
wyjścia obiektu i nie mające wzajemnych powiązań liniami danych lub sekwencyjnymi
stanowią subwątki równoległe (rys. 8).
SubwÄ…tek 1
SubwÄ…tek 2
Rys. 8. Rozgałęzienie wątka na równoległe subwątki
Program z wieloma wątkami równoległymi mo\e wykonywać je jednocześnie. Kolejność
wykonywania fragmentów poszczególnych wątków i subwątków jest ustalana przez
środowisko przypadkowo. Zwykle wykonuje się jeden lub kilka obiektów jednego wątku,
następnie jeden lub kilka obiektów z kolejnego wątku itd. Istnieją tylko dwa wyjątki:
- Jeśli wątek zawiera obiekt Interface Event lub Device Event, wtedy uzyskuje on
wyłączność działania podczas śledzenia określonego zdarzenia. Np. podczas detekcji
SRQ na magistrali GPIB wątek zawierający Interfaces Event będzie monopolizował
działanie programu a\ do wykrycia SRQ. Pozostałe wątki pozostają wstrzymane do
momentu zakończenia obsługi zdarzenia.
- Jeśli jeden z wątków ma obiekt przycisku Start i uruchomienie aplikacji nastąpiło
przez jego przyciśnięcie, wtedy tylko ten wątek programu jest wykonywany.
Program VEE ma więc cechy programów wielowątkowych (multithread). W
rzeczywistości nie jest nim w pełni, poniewa\ własność ta nie jest zaimplementowana na
poziomie systemu operacyjnego i zdarzenia systemowe mogą wstrzymywać działanie wątków
programu VEE.
10
9. Zasady wykonania wątku programu (propagacja działań)
Kolejność wykonania operacji przez obiekty wątku programu jest określona przepływem
danych pomiędzy obiektami oraz dodatkowo danymi sekwencyjnymi. Stąd mówi się, \e
program VEE jest sterowany przepływem danych. Wątek rozpoczyna działanie od obiektu
znajdującego się na skrajnej, lewej pozycji połączeń danych. Pozostałe obiekty wątku
aktywizują się w miarę dopływu do nich danych z poprzedzających obiektów trasy przepływu
danych. Ka\dy z obiektów aktywizuje swoje działanie tylko raz chyba, \e wątek lub jego
subwątek jest objęty pętlą powtarzania działań. Podstawowe zasady propagacji działań w
wątkach programu są następujące:
- Obiekty nie mające wejść danych oraz nie wykorzystujące wejścia sekwencyjnego
wykonują się w pierwszej kolejności (kolejność jest przypadkowa).
- Inne obiekty wykonują swoje operacje w kolejności określonej przepływem danych,
czyli obiekt z wejściami danych zadziała dopiero wówczas, gdy otrzyma wszystkie
dane wejściowe.
- Kolejność propagacji mo\e ulec modyfikacji przez wykorzystanie wejść
sekwencyjnych obiektów.
- Kolejność wykonywania równoległych subwątków nie jest określona. Ich fragmenty
są wykonywane przemiennie, ale w nieznanej kolejności.
Idea konstrukcji wątka oraz dalsze szczegóły propagacji działań wynikają
bezpośrednio z zasad funkcjonowania wszystkich obiektów VEE:
- Dane przepływają od lewej do prawej strony obiektu.
- Sygnał sekwencyjny przepływa z góry do dołu obiektu.
- Wszystkie wejścia danych oraz wejście EXQ, jeśli występuje, muszą być dołączone
(do zródeł danych).
- Końcówka wejścia (danych, sekwencyjna, sterująca) akceptuje tylko jedno połączenie
(jedno zródło danych).
- Końcówka wyjścia danych oraz wyjścia sekwencyjnego mo\e być dołączona do wielu
obiektów.
- Końcówka wyjścia danych oraz końcówka wejścia i wyjścia sekwencyjnego nie
muszą być wykorzystane (dołączone do innych obiektów).
- Obiekt rozpocznie działanie dopiero, gdy wszystkie jego wejścia danych zaakceptują
dane. Jeśli obiekt wykorzystuje wejście sekwencyjne (jest połączone z innym
obiektem), wówczas dodatkowo rozpoczęcie jego działania jest uwarunkowane
akceptacją sygnału sekwencyjnego dowolnego typu. Wyjątek stanowi obiekt JCT,
który aktywizuje się po akceptacji danej na jednym z wejść danych. Dzięki tej
własności mo\na go wykorzystać do dostarczania danych z ró\nych zródeł na wejście
jakiegoÅ› obiektu.
- Obiekt wykonuje swoje operacje tylko raz chyba, \e jest objęty pętlą lub zmuszony do
działania przez wejście EXQ.
- Akceptacja danych na wejściu sterującym wymusza natychmiastowe wykonanie
określonych działań przez obiekt, ale nie dotyczy to nigdy podjęcia przez niego
zasadniczych zadań oraz propagacji jakichkolwiek danych wyjściowych lub
sekwencyjnych.
Kolejność wykonywania operacji przez obiekt jest następująca:
- Jeśli obiekt wykorzystuje wejście sekwencyjne, wówczas oczekuje zarówno na
komplet danych wejściowych jak równie\ daną sekwencyjną. Wejścia odbierają dane
do momentu aktywizacji obiektu (rozpoczęcia działania).
- Obiekt akceptuje dane na swoich wejściach danych i czeka a\ uzyska dane na
wszystkich wejściach danych.
11
- Po uzyskaniu wszystkich danych obiekt wykonuje swoje specyficzne funkcje.
- Po wykonaniu operacji na danych obiekt dostarcza rezultaty na swoje wyjścia danych.
- Obiekt oczekuje na sygnał potwierdzenia, który uzyska, gdy ka\dy obiekt
korzystający z jego danych wyjściowych wykona swoje działania. Oznacza to
wykonanie operacji przez całą część wątka od rozpatrywanego obiektu w dół (rys. 9).
Często występują sytuacje, gdy ta część wątku nie mo\e wykonać w pełni swoich
zadań, poniewa\ np. nie wszystkie wejścia w tej części wątku uzyskały dane (rys. 10).
We wszystkich takich przypadkach, sygnał potwierdzenia pojawi się, gdy wątek zrobi
wszystko co jest mo\liwe w danej sytuacji.
- Po uzyskaniu sygnału potwierdzenia obiekt wysyła kontener sekwencyjny (nil) ze
swojego wyjścia sekwencyjnego.
- Obiekt dezaktywuje się (kończy działanie).
SubwÄ…tek
Wyjście aktywne po
całkowitym wykonaniu
subwÄ…tka
Rys. 9. Warunek wygenerowania danej sekwencyjnej przez obiekt Formuła
SubwÄ…tek
Aktywne po akceptacji
danej wejścia A w
formule następnej
Aktywne po
wykonaniu
subwÄ…tku
Rys. 10. Warunek wygenerowania danej sekwencyjnej przez obiekt Formuła oraz Int 16
12
10. Warunkowe rozgałęzienia wątków oraz cykliczne powtarzanie wykonania wątków
Wątek programu VEE mo\na rozgałęzić na wiele subwątków realizowanych
alternatywnie. Słu\ą do tego obiekty If/Then/Else (rys. 11) oraz jego uściślenia z grupy
Conditional. Domyślnie obiekt If/Then/Else posiada jedno wejście danych oraz wyjścia Then
i Else umo\liwiające dołączenie do nich alternatywnie wykonywanych subwątków. Pole
edycyjne obiektu pozwala wpisać wyra\enie logiczne, którego wartość logiczna jest określana
podczas działania obiektu. Jeśli wyra\enie logiczne jest prawdziwe aktywizuje się wyjście
Then a wyjście Else jest puste (brak danej) i odwrotnie, gdy wartość wyra\enia jest fałszywa.
Wyjścia dostarczają wartości typu całkowitego; Then zawsze 1, Else zawsze 0. W zasadzie
wartości są mniej istotne, wa\ny jest fakt wysłania kontenera danych, który zainicjalizuje
wybrany subwątek. Obiekt If/Then/Else mo\na rozbudować dodając mu kolejne stopnie
wyboru. Utworzony w ten sposób obiekt posiada wiele alternatywnych wyjść a jego działanie
odpowiada wielostopniowej instrukcji wyboru z języka C.
Rys. 11. Obiekt typu If/Then/Else
W programach VEE wątki i subwątki mogą być objęte ró\nego typu pętlami. Pętle
buduje się za pomocą specjalnych obiektów powtarzania cykli subwątku dołączonego do
wyjścia takiego obiektu. Do dyspozycji są następujące typy obiektów powtarzania:
- Obiekt For Count powtarza wykonanie swojego subwÄ…tku zadeklarowanÄ… w nim
ilość razy. Dana wyjściowa obiektu przyjmuje w kolejnych obiegach wartości
całkowite od 0 do N-1, gdzie N jest zadeklarowaną liczbą obiegów pętli.
- Obiekt For Range liczba powtórzeń wykonania subwątku wynika z
zadeklarowanej w obiekcie wartości startowej, końcowej i kroku inkrementacji. Dana
wyjściowa obiektu przyjmuje w kolejnych obiegach wartości rzeczywiste od wartości
startowej. Kolejne wartości są zwiększane o zadeklarowany krok. Pętla działa dopóki
wartość iterowana jest mniejsza lub równa podanej wartości końcowej. Wartości
iterowane są rozło\one liniowo.
- Obiekt For Log Range pętla podobna do poprzedniej z tym, \e iterowane wartości
są rozło\one logarytmicznie. Zamiast kroku podaje się liczbę iteracji w dekadzie.
Kolejna n-ta wartość wyjściowa jest obliczana według zale\ności Start*exp10(n/dec),
gdzie dec jest zadeklarowanÄ… liczbÄ… iteracji w dekadzie.
- Obiekt Until Break pętla działająca do momentu przerwania. W kolejnych
iteracjach jego wyjście dostarcza zerową wartością rzeczywistą. Dana wyjściowa
słu\y do inicjalizowania dołączonego subwątku. Dane wyjściowe poprzednich
obiektów powtarzania mogły być wykorzystane równie\ do innych celów. Przerwanie
działania pętli Until Break wymaga wykorzystania w dołączonym subwątku obiektu
Break;
- Obiekt On Cycle pętla nieskończona podobnie jak Until Break. Iteracje pętli są
powtarzane periodycznie w zadeklarowanych odstępach czasu (sekundach). Dana
wyjściowa obiektu jest typu real ale określa aktualną datę i czas, które mogą być
wyświetlone w sposób jawny przez ka\dy obiekt stosujący format liczbowy Time
Stamp. Obiekt stosuje się często do inicjalizowania pomiarów w określonych
odstępach czasu.
Program VEE mo\e wykorzystywać pętle równoległe (jako równoległe wątki) oraz
zagnie\d\one (rys. 12).
13
Pętla zagnie\d\ona
Rys. 12. Wątek zawierający zagnie\d\one pętle For Count
Obiekty Break i Next są związane z pętlami i słu\ą odpowiednio do przerwania działania
pętli i wymuszenia kolejnej iteracji (identycznie jak instrukcje break i continue języka C).
Obiekty te dotyczą zawsze najbli\szego obiektu powtarzania, czyli tego w którego subwątku
taki obiekt siÄ™ znajduje.
W odniesieniu do wszystkich rodzajów pętli obowiązują następujące zasady:
- Wyjściowa dana sekwencyjna pojawia się w obiektach powtarzania zawsze po
zakończeniu działania pętli, czyli po wykonaniu wszystkich iteracji lub na skutek
zadziałania obiektu przerywającego (Break).
- W momencie rozpoczynania kolejnej iteracji wszystkie kontenery danych wysłane w
poprzedniej iteracji tracą wa\ność. To zapobiega ponownemu u\yciu starych danych
w aktualnej iteracji. Warto o tym pamiętać konstruując programy, w których wątek
objęty pętlą posiada rozgałęzienia warunkowe i w takiej sytuacji pewne jego obiekty
nie wykonują operacji w ka\dej iteracji. Kontenery danych wysłane przez te obiekty
mogą utracić wa\ność zanim inne obiekty je wykorzystają. W celu zapewnienia
właściwej propagacji danych w takim przypadku nale\y wykorzystać obiekt
Sample&Hold zapamiętujący dane. W przykładzie z rys. 13 obiekt Sample&Hold
zapamiętuje ostatnią daną z obiektu Counter2 i dzięki temu zostaje ona zachowana
mimo, \e pętla For Count wykonuje jeszcze kilka iteracji, w której obiekt Counter2
nie bierze udziału.
Rys. 13. Przykład zastosowania obiektu Sample&Hold zapobiegający stracie danych
- Pętle równoległe nie mogą się krzy\ować (posiadać połączenia danych lub
sekwencyjne) oraz nie mogą się łączyć, np. przy u\yciu obiektu JCT lub
matematycznego (rys. 14).
14
Rys. 14. Przykłady błędnych konstrukcji z zastosowaniem pętli
11. Zmienne programu VEE
Program VEE mo\e u\ywać zmiennych globalnych, lokalnych kontekstowo i lokalnych
w bibliotekach:
- Globalne są dostępne w ka\dym miejscu programu niezale\nie od miejsca gdzie
znajduje siÄ™ obiekt deklarujÄ…cy zmiennÄ….
- Lokalne kontekstowo są zmiennymi, których u\ycie jest limitowane do obiektu
u\ytkownika (UserObject) lub funkcji u\ytkownika (UserFunction), w których
występuje ich deklaracja.
- Lokalne w bibliotece sÄ… zmiennymi zadeklarowanymi w bibliotece funkcji
u\ytkownika (lokalnej lub importowanej) i ich u\ycie jest ograniczone do funkcji
danej biblioteki.
Zmienne nie muszą być deklarowane, ale warto to robić, poniewa\ program z
zadeklarowanymi zmiennymi funkcjonuje szybciej. Obsługę zmiennych zapewniają cztery
specjalne obiekty:
- Declare Variable deklaruje zmienną. Programista określa w polach edycyjnych
obiektu unikalną nazwę, rodzaj, typ i liczbę wymiarów. Typ zmiennej mo\e być
jednym z 11 dostępnych w VEE typów danych. Maksymalną, dopuszczalną liczbą
wymiarów jest 10, czyli tablica dziesięciowymiarowa. Wartość zero oznacza zmienną
skalarnÄ….
- Delete Variable usuwa wszystkie zmienne lub jednÄ… o podanej nazwie.
- Set Variable ustawia wartość zmiennej o określonej nazwie zgodnie z daną
wejściową.
- Get Variable dostarcza poprzez wyjście wartość zmiennej o podanej nazwie.
Ka\dy obiekt Set i Get Variable jest związany z określoną zmienną przez podanie w
oknie edycyjnym tych obiektów nazwy zmiennej. Zadeklarowane zmienne muszą zostać
zainicjalizowane przy u\yciu obiektu Set Variable zanim rozpocznie siÄ™ jakiekolwiek inne
działania z ich wykorzystaniem. W programie korzystanie z danej zmiennej odbywa się przy
u\yciu obiektów Set i Get Variable. Alternatywnie w obiektach, dla których określa się
wyra\enia obliczeniowe (np. formuły matematyczne) nazwa zmiennej mo\e być elementem
wyra\enia i nie trzeba wprowadzać jej przez wejście obiektu. Podobnie zamiast u\ywać
obiektu Set Variable do ustalenia nowej wartości zmiennej, mo\na u\yć obiektu formuły z
wpisanym wyra\eniem przypisania, np. Stop=1, gdzie Stop jest nazwÄ… zmiennej.
15
Rys. 16. Wykorzystanie zmiennej globalnej do przekazywania danych pomiędzy równoległymi wątkami
Zmienne wykorzystuje się do przekazywania ró\nego rodzaju danych pomiędzy wątkami
programu. Zastosowanie równoległych wątków często owocuje sprawniejszym działaniem
programu, czytelniejszym jego zapisem graficznym lub jest konieczne z powodu
zastosowania konstrukcji pętlowych. Jeśli wątki nie mogą być w pełni niezale\ne i nie mogą
być scalone w jeden, wtedy powiązania pomiędzy nimi mo\na uzyskać przy pomocy
zmiennych globalnych lub lokalnych. Przykład z rys. 16 pokazuje takie powiązanie. Program
składa się z trzech wątków:
- Wątek 1 Podstawowy wątek programu. Jest pętlą nieskończoną (Until Break)
realizującą po akcji u\ytkownika (przycisk MIERZ) pętlę periodyczną On Cycle z
iteracjami co 1 sekundę. Ka\da iteracja mo\e dotyczyć przykładowo operacji
pomiarowych. Pętla periodyczna jest pętlą nieskończoną. Ograniczenie jej działania
uzyskuje się za pomocą rozgałęzienia warunkowego na podstawie wartości zmiennej
Stop.
- Wątek 2 Pomocniczy wątek słu\ący do przerwania pętli On Cycle wątku 1. Po
u\yciu przycisku STOP zmienna Stop przyjmuje wartość 1.
- WÄ…tek 3 Jednokrokna inicjalizacja poczÄ…tkowa zmiennej Stop.
Zaletą przytoczonego przykładu jest przede wszystkim czytelność zapisu programu oraz
prostota wprowadzenia połączeń sterujących, które uaktywniają przycisk STOP tylko w
czasie działanie pętli periodycznej oraz przywracania stanu przycisków do stanu
spoczynkowego.
12. Obiekt formuły matematycznej
Obiekt formuły matematycznej jest obiektem wykonującym zdefiniowane przez
u\ytkownika operacje matematyczne. śądane wyra\enie wpisuje się w oknie edycji formuły.
Wyra\enie kreuje się przy u\yciu operatorów matematycznych, nawiasów grupujących, nazw
predefiniowanych stałych, nazw wejść i wyjść obiektu, nazw zmiennych globalnych i
lokalnych oraz nazw funkcji wbudowanych środowiska lub zdefiniowanych przez
u\ytkownika. Istnieje du\e podobieństwo do zapisu wyra\eń w języku C z tym, \e
środowisko VEE nie rozró\nia wielkości liter w nazwach.
16
U\ytkownik mo\e dodać obiektowi formuły \ądaną liczbę wejść i wyjść danych. Nazwy
wejść i wyjść danych stanowią zmienne lokalne formuły i mogą być wykorzystane w zapisie
wyra\enia. Predefiniowanym wyjściem jest wyjście o nazwie Result. Wyra\enie formuły
mo\e być rozbudowane do postaci wieloelementowego wyra\enia (rys. 17), w którym
elementarne wyra\enia rozdziela się znakiem średnika. Stosując takie zło\one wyra\enie
mo\na przypisać konkretnym wyjściom obiektu wartości wynikające z wykonanych operacji.
Lewym argumentem operatora przypisania jest wtedy nazwa wyjścia. Predefiniowane wyjście
Result otrzymuje wynik ostatniego wyra\enia (jawne przypisanie jest zbyteczne).
Rys. 17. Przykład formuły z wieloelementowym wyra\eniem
W przykładzie z rys. 17 A, B, C, Result, X i Tmp są lokalnymi zmiennymi obiektu.
Result otrzymuje wynik ostatniego wyra\enia (10*tmp). Tmp pełni tutaj rolę zmiennej
pomocniczej do zapamiętania wyniku pośredniego. Musi jednak znalezć się na liście wyjść,
poniewa\ w ten sposób zmienna jest deklarowana. Wejście A i wyjście A to ta sama zmienna
z tym, \e na wyjściu ma ju\ inną zawartość. Pierwsza linia wyra\enia pokazuje u\ycie
wbudowanej funkcji trygonometrycznej sinus oraz predefiniowanej stałej PI (3,14...). Trzeci
wiersz stosuje operator trójargumentowy:
(condition ? expression1 : expression2)
działający w ten sposób, \e jego rezultatem jest wynik wyra\enia 1, jeśli warunek jest
prawdziwy lub wynik wyra\enia 2, gdy warunek nie jest spełniony.
W wyra\eniach zło\onych obowiązują priorytety operatorów uwzględniane podczas
wykonywania operacji. Ni\ej przedstawiono listę operatorów w kolejności malejącego
priorytetu.
Tablica 2. Priorytety operatorów
1 ( ) Nawiasy grupujÄ…ce
2 ^ Operator potęgowania (a ^ b oznacza a do potęgi b)
3 - Minus jednoargumentowy
4 *, /, MOD, Kolejno: mno\enie, dzielenie, operacja modulo, dzielenie całkowite (bez części
DIV ułamkowej)
5 +, - Dodawanie i odejmowanie
6 ~=, ==, !=, <, Operatory porównania; kolejno: równy w przybli\eniu, równy, ró\ny, mniejszy,
>, <=, >= większy, mniejszy-równy, większy-równy
7 NOT Zaprzeczenie logiczne
8 AND Iloczyn logiczny
9 OR, XOR Suma logiczna i suma XOR
17
Operacje dwuargumentowe wymagają zgodności typów obu argumentów. W sytuacji,
gdy argumenty są ró\nego typu następuje promocja argumentu ni\szego typu do typu
odpowiadajÄ…cego drugiemu argumentowi i wynik jest te\ tego typu (tabela 2). W procesie
promocji typów obowiązuje następujące uporządkowanie (od poziomu najwy\szego):
- Object
- Record
- Text (Enum jest traktowany jak typ Text)
- Spectrum
- Pcomplex
- Complex
- Coord (bez mo\liwości konwersji na inny typ numeryczny)
- Waveform
- Real
- Int32
Przykładowo obiekt formuły A+B dostarczy następujących rodzajów danych wyjściowych:
- A i B są skalarami typu text wynik jest te\ skalarem typu text (połączone teksty z
A i B);
- A jest skalarem typu real a B skalarem typu text wynik jest skalarem typu text,
który jest połączeniem tekstowego zapisu liczby z wejścia A (domyślna konwersja
zapisu liczby) z tekstem z wejścia B;
- A jest skalarem typu real a B skalarem typu complex wynik jest skalarem typu
complex.
W przykładzie drugim argumenty są ró\nego typu. Musi nastąpić wyrównanie typu obu
argumentów. Automatycznej konwersji promocyjnej podlega argument ni\szego typu, czyli
argument typu real. NastÄ…pi jego promocja do postaci tekstowej z zastosowaniem
formatowania domyślnego. Operacja dostarczy daną typu text (rys. 18).
Rys. 18. Automatyczne konwersje typów
Podobna sytuacja dotyczy przykładu trzeciego. Tutaj argument typu real jest promowany
do typu complex (A, 0) i po wyrównaniu typów nastąpi sumowanie danych typu zespolonego.
Wynik jest daną zespoloną typu complex, której elementy są sumą odpowiadających sobie
składników argumentów operacji (rys. 18).
Projektant aplikacji powinien w sposób przemyślany korzystać z automatycznych
konwersji. SÄ… one bardzo wygodne, ale ich lista jest ograniczona (tabela 2) a wynik mo\e
odbiegać od oczekiwanego. Potrzebna jest wiedza dotycząca mo\liwych operacji i ich
wyników. Np. operację sumowania mo\na u\ywać do łączenia tekstów. Operacja mno\enia
nie mo\e mieć obu argumentów tekstowych, ale jest dostępna, jeśli jeden jest tekstowy a
18
drugi numeryczny. Dostarcza wtedy powielony tekst, np. operacja "Hello" * 2.01 zakończy
siÄ™ dostarczeniem tekstu "HelloHello".
W dwuargumentowych operacjach tablicowych (oba argumenty sÄ… tablicami) rozmiar,
wymiar oraz mapowanie tablic musi być identyczne dla obu argumentów. W przypadku
jakiejkolwiek niezgodności operacja kończy się błędem wykonania. W sytuacji, gdy jeden z
argumentów jest skalarem następuje promocja jego typu, wymiaru i rozmiaru tak, aby
uzyskać zgodność z drugim argumentem. Dlatego operacja sumowania rzeczywistej wartości
skalarnej z jednowymiarową tablicą wartości rzeczywistych dostarczy zawsze tablicę, której
elementy mają wartość elementów tablicy wejściowej zwiększoną o podaną wartość skalarną.
Wynika to z promocji skalarnego argumentu do tablicy o wymiarze i rozmiarze drugiego
argumentu. Powstanie zatem tymczasowa tablica jednowymiarowa, której wszystkie elementy
mają wartość argumentu skalarnego i dopiero po tej promocji wykona się sumowanie
odpowiadających sobie elementów obu tablic.
W wyra\eniach VEE stosuje dość specyficzne odwołania do elementów tablic.
Obowiązuje następująca syntaktyka (tablice są indeksowane od 0):
- Nawiasy kwadratowe [ ] u\yte po nazwie tablicy obejmujÄ… parametry specyfikujÄ…ce
podtablice (fragment całej tablicy).
- Przecinek separuje specyfikację poszczególnych wymiarów tablicy. Ka\dy wymiar
musi mieć swoją specyfikację.
- Dwukropek separuje wartości określające zakres elementów w obszarze danego
wymiaru.
- Gwiazdka * specyfikuje wszystkie elementy z danego wymiaru.
- Specyfikacja indeksów mo\e być określona przez stałą lub zmienną.
Przykłady wyra\eń udostępniających fragmenty jednowymiarowej tablicy A o wartościach:
- A lub A[*] zwraca całą tablicę;
- A[1] zwraca skalar, który jest drugim elementem tablicy A (0.2);
- A[1:1] zwraca jednowymiarową tablicę, która zawiera tylko drugi element tablicy A;
- A[0:5] zwraca jednowymiarową tablicę, która zawiera pierwsze sześć elementów
tablicy A;
- A[2:*] zwraca jednowymiarową tablicę, która zawiera elementy tablicy A od
trzeciego do końca.
Przykłady wyra\eń udostępniających fragmenty dwuwymiarowej tablicy B o wartościach:
- B lub B[*,*] zwraca całą tablicę;
- B[1,2] zwraca skalar o wartości 1.3 (wiersz 1, kolumna 2);
- B[1,*] zwraca wiersz o indeksie 1 jako jednowymiarowÄ… tablicÄ™;
- B[3:4,4:5] zwraca dwuwymiarową tablicę, której wiersz zerowy zawiera elementy
3.5 i 3.6 a wiersz pierwszy 4.5 i 4.6.
W programach VEE nale\y unikać, jeśli jest to mo\liwe, stosowania pętli do operowania
na tablicach, poniewa\ wykonują się one stosunkowo wolno. Środowisko posiada doskonałe
środki do obsługi operacji na tablicach traktowanych całościowo. Dlatego trzeba poszukiwać
algorytmów i narzędzi, które pozwolą globalnie operować na tablicach.
19
13. Przebieg ćwiczenia
Samodzielnie wykonać przykładowy program według wskazań prowadzącego zajęcia.
Wykorzystać mo\na między innymi obiekty typu: Real, Int, Text, Formula, AlphaNumeric.
Program mo\e zawierać obliczenia momentu tarcia.
Moment tarcia jest to iloczyn wartości siły tarcia T działająca na ramieniu r (rys. 19):
MT = T · r
N
Siłę tarcia mo\na zapisać jako:
T = µ · N
T
gdzie µ współczynnik tarcia,
N siła nacisku.
r
Rys. 19. Schemat momentu tarcia
Programowanie obliczenia momentu tarcia w Agilent Vee nale\y rozpocząć od wybrania z
grupy Flow obiekt Start i kliknąć na ekranie roboczym (rys. 20).
a) b)
Rys. 20. Obiekt Start: a) lokalizacja obiektu Start w grupie Flow, b) wyglÄ…d obiektu Start na ekranie roboczym
Po kliknięciu w nazwę wybranego obiektu drugie kliknięcie przenosi obiekt na ekran roboczy
Wartość siły nacisku N mo\na uzyskać np. za pomocą tensometru. Z uwagi na szkoleniowy
charakter tego programu wartość siły mo\emy wprowadzić np. za pomocą elementu Real64
Knob (rys. 21).
Rys. 21. Lokalizacja obiektu Real64 Knob w grupie Data oraz wyglÄ…d obiektu Real64 Knob
20
Wartość promienia r mo\na wprowadzić za pomocą obiektu Real64 (rys. 22).
Rys. 22. Lokalizacja obiektu Real64 w grupie Data oraz wyglÄ…d obiektu Real64
Współczynnik tarcia µ mo\na równie\ wprowadzić za pomocÄ… obiektu Real64 (rys. 22).
Kolejnym krokiem jest napisanie formuły za pomocą, której mo\na będzie obliczać wartości
momentu tarcia. Wykorzystujemy do tego elementem Formula (rys. 23).
Rys. 23. Lokalizacja obiektu Formula w grupie Device oraz wyglÄ…d obiektu Formula po wprowadzeniu na pulpit
Element Formula nale\y dostosować do specyfiki programu obliczenia momentu tarcia .
Nale\y wprowadzić dodatkowe wejścia po przez kliknięcie lewym klawiszem myszy na
obiekt, a następnie wybór Add Terminal / Data Input (rys. 24). Operacje nale\y powtórzyć do
uzyskania trzech wejść. Kolejnym krokiem jest wprowadzenie formuÅ‚y obliczeniowej N · µ ·
r (rys. 24b).
21
a) b)
Rys. 24. Obiekt Formula: a) dodanie dodatkowego wejścia, b) wprowadzenie formuły obliczeniowej
Obliczoną wartość momentu tarcia nale\y przedstawić w obiekcie AlphaNumeric (rys. 25)
Rys. 25. Lokalizacja obiektu AlphaNumeric w grupie Display oraz wyglÄ…d obiektu AlphaNumeric
Przedstawione elementy nale\y odpowiednio połączyć od wyjść do wejść kolejnych
elementów. Całość programu przedstawiono na rysunku 26. Po wprowadzeniu wartości siły,
współczynnika tarcia i promienia naciskamy wprowadzony klawisz START.
Rys. 26. Widok programu obliczenia momentu tarcia
22
W środowisku Agilent VEE z napisanego programu mo\na stworzyć panel sterowniczy. W
tym celu nale\y wskazać element, który ma znalezć się na panelu a następnie w grupie Edit
wskazać Add To Panel (rys. 27). Na rysunku 28 przedstawiono przykładowy panel.
Rys. 27. Wprowadzenie elementu na panel
Rys. 28. Widok panelu programu obliczenia momentu tarcia
14. Sprawozdanie z ćwiczenia
W sprawozdaniu z ćwiczenia nale\y umieścić:
1. Krótką informację o środowisku Agilent VEE.
2. Opis własnego programu (dane wejściowe, proponowane obiekty).
2. Wydruk rzut ekranu własnego programu.
3. Opis poszczególnych składowych napisanego programu.
4. Wnioski i spostrze\enia.
Literatura:
www.kmeif.pwr.wroc.pl/elektron/interfejsy/hpvee/opis_vee.htm
23
Wyszukiwarka
Podobne podstrony:
Sprawozdanie ćw 13 (2)Ćw 13 Cos ficw 13ĆW 13Ćw 13 MikrobWodyKont Sanitcad 1 I Cw 13 12cad 1 I Cw 13 12cw 13(1)Ćw 13 Dziedziczenie sprzężone z Xćw 13Cw 13 Opracowanie ogniskawięcej podobnych podstron