9. I/O digitale

Această lecție descrie funcționalitatea digitală a unui dispozitiv DAQ, care poate efectua intrări digitale și ieșiri digitale.

Cuprins:

9.1 Ce constituie un semnal digital

9.2 Terminologia I/O (Input/Output) digitală

9.3 VI-uri I/O digitale

9.4 Declanșarea digitală

9.1. Semnale digitale

Liniile digitale de pe un dispozitiv DAQ acceptă și generează semnale compatibile TTL. Un semnal TTL are două stări - low logic și high logic, așa cum se arată în ilustrația următoare. Semnalele low logic sunt semnale între 0 și +0,8 V. Semnalele high logic mari sunt semnale între +2 și +5 V. Semnalele între +0,8 și +2,0 V sunt nedeterminate.

Pentru a vă asigura că liniile digitale măsoară corect semnalul, asigurați-vă că nivelul de tensiune al semnalului nu este niciodată între +0,8 și +2 V.

9.2 Terminologie digitală

Mai jos sunt câțiva dintre termenii obișnuiți folosiți cu operațiile I/O digitale.

Bit - Cea mai mică unitate de date utilizată într-o operație digitală. Biții sunt binari, deci pot fi 1 sau 0.

Linie — Un semnal individual într-un port digital. Diferența dintre un bit și o linie este că bitul se referă la datele reale transferate, iar linia se referă la hardware-ul pe care este transferat bitul. Dar, termenii linie și bit sunt destul de interschimbabili. De exemplu, un port pe 8 biți este același cu un port cu opt linii.

Port — O colecție de linii digitale. De obicei liniile sunt grupate într-un port pe 4 biți sau un port pe 8 biți. Dispozitivele DAQ mai vechi au două porturi de 4 biți, iar majoritatea dispozitivelor din seria E au un port de 8 biți. VI-urile LabVIEW se referă adesea la un port ca un canal digital.

Lățimea portului - numărul de linii dintr-un port. De exemplu, dispozitivele din seria E au un port cu opt linii. Prin urmare, lățimea portului este opt.

Mask - Determină dacă o linie digitală este ignorată. De exemplu, dacă scrieți pe un port, dar nu doriți să scrieți pe toate liniile, puteți seta o mască pentru a ignora liniile pe care nu doriți să le scrieți.

Notație digitală NI-DAQmx

În NI-DAQmx, utilizați următoarele convenții pentru a descrie liniile și porturile digitale. În fiecare caz, X corespunde numărului de dispozitiv al dispozitivului dvs. DAQ. Y corespunde unui port digital, iar A și B corespund liniilor digitale de pe dispozitivul dvs. DAQ.

Port DevX/PortY
Single LineDevX/PortY/LineA
Multiple LinesDevX/PortY/LineA: B. Liniile sunt citite (sau scrise) în ordine crescătoare, începând de la Linia A și continuând la Linia B. Pentru a controla în mod explicit ordinea în care sunt citite (sau scrise) liniile digitale, utilizați notația DevX/PortY/LineA, DevX/PortY/LineB. Virgula separă fiecare linie digitală.

9.3. I/O digitale

Pentru a realiza I/O digitale în NI-DAQmx, selectați un caz digital de DAQmx Read VI sau DAQmx Write VI. În plus față de aceste VI-uri, utilizați DAQmx Timing VI și DAQmx Triggering VI pentru a configura sarcini de I/O digitale. Pentru a crea programatic un canal digital, utilizați DAQmx Create Virtual Channel VI.

VI-ul DAQmx Create Virtual Channel

Pentru a crea programat un canal de intrare sau ieșire digitală, selectați modelul Digital Input sau Digital Output al VI-lui DAQmx Create Virtual Channel. Aceste modele ale VI-ului vă permit să creați un canal compus dintr-un port digital, o linie digitală sau o colecție de linii digitale. În plus, utilizați intrarea line grouping pentru a determina modul în care canalul organizează liniile digitale. Puteți alege să creați un canal pentru fiecare linie sau să creați un canal pentru toate liniile.

VI-ul DAQmx Read

DAQmx Read VI citește eșantioane din sarcina sau canalele pe care le specificați. Modelele acestui VI polimorf specifică ce format de eșantioane trebuie returnate, dacă se citește un singur eșantion sau mai multe eșantioane simultan și dacă se citește de pe unul sau mai multe canale. Selectați o model Digital din meniul vertical pentru a realiza intrare digitală.

