一种电能质量数据交换文件生成方案

摘要

南京南瑞继保电气有限公司的研究人员程立、李少卿等,在2018年第9期《电气技术》杂志上撰文指出,随着我国经济的发展,用户对电网的电能质量的要求趋高,正确监测记录电能质量数据显得尤为重要。本文以IEC 61000-4-30标准为依据,提出了一种PQDIF文件生成方案。该方案以10周波数据为统计基础,严格遵守IEC 61000-4-30 A级标准,正确完整地实现了PQDIF的文件格式。

在该方案的基础上,本文研发出支撑标准体系的电能质量监测终端。该终端在CPU和DSP间以HTM总线为传输通道,将统计数据传送到操作系统侧。操作系统采用MySQL数据库为存储引擎,为上层IEC 61850、LCD等应用提供服务接口,实现了PQDIF文件的存储、查询及删除等功能。搭建试验平台。

测试结果表明,该方案准确地实现了IEC 61000-4-30标准要求。研发的电能质量监测终端已经被成功应用在安徽、四川及重庆等地,运行稳定可靠,为用户电能质量治理提供了坚实的数据基础。

随着我国经济的持续发展,企业社会对电力的需求越来越旺盛,电网规模越来越大,电网结构趋于复杂,负荷用户类型也越来越多。很多大型炼钢厂、锻造厂、电气化铁路出力特性不明显、波动性大[1],容易产生谐波、间谐波,造成电压不稳定,电网电能质量下降。另一方面,风电、光伏等新能源[2]不断投入,这些新能源具有易受气候条件影响、出力不稳定、波动范围广、间歇性较强的特点,也会为电网带来谐波含量增加、电压闪变等问题,从而影响电网的电能质量。

从电网角度来讲,电网公司对提高供电水平格外重视,在电网的某些关键点,如风电、光伏等新能源站、直流换流站、重要负荷点会安装电能质量监测终端,实时监视电网的电能质量水平,并加以改善。

从用户角度来讲,随着精密加工企业越来越多,这些企业生产精密机床、高科技芯片等,电压暂升暂降都会导致次品率跃升而蒙受损失,因此这些企业额外重视电能质量。在这些企业中,购买安装电能质量监测终端往往是自发行为,它们更多地是监视电网的电压质量,作为电网对生产线造成影响而索赔的依据。

电能质量监测所形成的数据对于电网和用户来说都很重要。电能质量数据交换文件PQDIF[3] 是电能质量存储管理的标准格式文件,不仅可以定时存储稳态数据(如10min数据),而且可以存储暂态事件(如电压暂升/暂降等)数据。

根据IEC 61000-4-30[4]标准,PQDIF的稳态数据基于10周波数据,而10周波数据的计算都是在实时性很强的DSP单元完成,而PQDIF的存储往往依赖文件系统,在非实时的操作系统中生成。10周波数据的实时性太强,传统的方法都是在操作系统中用150周波数据替代而进行统计,这明显违背了IEC 61000-4-30规定的测量方法原则。

本文在深入研究电能质量终端架构设计的基础上,提出了一种电能质量数据交换文件生成方案。该方案完全遵守IEC 61000-4-30测量方法原则,采用10周波数据作为数据源,快速正确地生成电能质量数据交换文件。通过设计相应的测试方法,验证了本文所提出方法的有效性和正确性。

1  PQDIF文件简介

为了统一电能质量数据文件的格式,在20世纪90年代IEEE标准委员会起草了IEEE 1159.3[5]标准文件,采用了一种电能质量数据交换格式(power quality data interchange format, PQDIF)。此文件格式最早由美国电力科学研究院提出。此草案统一了电能质量文件格式,给出了相关术语、定义和指导方针,解决了不同厂家数据的可交换性问题。

PQDIF文件分为两个视图,即物理层和逻辑层。物理层只负责文件的存储结构与定义,不关心存储的内容。文件存储结构类似于链表结构,Record之间相互链接,如图1所示。图1(a)是链表结构按序存储,图1(b)是链表结构跳跃式存储,两者都符合物理层的存储要求。

在物理层中,每个Record包含header和body结构,其中header概要描述body存储信息,body包含文件详细内容(body可采用zlib压缩格式),如图2所示。

图1  PQDIF物理层

图2  header和body结构

逻辑层只关心文件的内容,分为Container、DataSource、MonitorSetting、Observation几个类型,典型的逻辑层表示如图3所示,Container包含若干DataSource,DataSource包含若干MonitorSetting和Observation。

图3  PQDIF逻辑层

从物理层来看,各个Record是平行结构,没有层次关系,但从逻辑层来看,各个Record之间存在层次关系。DataSource与Observation的对应关系如图4所示。

图4  DataSource与Observation

2  系统设计

2.1  系统结构

