Aplicatia 6 - Utilizarea portului serial

Obiective Prezentare teoretica

     Numeraoase sisteme de achizitie, comunica cu calculatorul prin intermediul portului serial. Mediul de dezvoltare aplicatiii SCADA Citect permite utilizarea portului serial pentru interfatarea cu diverse sisteme hardware de monitorizare si control. Utilizarea portului serial presupune scrierea unor functii pentru conectarea si transerul datelor prin portul serial. De asemenea trebuisec facute niste setari in vederea utilizarii portului serial.

Configurarea placii de achizitie (Board) Configurarea portului de comunicatie Programarea portului serial
    Prima operatie care se executa in vederea utilizarii portului serial este operatia de deschidere a portului serial. Aceasta operatie se bazeaza pe utilizarea functiei FUNCTION ComOpen(STRING nume_Port,0). Aceasta functie are nevoie de un parametru de tip "string" pentru a preciza numele portului. Daca portul cu numele "nume_Port", se poate deschide, functia returneaza un INT care reprezinta "handler-ul" cu care se vor face celelalte operatii (citire, scriere, inchidere).

     Pentru utilizarea portului serial se utilizeaza functiile . Tematica de laborator
    Se utilizeaza un sistem de achizitie date realizat pe baza unui sistem de dezvoltare PIC conectat prin portul serial la calculator. Sistemul de achizitie dispune de 5 intrari analogice 4 digitale si 8 iesiri digitale, conectate astfel:
    Utilizand sistemul de achizitie descris mai sus si mediul de dezvoltare SCADA-CITECT creati o aplicatie SCADA pentru citirea si afisarea a 4 intrari digitale. Se va crea un noun proiect cu numele Labs in in care se va crea pagina labs6_01 similara cu pagina grafica de jos:


    Se vor introduce tag-urile:

    Pentru utilizarea portului serial sunt necesare functiile:

INT FUNCTION StartSerial(STRING sPort)    
	INT    hPort;    
	hPort = ComOpen(sPort, 0);
    IF hPort < 0 THEN
		Prompt("Nu s-a deschis portul: " + sPort);
		RETURN -1;    
	END
Prompt("Portul: " + sPort+ " a fost deschis.");	    
hPrt=hPort;
buf="A0"
sem=0;    
RETURN 1;
END

INT FUNCTION SerialClose(INT hPort)
	ComClose(hPort);
	Prompt("Portul a fost inchis."); 
	RETURN 0;
END 

INT FUNCTION SerialWrite(INT hPort, STRING buffer)    
    INT SerialWriteError;    
    INT length;   
       	length=StrLength(buffer);     
		SerialWriteError = ComWrite(hPort, buffer, length, 2);        
		IF SerialWriteError THEN            
    		Prompt("Error Writing port");            
    		ComReset(hPort);
    		RETURN -1;        
    	END	      
	RETURN 0;
END 

INT FUNCTION SerialRead(INT hPort)
	STRING buffer      
	INT    length;    
	INT    total;    
	INT    SerialReadError;    
	total = 0;
	length=20;              
		SerialReadError = ComRead(hPort, buffer, length, 0);
		IF SerialReadError THEN            
			Prompt("Eroare la citirea P S " + SerialReadError : ####);            
			ComReset(hPort);
			RETURN -1;         
		ELSE           
			IF StrLength(buffer)>0 THEN
			  buf_r=buffer;
			  nr_r=StrLength(buffer);
			    Val_a0=StrToInt(StrTrim(StrMid( buffer,3,StrLength(buffer)-3)));
			END
		END	       
RETURN 0;
END

INT FUNCTION Achiz_di
IF k1=1 THEN
   IF sem = 1 THEN
     sem=0;
	 SerialRead(hPrt);
   	 SerialWrite(hPrt,"DI");
   ELSE
    sem=1;
    SerialRead(hPrt);
   END 
END
RETURN 0
END


    Pentru citirea celor 4 intrari digitale se va folosi functia Achiz_di(), functie care inscrie in variabila "buf_r" valoarea citita. Valoarea citita trebuie despachetata si calculata valoarea pentru fiecare led in parte.

    Se va dezvolta o noua pagina grafica avand numele "labs6_02" care pentru comanda a 8 iesiri digitale. HMI-ul acestei aplicatii va trebui sa fie similar cu:



    Se va dezvolta o noua pagina grafica avand numele "labs6_03" care pentru comanda a 8 iesiri digitale. HMI-ul acestei aplicatii va trebui sa fie similar cu:



    Se vor introduce tag-urile st, led0-led7 de tip DIGITAL, si tag-ul de tip STRING cd_led
    Se va realiza functia Ctrl_led() pentru aprinderea led-ului corespunzator butonului apasat.
    Se va plasa functia Ctrl_led() pe pagina grafica, astfel comanda de afisare a LED-urilor se trimite la fiecare scanare a paginii si nu mai e necesar butonul "Trimit comanda":

Cerinte de rezolvat

Derularea activitatilor

Prezentarea rezultatelor