Selectați pentru a citi un singur canal sau mai multe canale. Dacă gruparea liniilor canalului este setată la un canal pentru toate liniile, citirea unui singur canal returnează toate valorile pe fiecare dintre liniile canalului. Dacă gruparea liniilor de canale este setată la un canal pentru fiecare linie, trebuie să citiți mai multe canale în ordine pentru a citi valorile pe fiecare dintre liniile digitale specificate.

Selectați pentru a citi fie un singur eșantion, fie mai multe eșantioane simultan. Opțiunile tip de date pentru valoarea (valorile) de returnare vă permit să returnați valoarea în format linie sau port. Formatul linie constă dintr-o singură valoare booleană sau dintr-o matrice de valori booleene (pentru mai multe linii). Un număr întreg de 8 biți fără semn (U8) sau un număr întreg de 32 de biți fără semn (U32) sunt opțiunile pentru returnarea valorii în format port. Când citiți mai multe canale, opțiunile pentru tipul de date sunt aceleași, cu o dimensiune de matrice adăugată fiecărui tip pentru a ține cont de citirea mai multor canale.

Dacă selectați formatul port U8 sau U32 pentru a returna date, utilizați funcția Number to Boolean Array situată în paleta Numeric»Conversion, pentru a converti numărul într-o matrice de valori booleene.

VI-ul DAQmx Write

DAQmx Write VI scrie eșantioane în sarcina sau canalele pe care le specificați. Modelele acestui VI polimorf specifică formatul eșantioanelor de scris, dacă se scrie unul sau mai multe eșantioane și dacă se scrie pe unul sau mai multe canale. Selectați un model Digital al VI-ului DAQmx Write pentru a efectua ieșire digitală.

Setările pentru modelul digital sunt configurate în același mod ca modelul digital al VI-ului DAQmx Read.

În mod implicit, intrarea auto start a DAQmx Write VI este TRUE atunci când scrieți eșantioane singure și FALSE când scrieți mai multe eșantioane. Dacă utilizați DAQmx Start VI și DAQmx Stop Task VI, setați întotdeauna intrarea auto start la FALS. Acest lucru vă permite un control mai mare al modelului de stare a sarcinii și îmbunătățește viteza programului.

VI-ul DAQmx Timing

Modelul handshaking al VI-ului DAQmx Timing determină numărul de eșantioane digitale de achiziționat sau generat folosind handshaking digital între dispozitiv și un dispozitiv periferic. În loc să specificați o rată de eșantionare, specificați numărul de eșantioane digitale de achiziționat sau generat folosind handshaking digital.

Notă Nu toate dispozitivele acceptă handshaking digital. Consultați documentația dispozitivului pentru a vedea dacă handshaking este acceptat pe dispozitivul dvs. Pentru dispozitivele din seria E, numai acele dispozitive cu mai mult de opt linii digitale - cele care au un cip suplimentar 8255 la bord - acceptă handshaking.

9.4 VI-ul DAQmx Trigger

Utilizați DAQmx Trigger VI pentru a configura declanșarea sarcinii. Modelele acestui VI polimorf corespund declanșatorului și tipului de declanșare de configurat. Configurați setările declanșatoarelor digitale în același mod în care configurați declanșatoarele de intrare analogică și ieșire analogică. Consultați Lecția Intrare analogică, a acestui manual, pentru mai multe informații despre configurarea declanșatoarelor.

Exercițiul 9-1 Digital Writer VI

Obiectiv: Crearea unui canal virtual digital în LabVIEW folosind DAQ Assistant și construirea unui VI care scrie pe liniile digitale de pe DAQ Signal Accessory.

Panoul frontal

1. Deschideți un VI gol și plasați un DAQmx Task Control pe panoul frontal.

2. Faceți clic dreapta pe controlul DAQmx Task și selectați New Task (DAQ Assistant) din meniul de comenzi rapide.

3. Configurați sarcina cu următoarele setări:

Measurement Type: Digital I/O
Digital I/O Type: Line Output
Physical Channels: Țineți apăsată tasta <Shift> și selectați port0/line0 la port0/line3
Name: Digital Output

