赵晓楠,于 群
(山东科技大学信息与电气工程学院,山东青岛 266510)
现代电力网络结构的主要特点是:大容量发电机组、超高压或者特高压的输电电压等级、远距离输电、大规模的交直流混联电网和较高的自动化运行水平。在这种形势下,对电力系统网络故障后的稳定分析和保护装置的研发制造都需要提前进行仿真研究。Simulink是Matlab最重要的组件之一,它提供了一个动态的系统模型建立、模拟仿真以及综合分析的集成环境。在这个环境下,不用大量编写程序,而只需要通过非常简单地鼠标操作,就可以完整地绘制复杂的电力系统。Simulink具有适应性强、绘制过程清晰以及仿真精度高、相似度高、工作效率高、灵活性等优点。基于以上优点,Simulink已被广泛应用于复杂电力系统的仿真和计算之中。
虽然Simulink依托强大的Matlab使其拥有了强大的计算能力,对于复杂的电力系统仿真能轻而易举地进行动态仿真、波形显示、各种故障的产生等一系列实际运行情况,但是其界面较为复杂,编程比较困难,用户界面不够直观以及将整个仿真环境暴露等一系列缺点也限制了它在实际中的应用。
微软开发的Visual Basic编程语言作为一种可视化程度高,界面友好的软件,恰好可以弥补Matlab在这方面的缺陷,即使对于Matlab不够熟悉的用户,也能轻松的完成线路参数设置,仿真以及结果的查看。而且封装后的VB程序看不出Simulink原本的仿真模型,增强了程序的保密性,因而这二者的结合,大大提高了Matlab在实际工程中的应用。二者结合后,既可以作为继电保护的平台搭建的软件基础,也可作为继电保护课程的教学演示,在电气工程的教学中具有较高的应用价值。
本文通过ActiveX技术将Matlab的Simulink与VB相联接,并在联接成功的基础上完成了一个通过VB调用Simulink的继电保护仿真实例。
根据目前的研究情况,Simulink与VB集成主要有以下4种方法:运用Microsoft ActiveX部件,借助动态数据交换机制(Dynamic Data Exchange,DDE),通过调用MatrixVB和通过Matlab的程序文件——M文件。在实际工程中这4种集成方法都可以使用,但要视具体的情况来选择具体的方法。前两种比较适合Client/Server模式,后两种则应该视实际系统进行选择。
动态数据交换机制允许Microsoft Windows的应用程序通过传输数据实现几者之间的通信。使用DDE通讯需要两个Windows应用程序,其中MATLAB程序作为服务器(Server)受理信息,而VB则可以作为客户端(Client)发出控制信息。客户端向服务器发送一条程序命令作为请求信息,服务器则依据该信息作出处理并返回信息,从而实现两个程序之间的数据交换。
Matlab产生的程序文件(M文件)不能直接在VB中调用,可以利用Matlab自带命令mcc将M文件编译成EXE文件,然后需要在VB中声明三个API函数,最后使用Shell()命令把VB和Matlab的集成起来。
MatrixVB是嵌入VB的矩阵函数库。它提供了大量函数,可以强化VB本身较弱的数学运算能力和图形图像处理能力,使VB功能得到极大的扩展。在VB编程过程中使用该工具包可以避免重复劳动从而减少编程人员实现算法和设计界面的困难。
下面主要介绍“运用Microsoft ActiveX部件”的方法。
微软把所有以部件对象模型(Component Object Model,COM)作为基础的技术,统称为ActiveX技术。自动执行是大部分ActiveX技术的特点。它使比较复杂的计算机语言能够在不知道所控程序的具体内容的情况下对需要控制的对象进行操作。Matlab中还加入了对ActiveX控件的支持,在VB编程环境下通过与ActiveX的接入端口就可以将Simulink作为VB的一个ActiveX控件调用。
由于Matlab对ActiveX技术的支持。Matlab的Simulink部件可通过ActiveX技术接受其它应用程序的调用。Matlab提供了一个外部名称为Matlab.Application的对象,它可以支持COM技术,其他的应用程序可以通过COM技术提供的函数获得操作控制对象的接口地址,通过调用接口地址的函数便可直接控制和使用被操控的对象了。VB支持ActiveX被控端协议,而Matlab支持作为ActiveX服务器端的协议,所以理论上VB通过ActiveX技术完全可以调用Matlab进行仿真。
以下代码可以在VB中启动Matlab的服务器功能:
这样就创建好了ActiveX对象,接下来可以在VB中对Matlab进行操作了。
Matlab中集成了一些可以在VB中使用的函数,可以在VB中使用作为被控服务器端。
(1)Matlab.Execute
这条命令可以调用Matlab来执行一条Matlab命令,然后返回一个命令完成情况字符串。它的具体格式为:Matlab.Execute([in]Bstr Command),″Bstr″是指字符串类型,″Command″是指所有在Matlab中可以执行的命令,输入的参数可以是任何可以在Matlab中执行的命令,并将执行结果以字符串的形式返回VB。
(2)Matlab.GetFullMatrix
这条命令可以将Matlab中的一个矩阵放到VB程序里的一个数组中。格式为:Matlab.Get-FullMatrix([in]BSTR Name,[in]BSTR Workspace,[in,out]SAFEARRAY(double)*pr&pi)。
″BSTR″指字符串格式类型,″Name″是矩阵的名称;″Workspace″指的是MATLAB中矩阵的工作空间;pr和pi则分别是VB里数组的实部和虚部,数据类型是双精度。
(3)Matlab.PutFullMatrix
可以将VB程序中的一个数组传送到Matlab的一个矩阵中。其格式和使用方法与GetFullMatrix类似。
(4)Matlab.MaximizeCommandWindow
可以将Matlab的命令窗口最大化,使用方法为:Call MaximizeCommandWindow()。
(5)Matlab.MinimizeCommandWindow
用来将Matlab的命令窗口最小化,使用方法为:Call MinimizeCommandWindow()。
距离保护是反应线路发生故障的地方到保护安装处之间的距离(或阻抗),并根据测算出的距离远近来确定保护动作的时间的一种继电保护装置。该装置的主要部件就是阻抗继电器,它可根据在它采集端上所施加的电压和电流来测知保护安装处至短路点间的阻抗值,此阻抗便是继电器的测量阻抗。距离保护装置就是对采集到得测量阻抗与事先确定的整定阻抗值进行比较从而确定保护是否动作的一种保护装置。
由于ZJ可以写成R+jX的形式,于是就可以利用复平面来分析继电器的动作特性,最终可以用一个坐标轴上的几何图形把它的动作特性表示出来。
方向阻抗继电器是以整定阻抗Zset为直径而通过坐标原点的一个圆,动作特性如图1所示,整定圆内为动作区,圆外为不动作区。
图1 方向阻抗继电器的特性
图2 系统仿真线路图
继电器能够动作(即测量阻抗ZJ位于圆内)的条件是:
BC相阻抗继电器的Simulink仿真模型如图2所示,采用的是500kV单侧电源系统,输电线路采用分布式线路。每条线路首末端均将采集到得电压、电流值传入WorkSpace中;仿真时间设定为0.2s,在 0.1s时发生三相故障。通过 M 文件,调用保护1处的电压、电流数据进行分析,判断是否有故障发生并在故障发生后及时切断线路。
VB界面如图3所示,其中,线路图为实际线路模型,故障点已在图中标出,双击线路还可以更改线路参数,如图4所示。
图3 VB前台运行界面
图4 VB前台运行界面(线路参数修改)
主要程序部分代码如下:
点击开始仿真按钮后,执行结果如图5和图6所示。
图5 VB前台运行结果界面1
图6 VB前台运行结果界面2
BC相阻抗继电器的VB程序运行结果表明,当0.1s发生三相故障时,保护1处BC相阻抗继电器的测量阻抗轨迹落在阻抗圆中,保护动作;而当没有故障发生时,测量阻抗没有落在阻抗圆中,因此保护不会动作。
通过VB调用Simulink实例可以发现,用这种方法,不仅能够直观地看到线路的构成,而且能实时修改相应仿真模型的参数,并且将仿真结果实时显示出来;并且能够将真实模型隐藏,达到保密程序的作用。
[1]黎洪生,龚 荣,陈 雷.基于MATLAB与VB混合编程的电力系统仿真设计[J].电力科学与工程,2004.
[2]于 群,曹 娜.电力系统微机继电保护[M].机械工业出版社,2008.
[3]张 菁,陈宇晨,Matlab与VB的集成在电力系统潮流计算中的应用[J].微计算机信息,2007,(2).
[4]陈 皓.微机保护原理及算法防真[M].中国电力出版社,2007.
[5]韩 笑,徐 曦,陈卓平.基于Matlab与VB数据交换的继电保护仿真[J].电力自动化设备,2006,26(5).