郑义平
柳州供电局信息及计算机应用管理部
[摘要] SCADA系统是电力系统中极为重要的系统,在电力企业MIS系统建设过程中,实现MIS系统与SCADA系统的集成,有着重要的实际意义。本文以柳州供电局管理信息系统建设为例,阐述MIS与SCADA系统集成的实现。
[主题词] MIS,SCADA,系统集成
一、 前言
信息化是社会发展不可逆转得历史潮流,信息化技术的发展和应用水平已经成为衡量一个国家、行业、部门或企业实力的重要标志。作为国民经济先行产业的电力企业,随着生产过程的日益发展,数据和信息量急剧增加,企业的管理越来越复杂,企业现代化管理要求企业内部乃至全系统之间实现数据及信息的交流和共享,实现企业管理的综合信息系统化(MIS),以提高企业及全系统的决策能力与管理水平。而电力调度自动化SCADA系统是电力系统重要的组成部分,对电网的安全、优质、经济运行极为重要。实现SCADA系统与MIS系统有机的集成,拓宽SCADA系统的应用,丰富MIS系统的组成。为电网的规划、生产等提供了一个有力的手段。
实现SCADA与MIS系统的集成,一方面,要实现SCADA系统采集到的实时数据,包括遥测、遥信信息,与MIS系统的共享,为各种分析、预测及决策提供数据基础;另一方面,SCADA系统要为MIS系统提供电网的各种接线图、曲线和棒图的实时显示提供信息来源,由于SCADA系统多采用较高分辨率进行图形显示,则在MIS系统建设中,应考虑用户界面分辨率的平稳无缝切换问题。
二、 SCADA系统实时数据转换
柳州供电局SCADA系统采用南瑞生产的RD-800系统,通过南瑞的SWJ-700系统实现与MIS系统的连接,其采集到的实时数据存放于数据文件中,这些数据就是柳州供电局MIS系统的实时数据的来源。
2.1调度实时数据结构
对于MIS系统而言,其实时数据来源于与SCADA系统相连的SWJ-700系统的数据文件,包括遥测数据及遥信数据,遥测数据存放于SWJ-700系统的RC.REL文件,而遥信数据存放于YX.REL文件。
数据文件为二进制格式,刷新周期采用10S一次。对于遥测数据文件,包含64个厂站的遥测数据,每个厂站有256个遥测量,每个遥测量都是一个4字节的浮点数,依次存放;而遥信数据文件存放64个厂站的遥信数据,每个厂站占用64个字节,512个遥信,每个遥信量使用字节中的一个位表示。
2.2数据转换分析及实现
在SCADA系统与MIS系统的集成中,数据转换模块完成将SCADA系统采集到实时数据转换到MIS系统使用的大型数据库SYBASE中,从而为进一步数据处理和分析及决策提供一个良好的基础。考虑SCADA系统是一个实时系统,为满足实时性的要求,数据采样周期很小,但是,作为供管理决策的MIS系统,从可行性和必要性而言,没有必要将所有SCADA采集到的数据都转换进SYBASE数据库,由于采用了SWJ-700系统作为接口,电网实时接线图、电压及符合曲线等,在MIS系统中可直接通过SWJ-700系统客户端软件浏览,所以只需将各开关的变位情况、整个系统及各出线开关的整点数据、最大负荷等转换即可。
考虑到SYBASE系统和实时数据的采集和存储保持同步比较困难,而且MIS系统中要求的数据频度最低为小时值,通过小时数据值进而生成日、月以及年数据。因此,将转换模块中的数据采集和保存功能适当分离,数据采集模块使用C++编程实现,以与SWJ-700系统同样的采样周期,采集SWJ-700系统的数据文件,取得整点数据、开关变位情况以及小时内最大负荷值,生成转换模块的数据文件;而数据保存模块采用PowerBuilder编程,以每小时一次的频率将数据采集模块的数据文件中的数据保存到SYBASE系统。全电网的负荷的计算,采用初始化文件保存计算公式的策略,由数据保存模块读取初始化文件中的计算公式,根据数据采集模块的数据文件中的数据计算而出,以保证负荷计算方式改变后,只需调整初始化文件中的计算公式,而不需修改程序。另外,为适应各厂站或采集点的变更投退,在转换模块中应有定义各厂站及采集点次序的功能。
三、 用户界面分辨率无缝切换
SCADA系统很重要的一个内容,就是电网及各变电站的各种实时图形,包括各实时接线图、负荷曲线,电压曲线以及各种历史曲线,在MIS系统中采用SWJ-700系统客户端程序作为SCADA系统图形浏览器,由于SCADA系统的图形开发时多采用较高分辨率实现,而在MIS系统中则可能由于种种原因,常使用低于SCADA系统图形分辨率开发系统,这样,在浏览这两种图形界面时,存在用户界面分辨率平稳切换的问题。
在MIS系统中调用SWJ-700客户浏览器的分辨率切换,包括调用前切换和调用后恢复原有分辨率切换两个过程,其难点在于调用后恢复原有分辨率。由于PowerBuilder支持使用RUN函数调用可执行文件,使用C++编程实现分辨率切换的执行文件,供MIS系统调用:
int myDisplaySettings(int set, int width, int height)
{
HDC hscrDC;
static int xScreen, yScreen;
DEVMODE DevM;
long lRet;
int iRet;
iRet=0;
if (set==0) { //保存当前的分辨率
hscrDC=CreateDC("Display",NULL, NULL,NULL);
xScreen=GetDeviceCaps(hscrDC, HORZRES);
yScreen=GetDeviceCaps(hscrDC, VERTRES);
DeleteDC(hscrDC);
} else if (set==9) { //恢复到保存的分辨率模式
EnumDisplaySettings(0, 0, &DevM);
DevM.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
DevM.dmPelsWidth = xScreen;
DevM.dmPelsHeight = yScreen;
lRet= ChangeDisplaySettings(&DevM, 0);
if (lRet != DISP_CHANGE_SUCCESSFUL) {
MessageBox(NULL,"显示器分辨率設定有誤!",NULL,0);
iRet=-1;
}
} else { //设置指定的分辨率
EnumDisplaySettings(0, 0, &DevM);
DevM.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT;
DevM.dmPelsWidth = width;
DevM.dmPelsHeight = height;
lRet= ChangeDisplaySettings(&DevM, 0);
if (lRet != DISP_CHANGE_SUCCESSFUL) {
iRet=-1;
}
}
return iRet;
}
int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow )
{
Main::hInstance = hInstance;
Main::hPrevInstance = hPrevInstance;
Main::nCmdShow = nCmdShow;
int ret, xScreen, yScreen, flag=0;
char str_comm[100];
if ( ! Main::hPrevInstance ) {
MainWindow::Register();
}
myDisplaySettings(0, 0,0);
if (myDisplaySettings(1, 1024,768)!=0) {
myDisplaySettings(1, 800,600);
}
ret=spawnl(P_WAIT, " \\gshow.exe"," \\gshow.exe" ,NULL);
myDisplaySettings(9, 0,0);
return 0;
}
在函数myDisplaySettings(int set,int width,int height)中,参数set为标志位,当set等于0时,程序保存当前显示器分辨率;set等于1时,设置分辨率为width及height所指定的分辨率;而当set为9时,恢复到原来显示器分辨率。在Winmain()主函数中,调用SWJ-700系统图形浏览器gshow.exe时,spawnl()的第一参数置为P_WAIT,即当且仅当浏览器关闭后,恢复系统原有分辨率。
四、 结束语
在柳州供电局管理信息系统的建设中,成功的实现了SCADA系统与MIS系统的集成,尽管由于采用了SWJ-700系统作为实时图形浏览器,在浏览实时图形时难以直接在图上查阅某一设备的具体参数,而必须在MIS系统的设备管理子系统中查阅,但SCADA系统与MIS系统的集成,为MIS系统提供了实时图形的浏览,实时数据查询与处理,为历史数据的保存及生产规划、决策提供了数据基础,进一步提高了企业的生产管理水平。