(neke primene labview 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/seminar works das/primene...

53
ELEKTRONSKI FAKULTET U NIŠU KATEDRA ZA ELEKTRONIKU PREDMET: SISTEMI ZA AKVIZICIJU PODATAKA 2008 Neke primene LabVIEW 8.2 okruženja korišćenjem C8051F340-DK kroz USB interfejs Studenti: Miodrag Spasić 11990 Staniša Perić 11589 Staniša Petković 12016 Mentor: prof. dr Branislav Petrović

Upload: others

Post on 01-Feb-2020

4 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

ELEKTRONSKI FAKULTET U NIŠU KATEDRA ZA ELEKTRONIKU PREDMET: SISTEMI ZA AKVIZICIJU PODATAKA

2008

Neke primene LabVIEW 8.2

okruženja korišćenjem

C8051F340-DK kroz USB interfejs

Studenti: Miodrag Spasić 11990 Staniša Perić 11589 Staniša Petković 12016

Mentor: prof. dr Branislav Petrović

Page 2: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

2

Sadržaj

1. LabView okruženje 3

2. Opis algoritma za PC - AN169 13

2.1 API funkcije računara 14 2.2 Funkcije interfejsa uređaja 15

3. Pisanje Win 32 Dynamic Libraries (DLLs) i njihovo povezivanje iz LabView-a 18

3.1 Ukratko 18 3.2 Kostur DLL-a 18 3.3 Kontura izvornog koda 18 3.4 Primer-Pisanje DLL-a u Microsoft Visual C++ 4.0 razvojnom okruženju 19 3.5 Neka dodatna pojašnjenja za Array (Nizove) i String (Stringove) 25 3.6 Važne napomene i preporuke 15

4. Instaliranje softverskih komponenti okruženja 30

4.1 Silicon Laboratories USBXpress Development Kit 30 4.2 Silicon Laboratories USBXpress Device Driver Installer 33

5. Funkcije LabView-a korišćene u aplikaciji 35

6. Realizacija i povezivanje razvojnog okruženja i aplikacije 46

7. Literatura 53

Page 3: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

3

1. LabView okruženje

LabVIEW jeste jedno razvojno okruženje za kreiranje programa u formi blok dijagrama korišćenjem grafičkih simbola. Možemo reći da je LabVIEW, kao i programski jezici C ili BASIC, programski sistem opšte namene koji sadrži veliki broj biblioteka funkcija pogodnih za rešavanje različitih zadataka. Sa LabVIEW-om vrši se projektovanje željene virtuelne instrumentacije kreirajući grafički korisnički interfejs na ekranu računara, koji rukuje instrumentacionim programom, kontroliše izabrani hardver, analizira prikupljene podatke i prikazuje rezultat.

LabVIEW je inače skraćenica za Laboratory Virtual Instrument Engineering Workbench, i predstavlja programsko okruženje u kojem se programi kreiraju pomoću grafičke notacije (povezivanjem funkcionalnih čvorova žicama kroz koje protiču podaci); što ga razlikuje od tradicionalnih programskih jezika kao što su C, C++ ili Java, u kojima se programira tekstualno. U njemu se koristi grafički programski jezik, često zvan "G", za kreiranje programa u slikovitom obliku nazvanom blok dijagram. To je interaktivni sistem za razvoj i izvršavanje programa, projektovan za ljude poput naučnika i inženjera. LabVIEW razvojno okruženje radi na kompjuterima sa Windows, Mac ili Linux operativnim sistemima. Neki programi za koje bi trebalo sedmice ili meseci da bi se napisali korišćenjem konvencionalnih programskih jezika, mogu biti urađeni za nekoliko sati korišćenjem LabVIEW-a, zato što je on specifično projektovan za oblast merenja, analizu podataka i predstavljanje rezultata korisniku. Idealan je za simulacije, prezentaciju ideja, uopšteno programiranje ili čak za učenje osnovnih koncepta programiranja. LabVIEW nudi više fleksibilnosti od standardnih laboratorijskih instrumenata zato što je baziran na softveru. Mi, a ne proizvođač instrumenta, definišemo funkcionalnost instrumenta. Naš računar, ubačeni hardver i LabVIEW čine virtuelni instrument koji se kompletno može konfigurisati u cilju ostvarenja naših zadataka. LabVIEW sadrži biblioteke koda za specifičnu primenu, kao što su za akviziciju podataka (DAQ), magistralu opšte primene (GPIB - General Purpose Interface Bus) i serijsku kontrolu instrumenata, analizu podataka, prezentaciju podataka, smeštanje podataka i komunikaciju preko Interneta.

Za program kreiran korišćenjem LabVIEW-a, proizvođač ovog programskog paketa, firma National Instruments, sugeriše naziv virtuelni instrument (VI). Po organizaciji i načinu rada programska osnova virtuelnog instrumenta odgovara načinu funkcionisanja klasičnog instrumenta. VI poseduje interaktivan korisnički interfejs, ekvivalentan programskom kodu, a prihvata parametre od VI višeg nivoa. VI može imati ulogu glavnog programa ili može biti potprogram, kao deo programa ili većeg podprograma - VI koji radi u okviru drugog VI naziva se subVI. Prebacivanje parametara iz VI ka subVI i obrnuto obavlja se preko ikone (icon) i konektora (connector) koji funkcionišu kao grafičke liste parametara. Hijerarhijskom i modularnom organizacijom VI obezbeđen je koncept modularnog programiranja. Samim tim, to znači da se projekat deli na skup zadataka, koji se dalje mogu deliti na podzadatke, sve dok kompleksan projekat ne postane skup jednostavnih zadataka. Rešavanje podzadataka vrši se kreiranjem odgovarajućih VI ili subVI. Glavni program ili rešenje kompletnog zadatka predstavlja skup subVI koji obavljaju pojedinačne funkcije.

Veoma je korisno imati na umu da LabVIEW sadrži mnoge funkcoinalne primere koji će nam pomoći u učenju opštih tehnika programiranja i gledanju aplikacija koje ostvaruju opšte ulazno/izlazne zadatke i zadatke koji se tiču obrade podataka. NI Example Finder je veoma

Page 4: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

4

korisna alatka koja će nam asistirati u traženju ovih primera. NI Example Finder se otvara odlaskom u Help meni i selektovanjem Find Examples...

Slika 1. NI Example Finder

Interaktivni korisnički interfejs virtuelnog instrumenta naziva se prednji panel (front panel) jer on simulira prednji panel fizičkog instrumenta. Prednji panel može sadržati preklopnike, potenciometre, tastere, displej i druge elemente za indikaciju i upravljanje. Podaci se unose pomoću miša ili tastature, a rezultat se dobija na ekranu personalnog računara. Na slici 2 dat je primer prednjeg panela virtuelnog instrumenta.

Page 5: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

5

Slika 2. Prednji panel virtuelnog instrumenta

Blok dijagram (block diagram), konstruisan u LabVIEW grafičkom okruženju, prosleđuje

komande virtuelnom instrumentu. Blok dijagram predstavlja grafički metod rešavanja postavljenog zadatka izrade programa. Blok dijagram je izvorni kod za VI. Na slici 3 dat je primer blok dijagrama virtuelnog instrumenta.

Slika 3. Blok dijagram virtuelnog instrumenta u LabVIEW-u

Page 6: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

6

U okviru LabVIEW okruženja dat je prikaz osnovnih alatki za rad u LabVIEW-u, gde se Controls nalazi u okviru prednjeg panela, dok se Function nalazi u okviru blok dijagrama. Na slici 4 dat je prikaz ovih alatki koje čine LabVIEW okruženje.

Slika 4. LabVIEW okruženje

Operating tool – postavlja Controls i Function set objekata na front panel blok dijagram Position tool – za pomeranje, selektovanje i uvećanje objekata Labeling tool – za ubacivanje teksta i stvaranje novih tabela Wiring tool – za povezivanje objekata unutar blok dijagrama Object pop – up menu tool – kao zamena u opadajućem meniju Scroll tool – prelazi preko prozora bez upotrebe scroll bar - a Breakpoint tool – postavlja prekide u VI, funkcijama, petljama, sekvencama i strukturama Probe tool – testira povezivanje elemenata Color Copy tool – kopira boju za ubacivanje u Color tool Color tool – za podešavanje boja

Page 7: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

7

Povezivanje objekata u blok dijagramu vrši se na način kao na slici 5.

Slika 5. Povezivanje objekata u blok dijagramu

Kako je je već rečeno, povezivanje objekata u blok dijagramu se vrši preko Wiring tool.

Svaki objekat iz front panela ima svoj lik u blok dijagramu pri čemu je označen i oblik informacije (podatka) koji je naznačen bojom. Na slici 6. dat je prikaz podataka.

Slika 6. Prikaz podataka

Page 8: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

8

U tabeli 1. dat je oblik podataka.

Tabela 1.

Programske strukture predstavljaju poseban tip čvora uz pomoć kojih se dopunjava tok

izvršavanja programa tj. blok dijagrama. Izgled LabVIEW programskih struktura dat je na slici 7. Strukture se ponašaju kao čvorovi tj. izvršavaju se automatski kada se na ulazu pojave podaci. Kada se izvrše operacije uokvirene strukturom podaci se šalju na izlaz. Ulazni i izlazni priključci na okviru strukture, koji se generišu automatski kada veza preseče okvir strukture, nazivaju se tuneli (tunels). Pored tunela, pojedine strukture imaju i druge priključke. Za upravljanje operacijama koje se ponavljaju koriste se programske strukture For Loop/WhiIe Loop.

Slika 7. Programske strukture: For Loop i While Loop

For Loop omogućava da se dijagram koji je obuhvaćen ovom strukturom izvrši određen broj puta. Broj ponavljanja petlje označene je sa N i može se zadavati direktno, povezivanjem vrednosti koja se nalazi izvan petlje sa priključkom N, ili implicitno, preko auto-indeksiranja. Priključak iteracije (iteration terminal) sadrži realni broj tekuće iteracije. While Loop predstavlja uslovnu programsku strukturu koja obezbeđuje da se poddijagram obuhvaćen ovom strukturom izvodi sve dok je određeni uslov ispunjen. Struktura sadrži priključak za uslov (conditional terminal) i priključak rednog broja iteracije. Povezivanjem binarnog broja sa priključkom za uslov vrši se upravljanje petljom i na kraju svake iteracije proverava se vrednost broja koji je povezan sa terminalom za uslov i ako je ona jednaka logičkoj jedinici izvršava se sledeća iteracija. Priključak rednog broja iteracije ima istu funkciju kao kod For Loop programske

Page 9: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

9

strukture. Obe programske petlje mogu koristiti priključke za privremeno pamćenje podataka prethodne iteracije koji će biti korišćeni u narednoj iteraciji.

Case i Sequence programske strukture mogu sadržati više poddijagrama konfigurisanih u više nivoa, pri čemu je samo jedan vidljiv u datom trenutku.

Slika 8. Programske strukture: Case i Sequence

Case struktura sadrži dva ili više poddijagrama ili cases od kojih se samo jedan izvršava kada se izvršava struktura. Izbor poddijagrama koji će se izvršavati vrši se preko priključka koji se naziva selektor (selector). Ako je sa selektorom povezan binarni broj, struktura sadrži dva poddijagrama koji odgovaraju False i True stanjima. Povezivanjem celog broja na selektor može

se vršiti izbor poddijagrama u opsegu od 0 do 215

-1. Sekvencijalna struktura, čiji izgled podseća na komadić filmske trake, sadrži jedan ili više poddijagrama ili ramova koji se izvršavaju sekvencijalno, po utvrđenom redu. Podaci se šalju iz strukture tek po izvršavanju poslednjeg poddijagrama. Sekvencijalna struktura se koristi za upravljanje redosledom izvršavanja čvorova kada je on značajan, a nije uslovljen tokom podataka. Ovakav slučaj nije redak, a kao primer može poslužiti upravljanje instrumentacijom preko IEEE-488 interfejsa, tj. prema programabilnom instrumentu se najpre pošalje komanda pa potom izvrši očitavanje podataka. Ukoliko se ne bi koristile sekvencijalne strukture, moglo bi prvo doći do očitavanja podataka iz instrumenta pa tek potom slanje komande, što bi dovelo do greške u radu.

U okviru blok dijagrama mogu se koristiti matematičke formule koje se upisuju u uokviren pravougaonik koji se naziva čvor formule (Formula Node), slika 9. Čvor formule sadrži jednu ili više matematičkih funkcija ili formula i za pisanje formula koristi se BNE (Backus-Naur Form) notacija uobičajena za pisanje matematičkih izraza i kod klasičnih programskih jezika.

Slika 9. Matematičke formule

Na obodu programske strukture za formulu dodaju se priključci u koje se upisuju ulazne i izlazne promenljive. LabVIEW raspolaže velikim brojem funkcija koje se mogu koristiti u matematičkim formulama (aritmetičke, trigonometrijske, logaritamske i dr.).

Page 10: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

10

Podatak o tekućem vremenu, proteklom vremenu ili onemogućiti neku operaciju na određeno vreme može se ostvariti primenom vremenskih funkcija i kod većine vremenskih funkcija programa LabVIEW osnovna jedinica za vreme je milisekunda.

Slika 10. Vremenske funkcije: Tick Count (ms); Wait (ms); Wait Until Next ms Multiple; Get Data/Time String;

Funkcija Tick Count (ms) daje podatak o vremenu, izraženo u milisekundama, koje je

prošlo od momenta uključenja. Maksimalna dužina vremenskog intervala iznosi 232

-1. Funkcija Wait (ms) zadržava izvršavanje funkcije za specificirani broj ms. Funkcija daje podatak o sadržaju milisekundnog tajmera po isteku zadatog intervala čekanja. Brzinom izvršavanja programskih struktura For Loop/While Loop može se upravljati preko funkcija Wait Until Next ms Multiple. Period izvršavanja programske petlje definiše numerička konstanta koja se povezuje sa ikonom Wait Until Next ms Multiple i brojno je jednak vrednosti konstante izražene u milisekundama. Funkcija Get Data/Time String daje, u obliku odgovarajućih nizova, podatke o datumu i tekućem vremenu specificiranom preko broja sekundi proteklih od 12:00 GMT 1.januara 1904. god. Na raspolaganju stoje length vremenske funkcije Get Data/Time in Seconds koja daje podatak o proteklom vremenu u sekundama, Data/Time to SecondsTS. Konverziju datuma u proteklo vreme length Seconds To Data/Time za konverziju proteklog vremena izraženog u sekundama u tekući datum. Kod svih ovih funkcija kao referentno vreme uzima se 12:00 GMT, l.januar 1904. god.

Osim za prikaz tekstualnih poruka, više namena u akviziciji podataka imaju nizovi ASCII

karaktera (ASCII strings). Numerički podaci se najčešće prenose kao nizovi karaktera koji se potom ponovo konvertuju u brojne vrednosti. Pri memorisanju podataka brojevi se najpre konvertuju u nizove ASCII karaktera koji formiraju ASCII fajl. Za komunikaciju sa programabilnom instrumentacijom preko serijskog interfejsa RS-232 ili instrumentacionog paralelnog interfejsa IEEE-488 koriste se komande u vidu niza ASCII karaktera. LabVIEW raspolaže velikim brojem funkcija za rad sa nizovima uključujući i one koji vrše konverziju nizova u brojeve i obrnuto. Funkcija za upravljanje nizom (string control) i funkcija za unošenje broja povezuju se sa funkcijom za formatiranje niza Format Into String koja povezuje nizove sa ulaza, formatira brojeve, a zatim generiše jedan niz na izlazu. Broj karaktera u formiranom nizu može se odrediti korišćenjem funkcije za određivanje dužine niza String Length.

Osim prikaza tekstualnih poruka, u akviziciji podataka često se traži oblik podataka u

vidu grafika. Na slici 11. prikazan je oblik grafa, dok je na slici 12. dat prikaz digitalnog grafa.

Page 11: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

11

Slika 11. Waveform Graph

1-legenda plota, 2-cursor, 3-oznaka grida, 4-mini oznaka grida, 4-paleta grafa, 6- kursor za pomeranje, 7-legenda grafa, 8- legenda skale, 9-X osa, 10-Y osa, 11- oznaka

Slika 12. Digital Waveform Graph

LabVIEW poseduje skup funkcija File I/0 namenjenih za rad sa fajlovima gde pored

funkcija pamćenja ili očitavanja podataka, na raspolaganju stoje i druge funkcije kao što su kreiranje fajla tipa tabele, memorisanje podataka u binarnom formatu i tako dalje. Podaci koji se memorišu mogu biti u jednom od sledećih formata: Niz bajta. Podaci, čija je osnovna jedinica bajt, mogu biti istog ili različitog tipa. Ovaj format pruža mogućnost da se podaci koriste i u drugom softverskom paketu, na primer u programu za rad sa tabelama ili u programu za obradu teksta. Datalog fajl. Podaci su u binarnom formatu i ovakve fajlove može koristiti samo LabVIEW. Niz binarnih bajta. Odlikuje se velikom kompaktnošću i brzinom memorisanja podataka. Podaci se najpre konvertuju u binarni niz i mora se znati koji tip podataka se memoriše odnosno očitava.

Ono sto za nas predstavlja svakako najvredniju funkciju programskog paketa LabVIEW jeste upravljanje akvizicionim karticama za direktno povezivanje na ISA ili PCI zajedničku magistralu personalnog računara. Ove kartice obuhvataju različite kombinacije analognih i digitalnih ulaza i izlaza. U okviru funkcije za akviziciju podataka nalaze se klase VI za akviziciju analognih signala Analog Input VIs, generisanje analognih signala Analog Output VIs, akviziciju i generisanje digitainih signala Digital I/O VIs, brojanje impulsa i generisanje

Page 12: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

12

vremenskih signala Counter VIs, kalibraciju i konfiguraciju akviziciono-upravljačke kartice Calibration and Configuration VIs i virtuelni instrumenti za prilagođenje i obradu signala Signal Conditioning VIs. U okviru svake klase virtuelnih instrumenata, nalazi se veći broj VI za specifične primene, od najjednostavnijih do najsloženijih. Ovi VI se koriste u blok dijagramu za realizaciju određenih funkcija akvizicije ili upravljanja. Izbor akviziciono-upravljačke kartice povezan je sa konkretnim zahtevima određenog zadatka. Danas, veliki broj proizvodača hardvera uz svoje proizvode nudi VI ili razvojni alat za izradu VI za LabVIEW, čime se znatno proširuje izbor hardvera koji se može koristiti sa ovim programskim paketom.

Upravljanje programibilnom instrumentacijom, koju ovo okruženje nudi, jeste još jedna

od odlika u nizu, inženjerima jako korisna. Preko instrumentacionih drajvera ostvaruje se komunikacija sa programabilnom instrumentacijom. Instrumentacioni drajver predstavlja skup virtuelnih instrumenata preko kojih se komunicira sa instrumentom korišćenjem standardnih VISA (Virtual Instrument Software Architecture) I/O funkcija. Drajver ili VI predstavlja komandu visokog nivoa, kao što je Read DC Voltage VI za digitalni multimetar, ili Configure Time Axis VI za digitalni osciloskop. Pozvani drajver automatski šalje komande u vidu nizova karaktera koje odgovaraju određenom instrumentu. LabVIEW raspolaže velikim brojem drajvera za upravljanje instrumentacijom na bazi IEEE-488, RS-232 interfejsa i VXI instrumentacije. Drajveri za veći broj programabilnih instrumenata nalaze se u VISA biblioteci i dostupni su preko instrumentacionih I/O interfejsa, ali postoji i mogućnost izrade instrumentacionog drajvera za specifičnu primenu. Treba napomenuti da su raspoloživi instrumentacioni drajveri isporučeni sa blok-dijagramom, koji korisnik može editovati odnosno prilagoditi specifičnim zahtevima.

Page 13: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

13

2. Opis algoritma za PC - AN169

The Silicon Laboratories USBXpress Development Kit obezbeđuje kompletnu softversku podršku računara i uređaja za povezivanje Silicon Laboratories C8051F32x, C8051F34x i CP210x uređaja na Univerzalnu Serijsku Magistralu (USB).

Nije potreban USB protokol niti drajver za računar. Umesto toga , koriste se jednostavne, visoko-nivovske Application Program Interface (API) funkcije za softver računara i firmware uređaja koje obezbeđuju kompletno USB povezivanje.

USBXpress Development Kit obuhvata Windows drajvere za uređaje, Windows instaler za drajvere uređaja, biblioteku funkcija za računarski interfejs (host API) u obliku Windows Dynamic Link Library (DLL), i biblioteku funkcija za firmware uređaja (važi samo za uređaje C8051F32x i C8051F34x). Drajveri za uređaje i instalacioni fajlovi podržavaju MS Windows 2000/XP/Server 2003.

Slika 13. USBXpress tok podataka

Page 14: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

14

2.1. API funkcije ra čunara

API funkcije računara su u obliku Windows Dynamic Link Library (DLL). Interfejs računara DLL komunicira sa USB uređajem preko drajvera uređaja i USB steka operativnog sistema. Nadalje je prikazana lista API funkcija računara koje su dostupne:

SI_GetNumDevices() – Vraća broj povezanih uređaja

SI_GetProductString() – Vraća deskriptor uređaja

SI_Open() – Otvara uređaj i vraća handle

SI_Close() - Prekida pending IO i zatvara uređaj

SI_Read() – Čita podatke sa uređaja

SI_Write() – Upisuje podatke na uređaj

SI_FlushBuffers() - Flešuje TX i RX bafere uređaja

SI_SetTimeouts() – Setuje pauze read i write blokova

SI_GetTimeouts () – Uzima pauze read i write blokova

SI_CheckRXQueue() – Vraća broj bitova RX niza uređaja

SI_SetBaudRate() - Postavlja CP210x Baud Rate

SI_SetBaudDivisor() - Postavlja CP210x Baud Divisor vrednost

SI_SetLineControl() - Setuje CP210x kontrolnu liniju uređaja

SI_SetFlowControl() - Setuje CP210x kontrolni tok uređaja

SI_GetModemStatus() - Uzima CP210x status modema uređaja

SI_SetBreak() – Setuje prekidno stanje CP210x uređaja

SI_ReadLatch() – Uzima lečovanu vrednost porta CP2103 uređaja

SI_WriteLatch() – Postavlja lečovanu vrednost porta CP2103 uređaja

SI_GetPartNumber() - Uzima CP210x device part number

SI_DeviceIOControl() –Dozvoljava slanje komandi niskog nivoa drajveru uređaja

Generalno, korisnik inicira komunikaciju sa ciljanim USB uređajem tako što poziva funkciju SI_GetNumDevices. Ovaj poziv će vratiti broj ciljanih uređaja. Ovaj broj se kasnije

Page 15: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

15

upotrebljava kao niz kada pozivamo funkciju SI_GetProductString za kreiranje liste serijskih brojeva uređaja ili deskriptora uređaja.

Da bi pristupili uređaju, mora prvo biti otvoren pozivanjem funkcije SI_Open korišćenjem indeksa određenog pozivom funkcije SI_GetNumDevices. SI_Open funkcija će vratiti handle uređaju koji se koristi u svim sledećim pristupima. I/O podatak se dobija korišćenjem funkcija SI_Write i SI_Read. Kada se I/O operacije završe, uređaj se zatvara pozivanjem funkcije SI_Close.

Dodatne funkcije omogućuju flush bafere za slanje i primanje (SI_FlushBuffers), postavlja vreme za primanje i slanje (SI_SetTimeouts), proverava status bafera za primanje (SI_CheckRXQueue), i razne kontole za uređaj (SI_DeviceIOControl).

Za CP210x uređaje, dostupne su funkcije za postavljanje baud rate (SI_SetBaudRate); postavljanje baud divisor (SI_SetBaudDivisior); izmeniti podešavanja kontrolne linije kao što su dužina reči, stop i pariti bitovi (SI_SetLineControl); setuje hardversko “rukovanje”, softersko “rukovanje”, i kontrolne signale modema (SI_SetFlowControl); i uzima status modema (SI_GetModemStatus). Dodatne funkcije su dostupne za CP2103 uređaje za uzimanje (SI_ReadLatch) i postavljanje (SI_WriteLatch) vrednosti dodatnih GPIO pinova dostupnih na uređaju.U cilju pravljenja razlike izmedju uredjaja CP210x, funkcija (SI_GetPartNumber) vraća broj koji karakteriše samo taj uredjaj.

2.2. Funkcije interfejsa uređaja USBXpress firmware biblioteka uključuje niz funkcija interfejsa uređaja koje obezbeđuju

Application Programming Interface (API) na C8051F32x i C8051F34x mikrokontrolerima. Ove funkcije obezbeđuju jednostavan I/O interfejs ka MCU’s USB kontroleru, ovo otklanja potrebu za razumevanje i upravljanje niskonivovskim hardverom USB-a ili detaljima protokola. API je obezbeđena u obliku biblioteke prekompajlirane preko niza alata Keil C51. Firmware uređaja mora biti razvijan koristeći Keil C51 softver. Funkcije interfejsa uređaja koje su dostupne su:

USB_Clock_Start() – Inicijalizuje USB časovnik USB_Init() – Dozvoljava USB interfejs Block_Write() – Upisuje podatke u bafer računara preko USB-a Block_Read() – Čita podatke iz bafera računara preko USB-a Get_Interrupt_Source() – Pokazuje razlog API prekida USB_Int_Enable() – Omogućuje API prekide USB_Int_Disable() – Onemogućuje API prekide USB_Disable() – Onemogućuje USB interfejs USB_Suspend() – Obustavlja USB prekide USB_Get_Library_Version() – Vraća verziju USBXpress firmware biblioteke

Page 16: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

16

API funkcija je upotrebljena u režimu rada pobuđivan prekidom (interrupt-driven mode). Korisnik mora da obezbedi rutinu za obrađivanje prekida lociranu na vektorskoj adresi 0x0083 (prekid 16) za 'F320/1/6/7 uređaje ili na vektorskoj adresi 0x008B (prekid 17) za 'F34x uređaje.

Ova rutina za obradu prekida biće pozvana od strane bilo kog USB API prekida. Jednom unutar ovog ISR-a, poziv funkcije Get_Interrupt_Source je upotrebljen za određivanje izvora prekidat (takođe briše flegove trenutnog prekida).

USBXpress firmware biblioteka rukuje MCU's USB kontrolerom u USB Full Speed modu, i koristi Bulk prenosni tip sa 64 bajta podataka po paketu. Progran razvijen za specifičnu MCU familiju uređaja ('F320/1, 'F326/7, ili 'F34x) mora koristiti USBXpress firmware biblioteka uređaja koje siu specifične za tu familiju.

