一种SCADA系统数据采集模块的设计与实现

时间:2022-10-04 08:54:29

一种SCADA系统数据采集模块的设计与实现

摘要:建立一个电网信息平台是加速电网信息化领域应用开发的重要途径。电网实时SCADA信息系统是电网信息平台集成框架的关键组成部分,为电力工作提供电网实时数据采集、处理及功能,并提高电网系统的信息化程度和水平。

本文在分析了SCADA信息系统功能需求的基础上,设计并实现了某电网实时SCADA数据采集模块。实验数据和现场应用结果表明,该系统数据采集模块能够满足用户需求,保障了电网实时SCADA信息系统的数据采集。

关键词:SCADARTU接口层 数据字典

中图分类号: C37文献标识码: A

0 前言

随着电网规模的不断扩大、电网自动化系统的开发和应用、电网调度工作量的增加。电力相关专业的管理人员往往通过人工记录和大量的报表数据来进行分析的,不方便,准确性也不高。

现代化的电网管理需要有现代化的管理手段,通过新开发的SCADA系统可以将电网实时数据进行采集,提供给数据分析及应用模块进行处理和应用。本文在介绍电网信息系统的基础上,通过用例图等进行了数据采集模块的功能和性能需求分析,将模块功能划分为初始化、传输和数据处理三个组成部分;然后进行了模块和相关数据库的设计与实现,包括系统的初始化、数据传输格式的定义以及接收数据的处理;最后对各个功能模块进行了测试。

1 结构原理及特点

SCADA系统数据采集模块硬件结构如图3.2所示,系统由监控中心、若干个分散的远程测控终端RTU (Remote Terminal Unit)和通信介质三部分组成。系统RTU(传感器)从现场采集信号,通过传输通道,传输至上位机。由VC++编译的数据采集模块程序对采集的信号进行读取和处理,并将数据记录到数据库中。

图1SCADA系统硬件结构图

SCADA系统利用RTU来采集相关设备工作数据,然后通过RTU 与通信模块之间的通信,将现场设备的电压、电流、功率因数、频率、负载及其变化等工况参数进行采集、传输后,由后台的上位处理机进行数据的汇总、分析和存储,并作为故障判断和处理的依据。系统采用上位机、下位机组合控制模式。上位机采用PC,下位机推荐采用RTU。

2模块的设计与实现

数据处理模块系统是SCADA系统的基本组成部分,它负责对数据采集系统处理完成的数据进行实时处理,并为SCADA系统的最终用户提供远程监视控制各种现场设备的能力,程序流程如图所示。

图2 数据处理模块流程图

数据处理模块在系统初始化完成后开始运行。软件主体部分是一个循环体,系统先加载控制模块信号,读入数据采集卡数据之后进行数据处理,当数据处理完成后,软件将处理结果录入数据库,一次循环结束;若是没有达到循环结束条件,程序返回循环起始处开始下一次循环;若是循环结束,系统释放动态链接库。

系统的交互模块可以根据实际需求访问数据库中的数据表,同时,系统的使用及维护模块负责对数据库中的数据进行管理,最后生成系统的数据报表。根据用户需要,将各类数据以报表或图形形式显示给用户。

3数据表设计与ODBC数据连接

针对SCADA系统数据采集模块,共设计了多个数据表,包括厂站参数表、

表1厂站参数表

测控设备参数表、通道参数表、通道监控数据表、遥测参数表、遥信参数表、遥测数据表、日遥测数据表,其中厂站参数表如表1所示。

ODBC 为用户提供简单、标准、透明的数据库链接的公共编程接口,ODBC数据库编程的最大优点是能以统一的方式处理所有的数据库。一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。

用Visual C++应用程序访问数据库,首先要创建与数据库的连接。由于Visual C++应用程序与创建数据库表的数据库管理系统是两个不同的操作平台,那么要实现应用程序对数据库的访问,就须对数据库表选择适当的数据驱动程序,将Visual C++环境中的对数据库操作转换为数据库系统可理解的操作。为了实现转换过程,WINDOWS系统向用户提供了一个极为简单的接口—ODBC数据源。通过对ODBC数据源的设置,给已创建的数据库选择适当的驱动程序,并为数据库起适当名称(DSN数据源名)。在应用程序中就可以利用ODBC数据源中的DSN实现对已创建的数据库进行访问。

