Citect SCADA - Conectivitate
  • Obiective
  • Organizarea sarcinilor de lucru
    1. Portul serial


         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.
         Vom realiza in continuare un nou proiect cu numele Serial
         Utilizarea portului serial presupune scrierea unor functii pentru conectarea si transferul datelor prin portul serial. De asemenea trebuisec facute niste setari in vederea utilizarii portului serial.

    Configurarea aplicatiei in vederea utilizarii portului serial.

        Se va configura o placa de achizitie (Board) astfel
  • Din Citect Project Editor -> Comunications -> Board , se adauga :



         Se configureaza portul de comunicatie astfel
  • Din Citect Project Editor -> Comunications -> Ports , se adauga :



    Programarea portului serial.

        Pentru utilizarea portului serial trebuiesc scrise functii pentru conectarea si transerul datelor prin portul 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).

        Functia pentru deschiderea portului serial

    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;
    !TaskNew("SerialRead", hPrt, 0);
    !TaskNew("SerialWrite", hPrt, 0);
    !ComClose(hPort);
    buf="A0"
    sem=0;    
    RETURN 1;
    END
    


        Functia pentru inchiderea portului serial

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


        Functia pentru scrierea la portul serial

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


        Functia pentru citirea la portul serial

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


    2. Utilizarea portului serial


        Majoritatea aplicatiilor pentru achizitia si monitorizarea utilizeaza sisteme de achizitie conectate la portul serial sau la alte porturi dar sunt accesate prin intermediul unui port serial virtual.
        Un port virtual, emuleaza un port fizic. Astfel un sistem de achizitie care dispune de un port USB poate fi conectat la calculator prin intermediul portului USB. Pentru a utiliza conexiunea prin intermediul portului serial, se creaza un port serial virtual din USB, astfel aplicatia SCADA vede din punct de vedere logic, un port serial.
        Sa presupunem ca avem un sistem de achizitie date realizat pe baza unui sistem de dezvoltare PIC
        Sistemul de achizitie dispune de 5 intrari analogice 4 digitale si 8 iesiri digitale, conectate astfel:


        Vom utiliza in continuare acest sistem de achizitie pentru a dezvolta diverse aplicatii SCADA. Pentru inceput vom realiza aplicatii simple care citesc intrari ale acestui sistem de achizitie.

    Afisarea unui canal analogic

        Sa presupunem ca avem conectat un sistem de achizitie pe portul serial. Sistemul de achizitie dispune de intrari analogice. Pentru citirea intrarii analogice 0 este necesara comanda "A0", iar sistemul raspunde cu valoarea analogica.

        Pentru a realiza o aplicatie care sa afiseze intrarea analogica A0, similara cu cea de jos,


    trebuie sa folosim o functie de genul:

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

    unde k este o variabila care e setata daca portul serial este deschis, iar sem este o variabila car determina faza de citire sau faza de scriere.

    3. Utilizarea bazelor de date


        Aplicatiile SCADA "citect" pot utiliza baze de date ca sursa de date in vederea transferului acestora spre si dinspre alte aplicatii. In mod nativ citec utilizeaza o serie de baze de date cum ar fi     Limbajul de programare "Cicode" inclus in mediul de dezvoltare citec cuprinde functii pentru implementarea limbajului SQL. Modul de utilizare al acestora se gaseste in help-ul aplicatiei in ramura:
         Cicode Programming Reference > Cicode Function Categories > SQL Functions Introduction > SQL Functions > SQLConnect
         Se pot deci accesa baze de date care au implementat limbajul SQL, utilizand tehnologia ODBC.
         Ne propunem in continuare interfatarea aplicatiilor "citect" cu baza de date MySQL. MySQL ete o baza de date SQL open source care ne va permite utilizarea acesteia pentru a transfera informatii spre si dinspre alte aplicatii chiar si pentru transferul datelor spre aplicatii WEB.

    Instalarea unei conexiuni MySQL

        "Citect" nu utilizeaza in mod nativ baza de date MySQL, de aceea conexiunea la o baza de date MySQL se face prin utilizarea tehnologiei ODBC (Open Database Connectivity). ODBC furnizeaza un standard pentru metodele si procedurile software API (application programming interface)in vederea utilizarii bazelor de date respectiv pentru utilizarea sistemul de gestiune al bazei de date numit DBMS (database management systems). Utilizarea ODBC asigura independenta fata de limbajul de proogramare, baza de date sau sistemul de operare.
        Majoritatea producatorilor de baze de date ofera drivere pentru conexiuni ODBC. MySQL ofera un astfel de driver ODBC, care se poate descarca de pe site-ul http://dev.mysql.com/downloads/connector/odbc/5.1.html, gazduit de site-ul http://www.mysql.com. De pe acest site se poate dealtfel descarca baza de date MySQL de pe link-ul: http://dev.mysql.com/downloads.
        Dupa descarcarea driver-ului mysql-connector-odbc-5.1.5-win32.msi utilizand link-ul: http://dev.mysql.com/downloads/connector/odbc/5.1.html, se instaleaza prin rularea aplicatiei descarcate, dupa care se intra in :
         Control Panel -> Other Control Panel Options -> DBE Administrator pentru a configura DBE ( Data Base Engine ) si pentru a adauga o noua conexiune, sau altfel spus un "Alias" pentru o noua baza de date. Cu click dreapta ->New, putem alege un driver ODBC. Daca in prealabil am instalat driverul odbc MySQL , acesta trebuie sa se regaseasca in lista. Alegem deci MySQL ODBC 5.1 Driver. si dam numele "Alias-ului " sa zicem "MySQL_citect". Click-dreapta pe numele alias creat->alegem ODBC administrator -> Configure -> Putem sa alegem Serverul bazei de date user-ul si baza de date.

        Pentru Windows 7 instalarea unei conexiuni la o baza de date MySQL se face in mod similar, cu deosebirea ca se intra in: Control Panel -> Systen and Security -> Administrative Tools -> Data Sources (ODBC). Se alege din meniu System DSN si prin apasarea butonului "Add" se adauga o noua conexiune.
        In cadrul unei aplicatii "citec" avem posibilitatea sa interogam baza de date utilizand aliasul: "MySQL_citect" ctreat anterior.
        Functia care realizeaza conectarea la baza de date "MySQL_citect" arata astfel:

        Sa presupunem ca am crea variabilele locate hSQL de tip int si mes de tip string dupa care crem functia connect_mysql utilizand Citect Editor

    FUNCTION connect_mysql()
    	hSQL = SQLConnect("DSN=MySQL_citect");
    	IF hSQL > -1 THEN
    		mes="Conexiunea MySQL_citect realizata";
    	ELSE
    		mes="Eroare de conectoare MySQL_citect";
    	END
    END 
    
    

        Unde mes este o variabila locala de tip string folosita pentru a afisa diverse mesaje.

        In cazul in care vrem sa lansam un dialog pentru conectarea la o anumita baza de date scriem

    FUNCTION connect_mysql()
    	hSQL = SQLConnect("DLG=1");
    	IF hSQL > -1 THEN
    		mes="Conexiunea MySQL_citect realizata";
    	ELSE
    		mes="Eroare de conectoare MySQL_citect";
    	END
    END 
    
    


        Sa presupunem ca in cadrul bazei de date deschise, se afla si tabela ap_electr, care contine campurile den_ap si tens_n. Citirea valorilor den_ap si tens_n se face astfel:

    FUNCTION  citesc_mysql()
    	err1=SQLExec (hSQL, "SELECT * FROM ap_electr ");
    	err2=SQLNext(hSQL);
    	dn_ap = SQLGetField(hSQL, "den_ap");
    	u_n = SQLGetField(hSQL, "tens_n");
    END
    
    

        err1 fiind un cod de eroare intors de functia SQLExec iar err2 fiind un cod de eroare intors de functia SQLNext, iar dn_ap si u_n sunt variabile locale care vor fi inscrise cu valorile citite din prima inregistrare aflata in baza de date.

        Pentru a citi restul inregistrarilor utilizam functia de mai jos, functie care ne permite sa navigam pe urmatoarele inregistrari.

    FUNCTION next_mysql()
    err3=SQLNext(hSQL);
    	IF err_sel<>0 THEN
    		mes="Nu exista inregistrare";
    		u_n="0";
    	ELSE
    		mes = SQLGetField(hSQL, "den_ap");
    		u_n = SQLGetField(hSQL, "tens_n");
    	END
    END
    


    Data Base Exchange Control

        In cazul in care nu dorim sa folosim datele citite in cadrul aplicatiei, dorim doar citirea si afisarea datelor, se poate folosi un obiect Data Base Exchange Control.



        Modul de setare proprietati.
        

    Test de autoevaluare


    Rezumat


         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.

         Pentru utilizarea portului serial se utilizeaza functiile . Utilizarea bazelor de date

        Aplicatiile SCADA "citect" pot utiliza baze de date ca sursa de date in vederea transferului acestora spre si dinspre alte aplicatii. In mod nativ citec utilizeaza o serie de baze de date cum ar fi     Limbajul de programare "Cicode" inclus in mediul de dezvoltare citec cuprinde functii pentru implementarea limbajului SQL. Modul de utilizare al acestora se gaseste in help-ul aplicatiei in ramura:
         Cicode Programming Reference > Cicode Function Categories > SQL Functions Introduction > SQL Functions > SQLConnect
         Se pot deci accesa baze de date care au implementat limbajul SQL, utilizand tehnologia ODBC.

    Instalarea unei conexiuni MySQL

        "Citect" nu utilizeaza in mod nativ baza de date MySQL, de aceea conexiunea la o baza de date MySQL se face prin utilizarea tehnologiei ODBC (Open Database Connectivity). ODBC furnizeaza un standard pentru metodele si procedurile software API (application programming interface)in vederea utilizarii bazelor de date respectiv pentru utilizarea sistemul de gestiune al bazei de date numit DBMS (database management systems). Utilizarea ODBC asigura independenta fata de limbajul de proogramare, baza de date sau sistemul de operare.

  • Rezultate asteptate
  • Termeni esentiali


  • Recomandari bibliografice

  • Link-uri utile

    Test de evaluare