Gestionare automată a Ordinelor de Dispecer

camera de comanda

Începând cu 1 februarie 2021 decontarea tranzacțiilor cu energie electrică nu se mai face orar, ci la 15 minute, iar Ordinele de dispecer nu mai sunt transmise telefonic de către dispecerul de la DEN către dispecerii de la unitățile de producție , aceștia având acum o sarcină în plus , aceea de a urmări apariția ordinelor de dispecer și adăugarea valorilor de putere cerută pe anumite intervale de timp în aplicația automatului programabil (Step7 & WinCC) pentru comanda de putere activă a generatorului.

Vă prezint în continuare modul în care am realizat transmiterea Ordinelor de Dispecer direct spre generator , fără nici o intervenție din partea dispecerului.

Aceste Ordine de Dispecer se adaugă la valoarea de putere stabilită în ziua anterioară pentru ziua curentă.

Apariția ordinelor de dispecer nu are o anumită regulă , totul depinde de producția , consumul și frecvența sistemului în anumite intervale din zi.

Partea grafică a aplicației originale pe care am primit-o de la TRANSELECTRICA , cu care ne puteam conecta pentru o citire simplă de informații de pe WebServer prin completarea datelor necesare și apăsarea unui buton , arăta ca în imaginea de mai jos:

 

WEBCLIENT ORIGINAL

După fiecare operație de citire se obținea un fișier în format xml care conținea mai multe informații , printre care și acele ordine de dispecer , aranjate într-un format standard, după modelul de mai jos ,care reprezintă o cerere de încarcare (<Direction v="A01"/>) , pentru intervalul 9:45 - 10:00 din data de 8.02.2021 , o putere de 8 MW pentru unitatea nr. 5 IERNUT.

<DispatchOrder>
<Name v="IERN5"/>
<ResourceObject v="30WELCEIERN5---V"/>
<TimeInterval v="2021-02-08T09:45Z/2021-02-08T10:00Z"/>
<Service v="A97"/>
<Direction v="A01"/>
<Quantity v="8.000"/>
</DispatchOrder>

Pentru o zi cu cîteva zeci de astfel de ordine , acel fișier XML conținea un șir foarte lung de astfel de pachete de date, pe care dispecerul era nevoit să le descifreze. Un exemplu de fișier se poate vedea aici: https://simpalean.site/webserver/ordin.html

După ce am analizat codul sursă al aplicației , am reușit să adaug mai multe opțiuni de alarmare/atenționare a dispecerului la apariția ordielor noi de dispecer precum și transmiterea valorilor de putere direct spre comanda generatorului exact în intervalele de timp asociate acestora. Partea grafică arată ca în imaginea de mai jos:

weberver damas

  Deoarece ordinele de dispecer nu apar după o anumită regula , uneori apar cu un minut, alteori cu 40.....50 de minute înainte de momentul în care începe intervalul asociat lor , a fost nevoie de crearea unor funcții de prelucrare a acestora , astfel încât aceste valori să rămână memorate în aplicație , ordonate în funcție de intervalul asociat ( în variabile de tip Array) , iar în momentul în care ceasul PC-ului pe care rulează aplicația ajunge la intervalul asociat unui ordin de dispecer , valoarea de putere corespunzătoare intervalului respectiv să fie transmisă spre un convertor Digital-Analog prin portul serial al PC-ului și pe urmă la o intrare analogică a automatului programabil SIEMENS , cu care se controlează puterea activă a generatorului.

 În automatul programabil se însumează valorile de putere prognozate , valorile de putere calculate "online" pentru reglajul secundar și valorile de putere transmise ca Ordin de Dispecer. Suma acestora este transmisă spre generator ca și comandă de putere activă. Observație: Puterile pentru reglaj secundar și Ordinele de Dispecer pot avea valori pozitive sau negative.

 Deoarece nu există în comerț un aparat conceput în acest scop , am construit un dispozitiv electronic capabil să prelucreze aceste date , astfel încât să rezulte la ieșirea lui niște mărimi analogice unificate (curent 0-20mA), valori compatibile intrărilor analogice ale automatului programabil (Step7).

  O schemă bloc cu traseul semnalelor implicate în proces este reprezentată în imaginea următoare:

