Brza akvizicija: Asembler, C, LabWindows/CVI, LabVIEW

Prve verziju programa za brzu akviziciju analognih signala za PC računar napisao sam 1991. u Asembleru. Programiranje u Asembleru zahteva odlično poznavanje arhitekture PC računara, mnogo strpljenja i vremena. Na slici 1 je prikazan deo asemblerskog programa za brzu akviziciju koji za sinhronizaciju sa tajmerom koristi mehanizam prekida. Zadatak tajmera je da generiše preciznu periodičnu povorku impulsa kada bi trebalo izvršiti A/D konverziju. Program je priložen na kraju strane pod imenom ACQINT.pdf.

Sl.1 Deo asemblerskog programa koji koristi mehanizam prekida

Drugi način sinhorinizacije sa tajmerom je programski tj. program detektuje prelazak sa HI na LOW nivo signala koji generiše tajmer. Ovaj način sinhronizacije sa tajmerom je lakši od prethodnog. Na slici 2 je prikazan deo asemblerskog programa za brzu akviziciju koji se programski sinhroniše sa tajmerom. Program je priložen na kraju strane pod imenom PCACQ.pdf.

 Sl.2 Programska sinhronizacija sa tajmerom

Oba programa prikupljaju podatke sa N kanala. Rezultati testiranja programa za akvizicioni sistem ED2000, koji je bio ugrađen u PC računar HP VECTRA 286/12 MHz su dati u sledećoj tabeli. Hardverska brzina korišćenog A/D lkonvertora je bila 50 kS/s.

Najbolji rezultati su dobijeni za prorgam koji prikuplja podatke samo sa jednog kanala, jer se ne gubi vreme na setovanje multipleksera.

Asemblerski potprogrami su se pozivali iz C jezika. Segmentni registri PC procesora su priča za sebe i predstavljali su veliki izazov za programere. Prenos podataka iz Asemblera na C se razlikovao u zavisnosti od korišćenog modela (Tiny, Small, Medium, Compact, Large i Huge).

Iz radoznalosti napisao sam program za brzu akviziicju u potpunosti u C jeziku. U to vreme koristio sam Borlandov Turbo C paket za pisanje programa u C jeziku. Na slici 3 je prikazan deo C programa za brzu akviziciju koji se programski sinhroniše sa tajmerom. Program je priložen na kraju strane pod imenom SCAN-C.pdf.

Sl.3 C program za brzu akviziciju

Za pristup registrima A/D konvertora i Tajmera korisitio sam C funkcije PEEKB i POKEB. Na moje veliko iznenađenje (prijatno) sa C programom registrovao sam merne signale brzinom od 20 kS/S. To je bio jak razlog da definitivno napustim programiranje u Asembleru, jer je navedena brzina odabiranja bila više nego dovoljna za moje aplikacije.

Brzinu uzorkovanja sam uspeo da povećam na 25 kS/s kada sam PEEKB i POKEB funkcije zamenio C pointerima. Na slici 4 je prikazan deo programa koji koristi pointere za pristup registrima A/D konvertora. Program je priložen na kraju strane pod imenom ACQPOI.pdf.

Sl.4 Pristup registrima pomoću C pointera

Svi navedeni programi su radili pod legendarnim operativnim sistemom DOS. Sa pojavom operativnog sistema Windows pojavili su se novi problemi. Najveći problem je bio pristup registrima ulazno-izlaznog interfejsa. Pošto je vrag odneo šalu 1994. godine počeo sam da korsitim programski paket LabWindows/CVI. Ovaj paket je proizvod amreičke firme National Instruments. Dobra strana ovog paketa je ta što je baziran na ANSI C jeziku, a objekti na ekranu se kreiraju kao i kod Visual Basic-a. Pošto sam već bio familijaran sa ANSI C jezikom za vrlo kratko vreme sam ovladao ovim paketom i mislio sam da neću nikad da ga napustim. Na slici 5 je prikazan deo programa koji komunicira sa registrima A/D konvertora.

Sl.5 Pristup registrima u LabWindows/CVI programskom jeziku

ANSI C funkcije PEEKB i POKEB su zamenjeni funkcijama WriteToPhysicalMemory i ReadFromPhysicalMemory. Program za snimanje spektra jonskog izvora mVINIS je napisan u LabWindows/CVI. Inače CVI znači C za Virtuelnu Instrumentaciju.

Poslednjih godina sve programe pišem pomoću grafičkog programskog jezika LabVIEW, a LabWindows/CVI koristim za pisanje DLL funkcija, koje se pozivaju iz LabVIEW-a. Na slici 6 je prikazan kompletan program za brzu akviziciju napisan u LabVIEW-u.

Sl. Brza akvizicija realizovana u LabVIEW-u

Ako koristite National Instruments mernu opremu onda su LabWindows i LabVIEW pravi programski jezici za programiranje vaših aplikacija. Ali, ako koristite mernu opremu od drugih proizvođača i nemate drajvere za LabVIEW tada je LabWindows bolji izbor od LabVIEW-a, jer LabVIEW nema funkcije za pristup registrima interfejsa ako su oni mapirani u memorijskom adresnom području. LabVIEW ima funkcije IN i OUT pomoću kojih možete da pristupite registrima interfejsa u ulazno/izlaznom adresnom prostoru (COMx, LPTx i drugi).

Proizvođači merne opreme uz svoje uređaje nude i drajvere za LabVIEW, ali ne i za LabWindows/CVI. Sa LabVIEW drajverima nezavisni proizvođači merne opreme lakše prodaju svoje uređaje. Zato ako se dvoumite između LabVIEW-a i LabWindows/CVI-a odaberite LabVIEW. Američka firma Keithley za svoj dataloger KI2700 nudi drajvere za LabVIEW, ali ne i za LabWindows/CVI. Komunikacija sa ovim uređejem se može ostvariti preko serijskog i GPIB interfejsa. Ako koristite VISA drajvere sa stanovišta programiranja svejedno je da li korsitite serijski i paralelni GPIB port.

Dragi čitaoci, danas ne mora da znate arhitekturu računara i da budete profesionalni programer da biste napisali program za merenje i obradu rezultata. 

 VEZE KA SRODNIM APLIKACIJAMA