Documente Academic
Documente Profesional
Documente Cultură
Puterile P şi Q simulate pentru contor sunt afişate sub etichetele P_meter [W]
şi Q_meter [VAr], ele fiind zero la pornirea programului. Sub fiecare căsuţă se află
valori de programare care se vor copia în căsuţele valorilor efective în urma
apăsării butonului „Set”.
În continuare se vor analiza regimuri de lucru ale contoarelor, care să pună în
evidenţă cele 4 combinaţii de puteri active şi reactive, bazate pe semnul acestora,
aspect ce ne permite analiza indecşilor în cele 4 cadrane:
– Setul de valori P > 0 şi Q > 0 corespunde cadranului 1 al planului PQ;
– Setul de valori P < 0 şi Q > 0 corespunde cadranului 2 al planului PQ;
– Setul de valori P < 0 şi Q < 0 corespunde cadranului 3 al planului PQ;
– Setul de valori P > 0 şi Q < 0 corespunde cadranului 4 al planului PQ.
Pentru a pune în evidenţă funcţionarea contorului în fiecare din cele 4
cadrane, se începe cu setarea puterilor active şi reactive, corespunzătoare
cadranului 1. În figura 2.2 se prezintă situaţia în care P şi Q au fost fixate pentru
valorile P = 850 W şi Q = 100 VAr. alte valori cu acelaşi semn putând fi setate în
timpul derulării lucrării de laborator. În stânga planului PQ se poate observa şi
graficul care arată poziţia punctului (P, Q), printr-o dreaptă ce îl uneşte cu originea
(0,0). De menţionat faptul că graficul permite afişarea corectă a punctului de lucru
în cazul în care atât P cât şi Q au valori absolute mai mici decât 1000.
În cadrul acestei etape, după fixarea puterilor active şi reactive se va apăsa
butonul „Main reset”, astfel încât toţi indecşii vor fi aduşi la zero. In figura 2.2 sunt
de interes în această etapă următorii indecşi esenţiali:
– Ap: corespunzătoare integrării puterii active P atunci când aceasta are
valoare pozitivă (P > 0);
17 Analiza unor funcții de bază: indecși, tarife, profiluri de sarcină
În afară de aceşti indecşi, ce rezultă direct din integrarea fiecărei mărimi (P,
respectiv Q), mai există unii indecşi sintetizaţi, care pun în valoare aşa numitele
energii reactive în 4 cadrane. Aceşti indecşi sunt derivaţi din indecşii de energie
reactivă RP şi Rm, dar fiecare din aceşti doi indecşi permite sintetizarea a încă doi
indecşi, respectiv pentru cazul în care puterea activă este pozitivă respectiv
negativă. Se obţin deci sintetic următorii indecşi suplimentari:
– Q1: corespunzătoare integrării puterii reactive Q atunci când aceasta are
valoare pozitivă (Q > 0), iar puterea activă este tot pozitivă (P > 0), care
corespunde energiei reactive pentru cazul punctului de funcţionare in
cadranul 1;
– Q2: corespunzătoare integrării puterii reactive Q atunci când aceasta are
valoare pozitivă (Q > 0), dar când puterea activă este negativă (P < 0),
care corespunde energiei reactive pentru cazul punctului de funcţionare în
cadranul 2;
Elemente de utilizare avansată a contoarelor de energie electrică în sisteme electroenergetice 18
Fig. 2.3 Urmărirea evoluţiei indecşilor – cazul când P şi Q sunt în al doilea cadran.
sau
Rp = 820 VAr × 125 s / 3600 = 28.4722 VArh
Q3 = Rm
Testele efectuare au arătat modul în care se pot obţine din valorile de intrare
P şi Q indecşii de bază precum şi cei derivaţi, necesari punerii în valoare a
energiilor reactive în cele 4 cadrane.
mai sus toate zilele sunt setate pe valoarea 1, ceea ce înseamnă că orele de început
şi de sfârşit sunt valabile pe toata perioada săptămânii.
MY se referă la luna din an, fiind patru grupuri de 3 luni, la fiecare putându-
se pune 1 sau 0.
Cd este identificator al condiţiei, putând exista mai multe condiţii distincte de
timp pentru acelaşi tarif, în regim SAU (oricare din condiţii este îndeplinită, tariful
devine activ). Tarifele active la un moment dat sunt afişate în căsuţa cu eticheta
„Tarif curent”.
Se va modifica în timp real ora şi/sau minutul unui tarif al cărui index
avansează, astfel încât să se verifice faptul că tariful poate fi dezactivat sau
23 Analiza unor funcții de bază: indecși, tarife, profiluri de sarcină
reactivat, prin scoaterea sau readucerea tarifului în perioada în care se află ora
curentă (caseta din stânga sus afişează data şi ora curentă).
2.3. CONCLUZII
care, dacă este invocată, asigură salvarea pe hard-disc (HDD) a unor valori.
Studenții sunt încurajați să propună salvarea pe HDD a unor mărimi de interes și să
determine împreună cu cadrul didactic specializat locul în cadrul programului unde
trebuie invocată rutina și parametrii ce trebuie folosiți.
Elemente de utilizare avansată a contoarelor de energie electrică în sisteme electroenergetice 26
#include <QTimer>
#include <QDateTime>
#include <QFile>
#include <fcntl.h>
#include <QtDebug>
#include <QtGui>
#include <cstdlib>
#include <stdlib.h>
#include <sstream>
#include <QString>
#include <QtCore/qmath.h>
#include <QGlobal.h>
#include "ngometer.h"
#include "ui_ngometer.h"
// This index will never reset in a meter, but only recycle when max value
is reached
int64_t Idx_i64_Rp=0;
// integer index of Reactive energy with (-), stored in the meter
// This index will never reset in a meter, but only recycle when max value
is reached
int64_t Idx_i64_Rm=0;
// indexes for 4 quadrant reactive energies
int64_t Idx_i64_Rip=0;
int64_t Idx_i64_Rcp=0;
int64_t Idx_i64_Rim=0;
int64_t Idx_i64_Rcm=0;
int Tarrif_crt=1;
double Idx_Tarrif_01=0;
double Idx_Tarrif_02=0;
double Idx_Tarrif_03=0;
double Idx_Tarrif_04=0;
double Idx_Tarrif_xy[10];
QString Tarrif_xy_TOU_text[10];
QString LP01_text_buffer="";
QString LP02_text_buffer="";
QString Tarif_curent_text="";
int64_t Idx_i64_Tarrif_01=0;
int64_t Idx_i64_Tarrif_02=0;
int64_t Idx_i64_Tarrif_03=0;
int64_t Idx_i64_Tarrif_04=0;
int64_t Idx_i64_Tarrif_xy[4];
OBIS_structures A_plus, A_minus;
OBIS_structures R_plus, R_minus;
OBIS_structures R_ind_plus, R_ind_minus, R_cap_plus, R_cap_minus;
NGOMeter::NGOMeter(QWidget *parent) :
// fereastra principala
QMainWindow(parent),
ui(new Ui::NGOMeter)
{
ui->setupUi(this);
t1sec = new QTimer(this);
t1sec->start(dt); // parametrul da numarul de milisecunde la care are
loc o intrerupere
ui->lineEdit_P_meter->setText(QString::number(0));
ui->lineEdit_Q_meter->setText(QString::number(0));
ui->lineEdit_P_meter_set->setText(QString::number(P_meter));
ui->lineEdit_Q_meter_set->setText(QString::number(Q_meter));
Tarrif_xy_TOU_text[0]="Cd=01;YM=111.111.111.111;WD=11111.11;H1=15;M1=00;H2=2
2;M2=00";
ui->lineEdit_Tarrif_01_TOU->setText(Tarrif_xy_TOU_text[0]);
Tarrif_xy_TOU_text[1]="Cd=01;YM=111.111.111.111;WD=11111.11;H1=14;M1=00;H2=1
5;M2=18";
ui->lineEdit_Tarrif_02_TOU->setText(Tarrif_xy_TOU_text[1]);
}
void NGOMeter::intr_1sec() {
int y1, m1, d1, h1, min1, sec1, ms1;
// se calculeaza timpul scurs de la ultima intrerupere
QDateTime DT1;
QDate date = QDate::currentDate(); y1=date.year(); m1=date.month();
d1=date.day();
QTime time = QTime::currentTime(); h1=time.hour(); min1= time.minute();
sec1=time.second(); ms1 = time.msec();
QString s1 = QString::number(y1)+"-" + QString::number(m1)+"-" +
QString::number(d1)+" ";
s1 += QString::number(h1)+":" + QString::number(min1)+":" +
QString::number(sec1);//+":" + QString::number(ms1);
//stime1 = s1;
ui->lineEdit_Time->setText(s1);
P_meter = QString(ui->lineEdit_P_meter->text()).toDouble();
Q_meter = QString(ui->lineEdit_Q_meter->text()).toDouble();
Tarrif_crt = QString(ui->lineEdit_Tarrif_crt->text()).toInt();
// real-time functions in the T_integr interrupt
// Dividing by 3600 is for getting kWh
// Multipying by 1000 is for getting Wh
if(P_meter>0) Idx_i64_Ap += 1.0 * P_meter *P_meter_const * T_integr;
else Idx_i64_Am += -1.0 * P_meter *P_meter_const * T_integr;
if(Q_meter>0) Idx_i64_Rp += 1.0 * Q_meter *Q_meter_const * T_integr;
else Idx_i64_Rm += -1.0 * Q_meter *Q_meter_const * T_integr;
//***** real-time functions in the T_integr interrupt
// calculation of indexes advances
Idx_Dlt_i64_Ap = Idx_i64_Ap-Idx_Old_i64_Ap; Idx_Old_i64_Ap = Idx_i64_Ap;
Idx_Dlt_i64_Am = Idx_i64_Am-Idx_Old_i64_Am; Idx_Old_i64_Am = Idx_i64_Am;
Idx_Dlt_i64_Rp = Idx_i64_Rp-Idx_Old_i64_Rp; Idx_Old_i64_Rp = Idx_i64_Rp;
Idx_Dlt_i64_Rm = Idx_i64_Rm-Idx_Old_i64_Rm; Idx_Old_i64_Rm = Idx_i64_Rm;
// Four quadrant integration
if(P_meter>0) {
Idx_i64_Rip += Idx_Dlt_i64_Rp;
Idx_i64_Rim += Idx_Dlt_i64_Rm;
}
else {
Idx_i64_Rcp += Idx_Dlt_i64_Rp;
Idx_i64_Rcm += Idx_Dlt_i64_Rm;
}
Time_from_main_reset += T_integr;
Find_crt_tarrif();
Make_load_profiles(y1, m1, d1, h1, min1, sec1, ms1);
Display1();
update();
}
void NGOMeter::Find_crt_tarrif() {
//lineEdit_Tarrif_01_ch
int ch1=0;
// First tarif
29 Analiza unor funcții de bază: indecși, tarife, profiluri de sarcină
// Sintaxa: Cd=01;YM=111.111.111.111;WD=11111.11;H1=16;M1=0;H2=16;M2=18
// Cd=conditia; YM=month of the year; DW=Day of the week;
// H1, H2= ora de iceput si de sfarsit; M1, M2 = minutul de inceput si
de sfarsit
QString s01;
bool time_ready=false;
Tarif_curent_text="";
//Tarrif_xy_TOU_text[0]="Cd=01;YM=111.111.111.111;WD=11111.11;H1=16;M1=00;H2
=17;M2=00";
painter.setPen(QPen(Qt::red,2));
painter.drawLine(drw_x0+drw_x_len/2,drw_y0+drw_y_len/2,
drw_x0+drw_x_len/2+dx1,drw_y0+drw_y_len/2+dy1);
}
void NGOMeter::Make_load_profiles(int y1, int m1, int d1, int h1, int min1,
int sec1, int ms1) {
double display_d1;
// Load profile No. 1
QString s1="";
QString st="";
if(sec1==0) {
st += QString::number(y1-2000)+"-" + QString::number(m1)+"-" +
QString::number(d1)+" ";
st += QString::number(h1)+":" + QString::number(min1)+":" +
QString::number(sec1)+";";
// Ap
display_d1 = Idx_i64_Ap / (3600/T_integr) / P_meter_const;
s1 = st+ "Ap=" + QString::number(display_d1,'%10g4',4)+"\t";
if(ui->checkBox_Ap1->checkState()!= Qt::Unchecked) LP01_text_buffer
+= s1;
// Am
display_d1 = Idx_i64_Am / (3600/T_integr) / P_meter_const;
s1 = st+ "Am=" + QString::number(display_d1,'%10g4',4)+"\t";
if(ui->checkBox_Am1->checkState()!= Qt::Unchecked) LP01_text_buffer
+= s1;
// Rp
display_d1 = Idx_i64_Rp / (3600/T_integr) / P_meter_const;
s1 = st+ "Rp=" + QString::number(display_d1,'%10g4',4)+"\t";
if(ui->checkBox_Rp1->checkState()!= Qt::Unchecked) LP01_text_buffer
+= s1;
// Rm
display_d1 = Idx_i64_Rm / (3600/T_integr) / P_meter_const;
s1 = st+ "Rm=" + QString::number(display_d1,'%10g4',4)+"\t";
31 Analiza unor funcții de bază: indecși, tarife, profiluri de sarcină
//lineEdit_LP1_period
ui->lineEdit_LP1_period->setText("60");
ui->lineEdit_LP2_period->setText("120");
}
void NGOMeter::Display1() {
// display after the T_integer cycle
// ui->lineEdit_AFE_Ap->setText(QString::number(Idx_d_Ap,'%8g4',4));
double display_d1;
display_d1 = Idx_i64_Ap / (3600/T_integr) / P_meter_const;
ui->lineEdit_Main_index_Ap-
>setText(QString::number(display_d1,'%10g4',4));
display_d1 = Idx_i64_Am / (3600/T_integr) / P_meter_const;
ui->lineEdit_Main_index_Am-
>setText(QString::number(display_d1,'%10g4',4));
display_d1 = Idx_i64_Rp / (3600/T_integr) / P_meter_const;
ui->lineEdit_Main_index_Rp-
>setText(QString::number(display_d1,'%10g4',4));
display_d1 = Idx_i64_Rm / (3600/T_integr) / P_meter_const;
ui->lineEdit_Main_index_Rm-
>setText(QString::number(display_d1,'%10g4',4));
display_d1 = Idx_i64_Rip / (3600/T_integr) / P_meter_const;
ui->lineEdit_Main_index_Rip-
>setText(QString::number(display_d1,'%10g4',4));
display_d1 = Idx_i64_Rcp / (3600/T_integr) / P_meter_const;
ui->lineEdit_Main_index_Rcp-
>setText(QString::number(display_d1,'%10g4',4));
display_d1 = Idx_i64_Rim / (3600/T_integr) / P_meter_const;
ui->lineEdit_Main_index_Rim-
>setText(QString::number(display_d1,'%10g4',4));
display_d1 = Idx_i64_Rcm / (3600/T_integr) / P_meter_const;
ui->lineEdit_Main_index_Rcm-
>setText(QString::number(display_d1,'%10g4',4));
// Display tarrif indexes
display_d1 = Idx_i64_Tarrif_xy[0] / (3600/T_integr) / P_meter_const;
ui->lineEdit_Tarrif_01->setText(QString::number(display_d1,'%10g4',4));
display_d1 = Idx_i64_Tarrif_xy[1] / (3600/T_integr) / P_meter_const;
ui->lineEdit_Tarrif_02->setText(QString::number(display_d1,'%10g4',4));
display_d1 = Idx_i64_Tarrif_xy[2] / (3600/T_integr) / P_meter_const;
ui->lineEdit_Tarrif_03->setText(QString::number(display_d1,'%10g4',4));
display_d1 = Idx_i64_Tarrif_xy[3] / (3600/T_integr) / P_meter_const;
ui->lineEdit_Tarrif_04->setText(QString::number(display_d1,'%10g4',4));
// Load profiles
ui->textEdit_LP01->setText(LP01_text_buffer);
ui->textEdit_LP02->setText(LP02_text_buffer);
// lineEdit_Tarrif_crt
ui->lineEdit_Tarrif_crt->setText(Tarif_curent_text);
ui->lineEdit_Time_from_main_reset-
>setText(QString::number(Time_from_main_reset));
}
33 Analiza unor funcții de bază: indecși, tarife, profiluri de sarcină
NGOMeter::~NGOMeter()
{
delete ui;
}
void NGOMeter::on_pushButton_Reset_main_indexes_clicked()
{
// Reset of main indexes
Idx_i64_Ap=0; Idx_Old_i64_Ap=0;
Idx_i64_Am=0; Idx_Old_i64_Am=0;
Idx_i64_Rp=0; Idx_Old_i64_Rp=0;
Idx_i64_Rm=0; Idx_Old_i64_Rm=0;
void NGOMeter::on_pushButton_Set_PQ_clicked()
{
ui->lineEdit_P_meter->setText(ui->lineEdit_P_meter_set->text());
ui->lineEdit_Q_meter->setText(ui->lineEdit_Q_meter_set->text());
}