C#与MATLAB混合编程的潮流计算可视化窗体

2017-12-27 20:03郑艳永城职业学院
数码世界 2017年6期
关键词:迭代法窗体拉夫

郑艳 永城职业学院

C#与MATLAB混合编程的潮流计算可视化窗体

郑艳 永城职业学院

潮流计算是电力系统领域内非常重要的数学计算之一,本文在研究了几种潮流计算计算机算法的基础上,通过整合MATLAB的科学计算能力和C#.NET的界面设计功能,通过混和编程的技术,将两者的优点整合到一起。混编后目标机上只需安装MATLAB的MCRInstaller.exe组件即可运行,极大地减少了软件正常运行所需要的内存占用。系统操作简洁,上手简单,对科学计算窗体化具有实际意义。

MATLAB C# 混合编程 潮流计算 可视化窗体

1 潮流算法

1.1 潮流算法的选择

在潮流计算中比较基础的电力系统计算机潮流计算算法有高斯-塞德尔迭代法、牛顿-拉夫逊迭代法和PQ分解法(快速解耦法)。高斯-塞德尔迭代法对初值的选取不敏感,占用内存不大,但缺点是收敛缓慢,运行效率不高。牛顿-拉夫逊迭代法具有平方收敛特性,收敛速度很快,但是缺点是对初值选取敏感,很容易出现不收敛的情况,并且每次迭代都需要更新Jacobian矩阵,占用大量运算内存。一般可以用高斯-塞德尔法迭代一两步后用牛顿-拉夫逊法迭代,可以互相弥补对方的缺点。PQ分解法(快速解耦法)是对牛顿-拉夫逊法的改进,该法只考虑电压相角对有功的影响和电压幅值对无功的影响,常数化Jacobian矩阵。该法具有直线收敛特性,收敛快,占用内存小,但缺点是在配电网中电阻部分往往不能忽略,故本文不讨论该法,本文仅以全极坐标下的牛顿-拉夫逊迭代法为例。

1.2 牛顿-拉夫逊潮流算法

1.2.1 带变压器支路的处理

牛顿-拉夫逊潮流算法是基于节点电压方程的一种算法,首先需要生成节点导纳矩阵,普通的线路可以转换成与线路阻抗和电纳等值的π型模型,若一条线路首端连变压器,变比为首端:末端=k:1,串联导纳为Y,那么等值后的π型模型为:串联导纳为Y/k,首端对地电纳为((1-k)/)*Y,末端对地电纳为((1-k)/k)*Y。经过处理后,变压器支路也可以等效转换成普通线路。

1.2.2 修正方程

在全极坐标下,牛顿-拉夫逊潮流算法将PV节点和平衡节点全部看作是PQ节点进行处理,故雅可比矩阵有2*n阶并且在每次迭代中,不断利用更新的电压幅值相角获得新的功率不平衡量和更新雅可比矩阵,并通过修正方程求得下一次的电压幅值相角,最终使不平衡量达到目标精度以内即完成收敛。

2 C#与MATLAB混合编程

2.1 MATLAB与C#混合编程方式选择

由于MATLAB和C#语言都是基于C语言的高级语言,所以目前有多种方式可以实现MATLAB和C#的混合编程:

(1)MATLAB的函数文件是.m文件,可以用MATLAB的mcc编译器生成C共享库,再调用。

(2)C#调用MATLAB工作区计算并返回结果。

(3)C#使用MATLAB的DeployTool函数生成COM组件再由C#调用。

(4)C#使用MATLAB的DeployTool函数生成.NET组件再由C#调用。

2.2 MATLAB的环境设置和.dll文件的生成

本文所用的MATLAB的版本是自带mcc编译器的2014a,C#是使用的VS2013。由于潮流程序较复杂,函数过多。本文以简单具有代表性的自加一函数为例。文件名为add1.m,函数为:f(x)=x+1。写好函数后,须设置MATLAB的编译环境,在命令行中输入mbuild-setup指令选用适当编译器编译。随后在命令行中输入deploytool命令,在弹出的窗口中选择第二项LibraryCompiler命令会弹出设置窗口。在类选项中选择.NET Assembly类,点击加号添加刚刚生成的add1.m文件,在名字文本框中,输入fun_add1作为组件名,Settings用于设置文件保存路径,完成后点击Package打包。打包文件中的fun_add1.dll将会在C#中被引用。

2.3 在C#中调用组件

在添加fun_add1.dll前找到MATLAB目录下的MWArray.dll文件,将其和fun_add1.dll一起添加到一个文件夹中,并将这个文件夹用于存放C#工程。接着在VS2013中新建Windows窗体应用程序项目,选择.NET Framwork4的环境。项目生成后在引用栏中添加MWArray.dll和fun_add1. dl并在代码区命名空间中添加命名空间:usingMathWorks. MATLAB.NET.Utility、usingMathWorks.MATLAB.NET. Arrays和usingfun_add1;

2.4 MATLAB与C#间的运算转换

若要在C#中生成矩阵传值到MATLAB中运算并返回C#,必然不能缺少中间类,我们可以通过MWNumericArray强制转换到需要的类型,而这个中间类既可以转换至MWArray格式,也转换至int,double,float等格式。矩阵可以使用数组生成,只需要输入代码:MWNumericArray矩阵名=newMWNumericArray(MWArrayComplexity.Real,a,b);就可以生成一个a行b列的实数矩阵,而将.Real换成.Complex可生成复矩阵。我们输入如下代码检验可行性:

3 C#中设计串口通信功能

针对本文编写的应用软件可通过串口进行通信,获取并发送数据,大致拥有普通串口助手的功能。C#的通信功能提供了软件与硬件之间沟通的桥梁,可通过人为设置标准实现下位机动作,也可以作为电力系统通信的桥梁。

[1]肖伟,刘忠,曾新勇等.MATLAB程序设计与应用[M].北京:清华大学出版社,2005

[2]姚光强,陈立平.基于COM技术的C#与Matlab混合编程[J].计算机工程,2008,34(14)

猜你喜欢
迭代法窗体拉夫
迭代法求解一类函数方程的再研究
求解非线性方程的4阶收敛的无导数迭代法*
英跳水名将到手的金牌“送”中国
试谈Access 2007数据库在林业档案管理中的应用
基于Qt的多窗体快速并行图形绘制方法研究
改进的布洛依登算法
多种迭代法适用范围的思考与新型迭代法
WinCE.net下图形用户界面的开发