基于MFC和WinSock的变电站灯光远程控制软件

陈滔滔 陈烁彬 杜晓荣 吴伟密 蒋华



摘 要: 以变电站户外高压场地的灯光为研究对象,针对传统的站内照明系统存在控制方式单一、资源利用率低等不足,利用MFC和WinSock编程开发出一款灯光远程控制软件,使运维人员能根据实际需要自主选择和控制灯具的开断,从而为变电站的照明设计管理提供了一种参考方案。该软件由主控窗口、连接窗口和进度窗口三个部分组成,具有单灯和全局两种操控方式。实验结果表明,其可通过远方后台操控的形式灵活地改变灯光的状态,进而达到节能的目的,具有较强的实用性与可靠性。
关键词: 变电站; 灯光控制; MFC; WinSock; 远程控制软件
中图分类号: TN911?34; TP319 文献标识码: A 文章编号: 1004?373X(2017)06?0179?04
Abstract: Taking the lamplight at outdoor high?voltage site in the substation as the research object, in order to overcome the shortcomings of single control mode and low resource utilization existing in the traditional lamplight system in the substation, a lamp light remote control software was developed based on MFC and WinSock to make the operation and maintenance staffs choose the lamp switching control autonomously according to their actual requirement, so as to provide a reference scheme for the illumination design management of the substation. This software is composed of the main control window, connection window and progress window, and has the control modes of single lamp and all lamps. The experimental result shows that the software can flexibly change the lamplight state in the form of remote background control to save the energy, and has high practicability and reliability.
Keywords: substation; lamplight control; MFC; WinSock; remote control software
0 引 言
随着电网建设的日趋完善和稳步推进,智能、高效、绿色已成为当代电网的发展要求[1]。作为传输和转换电能的主要场所,变电站在整个电网架构中发挥着不可或缺的作用[2]。然而,如今许多变电站室外高压区域的照明仍旧采用就地控制的方式,运维人员只能通过往返场地来控制灯光的开断[3]。此外,传统的控制方式通常采用单个空气开关控制多组灯光的方式,不但无法根据工作量和天气条件来开启或关闭灯光,而且由于电路电流过大容易造成空开跳闸的现象。
基于以上分析,本文介绍了一种适用于变电站的灯光远控软件。作为面向用户的上位机软件,它在现实操作中能够与负责建立无线网络和数据传输的AP接点以及直接控制场地高压灯的灯控接点配合使用,从而实现站内灯光的远方控制。而其远程照明控制功能主要采用无线通信的方式来实现,在无需重新布线和铺设电缆的同时避免了电能的过度浪费,而且还进一步提高了工作效率和能源利用率。
1 軟件的总体设计
1.1 软件的开发环境
本软件是以C++为编程语言[4],微软基础类库(MFC)为图形用户界面库[5]的基础上设计和实现的,其开发平台的详细配置如下:操作系统为Windows 7 ultimate;主频2.40 GHz 的Intel[?]Core(TM) i3?4000M处理器;4.00 GB内存;无线网卡为2×2 11 b/g/n Wireless LAN M.2 Adapter;编程环境为Microsoft Visual Studio 2010。
1.2 系统的整体架构
本软件定位于变电运行人员使用的照明管理终端软件,可以与AP接点和灯控接点共同构成无线远程灯控系统,系统的总体框架如图1所示。
由图1可知,本上位机软件包含了主控窗口、连接窗口、进度窗口三个模块。对于AP接点和灯控接点而言,虽然其组成部分都包含了WiFi模块和单片机芯片,但不同之处在于前者主要负责无线局域网的构建及指令数据的转发,而后者的作用是作为下位机对指令数据进行接收和处理。
在软件实际运行中,各个模块在逻辑功能上是相互联系的。软件启动后首先显示程序的主控窗口,而在灯控操作之前需要与AP接点建立连接,具体可在连接窗口中输入正确的IP地址和端口号来配置。当成功连接至服务器后,用户可执行下一步,选择并点击主窗口的灯控按钮,进而发送含上位机标识的灯控指令。
值得注意的是,此时进度窗口会自动弹出并显示当前的进度。场地上的灯控接点根据接收到的指令信息完成灯光的开/关动作,然后发送含下位机标识的指令。当该指令返回到上位机软件后,若经判断与之前发送的指令相一致,主控窗口会同步更新灯光的状态,以和现场情况相对应,由此便可实现变电站场地灯光的远控操作。
1.3 软件设计的UML图
软件在具体开发过程中的UML类图[6]如图2所示。从图2可以看到,灯控软件的三个组成模块均采用了基于对话框的设计方式,而且是以类的形式呈现的。其中,主控窗口类CLightControlDlg、连接窗口类CConnectionDlg、进度窗口类CProgressDlg都继承于MFC类库中的对话框扩展类CDialogEx,故可在此基础上适当地增加数据成员和成员函数,以实现各自的功能。
2 软件各子模块的设计
本软件由主控窗口、连接窗口、进度窗口三个模块组成的,下面将具体叙述各个模块的开发过程。
2.1 主控窗口的设计
考虑到用户主要通过主窗口来进行灯光的远程控制,因此良好的交互性和操作的简便性是该窗口设计的必备要素,并且软件的研发目标定位于变电站的运行管理辅助工具,故还须体现与专业相符的特征。对此,可以将目标变电站的一次接线图绘制到主界面上,使得室外场地灯光所在的各设备间隔名称和位置能在后台直观的显示。另一方面,由于MFC库中并没有内置灯光图形控件,因而需要采用绘画圆形图案的方法将其绘制在接线图上,以便用户清晰地观察到灯光的相应位置。软件主窗口的界面如图3所示。
为了使用户通过点击按钮来发送灯控指令,进而实现灯光的远程开启和关闭,根据MFC的消息映射机制[7],需要为按钮添加相应的响应事件。另外,系统的工作模式可分为单灯和全局两种方式。在单灯模式下,每一盏灯光具有惟一的ID号,其作用是指定当前受控的灯光,以便于场地上的灯控接点正确识别,且在主窗口界面中有与灯光图形一一对应的“开/关”按钮。而在全局模式下,所有的灯光都具有相同的ID号,通过界面上的“全部开启/关闭”按钮可对其进行整体操作。图4给出了按钮响应事件的执行过程。
在软件终端已连接至服务器的前提下,当用户界面上的“开/关灯”按钮被点击后,相当于发起一次灯控操作,此时所有的灯控按钮将无法被点击,直到该次的灯控操作完成为止,这样可以使整个系统变得更加稳定与可靠。
2.2 连接窗口的设计
灯控指令从软件所在的终端发送到场地的灯控接点之前,需要经由AP接点进行中转,而连接窗口则是终端与AP接点间相互通信的桥梁。通过连接窗口中相关参数的设置,便可建立两者间的数据连接,而实现这一过程可采用基于TCP协议的客户端/服务器(C/S)模式[8]。其中,AP接点作为TCP服务器,具有指定的IP地址和端口号,软件终端设置为TCP客户端。与此同时,为了提高研发效率,使用Windows套接字(WinSock)的编程方式[9]。它不仅对TCP协议进行了简单的封装,而且还提供了丰富的函数接口。连接窗口的用户界面如图5所示。
另外,在实际开发中还使用了多线程技术(Multithreading)[10],即连接模块的通信功能由新创建的线程CWinThread类来负责执行,由此进一步提升了软件的并发处理能力。连接窗口的主要实现过程如图6所示。
需要强调的是,该模块的通信功能既包括了连接至AP服务器,又包括接收其传送过来的指令数据。当接收到的指令含有连接中断标识时,意味着服务器与客户端间的网络断线,需要重新连接,否则说明通信状况良好。前面曾经提到,主控窗口的按钮响应事件负责指令的发送,这里将接收的指令与之前发送的指令进行比较,若两者一致便更新主界面灯光图形的状态,否则再次等待来自服务器的指令数据。
2.3 进度窗口的设计
由于一次灯控操作从发起到结束需要耗费一定的时间,这时将当前任务的完成情况展现给用户是非常有必要的。对此,可在进度窗口中通过MFC库中的CProgressCtrl类来建立进度条,如图7所示。
为了使进度条的位置能根据工作的执行进度来定时更新,同样要利用到MFC的消息映射机制。具体可设置一个具有规定时长的定时器,每经过相同的时间间隔,该定时器将发出ON_WM_TIMER()消息,此时与之对应的名为OnTimer()的函数将被响应[11],其内部的伪代码如下:
CProgressCtrl* m_ProgressCtrl = 指向进度窗口中进度条的指针;
CLightControlDlg* m_LightControlDlg = 指向主控窗口的指针;
//使进度条位置参数ProgressValue的数值加1,并判断其是否超过1 000,如果是则置0
if((ProgressValue++)>1 000)
ProgressValue = 0;
//根據当前的位置参数值更新进度条的位置
m_ProgressCtrl?>SetPos(ProgressValue);
//如果当前的灯控操作已完成,则隐藏进度显示窗口并使主界面的灯控按钮状态恢复正常
if(m_LightControlDlg?>Loaded == TRUE)
{
ShowWindow(SW_HIDE);
EnableButton();
}
当用户点击主窗口界面的灯控按钮时,进度显示窗口将自动弹出,而且进度条位置参数的初始值为零。每经历一定的时间间隔,系统都会执行OnTimer()函数,使进度条位置参数的数值不断叠加,当该数值的范围在规定值以内,将更新窗口中进度条的位置,否则重新置零。另外,系统将根据连接模块的相应参数来判断当前的灯控操作是否已完成,如果是则将进度窗口隐藏,同时恢复主控窗口中灯控按钮的正常状态,即使其能被用户再次点击。
3 实验结果
在现实试验中,将110 kV莲塘站设定为目标变电站来测试远程照明控制软件的适用性。该变电站的相关参数为:室外高压场地面积约2 090 m2,一次设备的独立间隔为10个,有14盏功率为400 W的高压射灯(钠灯),其中与灯控软件终端的最远距离约55 m。整个照明远控系统的无线局域网由AP接点负责组建,而每一盏射灯与负责接收指令并控制通断的灯控接点直接相连。两类接点的WiFi模块与单片机模块则分别选择了HLK?RM04和STC89C52RC芯片。单灯模式下,以开启#2电容器组的射灯为例,通过单击软件主控窗口中相应间隔的“开灯”按键,经历一段时间后,高压场地上的#2电容器组射灯将自动点亮,而软件主界面上对应的灯光图形状态也随之更新,如图8所示。
此外,莲塘变电站原有的灯控方式为14盏高压射灯,分成5组,每组由一个空气开关来控制。假定运维人员晚上在某个间隔进行倒闸操作时,只需打开该间隔的1盏灯光,即可满足照明要求,但因为原来条件的限制仅能一次性开启3盏灯光。如果以耗时0.5 h来算,原有方式消耗的电能为0.6 kW·h,而通过照明远控软件可实现单个灯光的开启,所消耗的电能将降至0.2 kW·h,仅为原来耗电量的[13]。另一方面,在恶劣天气或站内特巡的情况下可能需要打开场地上的所有灯光,而在软件的全局模式下,可通过远方点击“全部开启”按钮来完成一键开启。
4 结 语
本文介绍了变电站传统照明灯控方式的不足,针对其存在的耗电量大、易于跳闸等缺陷,设计并研发出一种基于MFC和Socket的照明远控软件,其主要包括单灯模式和全局模式两种工作方式。叙述了软件的总体架构,并给出了相关的UML图。在介绍软件的整体工作流程后,对其各子模块的设计进行了进一步的分析,具体阐述了主控窗口、通信窗口以及进度窗口的实现过程。最后给出该软件在实际变电站中应用的效果。实例表明,与原有方式相比,该软件具备较高的技术可行性,不仅实现了灯光的按需开启,而且极大地节省了能源。
参考文献
[1] 董旭柱,夏清,饶宏,等.对南方电网开展智能电网建设的思考[J].南方电网技术,2012,6(3):1?6.
[2] 王林梅,徐硕.智能变电站技术研究与应用[J].机电技术,2012,35(3):106?108.
[3] 钱怡,张辉.无人值班变电站通风、照明系统的现状和改进措施[J].现代制造,2011(30):36?37.
[4] LIPPMAN S B, LAJOIE J, MOO B E. C++ primer [M]. 5th ed. New Jersey: Addison?Wesley, 2012: 1?28.
[5] 任哲.MFC Windows应用程序设计[M].3版.北京:清华大学出版社,2013:65?71.
[6] DENNIS A, WIXOM B H, TEGARDEN D. Systems analysis and design with UML [M]. 4th ed. Chicago: RR Donnelley, 2012: 195?198.
[7] 卫洪春,彭小利,蒲国林.MFC窗口创建过程的研究[J].现代电子技术,2014,37(11):151?154.
[8] DEAN J, HARRISON A, LASS R N, et al. Client/server messaging protocols in serverless environments [J]. Journal of network and computer applications, 2011, 34(4): 1366?1379.
[9] 李霞,陈松,张国琰.基于Socket的VC++与FLASH通信[J].重庆交通大学学报(自然科学版),2011,30(2):344?348.
[10] LASALLE D, KARYPIS G. Multi?threaded modularity based graph clustering using the multilevel paradigm [J]. Journal of parallel and distributed computing, 2015, 76: 66?80.
[11] 李国良,王培俊,侯磊,等.基于OpenGL的虚拟数控车床加工仿真系统研究[J].机械设计与制造,2011(11):168?170.