本文实现方案采用嵌入式装置[6],硬件架构为CPU+DSP。CPU采用Linux[7]操作系统,除了板卡管理外,还负责PQDIF文件管理工作。DSP采用中断方式,除了基本电压/电流、谐波/间谐波、波动和闪变[8]等计算模块外,还负责PQDIF的统计数据生成。CPU与DSP之间通过HTM总线交互数据,总线速率可达到320Mbps。

DSP中包含统计模块、传输模块;CPU中包含接收模块、文件生成模块、文件管理模块。统计模块生成数据后,通过HTM分时传输到CPU,CPU接收模块从HTM驱动读出后,push到共享内存。文件生成模块从共享内存pop出数据,生成PQDIF文件,最后文件管理模块对文件进行存储及管理并提供接口给IEC 61850[9-10]、LCD及其他APP。

图5  系统结构

2.2  统计模块

按照IEC 61000-4-30 A级标准,每10个周波计算一个值,15个10周波值做均方根,每到一个统计周期(如10min),将时间窗重新对齐,中间不允许丢点,如图6所示。

图6  IEC 61000-4-30A级数据窗

统计数据分为4种,即最大值、最小值、平均值、95%值。最大值、最小值、平均值含义比较明确。95%值含义是指将计算的点按从大到小的顺序排列,去掉5%最大值,剩下中最大的即为95%值。举个例子:100到1是100个数字,减去5%的最大值,即剩余95~1共95个数字,那么95%值就是95(剩余最大值)。IEC标准取95%意指时间,即观测点的评估指标应在95%的时间内符合标准要求。

这4种统计值都基于10周波数据,考虑到实时性,因此要放在DSP的实时中断计算。在本算法实现中,统计模块Statis拉取MMXU、MSQI、MHAI模块的指针,如图7所示。

计算中断为50ms,因为每10周波计算一个数据,所以50ms中断不是每次都能刷到新数据。

图7  Statis统计模块

MMXU/MHAI/MSQI分别提供一个cycle10的计数器,在10周波计算完成后该计数器加一。在Statis模块检测到cycle10计数器变化后,对新数据进行统计。最大值、最小值可以直接比较得出;平均值首先要计算累加和,等到统计周期结束后再进行平均计算;95%值需要将数据缓存下来,在统计周期结束后采用排序方法进行计算。

计算95%值,按照10周波一个点,每个点4字节float存储,10min统计出结果,那么就需要 字节,很耗费空间。这里采用一个反向方法,只选取最大的5%大值,这样存储空间就降到 字节,空间节省95%。C代码片段如下所示。shell_sort按照升序排列,最终的cpf95_vec[0]就是95%值。

if (cpf95_no < cpf95_num)

{

cpf95_vec[cpf95_no++] = new_val;

}

else

{

if (cpf95_vec[0] > new_val) return;

cpf95_vec[0] = new_val;

}

if (cpf95_no == cpf95_num)

{

shell_sort(cpf95_vec, cpf95_no);

}

cpf95_val = cpf95_vec[0];

2.3  传输模块

统计模块生成数据后,要设法传输到CPU板,因此必须设计一个数据传输通道。本方案CPU和DSP[11]间通过HTM总线进行数据交互。由于还有其他应用数据也通过HTM传输,留给统计数据传输的带宽并不大,因此要设计一种交换协议分时进行数据传输。本文采用的数据协议如下:

struct STREAM_DATA

{

Uint8 type;      //报文类型

Uint8 bayNo;    //间隔编号

Uint16 dataNum; //数据个数

typedef struct

{

float result;   //统计数值

Uint32 second; //统计秒值

Uint16 msecond;//统计毫秒

Uint16 quality; //统计品质

}value[1]

}

按照间隔1, 2, …, N的顺序,每个间隔内按照MMXU、MHAI、MSQI的时序传输,合理分配带宽,确保在一个统计周期(如10min)内将数据传输完毕,每个50ms中断传输数据个数M计算公式如下:

时序如图8所示。

图8  传输时序图

2.4  接收模块

统计数据通过HTM总线传输至CPU板卡之后,由HTM驱动模块接收并且缓存。由于HTM驱动缓存较小,所以要及时读取出来,否则缓存塞满后就会丢失数据。在Linux操作系统侧,通过共享内存生成一个队列长度256,每个队列1KB的环形缓冲区,在1.25ms中断读取HTM数据并拷贝至环形缓冲区,由另外一个独立的文件生成线程读取数据,如图9所示。

图9  接收及生成模块

2.5  文件生成模块

在图9中,采用独立线程每3s批量读取数据,根据预先设置的PQDIF生成模板,将数据组织生成文件。本文采用的PQDIF模板如下。

ChannelDef

·Voltage of A/B/C   //三相电压幅值

·Current of A/B/C   //三相电流幅值

·Phase Angle of Voltage A/B/C      //三相电压相角

·Phase Angle of Current A/B/C      //三相电流相角

·Unbalance of Voltage/Current      //电压电流不平衡度

