Sunteți pe pagina 1din 10

· Creare nou proiect

Fereastra de deschidere a mediului LabWindows/CVI ofera posibilitatea de a deschide un proiect existent,


de a crea un nou proiect, de a cauta exemple de aplicatii create in acest mediu (util in cazul in care stiti ce
urmeaza sa dezvoltati si vreti sa cautati exemple asemanatoare pentru a va ghida).

Pentru a crea un nou proiect trebuie selectat New -> Project. Dupa crearea proiectului se va deschide
fereastra din figura de mai jos.

In sectiunea din partea stanga sus sunt afisate proiectele deschise (in cazul in care nu aveti salvat nici un
proiect va apare Untitled). Sectiunea bibliotecilor si instrumentelor se afla in stanga jos (modul de
utilizare al bibliotecilor va fi prezentat in subcapitolul in care sunt prezentate principalele functii utilizate
pe durata laboratorului).

· Creare GUI (Graphical User Interface)

Primul pas in crearea aplicatiilor este dezvoltarea interfetei prin selectarea File -> New -> User Interface.
Initial interfata este conpusa dintr-un singur panou. In cazul in care se doreste dezvoltarea unei aplicatii
cu mai mult de un panou, insearea acestora se face selectand Create -> Panel.

Lab Windows/CVI permite programatorilor customizarea panourilor si controalelor care sunt inserate pe
interfata utilizator apasand dublu click pe suprafata lor.

Proprietatile comune tuturor controalelor sunt:

· Constant Name: reprezinta numele controalelor care trebuie sa fie unic in cazul controalelor aflate
pe acelasi panou. Acesta trebuie scris cu majuscule (este doar o conventie care este bine sa fie
respectata).
· Callback Function: este functia generata in codul C care este executata in cazul in care pe
interfata este generat un anumit eveniment (de exemplu in cazul in care se apasa un buton va fi
apelata functia de callback a acestuia). Evenimentele urmeaza a fi prezentate detaliat la sectiunea
in care este aratat modul de generare a codului.
Functiile de callback ale panourilor sunt necesare in cazul in care se doreste inchiderea aplicatiei
prin X-ul ferestrei (ca orice aplicatie windows). Numele functiilor sunt scrise cu minuscule in
afara primei litere (este doar o conventie care este bine sa fie respectata).

· Initially Dimmed: in cazul in care este selectat controlul aflat pe interfata este inactiv, putand fi
deblocat ulterior programatic
· Initially Hidden: in cazul in care este selectat controlul aflat pe interfata este ascuns, putand fi
afisat ulterior programatic
· Label: numele afisat pe interfata al controlui. Fontul si culoarea textului pot fi schimbate prin
apasarea butonului cu ... din dreptul numelui.
· Culorile controalelor sau ale unor parti ale acestora pot fi schimbate prin selectarea Paint Toll
aflat in partea superioara a panoului.

Inserarea controalelor pe interfata se face selectand din meniul Create controlul dorit sau apasand click
deapta pe suprafata panoului.

Personalizarea controlelor trebuie facuta in functie de modul in care trebuie sa arate interfata aplicatiei si
in functie de ce valori vor fi reprezentate in acestea. In continuare sunt prezentate in detaliu o serie de
controle utilizare in mod curent (la celelalte controle modul de lucru este similar).

· Numeric Control: este controlul in care sunt retinute valori numerice.


Ø Default Value – valoarea indicata la deschiderea aplicatiei.
Ø Data Type – tipul de data retinuta de acest control (double, int, etc.).
Ø Control Mode – Hot: valoarea controlului poate fi moficata in momentul rularii aplicatiei;
Indicator: valoarea controlului este setata programatic si nu poate fi modificata pe
interfata.
Ø Range Values: se pot seta valorile minime si maxime acceptate de control.
Ø Text Style: schimbarea fontului si culorii valorilor afisate.
· Graph Control: utilizat pentru a afisa reprezentari ale marimilor sub forma de grafic. Acest
control este utilizat in momentul in care sunt cunoscute toate valorile care urmeaza a fi afisate.
Ø Button X-axies – se poate selecta intervalul de valori de pe axa X, numele axei si alte
proprietati. Initial este selectat AutoScale. In cazul in care valorile reprezentate
depasesc valorile minime si maxime selectate, graficul va fi afisat complet
modificandu-se automat aceste valori. Daca AutoScale nu este selectat valorile
minime si maxime raman acelasi, iar graficul este afisat incomplet daca acestea sunt
depasite.
Ø Button Y-axies – se poate selecta intervalul de valori de pe axa Y, numele axei si alte
proprietati. In cazul in care valorile reprezentate depasesc valorile minime si maxime
selectate, graficul va fi afisat complet modificandu-se automat aceste valori. Daca
AutoScale nu este selectat valorile minime si maxime raman acelasi, iar graficul este
afisat incomplet daca acestea sunt depasite.
Ø Data Socket Binding – se poate schimba culoarea de reprezentare a graficului.
Ø Legend – reprezinta legenda. In cazul in care sunt reprezentate mai multe marimi pe
acelasi grafic se pot reprezenta asocierile dintre culori si marimile reprezentate. In
cazul unui singur grafic aceasta poate fi deselectata.