damas

Pentru ca automatizarea să funcționeze , a fost necesare modificări în automatul SIEMENS (programare Sep7) , în interfața HMI (programare WinCC) de pe masa dispecerului , în aplicația WebClient (programare C#) și programarea procesorului care face conversia DIGITAL - PWM (programare C++).

Valorile de ieșire din convertorul Digital-Analog construit au fost scalate corespunzător , astfel încât sa poată fi transmise valori de putere între -40 și +40MW , acestea fiind limitele valorilor posibile pentru generatorul 5 de la Iernut.

Piesele principale ale convertorului sunt :

- un display LCD 16x2 pe care se pot urmări cele două valori importante ale procesului: Valoarea de putere corespunzătoare intervalului curent (PF) și numărul intervalului (Int_crt) din cele 96 intervale de 15 minute ale zilei.

- un microprocesor ATMEGA328P programat special pentru această aplicație. Acesta recepționează datele de la PC prin portul serial ,la afișează pe display-ul LCD și în același timp generează impulsuri cu factor de umplere variabil (PWM), în funcție de valoarea de putere recepționată. Impulsurile PWM sunt trecute printr-un filtru RC și la ieșirea acestuia rezultă o tensiune continuă proporționala cu lățimea impulsurilor , conform schemelor de principiu de mai jos:

circuit RC

grafic PWM

Rezultatul conversiei din pulsuri cu lățime variabilă în tensiune continuă se poate urmări și în imaginea animată de mai jos , linia albastră fiind tensiunea continuă obținută la ieșire , vizualizată pe un osciloscop:

pwm convertor

- un circuit integrat cu o schemă de convertor tensiune-curent. Am folosit sehema de principiu din imaginea următoare:

onvertor tensiune curent

Am montat circuitele într-o cutie și arată ca în imaginea următoare:

convertor digital analog

Informațiile afișate pe display în imaginea de mai sus reprezintă un Ordin de Dispecer pentru intervalul 47 al zilei (11:30 - 11:45) cu o valoare de putere activă de +18MW. O afișare a acestor intervale în funcție de orele zilei pentru a fi mai ușor de urmărit de către dispecer se poate vedea pe această pagină: Ecrane noi Reglaj PF , unde sunt prezentate ultimele modificări pe care le-am făcut în automatul programabil (Step7) pentru introducerea manuală a valorilor de putere pe intervale de 15 minute.

Strategia pe care am folosit-o este următoarea:

-de la aplicația WebClient care rulează pe un PC , se transmite în fiecare secundă un șir de caractere care conține intervalul curent al zilei și valoarea de putere asociată intervalului curent , citită cu căteva minute în urmă de pe WebServerul DAMAS.

- procesorul va recepționa acel șir de caractere , va trimite spre display textul primit pentru afișare și va extrage din textul complet primit zona (caracterele) în care este scrisă valoarea de putere și zona în care este scris semnul puterii , plus sau minus , în funcție de sensul cerut (Direction), încărcare sau descărcare de putere pe intervalul respectiv.

O parte din programul (codul sursă) pe care l-am scris în procesor în limbajul de programare C++ este prezentat în secțiunea următoare:

 int nrInterval=0; // variabila pentru intervalul curent de 15 minute din cele 96 posibile
 uint16_t icr=0x0fff; // seteaza registri din procesor petru PWM cu rezolutie de 12 biti (4096 valori distincte)
 float ordin_text=0;  // variabila din care se extrage valoarea de putere in format text din textul primit SERIAL
 float ordin_DEN=0.0; // variabila pentru valoarea puterii ca numar zecimal
 float comanda_PWM=0.0; // variabila pentru comanda PWM(Pulse Width Modulation = factor de umplere impulsuri)
 String inputString = "";         // variabila pentru textul complet primit pe serial , putere si nr interval
 bool stringComplete = false;  // semal de text recepionatt complet , cind vine caracterul \n
 void setupPWM16();//functia care stabileste rezolutia PWM  intre 8 si 16 biti
 void analogWrite16(uint8_t pin, uint16_t val)    ; // functia care seteaza valoarea PWM conform valorii primite pe serial