·Positive/Negative/ZeroSequence of Voltage//电压正负零序

·Positive/Negative/ZeroSequence of Current//电流正负零序

·THD of Voltage VA/VB/VC   //三相电压总畸变率

·HR of Voltage VA/VB/VC    //三相电压谐波含  有率

·HRof Current IA/IB/IC    //三相电流谐波含有率

·Real Power of the total/A/B/C      //总及三相有功

·Active Power of the total/A/B/C    //总及三相无功

·Apparent Power of the total/A/B/C  //总及三相视在功率

·True Power Factor of the total/A/B/C //总及三相功率因素

·Phase Angle of Power Factor A/B/C    //三相相角

·Real Power of Fundamental Frequency of the total/A/B/C     //基波总及三相有功

·Acitve Power of Fundamental Frequency of the total/A/B/C   //基波总及三相无功

·Apparent Power of Fundamental Frequency of the total/A/B/C  //基波总及三相视在功率

·Power of Harmonic Frequency of the total/ A/B/C  //总及三相谐波功率

由于PQDIF的物理层相当于链表结构,链表结构在文件系统中操作难度较大。因此,IEEE 1159.3推荐了一种很巧妙的方法,利用内存方式生成相应的链表结构,记录下每个块之间的内存偏移(相当于文件中链表的下一个块),这种内存方式比文件系统易于操作,而且要灵活的多。

由于整个PQDIF文件存储内容较多,整个块头可能比较大,因此需要分段采用内存链表结构进行存储,每存储一个段就释放内存,下一个段再重新利用这块内存,这样可以减小内存块,减轻内存资源压力。文件体采用压缩格式存储时也可以预先在内存中用zlib库压缩好后,再写入文件中,C代码片断如下。

//创建Container

createMemoryPool();

createContainer();

freeMemoryPool();

//创建DataSource

createMemoryPool();

createDataSourceRecord();

freeMemoryPool();

//创建MonitorSetting

createMemoryPool();

createMonitorSettingsRecord();

freeMemoryPool();

//创建Observation

for (i = 0; i < num; i++)

{

createMemoryPool();

createObservationRecord();

freeMemoryPool();

}

2.6  文件管理模块

PQDIF文件生成后采用MySQL[12]开源数据库进行管理。MySQL是由瑞典MySQL AB公司开发的一款关系型数据库,后来被Oracle公司收购。在嵌入式操作系统Linux中,MySQL应用十分广泛。文件管理模块设计如图10所示,由PQDIF_SERVER主进程和insert_thread、query_thread、del_thread三个线程组成。PQDIF_SERVER主进程初始化MySQL数据库,完成数据库表结构的构建及关键字的建立。

insert_thread功能为:当有新的PQDIF文件生成时,存储进特定目录,按照间隔+时间日期关键字存入MySQL表结构;query_thread功能为:为IEC 61850、LCD和其他APP提供同步和异步两种接口,可以按照间隔+时间关键字的方式检索信息,提供返回文件路径接口。del_thread功能:定期检测表结构及磁盘大小,按照时间顺序删除掉最老文件,同时也删除相应的表结构信息。

图10  文件管理模块

3  试验验证

本文对提出的电能质量数据交换文件方案做了测试进行验证。测试平台硬件:CPU为PPC,主频800MHz;DSP为TI芯片,主频1GHz;内存1G;SD卡为32G;操作系统为Linux。选择电压监测点如下:10%Un、150%Un,每个监测点持续20个周波,总共持续15min,查看PQDIF文件数据结果,见表1。测试结果小于标准要求精度0.2%Un,满足工程应用需求。

表1  测试结果摘录

4  现场运行

采用本文方案研发的电能质量监测终端已在安徽六合光伏、四川宜宾农网及重庆铝厂等项目中成功运行。现场终端采用51.2K/s的模拟采样,通过交换机接入路由设备,通过综合数据网上送到主站系统,规约采用IEC 61850。PQDIF文件既可通过IEC 61850的文件服务上送主站,又可通过终端本身自带的USB进行数据拷贝。组网方式如图11所示。

工程项目自投运以来,采用该方案实现的终端运行稳定可靠,采集和生成了大量电能质量PQDIF数据文件,为当地电力部门分析电网状态、实施有效合理的治理措施提供了大量详实的运行数据。

图11  网络结构图

结论

本文提出了电能质量数据交换文件的生成方案,并且成功地应用在电能质量终端的研发上。该方案严格遵守IEC 61000-4-30的测量方法,采用10周波数据,在实时系统与非实时系统间进行数据传送生成PQDIF文件。

试验结果表明,该方案生成结果可靠正确。本文提出方案研发的电能质量监测终端已经被成功应用在安徽、四川及重庆等地,为用户提供了大量详实的电能质量数据,帮助用户分析电网状态,为科学决策电能质量治理问题提供了坚实的数据依据。

(0)

相关推荐