实时数据库是数据采集模块数据交互和处理的核心。根据对实时数据库的接口及功能设计不同,可将程序编制分为两层,接口层和功能层。接口层负责对本层得成员变量及成员函数进行封装,并提供对外的接口。数据的交互是在这一层完成的。功能层主要负责对数据项进行处理。

接口层用到的主要函数包括COM库初始化函数、创建远程机器对象函数、添加组\数据项函数、删除组\数据项函数等。具体函数为:

ColnitialEx()COM库初始化函数;

CoCreateInstanceEx() 创建远程机器上的对象,获得其他服务器和对象接口;

AddGroup() 服务器创建一个组对象,返回一个客户要求的接口指针;

AddItem()添加具有特殊属性的指定数量的数据项;

RemoveItem() 删除接口指针,释放内存空间。

实时数据库在内存中以结构数组的形式存储数据,把成员对象和成员函数用类定义,其部分代码如下:

Class DataItem: public CASyn

{public:DataItem();

Virtual~DataItem();

Private: int NodeNumber;//设备编号

Double NodeVolt;//电压测点

Double NodeCurrent; //电流测点

Double NodeState; //状态测点

CString IpAddress; //远程服务器IP

CString Time;//记录时间

public: OnInitial(); //初始化函数

OnSaveDataToTxt(); //保存数据项到文本

OnSaveDataToExcel();//保存数据项到Excel文件

OnFlushBuf();//刷新数据库数据

OnCancelConnection();//断开与服务器连接

};

4 创建数据字典

电网SCADA系统中,数据的存储是以天为单位,每天生成一个数据文件,少数计算量以年为单位,每年生成一个文件,每天零点进行统计后对该文件进行更新,增加记录。由于数据量大,也为了与习惯一致,在设计数据库时要建立一个包含站名、站号、点名、点号等的数据字典文件。将每年遥测数据的统计值建立一个统计数据表文件。

(1)创建一个包含站名、站号、点名、点号的数据字典文件

CREATE TABLEDBDICTIONARY ()

SERIAL int NOT NULL,

STNNO int NOT NULL,

PNTNO int NOT NULL,

PNTTYPE char (1) NOT NULL,

STNNAME varchar2 (40) NOT NULL,

PNTNAME varchar2 (40) NOT NULL,

DTCREATE date NULL,

PRIMARY KEY (“SERIAL”),

UNIQUE(“SREIAL”)

PARTITION BY RANGE (STNNO)

(…)

(2)创建包括日最大(小)值、最大(小)值时刻、平均值等的年度统计值表

CREATE TABLE DBSTATISTICS2011()

SERIAL int NOT NULL,

DTDATE date NOT NULL,

NUM_VALID int NOT NULL,

NUM_NORMAL int NOT NULL,

MAXIMUM real NOT NULL,

DTMAXIMUM date NOT NULL,

PARTITION BY RANGE (DTDATE)

(…)

(3)创建包括所有遥测点、计算量点的全天288个点的年度实时值表

CREATE TABLE DBHISTORY2011()

SERIAL int NOT NULL,

DTDATE date NOT NULL,

D1 real, D2 real,…

PARTION BY RANGE (DTDATE)

(…)

5 结束语

本文根据系统开发需求分析,遵循系统设计的原则,对系统的功能结构、界面做了系统的设计,进而根据系统的特点和使用环境对系统的安全以及制作过程中考虑的推广要素做了详细的设计。

参考文献:

1. 陈力 《基于VC++技术的某某电网SCADA系统数据采集模块的设计与实现》西安电子科技大学硕士论文 2011

2. 提兆旭 《电力系统计算机调度自动化》上海:上海交通大学出版社,1995

3. 毕胜春《电力系统远动及调度自动化》 北京:中国电力出版社,2000

上一篇:语文教学不能弱化教师的主导作用 下一篇:初中英语分层教学存在的问题及对策