4. În Asistentul DAQ, faceți clic pe butonul Test. Cele patru linii de pe DAQ Accessory ar trebui să apară toate iluminate. Liniile sunt setate la o stare logică low - o valoare binară zero corespunde la +5 V pe linia digitală. Introduceți diferite valori binare făcând clic pe butoanele radio de sub liniile digitale.

5. Faceți clic pe butonul OK. În tab-ul Settings, faceți clic pe Invert Line.

6. Faceți din nou clic pe butonul Test. Scrieți valori diferite la liniile digitale și observați că liniile au acum setări high logic - o valoare binară zero corespunde la 0 V pe linia digitală.

7. Faceți clic pe butonul OK pentru a ieși din panoul de testare. Puteți lăsa liniile digitale inversate dacă alegeți, în funcție de preferarea unei stări logice, high logic sau low logic.

Diagrama bloc

8. Construiți schema bloc așa cum se arată în figura următoare.

a. Plasați DAQmx Start Task VI, situat în paleta Functions»All Functions»NI Measurements»DAQmx - Data Acquisition, pe diagrama bloc. Acest VI pornește o sarcină.

b. Plasați DAQmx Write VI, situat în paleta Functions»All Functions»NI Measurements»DAQmx - Data Acquisition, pe diagrama bloc. Selectați forma Digital »Multiple Channels» Single Sample »Instanță booleană 1D din meniul derulant. Această formă scrie o singură valoare pentru fiecare dintre liniile digitale incluse în sarcină. Faceți clic dreapta pe intrarea data și selectați Create »Control din meniul de comenzi rapide.

c. Plasați DAQmx Clear Task VI, situat în paleta Functions»All Functions»NI Measurements»DAQmx - Data Acquisition, pe diagrama bloc. Acest VI șterge toate resursele alocate sarcinii.

d. Plasați VI-ul Simple Error Handler, situat în paleta Functions»All Functions»Time & Dialog, pe diagrama bloc. În cazul unei erori, acest VI afișează o casetă de dialog cu informații despre eroare și unde a apărut.

e. Plasați funcția Unbundle By Name, situată în paleta Functions» All Functions»Cluster, pe diagrama bloc.

f. Așezați funcția Or, situată în paleta Functions»Arithmetic & Comparison»Express Boolean, pe diagrama bloc.

9. Salvați VI-ul ca Digital Writer.vi în directorul C:\Exercises\LabVIEW DAQ.

10. Comutați la panoul frontal. Înainte de a rula VI-ul, trebuie să inițializați matricea de date. Redimensionați matricea pentru a afișa patru comenzi booleene. Aspectul estompat al comenzii indică faptul că nu este inițializată. Pentru a inițializa comanda, faceți clic pe ea și setați la o stare high sau low.

11. Rulați VI-ul. Modificați valorile booleene din matricea de date și observați liniile digitale de pe DAQ Signal Accessory.

12. Faceți clic pe butonul STOP pentru a opri VI-ul.

13. Modificați acest VI pentru a scrie valori la un singur port digital. Faceți clic dreapta pe DAQmx Task Name Control și selectați New Task (DAQ Assistant) din meniul de comenzi rapide.

14. Configurați sarcina cu următoarele setări:

Measurement Type: Digital I/O
Digital I/O Type: Port Output
Physical Channels: Select port0.
Name: Digital Port Output

15. Reveniți la diagrama bloc și selectați forma Digital »Single Channel» Single Sample »U32 din meniul vertical DAQmx Write VI.

16. Plasați funcția Boolean Array to Number, aflată în paleta Functions» All Functions»Numeric»Conversion, pe diagrama bloc. Această funcție convertește o matrice booleană într-un întreg fără semn pe 32 de biți utilizând notația complementul lui doi. Primul element al matricei este bitul cel mai puțin semnificativ (LSB).

17. Conectați matricea booleană la intrarea Boolean array a funcției Boolean Array to Number. Conectați ieșirea acestei funcții la intrarea data pe DAQmx Write VI. Faceți clic dreapta pe ieșirea number a funcției Boolean Array to Number și selectați Create »Indicator din meniul de comenzi rapide.

18. Rulați VI-ul. Observați valoarea întregului fără semn pe 32 de biți în raport cu valorile din matricea booleană. Pentru a inversa liniile de pe DAQ Signal Accessory, faceți clic dreapta pe controlul DAQmx Task Name, selectați Edit Task (DAQ Assistant) din meniul de comenzi rapide și selectați Invert All Lines In Port.