· StriptChart: utilizat pentru a afisa reprezentari ale marimilor sub forma de grafic. Acest control
este utilizat in cazul monitorizarii in timp real al marimilor. La fiecare interval de timp prestabilit
este adaugata o noua valoare a marimii in cadrul graficului.
Ø X-axies – se poate selecta intervalul de valori de pe axa X, numele axei si alte
proprietati.
Ø Y-axies – se poate selecta intervalul de valori de pe axa Y, numele axei si alte
proprietati. In cazul in care AutoScale este selectat graficul se va vedea incomplet,
controlul urmarind doar ultimele valori ale graficului.
Ø Traces – se poate schimba culoarea de reprezentare a graficului.
Ø Legend – reprezinta legenda. In cazul in care sunt reprezentate mai multe marimi pe
acelasi grafic se pot reprezenta asocierile dintre culori si marimile reprezentate. In
cazul unui singur grafic aceasta poate fi deselectata.
· Timer: utilizat in cadrul aplicatiilor in care trebuie executate anumite operatii repetitiv la un
anumit interval de timp. Aceste operatii vor fi scrise in cadrul functiei de callback a timerului.
Controlul de tip timer are intotdeauna functie de callback, aceasta fiind apelata la un anumit
interval de timp stabilit repetitiv din momentul pornirii timerului pana in momentul opririi
acestuia. In momentul executiei aplicatiei controlul nu este vizibil pe interfata.
Ø Enabled – daca este selectat, timerul va fi pornit automat in momentul rularii
aplicatiei. Acesta se poate porni si programatic.
Ø Interval – Intervalul de timp la care este apelata functia controlului de callback din
momentul pornirii acestuia.

· Generarea codului

Dupa finalizarea interfetei urmeaza a fi generat codul C.

Primul pas care trebuie facut este de a selecta evenimentele la care sunt generate functiile de callback ale
controalelor prin Code -> Preferences -> Default Event.

Initial sunt selectate EVENT_COMMIT (functiile sunt apelate la eliberarea mouse-lui) si


EVENT_TIMER_TICK (eveniment care trebuie selectat in momentul in care aplicatia contine control de
tip timer, acesta fiind evenimentul specific acestuia).

In cadrul aplicatiilor selectarea evenimentelor se face in functie de necesitatea aplicatiei dezvoltate. O


functie de callback poate avea mai multe evenimente executand codul asociat acelui eveniment.

In cazul in care evenimentele au fost selectate gresit acestea pot fi modificate direct in cadru codului C
generat.
Dupa selectarea evenimentelor se poate genera codul selectand Code ->Generate -> All Code.

In cadrul sectiunii: Select panels to load and display at startup sunt afisate numele toturor panourilor
create pe interfata. Aici trebuie selectat panoul principal.

Fiecarui panou aflat pe interfata ii va fi asociat o variabila. Aceasta in cazul panoului principal (acela care
este afisat in momentul executiei aplicatiei) este generat automat. In cazul in care panoul este numit
PANEL aceasta va fi generata automat sub numele de panelHandle. Aceasta variabila va fi utilizata in cod
pentru a identifica panoul principal.

In cadrul sectiunii: Select QuitUserInterface Callbacks sunt afisate toate functiile de callback aflate pe
interfata. Din aceasta lista vor trebui selectate functiile in care se doreste realizarea iesirii din aplicatie. In
cazul de fata se doreste ca iesirea din aplicatie sa se faca prin X-ul ferestrei panoului (prin functia de
callback a panoului PanelCallback) si printr-un buton de iesire cu functia de callback Iesire.

· Interpretarea codului generat

static int panelHandle; //variabila de identificare a panoului principal

int main (int argc, char *argv[])


{
if (InitCVIRTE (0, argv, 0) == 0)
return -1; /* out of memory */
if ((panelHandle = LoadPanel (0, "xx.uir", PANEL)) < 0) //asocierea variabilei panelHandle
panoului PANEL
return -1;
DisplayPanel (panelHandle); //afisarea panoului principal ca si panou nemodal
RunUserInterface (); //pornirea firului interfetei
DiscardPanel (panelHandle); //inchiderea panoului principal
return 0;
}

//functia de callback a panoului principal la care este realizata iesirea din aplicatie
int CVICALLBACK PanelCallback (int panel, int event, void *callbackData,
int eventData1, int eventData2)
{
switch (event)
{
case EVENT_GOT_FOCUS:
break;
case EVENT_LOST_FOCUS:
break;
case EVENT_CLOSE:
QuitUserInterface (0); //functia de iesire din aplicatie in momentul in care este
apasat X-ul ferestrei panoului asociat cu evenimentul
EVENT_CLOSE
break;
}
return 0;
}

