先扫个盲,在电力体系中,频率质量对社会和电力企业的影响十分严峻。众所周知,电网频率是电能质量三大目标之一,电网的频率反映了发电有功功率和负荷之间的平衡联系,是电力体系运转的重要操控参数,与广阔用户的电力设备以及发供电设备自身的安全和功率有着亲近的联系。
(1) 频率动摇对发电厂设备的影响:频率的动摇能够形成水轮机导叶损坏严峻,调速器运用寿命的下降等问题。
(2) 频率动摇对用户设备的影响:
虽然许多用户设备能在较宽的频率范围内正常作业,但随着科学技能的开展,一些新的电子设备及精细加工设备对电网频率提出了更高的要求,频率的动摇,会使产品质量下降或设备损坏。
(3) 频率质量改进对经济效益的影响:
频率误差反映了发电与负荷间的不平衡,特别是频率偏高,反映发电量超出了用电的需求量,形成了用户电费的额定开销,以及动力的糟蹋。频率质量改进防止了这种动力的糟蹋。
针对这些问题,出路只要一个,即选用主动发电操控(AGC)的技能手段,对电力体系中的大部分发电机组,依据其自身的调理性能及在电网中的位置,分类进行操控,主动地保持电力体系中发供电功率的平衡,然后确保电力体系频率的质量。
我担任其间的一个小模块的代码规划,先讲一下硬件体系:
负荷优化操控体系(运用作业站)包含了AGC和AVC的联合操控功用。该体系经过TCP/IP网络接入电厂的ABB ADVANT操控体系。
运用作业站由一台PC机和OLC(AGC/AVC)软件组成。运用作业站中的软件装置AGC/AVC软件。运用作业站运用Windows操作体系并经过TCP/IP网络和11LPU及调度中心通讯。
运用作业站技能数据如下:
19英寸机架装置于11LPU柜内
继电保护:ADI 公司出产的ADF7012: Multichannel ISM Band FSK/GFSK/OOK/GOOK/ASK Transmitter
1 x Pentium 4, 1.20 GHz
512 MB PC133 SDRAM
1 x 20 GB EIDE-Disk, ATA-100
1 x 10/100 Mbps 以太网适配器
15寸显示器, 键盘, 鼠标
Windows 2000操作体系
在ADVANT操控器11LPU(AC450)将添加一块TCP/IP接口板用于与运用作业站通讯。该操控器被称作运用操控器,用于电厂的公共运用比方模仿屏操控和AGC/AVC与Advant体系的通讯。
AGC体系完成的首要功用包含有:站内总负荷设点操控,主动频率操控,站内调度曲线操控,省调总负荷设点操控,省调调度曲线操控。为了完成上述功用,本文作者对AGC进行模块化编程,首要触及以下几个方面:
(1)核算机组最小及最大功率以防止跨过轰动区,中心程序如下:
void SetUnitVibMinMax(int UnitPos)
{
int PowerZone,UnitType;
int i1;
float min_var,max_var,LL,HL,DX,UnitPower;
UnitType = UNIT[UnitPos].Type;
UnitPower = UNIT[UnitPos].XAP_Setp;
min_var = 0;
max_var = AGC_Unit_Data[UnitType].MaxPower;
LL = min_var;
HL = max_var;
DX = 0;
i1 = 0;
PowerZone = 0;
if ((UnitType》0) (UnitType《=MaxUnitTypes)) {
while ((i1《MaxVibZones) (PowerZone==0)) {
i1++;
if (AGC_Unit_Vibr[UnitType].Vibration[i1].Used==true) {
max_var = AGC_Unit_Vibr[UnitType].Vibration[i1].AP_Begin;
DX = (AGC_Unit_Vibr[UnitType].Vibration[i1].AP_End –
AGC_Unit_Vibr[UnitType].Vibration[i1].AP_Begin) / 2;
HL = AGC_Unit_Vibr[UnitType].Vibration[i1].AP_Begin + DX;
} else {
max_var = AGC_Unit_Data[UnitType].MaxPower;
HL = max_var;
}
if ((UnitPower》=LL) (UnitPower《=HL)) {
PowerZone = i1;
} else {
if (AGC_Unit_Vibr[UnitType].Vibration[i1].Used==true) {
min_var = AGC_Unit_Vibr[UnitType].Vibration[i1].AP_End;
LL = min_var – DX;
}
}
}
}
if (PowerZone==0) {
min_var = UNIT[UnitPos].XAP_MIN;
max_var = UNIT[UnitPos].XAP_MAX;
}
if (min_var《UNIT[UnitPos].XAP_MIN) min_var = UNIT[UnitPos].XAP_MIN;
if (max_var》UNIT[UnitPos].XAP_MAX) max_var = UNIT[UnitPos].XAP_MAX;
UNIT[UnitPos].XVibMinPow = min_var;
UNIT[UnitPos].XVibMaxPow = max_var;
}