19. Salvați și închideți VI.

Sfârșitul exercițiului 9-1

Exercițiul 9-2 VI-ul Digital Reader

Obiectiv : Construirea unui VI care citește de la o linie digitală pe DAQ Signal Accessory.

În acest exercițiu, citiți o valoare de la o linie digitală și un port utilizând DAQmx Read VI.

Panoul frontal

1. Deschideți un VI gol și construiți următorul panou frontal

Toate comenzile, inclusiv comanda DAQmx Physical Channel pot fi create din diagrama bloc făcând clic dreapta pe terminalul corespunzător și selectând Create »Control din meniul de comenzi rapide.

Diagrama bloc

2. Construiți următoarea diagramă bloc.

a. Plasați DAQmx Create Virtual Channel VI, situat în paleta Functions»All Functions»NI Measurements»DAQmx - Data Acquisition, pe diagrama bloc. Acest VI creează un nou canal virtual de intrare digitală. Selectați modelul Digital Input din meniul vertical. Faceți clic dreapta pe intrarea line grouping și selectați Create »Constant din meniul de comenzi rapide.

b. Plasați DAQmx Start Task VI, situat în Paleta Functions»All Functions»NI Measurements»DAQmx - Data Acquisition, pe diagrama bloc. Acest VI pornește o sarcină.

c. Plasați DAQmx Read VI, situat în Paleta Functions»All Functions»NI Measurements»DAQmx - Data Acquisition, pe diagrama bloc. Selectați forma Digital»Single Channel» Single Sample»Boolean din meniul vertical. Faceți clic dreapta pe ieșirea data și selectați Create »Indicator din meniul de comenzi rapide.

d. Plasați DAQmx Clear Task VI, situat pe paleta Functions»All Functions»NI Measurements»DAQmx - Data Acquisition, pe diagrama bloc. Acest VI șterge toate resursele alocate sarcinii.

e. Plasați VI-ul Simple Error Handler, situat în paleta Functions»All Functions»Time & Dialog, pe diagrama bloc. În cazul unei erori, acest VI afișează o casetă de dialog cu informații despre eroare și unde a apărut.

f. Plasați funcția Unbundle By Name, situată în paleta Functions» All Functions»Cluster, pe diagrama bloc.

g. Așezați funcția Or, situată în paleta Functions»Arithmetic &Comparison»Express Boolean, pe diagrama bloc.

3. Salvați VI-ul ca Digital Reader.vi în directorul C:\Exercises\LabVIEW DAQ.

4. Pe panoul frontal, selectați linia ca DevX/port0/line6, unde X corespunde numărului de dispozitiv al dispozitivului dvs. DAQ.

5. Rulați VI-ul.

6. Rotiți butonul encoderului în cuadratură de pe DAQ Signal Accessory. Portul 0, linia 6 este conectat la faza B a encoderului în cuadratură. LED-ul data clipește scurt când rotiți butonul.

7. Modificați VI-ul pentru a citi întregul conținut al portului 0.
Sfat Schimbați pe liniile fizice pentru a citi liniile de la 0 la 7 și modificați modelul VI-ului DAQmx Read.

8. Rulați VI-ul și rotiți encoderul în cuadratură. Care element al matricei booleene ar trebui să se schimbe?

9. Salvați și închideți VI-ul.

Sfârșitul exercițiului 9-2

Rezumat

• Liniile digitale de pe un dispozitiv tipic din seria E pot:

- Citi și scrie semnale compatibile TTL.
- Efectua numai I/O digitale nesincronizate.
- Fi configurate individual pentru intrare sau ieșire.

• Un dispozitiv tipic DAQ din seria E are linii digitale care pot citi și scrie semnale compatibile TTL.

• Specificațiile pentru un semnal TTL definesc 0 la +0,8 V ca low logic și +2 la +5 V ca high logic. Între +0,8 și +2 V poate fi interpretat ca high sau low.

• Dacă trebuie să efectuați handshaking sau orice altă formă de I/O digitală sincronizată, trebuie să cumpărați un dispozitiv DAQ special, cum ar fi DIO-6533.

• Utilizați DAQmx Read VI și DAQmx Write VI pentru a configura cu ușurință operațiile de intrare și ieșire digitale.