Napomena: USB0 hardverski prekid koji se nalazi na vektorskoj adresi 0x0043 (prekid

8) se nalazi pod nadzorom USBXpress-a, i koristi se za rukovođenje nisko-nivovskim detaljima USB protokola. USB API prekid (prekid 16 za 'F320/1/6/7 uređaje prekid 17 za 'F34x uređaje) je virtualni prekid generisan od strane USBXpress firmware biblioteke gdegod korisnički program treba biti zapisan od strane USBXpress događaja. Događaji su definisani u opisu Get_Interrupt_Source funkcije.

Primer ISR za API firmware (prekid 16 za 'F32x uređaje, prekid 17 za 'F34x uređaje): void USB_API_TEST_ISR(void) interrupt 16 { BYTE INTVAL = Get_Interrupt_Source(); if (INTVAL & TX_COMPLETE) {

Block_Write(In_Packet, 8); } if (INTVAL & RX_COMPLETE) { Block_Read(Out_Packet, 8); } if (INTVAL & DEV_CONFIGURED) { // Inicijalizacija svih analognih periferija. Ova j prekid

// govori ure đaju da on sada može koristiti // onoliko struje koliko se specificira od strane // MaxPower deskriptora

Init(); // Napomena: primer komande, nije deo API } if (INTVAL & DEV_SUSPEND) {

Page 17: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

17

// Isklju čuje sve analogne ure đaje Turn_Off_All(); // Napomena: primer komande, nije deo API USB_Suspend(); // Ova funkcija vra ća // Ponovo uklju čuje sve analogne ure đaje Init(); // Napomena: primer komande, nije deo API } }

Page 18: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

18

3. Pisanje Win32 Dynamic Link Libraries (DLLs) i njihovo pozivanje iz LabVIEW -a

3.1. Ukratko LabVIEW za Windows 95 i Windows NT ima mogućnost pozivanja bibliotečkih funkcija

(Call Library Function) koje se mogu koristiti za pristup 32-bitnim DLL fajlovima. Ovaj dokument daje kratak opis o načinu kreiranja jednostavnog 32-bitnog DLL fajla i njegovog pozivanja iz LabVIEW-a pod Windows 95 i NT operativnim sistemom. Ovaj dokument ne diskutuje detalje C programiranja ili sve različite kompajlere koji se mogu koristiti za kreiranje DLL fajla. Pošto DLL koristi format koji je standard za nekoliko razvojnih okruženja, u mogućnosti smo da koristimo bilo koje razvojno okruženje za kreiranje DLL fajla koji se poziva iz LabVIEW-a.

3.2. Kostur DLL-a Dinamičko povezivanje je mehanizam koji povezuje aplikacije sa bibliotekma za vreme

njihovog izvršavanja. Biblioteke ostaju u svojim izvornim fajlovima i ne kopiraju se u izvršnim fajlovima aplikacija. DLL fajl se povezuje sa aplikacijom kada se aplikacija pokrene, pre nego što je kreirana. DLL fajl može da bude povezan sa drugim DLL fajlom.

Napomena: Više puta, DLL fajl je smešten u fajlovima sa različitim ekstenzijama kao što su: .EXE, .DRV ili .DLL.

Aplikacije i DLL fajlovi mogu da se povezuju sa drugim DLL fajlovima automatski ako je takvo povezivanje specifikovano u ulaznom delu fajla za definisanje modula kao dela za kompajliranje ili se može eksplicitno učitati korišćenjem funkcije Windows LoadLibrary.

3.3. Kontura izvornog koda DLL-a

Primer sledećeg koda opisuje osnovnu strukturu DLL fajla:

BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { switch (fdwReason) { case DLL_PROCESS_ATTACH: /* Inicijalizacija koda */

Page 19: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

19

break; case DLL_THREAD_ATTACH: /* Ovde uneti kod za inicijalizaciju*/ break; case DLL_THREAD_DETACH: /* Ovde uneti kod za brisanje. */ break; case DLL_PROCESS_DETACH: /* Kod za brisanje*/ break; } /* Povratna vrednost se koristi za uspešnost naredb a

DLL_PROCESS_ATTACH */ return TRUE; } /* Jedna ili više funkcija */ __declspec (dllexport) DWORD Function1(.... ){} __declspec (dllexport) DWORD Function2(.... ){}

Kao što je pokazano u primeru, u Win32 DllMain funkcija zamenjuje i LibMain i WEP funkcije u Win16. Funkcionalnost ovih dveju funkcija je sada pod DllMain funkcijom. DllMain funkcija se poziva kada se DLL funkcija upisuje ili ispisuje. Ovo je slično sa LibMain and WEP karakteristikama u Win16. DllMain funkcija se takođe poziva kada se kreira nova veza u procesu koji je već povezan sa DLL funkcijom ili kada se ta veza prekine. Na kraju, DLL takođe sadrži funkcije koje izvršavaju aktivnosti koje se očekuju od DLL funkcije. Ove funkcije su eksportovane korišćenjem _declspec (dllexport) ključne reči u vreme prototipovanja i deklarisanja funkcija. _declspec (dllexport) ključna reč je specificirana ekstenzija za C i C++ programski jezik od strane Microsoft - a. Alternativno, izlazni deo fajla za definisanje modula može biti korišćen za eksportovanje funkcija.

3.4. Primer - Pisanje DLL-a u Microsoft Visual C++ 4.0 razvojnom okruženju

U nekim slučajevima, može se kreirati sopstveni DLL fajl, na primer, za komunokaciju sa

hardverom koji smo sami napravili. U ovom delu, nalazi se primer koda koji pokazuje kako se kreira jednostavan DLL fajl. Za kreiranje DLl fajla potrebna su sledeća četiri fajla:

• Izvorni fajl C programskog jezika (neophodno)

Page 20: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

20

• Header fajl (opcionalno – može biti deo izvornog fajla) • Fajl za definisanje modula (može biti neophodan ako se koristi _stdcall tj.

Standardno pozivanje ili funkcija može biti eksportovana korišćenjem ključne reči _declspec (dllexport)

• Kreiranje fajla ili setovanje opcija kompajlera za generisanje DLL fajla A make file, or set compiler options to generate a DLL (neophodno - neka razvojna okruženja kreiraju i izvršavaju napravljeni fajl)

Izvorni fajl C programskog jezika Kod na sledećoj strani je izvorni fajl C programskog jezika za DLL fajl koji ćemo kreirati

u ovom primeru. Koristi se utvrđeno pravilo pozivanja C programskog jezka.Takođe, u ovom slučaju funkcije su eksportovane korišćenjem _declspec (dllexport) ključne reči. Deklarisanje dllexport ključne reči eliminiše potrebu za kreiranje fajla za definisanje modula. Međutim ako se želi koristiti standardno pozivanje korišćenjem _stdcall ključne reči, mogu se eksportovati funkcije u sopstveni dll fajl korišćenjem fajla za definisanje modula.

Ovo može biti urađeno jer _stdcall kvari imena funkcija. Ako se pronađe izmenjeno ime može se i dalje pozvati funkcija korišćenjem izmenjenog imena.

Sledeći primer DLL fajla definiše tri jednostavne funkcije: • add_num sabira dva cela broja • avg_num nalazi srednji član niza sa brojčanim podacima • numIntegers prikazuje broj celih brojeva u nizu

U sledećem primeru, kreiraćemo VI (virtualni instrument) koji poziva samo jednu od

ovih funkcija. Najpre je prikazan izvorni kod za DLL fajl, a posle toga header fajl, ourdll.h . /* ourdll.c izvorni kod */ #include <windows.h> #include <string.h> #include <ctype.h> #include "ourdll.h" BOOL WINAPI DllMain ( HANDLE hModule, DWORD dwFunction, LPVOID lpNot) { return TRUE; } /* Sabira dva cela broja */ _declspec (dllexport) long add_num (long a, long b ) {

Page 21: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

21

Return ((long)(a+b));} /* Ova funkcija nalazi sredinu bilo kog niza koji s e sastoji

iz brojeva sa jednostrukom ta čnos ću */ _declspec (dllexport) long avg_num(float *a, long size,

float *avg) { int i; float sum=0; if(a != NULL)

{ for(i=0;i < size; i++) sum = sum + a[i]; }

else return (1);

*avg = sum / size; return (0); } /* Broji koli činu celih brojeva koji se pojavljuju u

stringu. */ _declspec (dllexport) unsigned int numIntegers (uns igned

char * inputString) { /* Važi da ova funkcija ne proverava znak, decimalu , ili

eksponent */ int lastDigit = 0;

unsigned int numberOfNumbers = 0, stringSize, i; stringSize = strlen(inputString);

for(i = 0; i < stringSize; i++) { if ( !lastDigit && isdigit(inputString[i])) numberOfNumbers++; lastDigit = isdigit(inputString[i]); }

return numberOfNumbers; }

Napomena: LabVIEW može pozvati DLLs koji koriste stdcall konvenciju poziva kao i DLLs koji koriste C konvenciju poziva.

Page 22: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

22

Header fajl Sledeći kod nabraja heder fajl ourdll.h. Sve od funkcija koje smo kreirali u sors kodu su

dostupne drugim aplikacijama sbog toga što mogu biti eksportovane koristeći _declspec (dllexport) ključne reči.

BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD,LPVOID); _declspec (dllexport) long add_num(long, long); _declspec (dllexport) long avg_num(float *, long, float *); _declspec (dllexport) unsigned int numIntegers (unsigned char *);

Fajl za definisanje modula

DLL može imati fajl definicije modula (.def) udružen sa njim. Fajl .def sadrži naredbe za definisanje DLL, npr. ime DLL-a i funkcija koju eksportuje. LINK opcija u opciji Project Settings softvera Visual C++ kompajler obezbeđuje ekvivalentnu komandu liniju opcija za većinu modularno definisanih naredbi, otuda tipični programi za Win32 obično ne zahtevaju .def fajl. Jedini obavezni ulazi u .def fajlove su LIBRARY naredba i EXPORT naredba. Naredba LIBRARY mora biti prva naredba u fajlu. Ime koje se nalazi u LIBRARY naredbi identifikuje biblioteku u ulaznoj biblioteci DLL-a. EXPORTS naredba nabraja imena funkcija koje su ekspotovane od strane DLL-a.

Ako bi koristili the _stdcall konvenciju poziva u vašem DLL-u, onda biste trebali koristiti fajl definicije modela za eksportovanje funkcija sa kojima DLL raspolaže, kao sto je prikazano ispod. Ovo se mora uraditi jer bi kompajler pokvario imena funkcija. Sledeći je listing fajla definicije modula.

LIBRARY ourDLL EXPORTS avg_num add_num num_Integers

Pravljenje projekta u Microsoft Visual C++ 4.0

Većina Windows kompajlera nude integrisano razvojno okruženje, i moguće je izabrati opcije za kompajliranje projekta kao što je DLL. Prvo, morate kreirati projekat. Koraci kreiranja primera DLL biće opisano za Microsoft Visual C++ 4.0 kompajler. Iz Start menija, izabrati Programs->Microsoft Visual C++ 4.0- >Microsoft developer Studio. Ovo pokreće Microsoft Visual C++ 4.0. Sledeće je kreiranje novog projekta selektovanjem New->Project Workspace iz File menija. Kao tip izaberite Dynamic Link Library. Nazovite program našdll. Nakon toga, uopotrebite tekst editor, ili editor napravljen u okviru Microsoft Visual C++ 4.0 da biste kreirali heder i C sors kod fajl. Nazovite ih našdll.h i našdll.c. Najbolje je sačuvati sve ove fajlove unutar

Page 23: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

23

zajedničke datoteke. Dodajte našdll.h i našdll.c u vaš projekat selektovanjem “Files into Project “ opcije iz Insert menija. Nakon dodavanja ovih fajlova u projekat, pritisnite OK dugme u dijalog prozoru. Da bi kompajlirali kod u DLL, selektujte Rebuild all NAŠDLL.DLL iz Project menija. (Ukoliko izaberete drugačije ime projekta a ne našdll , tada će se to ime pojaviti u Project meniju.)

Pozivanje DLL-a

Dobijeni DLL sada možemo da pozivamo iz LabView-a koristeći LabView call library Function. Napravićemo VI nazvan ARRAYAVG.VI koji poziva avg_num funkciju u našem NAŠDLL.DLL fajlu. Smestićemo Call Library Function ikonicu u blok dijagramu i podesiti je da poziva avg_num funkciju kao što se vidi na slici 14.

Slika14. Konfigurisanje Call Library Function za avg_num funkciju u OURDLL.DLL

fajlu Kao što je prikazano na slici, prvo određujemo lokaciju DLL fajla unoseći putanju.

Takođe određujemo ime funkcije koju treba da poyovemo u DLL-u. U našem sučaju to je avg_num.

Uobičajan način pozivanja ove funkcije u DLL-u ostvarujemo programskim jezikom C. Povratni tip je znakovni 32-biti integer. Parametri funkcije su jedan Array Data Pointer

na 4-byte-ni single precision floating point brojeva , jedan 32-bitni znakovni integer koji sadrži

Page 24: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

24

dužinu niza i jedan pointer na 4-byte-ni single precision floating point verdnost, koji će vratiti prosečan broj elemenata u nizu.

Kreiramo predni panel prikazan na slici 15.a. Onda, povežemo odgovarajuće kontrole i

indikatore na Call Library Function ikonicu. Slika 15.b prikazuje odgovarajuća blok-dijagram povezivanja.

15a. Prednji panel

15b. Blok dijagram

Slika15. ARRAYAVG.VI Prednji panel i Blok dijagram

Posle pravljenja odgovaraućih konekcija, pokrećemo VI. Dakle napisali smo,

izkompajlirali i linkovali naš DLL i pozvali funkciju u njemu iz LabView-a. Ukoliko nam DLL vrati netačne rezultate ili program padne, trebalo bi proveriti tipove podataka ili proveriti da nije napravljena neka greška prilikom šemiranja.

Page 25: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

25

3.5. Neka dodatna pojašnjenja za Array(Nizove) i String(Stringove)

Ovde ćemo pojasniti neke važne koncepte koji bi nam bili od koristi prilikom korišćenja

Call Library Function za rad sa nizovima i string-ovima. Operacije nad nizovima i string-ovima podrazumevaju korišćenje pointera, pa će nam sledeća pojašnjenja pomoći u relizacije Call Library Function.

Numerički nizovi

Brojevni nizovi mogu da budu integer tipa, single (4-byte) ili double(8-byts) sa pokretnom tačkom. Kada uključimo jedan niz podataka u DLL funkciju, videćemo da nam se nude opcije da propustimo podatke kao Array Data Pointer ili kao LabView Array Handle.

Kada koristimo opciju Array Data Pointer, mozemo podešavati broj dimenzija u nizu, ali ne uklučujemo informacije o dužini dimenzija niza. DLL funkcioniše pretpostavljajući da je podatak odredjene veličine ili očekujći da veličina prođe kao pojedinačni ulaz. Takođe pošto se pokazivač odnosi na podatke iz LabView-a, ne treba menjati dimenzije unutar DLL-a. Ako pokušamo ovo vrlo lako se može doći do pucanja programa. Ukolko moramo da vratimo niz podataka,alociraćemo jedan niz dovoljne dimenzije u LabView-u, pustićemo ga kroz funkciju i dobiti rezultat kao buffer. Ako podaci zauzimaju manje mesta, mozemo vratiti tačnu dimenziju kao poseban parametar i na mestu sa kog je pozivamo koristiti podskup niza kako bismo dobili valjan rezultat. Na drugi način, ako pustimo niz podataka kao LabView Array Handle, onda možemo da koristimo LabView-CIN funkcije za menjanje dimenzije niza unutar DLL-a. Da bi pozvali LabView-CIN funkciju iz našeg DLL-a dok koristimo visual C++ kompajler morali bismo da uključimo biblioteku labview.lib koja se nalazi u LabView 8.2/cintools/win32 direktorijumu. Isto tako, ako bismo želeli da koristimo ove CIN funlkije koristeći Symantec-ov kompajler trebalo bi da uključimo bibliotekulabview.sym.lib koja se takođe nalazi u LabView 8.2/cintools/win32 direktorijumu.

Podaci tipa STRING

LabView čuva string-ove u formatu sličnom kao u pasalu. Call Library Function radi sa LabView String Handles ili sa C-ovim ili sa Pascal-ovim string pokazivačima. Razlike izmedju ovih formata objašnjene su u sledećem pasusu.

Možemo da zamislimo string kao niz znakova; grupisanj karaktera u nameri da bi formirali string. LabView čuva string-ove u posebnom formatu u kojem prva četiri bajta niza karaktera su znakovni 32-bitni integer koji prikazuju koliko karaktera postoji u string-u. Prema tome za string sa n karaktera će biti potrebno n+4 bajta da se stavi u memoriju. Npr. String tekst sadrži četiri karaktera; kada LabView uzme string, prva četiri bajta sadrže vrednost 4 kao znakovni 32-bitni broj, i svaki od sledećih četiri bajta sadži jedan karakter stringa. Prednost ovog

Page 26: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

26

načina čuvanja stringova jeste što su nulti karakteri dozvoljeni u stringu. Stringovi su virtualno neograničeni u dužini (do 231 karaktera). Ovaj način čuvanja stringova ilustrovan je na slici 16. Ako uzmemo LabView String Handle iz. Call Library Function na DLL-u, tada možemo da koristimo LabView- CIN funkcije kao DSSetHandleSize za menjanje dimenzija LabView String Handle. Takođe bi smo morali da dodamo labview.lib ukoliko koristimo C++ i labview.sym.lib ukoliko koristimo Symantec-ov kompajler, iz LabView 8.2/cintools/win32 direktorijuma dok pravimo naš DLL.

Slika 16. LabView string format

Paskalov string format je skoro identičan kao LabView string format, ali umesto čuvanja

dužine stringa kao 32-bitni integer, on se čuva kao neki 8-bitni format za prirodne brojeve. Ovo ograničavanje dužine kod paskala je do 255 karaktera. Na slici 17 prikazano je predstavljannje znakova u paskalu. String u Paskalu koji je dugačak n karaktera tražiće n+1 bajta memorije za smeštanje.

Slika 17. Paskal string format

C stringovi su verovatno tipovi stringova sa kojima ćemo češće imati posla. Sličnosti

između C stringova i normalnih numeričkih nizova u C-u bivaju u mnogome jasniji kada jedan prati drugi C string označen kao char*, gde je char jedan tipično neznakovni bajt. C string ne sadrži bilo koju informaciju koja direktno daje dužinu stringa, za razliku od Paskala i LabView-a. Oni koriste specijalni karakter zvani nulti karakter, koji ukazuje na kraj stringa. Nulti karakter je definisan da ima vrednost nula u ASCI kodu. Primetimo da je ovo nulti član broj nula a ne karakter “0”. Prema tome, u C-u string sastavljen od n karaktera traži n+1 bajta u memoriji za smeštanje: n bajta za karaktere u stringu i jedan dodatni bajt za nulti završni karakter. Prednost C stringova se ogleda u tome što su ograničeni samo veličinom slobodne memorije. Bilokako, ako dobijamo podatke sa nekog instrumenta koji vraća brojne vrednosti kao binarne stringove, kao što je slučaj sa serijskim GPIB instrumentima, vrenosti nule u stringu su moguće. Za binarne podatke gde nule moraju biti prisutne,verovatno bi trebalo da koristimo niz 8-bitnih prirodnih brojeva. Ako string tretiramo kao C string, program će nam netačno pretpostaviti da se je došlo do kraja stringa, kada će u stvari naš instrument vratiti brojčanu vrednost nula. Na slici 18 prikazan je C string.

Page 27: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

27

Slika 18. C string format

Kada dodamo C string podatke u DLL, moramo pratiti iste linije kao za nizove. Vrlo je

važno da ne menjamo dimenzije stringu,ne spajamo string ili ne vršimo operacije koje mogu povećati dužinu stringa učitanog iz LabView-a ukoliko koristimo C ili Paskal string pokazivače. Ukoliko treba da vratimo podatke kao stringove, trebalo bi da prvo alociramo string odgovarajuće dužine u LabView-u, i učitamo stringove u DLL da služe kao buffer. Ali, ako učitamo LabView String Handle iz Call Library Function u DLL, onda možemo koristiti LabView- CIN funkcije kao DSSetHandleSize za menjanje dimenzija LabView String Handle.

Korisno o nizovima i stringovima

Ako naš DLL mora da napravi jedan niz, menja njegovu dimenziju, ili menja dužinu string podataka ne koristeći LabView String Handles, onda on prekida funkciju u dva koraka. U prvom koraku određuje broj elemenata potrebnih u nizu ili dužinu stringa koji će biti vtaćen. Ova funkcija će vratiti željenu dužinu u LabView. U LabView-u inicijalizovaće se jedan niz stringova sa difoltnim vrednostima, i učitati ovaj niz u drugu funkciju u našem DLL-u koja u stvari smešta podatke u niz. Ukoliko radimo sa instrumentima čiji se rad zasniva na stringovima, mora da bude lakše učitavanje jednog niza 8-bitnih prirodnih brojeva u odnosu na C stringove zbog mogućnosti javljanja nulte vrednosti u stringu. U drugom slučaju, ukoliko koristimo C++ kompajler ili Symantec kompajler i učitamo LabView Array Handle ili LabView String Handle iz Call Library čvora u DLL onda možemo koristiti LabView-CIN funkcije za promenu dimenzija ili kreiranje nekog novog niza ili stringa.

Saveti kod korišćenja Call Library Function i DLL-a

Ukoliko, posle konfigurisanja Call Library Function dijaloga, još uvek imamo isprekidanu Run strelicu u LabView-u, trebalo bi najpre proveriti tačnost putanje do DLL fajla. Ako na LabView prikazuje poruku o grešci, function not found in library, treba proveriti da lismo tačno ukucali ime funkcije koju želimo da pozovemo.Takođe ponovno zvanje koje treba da deklariše funkciju sa _declspec (dllexport) ključnim rečima u heder fajlu i sorce kodu,ili u export sekciji modula definisanog fajla. Čak iako smo koristili _declspec(dllexport) ključnu reč i koristimo _stdcall calling konvenciju mi moramo dadeklarišemo ime DLL funkcije u EXPORTS sekciji modula definicionog fajla. Ako ovo nije urađeno, funkcija će biti eksportovana sa delimitčnim imenom, i pravo ime funkcije biće nedostupno za aplkacije koje pozivaju DLL. Ako funkcija nije bila adekvatno eksportovana, trebalo bi ponovo izkompajlirati DLL.

Page 28: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

28

Pre rekompajliranja zatvorićamo sve aplikacije i VI koji su bili pokrenuti. Ako je DLL još uvek u memoriji kompajliranje se neće izvršiti. Većina kompajlera će nas na vreme na to upozoriti.

Ako smo dobro proverili ime funkcije i dobro eksportovali funkciju, utvrdimo koji ćemo kompajler koristiti C ili C++. Korišćenjem C++ kompajlera, imena funkcija u DLL-u će biti nazvana procesom zvanim “name mangling”. Nakraći način da se ovde izvrši korekcija jeste staviti unutar deklaraciju funkcije koju želimo da eksportujemo, u našem header fajlu sa extern “C” iskazom:

extern “C” { /* your function prototypes here */ }

Nakon pravilnog konfigurisanja Call Library Function, pokrenućemo VI. Ako startovanje

ne bude uspešno, možemo imati neke greške ili grešku glavne zaštite(General Protection Fault). Ako nam se javi General Protection Fault, za to postoje nekoliko mogućih razloga. Prvo, provermo da li koristimo tačno one parametre koje funkcija u DLL-u očekuje. Na primer, proverimo da li koristimo int16 a ne int32 kada funkcija očekuje int16. Takođe proverimo da li koristimo tačno konvencijupozivanja_stdcall ili C.

Još jedna od mogućnosti za grešku je da pokušamo da debag-ujemo naš DLL korišćenjem source level debugger u okviru našeg kompajlera. U Microsoft Visual C++ , možemo podestiti u Build>Settings>Debug izaberimo Executable for Debug session kao labview.exe da bi debagovali naš DLL. Korišćenjem debagera našeg kompajlera, možemo podesiti breakpoints-tačke prekida, korake kroz naš kod, pratiti vrednosti promenljivih i tako dalje. Debagovanje koriščenjem konvencionalnih alata može biti veoma korisno.

Pozivanje DLL-a iz drugog C programa je takođe odličan način debagovanja našeg DLL-a. Ovim neposredno možemo testirati naš DLL nezavisno od LabVIEW-a, ovo nam može pomoći u identifikaciji i prepoznavanju mogučih grešaka mnogo ranije.

3.6. Važne napomene i preporuke Ne zaboravimo sledeće napomene kada pišemo DLL: Proverimo da li koristimo odgovarajući calling convention-način pozivanja f-je (C ili

stdcall). Zapamtmo pravilan redosled argumenata korišćenih u funkciji. NIKADA ne treba menjati dimenzije nizova ili nadovezivati stringove korišćenjem

argumenata ubačenih direktno u funciju. Zapamtimo, parametri koje ubacujemo su LabVIEW podaci. Promenom niza ili veličine

stringa možemo kao rezultat dobiti pad programa usled presnimavanja drugih podataka memorisanih u LabVIEW memoriji. Možemo menjati dimenzije nizova ili nadovezivati

Page 29: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

29

stringove ako ubacimo LabVIEW ArrayHandle ili LabVIEW String Handle a pritom koristimo Visual C++ kompajler ili Symantec kompajler da iskopmpajliramo naš DLL.

Kada ubacujemo string u funkciju, zapamtimo da selektujemo tačan tip stringa u C-u ili Pascal-u ili LabVIEW string Handle.

Zapamtimo, Pascal stringovi su ograničeni na dužinu od 255 karaktera. Zapamtimo, C string je NULL terminated. Ako naša DLL funkcija vraća numeričke

podatke u obliku binarnog stringa ( kao na primer, preko GPIB ili serijskog porta), može vratiti nultu vrednost kao deo strig podataka. U ovim slučajevima, ubacivanje nizova kraćih (8-bitnih) integera je najpouzdanije.

Ako radimo sa nizovima ili stringovima podataka, UVEK ubacimo buffer niza koji je dovoljno velik da zadrži bilo koji rezultat memorisan u baferu od stane funkcije osim ako ih ubacujemo kao LabVIEW handles, u tom slučaju možemo im promeniti veličinu korišćenjem CIN funkcije u okviru Visual C++ ili Symantec kompajlera.

Zapamtimo da izlistamo DLL funcije u EXPORTS sekciji modula definicionog fajla ako koristite _stdcall.

Setimo se da izlistamo DLL funcije koje druge aplikacije pozivaju u definicionom modulu podataka EXPORTS sekcije ili da uključimo _declspec(dllexport) ključne rečiu deklarisanju funkcije.

Ako koristimo C++ kompajler, ne zaboravimo da eksportujemo funkcije sa eksternim „ C“ {} iskazom u našem header fajlu u cilju sprečavanja promene imena.

Ako pišemo naš sopstveni DLL, ne treba rekompajlirati DLL dok je on učitan u memoriju i korišćen od strane druge aplikacije (na primer našeg VI). Pre nego što rekompajliramo DLL, proverimo da sve aplikacije koje koriste DLL nisu učitane u memoriju. Možda nam kompajliranje i ne uspe ako zaboravimo na ovo ili nas kompajler ne upozori na ovo. Testirajmo DLL drugim programom da bi se uverili da se funkcije (i DLL) ponašaju normalno. Testiranje degaberom našeg kompajlera ili sličnog C programa u kojem možemo pozvati funcije u DLL-u nam može pomoći u pronalaženju mogućih poteškoća prisutnih u DLL-u ili LabVIEW-u.

Page 30: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

30

4. Instaliranje potrebnih komponenti

4.1. Silicon Laboratories USBXpress Development Kit

Instaliranje se vrši na sledeći način:

• Duplim klikom na USBXpress_Install.exe pokreće se čarobnjak koji daje prozor prikazan na slici 19.

Slika 19.

• Izaberemo opciju Install a new instance of this application i kliknemo na Next, nakon čega nam se prikazuje prozor kao na slici 20. Za ovu potrebu nam nije potrebna druga ponuđena opcija (Maintain or update the instance of this application selected below).

Page 31: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

31

Slika 20.

• Klikom na Next prikazuje se sledeći prozor (slika 21) na kojoj se traži potvrda prihvatanja uslova instalacije. Ukoliko ne prihvatimo uslove instaliranja nije moguće nastaviti instalaciju. Nakon prihvatanja uslova i klikom na dugme Next prikazuje se prozor prikazan na slici 22.

Slika 21.

• U ovom koraku klikom na dugme Change… postoji mogućnost promene destinacionog foldera u kome će biti smešteni instalacioni fajlovi. Ukoliko ne promenimo destinaciju instalacioni fajlovi će biti smešteni na sledećoj lokaciji: C:\SiLabs\MCU_2. Klikom na Next prikazuje se prozor kao na slici 23.

Page 32: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

32

Slika 22.

• Nakon svih prethodno pređenih koraka u ovom prozoru se samo potvrđuje početak instalacije klikom na dugme Install.

Slika 23.

• Na kraju instalacije nudi se mogućnost pokretanja instalacije drajvera čekiranjem opcije Launch the USBXpress Driver Installer, što je prikazano na slici 24. Ukoliko ne izaberemo ovu opciju instalacija se svejedno završava klikom na dugme Finish, a instalacija ovog drajvera se uvek može pokrenuti sa destinacije C:\SiLabs\MCU\USBXpress\Driver, klikom na USBXpressInstaller.exe ikonu.

Page 33: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

33

Slika 24.

4.2. Silicon Laboratories USBXpress Device Driver Installer

• Instalacija USBXpress Device Driver-a se može pokrenuti čekiranjem opcije Launch the USBXpress Driver Installer na slici 24 ili pokretanjem USBXpressInstaller.exe sa destinacije C:\SiLabs\MCU\USBXpress\Driver. Nakon toga dobija se prozor kao na slici 25. Postoji mogućnost promene destinacije smeštanja instalacionih fajlova klikom na dugme Change Install Location…, gde korisnik može sam izabrati lokaciju (Slika 26.) i pokretanja instalacije klikom na dugme Install.

Slika 25.

Page 34: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

34

• Nakon odabira destinacije klikom na dugme OK instalacija se vraća na prozor sa slike 25 i klikom na dugme Install dobija se prozor kao na slici 27, čime se završava instalacija.

Slika 26.

Slika 27.

Page 35: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

35

5. Funkcije LabView-a korišćene u aplikaciji

Call Library Function Node

Ova funkcija obezbeđuje pozivanje DDL-a ili pozivanje deljenje bibliotečke funkcije direktno. Ona podržava veliki broj različitih tipova podataka i načina pozivanja. Možemo je koristiti za pozivanje funkcija u standardnim i modifikovanim DDL-ovima i deljenim bibliotekama. Call Library Function Node je proširiva i opslužuje povezane ulaze i izlaze slično kao Bundle funkcija. Sadrži par ulaznih i par izlaznih priključaka. Mogu se koristiti ili jedan ili oba priključka u zavisnosti od potrebe. Ukoliko nemamo povratnu vrednost, par priključaka na vrhu se ne koristi. Svaki dodatni par priključaka odgovara parametru u listi parametara funkcija onim redom kojim ih pozivamo. Signal dovodimo na levi par priključaka a obradjeni signal odvodimo parom priključaka koji se nalazi sa desne strane.

Detalji Call Library funkcije

Reference- prepoznaje putanju do DLL fajla ili do deljene biblioteke koju pozivamo. Moramo da čekiramo Specify path on diagram checkbox u dijalog box-u da bi ovaj ulaz bio prepoznatljiv na šemi.

Error in – opisuje pogrešne uslove pre nego što se ovaj VI ili funkcija pokrene. Difoltno stanje je no error . Ako se dogodi greška pre nego što se VI ili funkcija pokrenu,oni proslede vrednost error in na error out. VI se pokreće normalno samo ako se ne desi signal greške pre nego što se VI pokrenuo. Ukoliko dođe do greške dok su VI ili funkcija pokrenuti, rad se odvija normalno i setuje se stastus greške na error out-u. Korisićemo error in i error out da proveravamo greške i da odredimo izvršenje redosleda povezujući error out jednog bloka sa error in sledećeg bloka.

status - je True(X) ukoliko se greška dogodi pre nego što su VI ili funkcija bili pokrenuti, ili False čekmark da bi pokazao neko upozorenje ili da potvrdi da se greška nije dogodila pre pokretanja VI-a ili fiunkcije. Difoltna frednost je False

code - je greška ili kod upozorenja. Difoltna frednost je 0. Ako je status TRUE onda code ima nenultu vrednost. Ako je status FALSE onda code ima vrednost 0 ili kod upozorenja.

source - određuje poreklo greške ili upozorenja i ono je u glavnom ime VI-a ili funkcije koja je proizvela grešku ili upozorenje. Difoltna vrednost mu je prazan string.

Page 36: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

36

param 1...n - su ulazni parametri primera bibliotečke funkcije.

reference out - vraća putanju do pozvane biblioteke ili DLL fajla. Mora da se stavi čekmark u Specify path on diagram u čekboksu dijalog boksa koji se pojavljuje za ovaj izlaz na bloku funkije

error out - sadrži informacije o grešci. Ako error in prepozna da se greška dogodila pre nego što je VI ili funkcija bila pokrenuta, error out će sadržati istu informaciju o grešci.

status - je True(X) ukoliko se greška dogodi pre nego što su VI ili funkcija bili pokrenuti, ili False čekmark da bi pokazao neko upozorenje ili da potvrdi da se greška nije dogodila pre pokretanja VI-a ili fiunkcije.

code - je greška ili kod upozorenja. Ako je status TRUE onda code ima nenultu vrednost. Ako je status FALSE onda code ima vrednost 0 ili kod upozorenja.

source - određuje poreklo greške ili upozorenja i ono je u glavnom ime VI-a ili funkcije koja je proizvela grešku ili upozorenje.

return value - je primer vraćanja vrednosti bibliotečke funkcije

param 1..n output - su primer izlaznih parametara bibliotečke funkcije

Case Structure

Case struktura može da ima jedan ili više poddijagrama, ili case-ova tačnije jedan koji se izvršava kada je uslov ispunjen. Vrednost koja se dovodi na selektor-priključak određuje koji će se slučaj pre izvršiti, i može da bude tipa boolean, string, integer ili nabrojivi tip. Desnim klikom na okvir strukture se dodaju ili brišu slučajevi. Za zadavanje vrednosti u case selektoru koristi se Labeling tool i posle toga se svaki slučaj konfiguriše (pravi) pojedinačno. Posle kreiranja case-strukture možemo da dodajemo, umnožavamo ili brišemo poddijagrame.

Page 37: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

37

Initialize Array

Inicijalizacija niza podrazumeva kreiranje jednog n-dimenzionog niza gde je svaki član postavljen na vrednost elementa. Korist se alat za pozicioniranje ukoliko želimo da povećamo dimenziju izlaznog niza. Gledajući priključke možemo videti podrazumevane tipove podataka za ovakvu polimorfnu funkciju.

element - je vrednost koja služi da inicijalizuje sve elemente inicijalizovanog niza. Može da bude bilo koji tip skalara.

dimenzion size 0..n-1 - mora biti broj. Funkcija kreira prazan niz ako je bilo koja dimenzija niza 0. Moramo uvek da stavimo željenu dimenziju niza.

inicijalized array - je niz istog tipa kao i tip elementa koga vezujemo.

While Loop

While petlja ponavlja izvršavanje poddijagrama dok se ne zadovolji zadati uslov. Jedan ulazni priključak prihvata delimičnu Boolean vrednost. Boolean vrednost zavisi od trajanja While petlje. Desnim kilkom na taj uslovni priključak možemo da odabermo Stop if True ili Continue if True. Takođe je mguće povezati neki signal greške na uslovni priključak i to desnim klikom na priključak i odabiranjem Stop on Error ili Continue while Error iz ponuđenig menija. While petlja će se uvek i u svakom slučaju izvršiti najmanje jednom. Prikljušak (i) prikazuje trenutan broj iteracija. Za prvu iteraciju uzima se 0. Kada koristimo ovu petlju sa Execution Control Express VIs and Structures palete komponenti, takođe ćemo moći da primetimo i dugme STOP koje uvek vezujemo za uslovni priključak. Ako je budemo koristili sa Structures palete, STOP dugme se neće pojaviti. Posle kreiranja While petlje moguće je koristiti shift registre za uzimanje vrednosti sa jedne iteracije na sledeću. Ukoliko budemo povezali jedan niz na While petlju moći ćemo da vidimo i iskoristimo svaki element u tom nizu uključivanjem auto indeksiranja.

Page 38: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

38

Wait (ms)

Wait obezbeđuje čekanje određenog broja milisekundi i vraćanje vrednosti tajmera. Povezivanje signala koji ima vrednost 0 na ulaz može dovesti do prisilnog rada procesora. Ova funkcija stvara asinhrone pozive sistema, ali komponente međusobno funkcionišu sinhrono. Zadato izvršenje se neće ostvariti sve dok određeno vreme ne protekne.

miliseconds to wait - određuje koliko je milisekundi ptrebno za čekanje. Čekanje nemože da bude veće od 0x7ffffff or 2,147,483,647 ms. Za duže vremensko čekanje potrebno je pozvati funkciju dvaputa.

millisecond timer value - vraća odbrojanu vrednost milisekundi

Or funkcija

Or funkcija omogućuje izvršenje logičke OR funkcije ulaza. Oba ulaza moraju biti Boolean tip ili brojne vrednosti. Ukoliko su oba ulaza netačna funkcija vraća FALSE, u svakom drugom slučaju vraća TRUE. Gledajući priključke možemo videti podrazumevane tipove podataka za ovakvu polimorfnu funkciju. Ona izvrašava bit-operacije na numeričkim ulazima.

x mora biti boolian ili broj. Može da bude skalar, niz ili klaster brojeva ili logičkih vrednosti, niz klastera brojeva ili logičkih vrednosti.

y mora biti boolian ili broj. Može da bude skalar, niz ili klaster brojeva ili logičkih vrednosti, niz klastera brojeva ili logičkih vrednosti.

x ili y ? jeste logičko OR za x i y

Page 39: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

39

To Unsigned Byte Integer

Konvertuje brojeve iz 8-mo bitnog neoznačenog celog broja u opseg od 0-255. Oznaka na ikoni pokazuje tip podatka po difoltu za ovu polimorfnu funkciju.

number može biti broj, niz ili klaster brojeva, niz klastera brojeva i tako dalje.

unsigned 8bit je podatak istog strukturnog tipa kao number.

Boolean Array To Number

Konvertuje niz tipa boolean u 32-dvo bitni neoznačeni celi broj prikazujući niz kao binarni prikaz celog broja u obliku drugog komplementa, tako što prvi element niza postaje poslednji značajni bit.

Na primer, ako se poveže niz sa dve vrednosti tipa boolean na ulaz ove funkcije i vrednost nije TRUE, funkcija vraća vrednost 0. Ako je vrednost prve pozicije TRUE funkcija vraća 1. Ako je vrednost druge pozicije TRUE funkcija vraća 2. Ako su obe pozicije TRUE funkcija vraća 3.

Boolean array je jednodimenzioni niz sa boolean vrednostima. Ova funkcija skraćuje niz ako je previše dugačak i dopunjava ga FALSE bitovima ukoliko je Boolean array kratak.

number je 32-dvo bitni neoznačeni celi broj.

Build Array

Povezuje više nizova ili dodaje elemente u n-dimenzioni niz. Ikona pokazuje difoltne tipove podataka za ovu polimorfnu funkciju.

Page 40: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

40

array ili element može biti bilo koji n-dimenzioni niz ili skalar. Svi ulazi moraju biti ili elementi i jednodimenzionog ili n-dimenzionog niza ili elementi n-dimenzionog ili (n-1)-dimenzionog niza. Svi ulazi moraju da imaju isti osnovni tip.

appended array je rezultujući, tj. izlazni niz.

Detalji Build Array funkcije

Kada se funkcija doda u blok dijagram ima samo jedan dostupan ulaz. Dodavanje ulaza se vrši desnim klikom na ulaz i biranjem Add Input iz menija sa prečicama ili povećanjem veličine ikonice.

Ako se povezuju kontrole različitih klasa na ovu funkciju, ona povezuje reference u opštiju klasu koja je niža zajednička klasa hijerarhiji nasleđivanja. Ova funkcija onda vraća dodati niz sa klasom.

Funkcija Build Array funkcioniše u jednom od dva moda u zavisnosti od toga šta je izabrano u Concatenate Inputs meniju. Ako se izabere Concatenate Inputs, funkcija dodaje sve ulaze u red, formirajući jedan izlazni niz koji je iste dimenzije kao i najveća dimenzija ulaznog niza. Ako se ne izabere Concatenate Inputs funkcija formira izlazni niz dimenzije za jedan veću od najveće dimenzije ulaznog niza. Svi ulazi moraju biti istih dimenzija. Funkcija dodaje svaki ulaz u red, formirajući podniz, element, red, ili stranu izlaznog niza. Ulazi su postavljeni, ako je to neophodno, tako da odgovaraju veličini najdužeg ulaza.

Na primer, ako na ulaze povežemo dva jednodimenziona niza, {1,2} i {3,4,5} i izaberemo Concatenate Inputs iz menija sa prečicama, izlaz je jednodimenzioni niz {1,2,3,4,5}. Ako se povežu a ne izabere Concatenate Inputs izlaz je dvodimenzioni niz {{1,2,0},{3,4,5}}, gde se dužina prvog niza izjednačuje sa dužinom drugog.

Ako su ulazi nizovi iste dimenzije, desnim klikom na funkciju uklanja se checkmark next to ili biranjem Concatenate Inputs iz menija sa prečicama. Ako ulazi nisu istih dimenzija, Concatenate Inputs je automatski izabran i ne može biti deselektovana ova funkcija. Ako su ulazi skalarni elementi Concatenate Inputs je automatski deselekotvan i ne može biti izabran, a na ulazu se dobija jednodimenzioni niz koji sadrži elemente po redu.

Kada se izabere Concatenate Inputs iz menija sa prečicama, glif na Build Array ikonici menja distinguish između dva ulazna tipa. Ulazi koji su istih dimenzija kao i izlaz pokazuju glif niza, dok ulazi koji su dimenzija za jednu manje od izlaza pokazuju glif elementa.

Page 41: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

41

Primer

Primer kako se koristi Build Array funkcija nalazi se na lokaciji labview\examples\general\functions\Array.

Array Size

Vraća broj elemenata u svakoj od dimenzija niza. Oznaka na ikoni pokazuje tipove podatka po default-u za ovu polimorfnu funkciju.

array može biti jedan n-dimenzioni niz bilo kog tipa.

size(s) je 32-dvo bitni celi broj ako je array jednodimenzioni niz.Ako je array višedimenzioni, vrednost koju funkcija vraća je jednodimenzioni niz u kome je svaki element 32-dvo bitni celi broj koji predstavlja broj elemenata odgovarajuće dimenzije niza (array ). Na primer, ako na ulaz dovedemo trodimenzioni niz od 2x5x3 elemenata, funkcija će vratiti jednodimenyioni niz čiji su elementi [2,5,3].

Equal To 0? Funkcija vraća TRUE ako je x jednak nuli. U suprotnom, vratiće FALSE. Returns TRUE

if x is equal to 0. Otherwise, this function returns FALSE. Oznaka na ikoni pokazuje tipove podatka po default-u za ovu polimorfnu funkciju.

x može biti numerička skalarna vrednost, klaster, niz brojeva ili time stamp value.

x = 0? je boolean vrednost istog tipa kao i x.

Select Vraća vrednost postavljenu na ulaz t ili ulaz f, u zavisnosti od vrednosti s. Ukoliko je s

TAČNO, ova funkcija vraća vrednost koja je postavljena na t. Ukoliko je s NETAČNO, ova

Page 42: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

42

funkcija vraća vrednost koja je postavljena na f. Connector pane prikazuje tipove podataka po default-u za ovu polimorfnu funkciju. Ova fukcija ima izgled kao na sledećoj slici:

t je vrednost koju ova funkcija vraća ako je s propušta vresnost TAČNO. t i f moraju biti istog tipa, ali oni mogu imati drugačiju numeri čku reprezentaciju.

s određuje da li funkcija vraća vrednost t ili f u s? t:f. Ako se dovede klaster greške na s i dogodi se greška, klaster greške propušta vrednost TAČNO funkciji. U suprotnom, klaster greške propušta vrednost NETAČNO funkciji.

f je vrednost koju ova funkcija vraća ako je s propušta vresnost NETAČNO. t i f moraju biti istog tipa, ali oni mogu imati drugačiju numeri čku reprezentaciju.

s? t:f je vrednost prikačena na t ako je s TAČNO. s? t:f je vrednost prikačena na f ako je s NETAČNO.

Primer

Za primer kako se koristi SELECT funkcija mora se ići na Select VI u labview\ examples\ general\ functions\ Comparison direktorijum.

To Unsigned Long Integer

Konvertuje broj u 32-bitni unsigned integer u opsegu od 0 do (2��)–1. Connector pane prikazuje tipove podataka po default-u za ovu polimorfnu funkciju. Ova fukcija ima izgled kao na sledećoj slici:

number (broj) može biti skalar, niz ili klaster (skup) brojeva, niz klastera bojeva i tako dalje.

unsigned 32bit integer je podatak istog strukturnog tipa kao number. Ova funkcija zaokružuje sve vrednosti razlomljenih brojeva na najbliži ceo broj. Ukoliko

je razlomljeni deo 0.5 onda funkcija zaokružuje vrednost na najbliži paran ceo broj. Na primer, funkcija zaokružuje 13.5 na 14 i zaokružuje 14.5 na 14.

Page 43: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

43

Compound Arithmetic

Obavlja aritmetiku nad jednim ili više ulaza koji mogu biti tipa broj, niz, klaster ili bita. Selektovanje operacije ( zbir, množenje, AND, OR ili XOR ) vrši se desnim klikom na funkciju i selektovanjem Change Mode iz padajuće liste. Početno stanje zavisi od palete iz koje smo prevukli ovu funkciju. Ova fukcija ima izgled kao na sledećoj slici:

Napomena: Kada prevučemo ovu funkciju iz palete Numeric, po default-u je u modu Sabiranja (Add). Kada prevučemo ovu funkciju iz palete Boolean , default mod je Logičko Ili (OR).

Sledeće ikonice prikazuju tipove podataka po default-u za ovu polimorfnu funkciju.

value 0..n-1 može biti broj ili Boolean vrednost, niz sačinjen od brojeva ili Boolean vrednosti, klaster, niz sačinjen od klastera, i tako dalje. Možemo prikačiti i neki signalni oblik ali samo na jednom ulazu value. Ako je ulaz neki signalni oblik, možemo imati neograničeni broj skalarnih ulaza različitih vrednosti.

result vraća rezultat selektovane operacije primenjene na value 0..n-1. Za AND, OR ili XOR result vraća bitwise operaciju za numeričke ulaze i logičke operacije za Boolean ulaze.

Detalji o funkciji Compound Arithmetic

Možemo dodati ulaz ili tako što ćemo na ulazu kliknuti desnim klikom i selektovati Add Input iz padajućeg menija ili tako što ćemo promeniti velićinu bloka funkcije kada ona automatski dodaje nove ulaze.

Možemo invertovati ulaze ili izlaz ove funkcije desnim klikom na pojedinačne krajeve i selektovanjem opcije Invert iz padajućeg menija. Za sabiranje, selektujemo Invert da bismo poništili ulaz ili izlaz. Za množenje, selektujemo Invert da bismo upotrebili recipročnu vrednost ulaza ili da proizvedemo recipročnost izlaza. Za AND, OR ili XOR, selektujemo Invert da bismo bitwise komplement ulaz ili izlaz tipa integer, ili da logički negiramo ulaz ili izlaz.

Page 44: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

44

Kada koristimo ovu funkciju (Compound Arithmetic) da bismo obezbedili XOR operaciju za tri ili više ulaznih vrednosti, fukcija vrši operaciju XOR nad prvim parom ulaza, onda vrši operaciju XOR nad rezultatom prvog para ulaza i sledećeg ulaza, i tako redom sve dok se ne iscrpe svi ulazi.

Primer

Primer kako se koristi Compound Arithmetic funkcija nalazi se na lokaciji labview\examples\general\functions\Numeric.

Index Array

Vraća element ili podniz iz nekog n-dimenzionog niza (n-dimension array) na osnovu indeksa (index). Kada mi na ulaz ove funkcije dovedemo neki niz, funkcija se automatski prilagođava i omogućava nam prikazivanje ulaza index za svaku veličinu niza koji dovedemo na ulaz n-dimension array. Takođe možemo dodati element ili podniz tako što ćemo da promenimo veličinu bloka koji prikazuje ovu funkciju. Ova fukcija ima izgled kao na sledećoj slici:

Sledeće ikonice prikazuju tipove podataka po default-u za ovu polimorfnu funkciju.

n-dimenzioni niz može biti neki n-dimenzioni niz bilo kog tipa. Ako je n-dimenzioni niz prazan niz, element ili podniz vraća default-nu vrednost definisanog tipa podatka za niz.

index 0..n-1 mora biti numerički. Broj ulaza index poklapa se sa brojem koji pokazuje kolika je dimenzija n-dimenzionog niza.

Ako je index izvan opsega (<0 ili >N, gde je N veličina n-dimenzionog niza), element ili podniz vraća default-nu vrednost definisanog tipa podatka za niz.

element ili podniz su istog tipa kao elementi n-dimenzionog niza. Možemo izvlačiti neki element iz niza, ali češće izvlačimo podniz iz niza tako što ostavljamo jedan ili više krajeva index otkačenim. Na primer, izvlačenje prve kolone iz dvodimenzionog niza vrši se navođenjem broja 1 u indeksu kolone i ostavljanjem indeksa vrste otkačenim.

Ukoliko prikazujemo jednodimenzioni niz i ne prikačimo neki ulaz index, ova funkcija izvlači prvi element niza. Ukoliko povećavamo broj ulaza i imamo više nego jedan izlaz tipa

Page 45: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

45

element ili podniz, ova funkcija izvlači broj prvih elemenata koji je jednak broju izlaza koji mogu biti element ili podniz.

Detalji o funkciji Index Array

Možemo onemogučiti indeksiranje duž veličine tako što ćemo ostaviti odgovarajući ulaz index “otkačen” (ne dovodimo nikakav signal na njemu), sem u slučaju kada indeksiramo jednodimanzioni niz. Po default-u, kod prve dimenzije je indeksiranje omogućeno, dok kod ostalih nije. Ako je onemogućena, ulazni kraj je uokvireni crni pravougaonik. Ukoliko je omogućena, on je ispunjen. Možemo prikačiti konstantu ili kontrolu na ulaz index koji želimo da omogućimo.

Na primer, ukoliko želimo da prikažemo vrstu u dvodimenzionom nizu, prvi ulaz index je omogućen a drugi ulaz index je onemogućen. Ukoliko želimo da prikažemo isti dvodimenzioni niz i po kolonama, možemo menjati veličinu funkcije da bismo prikazali drugi skup ulaznih krajeva. Ovaj sledeći skup ulaza ima svoj odgovarajući izlaz koji je neki podniz. Po default-u, ukoliko ne prikačimo nijedan ulazni kraj index, prvi podniz prikazuje nultu vrstu, drugi podniz prikazuje prvu vrstu, i tako dalje.

Page 46: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

46

6. Realizacija i povezivanje razvojnog okruženja i GUI-a

Uz pomoć softverskog paketa LabVIEW 8.2 realizovan je GUI za razvojno okruženje C8051F340-DK kroz USB intrfejs. Prikaz prednjeg panela GUI-a dat je na slici 28. Na pomenutoj slici vidimo da se na prednjem panelu nalaze dva dijagrama, od kojih na gornjem posmatramo stanje temperature a na donjem promenu stanja potenciometra. Takođe su na istoj slici prikazana dva čekboksa za aktiviranje dioda na razvojnom okruženju i dva light indikatora koji prate status push-button tastera na razvojnom okruženju.

Slika 28. Prikaz front panela GUI-a

Blokovska realizacija i način na koji su povezani svi elementi i funkcije, neophodni za

izvršavanje potrebnih zadataka, mogu se videti na slici 29. Svi korišćeni blokovi su detaljno opisani u poglavlju 5 koji je prethodno obrađen.

Page 47: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

47

Slika 29. Prikaz blok dijagrama GUI-a

Korišćenjem razvojnog okruženja kompanije Silicon Laboratories prikazan na slici 30 na

kome se nalazi mikrokontroler iste kompanije (slika 31), C8051 arhitekture, i grafičkog korisničkog interfejsa (slika 32) dizajniranog u LabView-u (ver. 8.2) vrše se sledeće akcije:

• merenje temperature uz pomoć integrisanog senzora (on-die) mikrokontrolera i

prikaz rezultata na dijagramu prednjeg panela aplikacije,

• aktiviranje LED dioda na razvojnom okruženju čekiranjem odgovarajućih čekboksa u GUI-u (smer računar-razvojno okruženje),

• praćenje statusa push-button tastera na razvojnom okruženju putem light indikatora GUI-a (smer razvojno okruženje-računar) i

• posmatranje promene stanja potenciometra razvojnog okruženja na dijagramu na prednjem panelu aplikacije.

Page 48: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

48

Slika 30. Razvojno okruženje C8051F340

Slika 31. Mikrokontroler

Slika 32. Grafički korisnički interfejs

Page 49: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

49

Merenje temperature

Merenje temperature se realizuje uz pomoć integrisanog senzora (on-die)

mikrokontrolera. Praćenje promena temperature vrši se u prednjem panelu GUI-a, tj. na dijagramu koji prikazuje promenu temperature u toku vremena u binarnom formatu i može da ima vrednosti u rasponu od 0 do 255.

Promena temperature u toku vremena se može videti na slici 33 (na gornjem grafiku):

Slika 33. Prikaz stanja temperature

Page 50: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

50

Aktiviranje LED dioda na razvojnom okruženju Na razvojnom okruženju nalaze se dve LED diode sa oznakama P2.2 i P2.3 koje mogu da

se aktiviraju iz GUI-a. Njihovo uključivanje se vrši na taj način što se čekiraju dva kvadratića sa oznakama LED1 i LED2 (slika 34), a isključivanje dečekiranjem istih. Upaljene LED diode se mogu videti na slici 35.

Slika 34. Čekiranje kvadratića

Slika 35. Upaljene LED diode na razvojnom okruženju

Page 51: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

51

Aktiviranje Light indikatora statusa tastera u GUI-u Na prednjem panelu GUI-a nalaze se dva light indikatora, sa oznakama SW1 i SW2, koje

se aktiviraju uz pomoć tastera obeleženih sa P2.1 i P2.0 (slika36) koji se nalaze na razvojnom okruženju. Upaljeni light indikatori se mogu videti na slici 37.

Slika 36. Tasteri na razvojnom okruženju

Slika 37. Upaljeni light indikatori u grafičkom korisničkom interfejsu

Page 52: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

52

Posmatranje stanja potenciometra Na razvojnom okruženju nalazi se potenciometar sa oznakom R10 (slika 38) . Okretanjem

klizača vrši se promena otpornosti i ta promena se može posmatrati na dijagramu (na donjem grafiku) prednjeg panela GUI-a u rasponu od 0-255 binarnog formata. Praćenje promene vrednosti može se videti na slici 39.

Slika 38. Potenciometar na razvojnom okruženju

Slika 39. Prikaz stanja potenciometra

Page 53: (Neke primene LabVIEW 8.2 okru enja kori cenjem ...es.elfak.ni.ac.rs/Seminar works DAS/Primene LabView...U okviru blok dijagrama mogu se koristiti matemati čke formule koje se upisuju

53

7. Literatura

[1] Writing Win32 Dynamic Link Libraries (DLLs) and Calling Them

from LabVIEW, dostupno na adresi: http://zone.ni.com/devzone/cda/tut/p/id/4877

[2] AN169 USBXpress Programmers Guide, dostupno na adresi: www.silabs.com

[3] dr. D. Denić, I. Ranđelović, D. Živanović, Računarsko merno-informacioni

sistemi u industriji, Elektronski fakultet, Niš 2005