// functia de callback a butonului de iesire care a fost generat cu evenimentul EVENT_COMMIT


int CVICALLBACK Iesire (int panel, int control, int event,
void *callbackData, int eventData1, int eventData2)
{
switch (event)
{
case EVENT_COMMIT:
QuitUserInterface (0); //functia de iesire din aplicatie
break;
}
return 0;
}

Codul asociat unei functiide callback se scrie dupa Case EVENT_... si inainte de break.
Pentru a usura completarea parametrilor functiilor se poate genera fereastra de editare apasand tastele
CTRL+P pe numele functiei (scris partial sau intreg).
In cazul in care lucrati cu un control nou si nu stiti functiile specifice acestuia puteti cauta in Libraries ->
User Interface Library -> Controls/Graphs/Strip Charts si de acolo selectat tipul controlului.
· Functii utilizate frecvent in cadrul aplicatiilor

1.LoadPanel()
Forma generala: int LoadPanel (int parentPanelHandle, char filename[], int panelResourceID);
Descriere :
Asociază panoului aflat pe interfaţa creată de utilizator o variabilă.
Panoul devine un panou copil pentru panoul specificat de parentPanelHandle.
Funcţia returnează un panel handle (variabila asociată) care va fi folosit în funcţii
pentru a specifica panoul cu care dorim să lucrăm. Trebuie apelată funcţia DisplayPanel() sau
InstallPopUp() pentru a face panoul vizibil.

2.DisplayPanel ()
Forma generală: int DisplayPanel (int panelHandle);
Descriere: Afisează panoul pe ecran ca panou nemodal.
3.InstallPopUp()
Forma generală: int InstallPopup (int panelHandle);
Descriere: Afişează şi activează panoul ca panou modal (adică se poate opera doar pe acest
panou, dacă există şi alte panouri în interfaşă acestea devin inactive).

4.DiscardPanel()
Forma generală: int DiscardPanel (int panelHandle);
Descriere: Închide panoul fie ca acesta este modal sau nemodal.

5.GetCtrlVal()
Formă generală: int GetCtrlVal (int panelHandle, int controlID, void *value);
Descriere: Se obţine valoarea curentă a controlului specificat în parametrul controlID de pe
interfaţă. Valoarea este salvată într-o variabilă declarată în program.

6.SetCtrlVal()
Formă generală: int SetCtrlVal (int panelHandle, int controlID, ...);
Descriere: Setează valoarea controlului specificat în parametrul controlID cu valoarea furnizată
de utilizator.

7.SetCtrlAttribute()
Formă generală: int SetCtrlAttribute (int panelHandle, int controlID, int controlAttribute, ...);
Descriere: Setează valoarea unui atribut a unui control de pe interfaţă. Pentru a furniza atributul
pe care dorim să îl setăm, acesta se va specifica în parametrul controlAttribute. Atributele care se
vor folosi cel mai des vor fi Dimmed şi Timer Enable.

8. GetCtrlAttribute()
Formă generală: int GetCtrlAttribute (int panelHandle, int controlID, int controlAttribute, void
*attributeValue);
Descriere: Se obţine valoarea atributului pentru controlul specificat de pe interfaţă.

· Aplicatii
1. Sa se reprezinte pe un control de tip GRAPH o functie sinus a carei amplitudine va fi setata de
utilizator prin controlul de tip NUMERIC KNOB Amplitudine.
Pentru generarea valorilor functiei sinus se va utiliza butonul Genereaza (se va utiliza functia
SinePattern), pentru reprezentarea functiei pe graph se va utiliza butonul Reprezinta si pentru
stergerea functiillor reprezentate se va utiliza butonul Sterge.
Iesirea din aplizatie se va realiza la X panoului.

2. Sa se reprezinte pe un control de tip STRIPTCHART la un interval de 0.1 sec cate un punct din
valorile unei functii sinusoidale (se va utiliza un control de tip TIMER).
Pentru generarea valorilor functiei sinus se va utiliza butonul Genereaza (se va utiliza functia
SinePattern), pentru pornirea timerului se va utiliza butonul Start si pentru oprirea timerului se va
utiliza butonul Stop.
Iesirea din aplizatie se va realiza la X panoului.
3. Sa se realizeze un panou principal avand doua controale de tip Command Button Deschide
fereastra modala si Deschide fereastra nemodala. La apasarea fiecarui buton vor fi afisate cate un
panou modal/nemodal. Acestea vor contine cate un buton de inchidere a panoului.
Iesirea din aplizatie se va realiza la X panoului principal.

S-ar putea să vă placă și