由于使用手册很长,用起来不太容易看,在这里想通过文章给大家分享一下我对于MATPOWER的学习过程和使用方法。
MATPOWER5.0b1安装包:https://download.csdn.net/download/qq_29629293/12839984
MATPOWER中文手册:https://download.csdn.net/download/qq_29629293/12839772
MATPOWER安装过程在这里:https://blog.csdn.net/qq_29629293/article/details/108568544
注意:我最新安装matpower8.0对下面例子依然可以正常使用,可以参考下面例子
目录
本文主要参考《MATPOWER手册(中文版)》。
由于使用手册很长,用起来不太容易看,在这里想通过文章给大家分享一下我对于MATPOWER的学习过程和使用方法。
话不多说,直接上过程——
1、各文件的意义
MATPOWER中有一百多个文件和文件夹,在进行计算的时候并不是所有的文件都要用到,它们之间的关系更多的是嵌套。在这里就先介绍一下部分经常用到的文件的含义。
(手册3.7节)
1、数据输入文件:(一般是case开头的文件,后面数字是几就是几节点系统)
文件名称 | 含义 |
---|---|
caseformat.m | 输入数据格式匹配的文档 |
case_ieee30.m | IEEE30节点系统 |
case118.m | IEEE118 节点系统 |
case14.m | IEEE14节点系统 |
case30.m | 改进的IEEE30节点系统 |
case30pwl.m | 分段线性成本结构的case30.m |
case30Q.m | 带无功成本的case30.m |
case300.m | IEEE300节点系统 |
case39.m | 39节点系统 |
case4gs.m | 从Grainger&Steveson转化的4节点系统 |
case57.m | IEEE57节点系统 |
case6ww.m | 来自于Wood&Wollenberg的1节点系统 |
case9.m | 3机9节点系统(默认案例) |
case9Q.m | 带无功成本的9节点系统 |
2、高层方案:(一般是以run开头,可直接运行一个方法的潮流计算)
文件名称 | 含义 |
---|---|
cdf2matp.m | 将数据从IEEE CDF的格式转换成MATPOWER的格式 |
runpf.m | 运行一个潮流计算程序 |
runopf.m | 运行一个最优潮流计算程序 |
rundcpf.m | 运行一个直流潮流计算 |
rundcopf.m | 运行一个直流最优潮流计算 |
runcomp.m | 运行两个最优潮流并且比较他们的结果 |
runuopf.m | 运行一个可以处理高价机组停机的OPF |
runduopf.m | 运行一个可以处理高价机组停机的直流OPF |
3、其他的文件:(暂且不用看,在使用过程中基本用不到)
注、如果需要基于MATPOWER进行开发的话,可根据手册的文件名,在MATLAB中打开对应文件进行修改。
2、使用方法
1、进行简单的潮流计算(手册2.3、2.4)
(1)运行一个简单的牛顿潮流。其中包括默认的运算法则选项,默认为‘case9’,在matlab命令行中输入:
runpf()
若要运行指定文件的话,则在命令行键入:
runpf('case5')
(2)计算最优潮流。计算一个数据在case30.m文件中的30节点的最优潮流系统,以默认的算法选项,maitlab的命令行键入:
runopf('case30')
计算相同的系统,但是以关闭高耗机组处理的方式运行,输入:
runuopf('case30')
2、设置不同的选项进行计算(手册3.6)
MATPOWER采用一个选项向量“mpoption”来达到对选项的控制。在MATLAB命令行输入mpoption
就可以显示出MATPOWER的默认选项内容。
点开工作区的“ans”可以看到每个数值及矩阵、结构体详情:
MATPOWER选项向量实现下列控制:
- 潮流计算
- 潮流计算的终止标准
- 最优潮流(OPF)算法
- 对不同成本模型的默认OPF算法
- OPF的成本转换参数
- OPF的中止标准
- 冗余水平
- 结果输出方式
MATPOWER选项向量中有关潮流计算的选项功能描述见下表:
MATPOWER选项向量中有关潮流计算输出结果的选项功能描述见下表:
我们打开mpoption.m文件来看一看:
首先看到的是一段注释,在这些注释中介绍了mpoption这一个函数中,所输入的参数个数和内涵。
参数形式 | 含义 |
---|---|
OPT = MPOPTION | 返回默认选项结构体。 |
OPT = MPOPTION(OVERRIDES) | 返回默认选项结构,其中一些字段被重写的值覆盖,这些字段可以是结构,也可以是返回结构的函数的名称。 |
OPT = MPOPTION(NAME1, VALUE1, NAME2, VALUE2, …) | (选项,数值,选项,数值……),一个数值对应一个选项成对出现。名称可以是单独的字段,也可以是嵌入周期的多级字段名称。这些值可以是标量或结构。 |
OPT = MPOPTION(OPT0) | 将原来的选项向量OPT0转换为相应的选项结构。若TOP0已为结构体则无需操作。 |
OPT = MPOPTION(OPT0, OVERRIDES) | 对现有的选项集OPT0应用覆盖,它可以是原来的选项向量或选项结构体。 |
OPT = MPOPTION(OPT0, NAME1, VALUE1, NAME2, VALUE2, …) | 和上面的一样,只是它以旧样式的选项向量OPT0作为基础,而不是旧的默认选项向量。 |
OPT_VECTOR = MPOPTION(OPT, []) | 从选项结构OPT中创建并返回原来样式的选项向量。 |
使用方式如下:
首先获取默认的选项向量(命令行键入):
mpopt=mpoption;
比方说,我们要使用快速解耦法对数据文件‘case57’进行潮流计算,则需在命令行先后输入下面两行:
mpopt=mpoption(mpopt,'PF_ALG',2);
runpf('case57',mpopt);
如果我们需要系统运算的概要信息和机组信息,则可进行如下设置:
mpopt=mpoption(mpopt,‘OUT_BUS’,0,‘OUT_BRANCH’,0,‘OUT_GEN’,1);
%不打印母线细节信息和支路信息,只打印机组信息
3、计算结果的获得
潮流计算的结果就是需要得到系统中每个节点的电压幅值、相角和输出的有功功率、无功功率。要想获得这些数据可以通过下面的四句:
Um=results.bus(:,8);
Ua=results.bus(:,9);
PL=results.branch(:,14);
QL=results.branch(:,15);
拿Um来说,可见,在最后结果的bus结构体中,第8列为电压的幅值,所以我们选择第8列所有行的数据作为电压的幅值提取出来。
4、调试
为了深入学习潮流计算的过程,可以用调试的方法对MATPOWER程序分析。
例如:
(1)在MATLAB中打开runpf.m,并在下面的程序处设置断点:
然后再命令行输入一下命令:
runpf('case5')
当程序运行到断点后自动暂停,在工作区出现了很多中间变量:
此时在命令行中输入“Ybus”,即可以显示出系统的导纳矩阵(注意:输出为稀疏矩阵),结果如下:
也可以在工作区,找到Ybus矩阵,双击直接在“变量”对话框中查看:
(2)若要了解在采用牛顿法计算潮流的迭代过程,可打开文件newtonpf.m,并在下处设置断点:
当程序运行到断点后自动暂停,此时便可在工作区找到Vm、Va、F等迭代过程中各节点的电压及功率误差。
5、获得其他函数的帮助文档(手册2.5)
当拥有MATLAB的内部函数和工具箱代码时,通过输入help加上命令或者M文件的名称可以获得详细的函数说明,几乎所有的MATPOWER 的M文件都有这样的文档。
3、可运行的算法
这一部分属于现代电力系统分析的内容,从手册目录就可以看到MATPOWER可以进行的运算方法有哪些:
4、case文件格式
首先,我们打开一个case文件,例如‘case5’:
在这里,我们定义了一个mpc结构体,名称为‘case5’,往下滑动页面可以看到这个结构体中的所有字段:
1、version:数据文件格式的版本,共有两种——version1和version2。MATPOWER3.0及以前的版本采用version1。现在一般都采用version2。
2、baseMVA:设置基准容量*(有名值)*,是一个标量,一般设为100。
3、bus:设置网络中各母线参数,是一个矩阵,每一行对应一个单一的母线,每一列的含义如下表:
字段 | 含义 |
---|---|
bus_i | 设置母线编号 |
type | 设置母线类型,1-PQ节点,2-PV节点,3-平衡(参考)节点,4-孤立节点 |
Pd、Qd | 设置母线注入负荷的有功功率和无功功率* |
Gs、Bs | 设置与母线并联的电导和电纳 |
baseKV | 设置该母线的基准电压Vm、Va |
Vmax、Vmin | 设置工作时母线最高、最低电压幅值 |
area | 设置电网断面号,设置范围1~100,一般设为1 |
zone | 设置断网分区号,设置范围1~999,一般设为1 |
它们在矩阵中的排列需要按照如下顺序:
4、gen:设置接入电网中的发电机(电源)参数,是一个矩阵,字段含义如下:
字段 | 含义 |
---|---|
bus | 设置接入发电机(电源)的母线编号 |
Pg、Qg | 设置接入发电机(电源)的有功功率和无功功率* |
Pmax、Pmin | 设置接入发电机(电源)的有功功率最大、最小允许值 |
Qmax、Qmin | 设置接入发电机(电源)的无功功率最大、最小允许值 |
Vg | 设置接入发电机(电源)的工作电压 |
mBase | 设置接入发电机(电源)的功率基准 |
status | 设置发电机(电源)工作状态,1表示投入,0表示退出 |
它们在矩阵中的排列需要按照如下顺序:
5、branch:设置电网中的各支路参数,是一个矩阵,字段含义如下:
字段 | 含义 |
---|---|
fbus、tbus | 设置该支路起始节点(母线)编号和终止节点(母线)编号 |
r、x、b | 设置该支路的电阻、电抗和充电电纳 |
rateA、rateB、rateC | 设置该支路长期、短期和紧急允许功率 |
ratio | 设置该支路的变比。如果支路是导线,则为0;如果支路是变压器,则为fbus侧母线基准电压与tbus侧母线的基准电压之比 |
angle | 设置支路的相位角度。如果支路为导线,则为0;如果支路为变压器(或移相器),就是变压器(或移相器)的转角 |
status | 设置支路工作状态,1表示投入,0表示退出 |
angmin、angmax | 设置支路相位角度的最小和最大差值 |
它们在矩阵中的排列需要按照如下顺序:
6、area:区域数据格式(已弃用)。MATPOWER不使用此数据,并且对于带有OPF数据的version2案例文件不再需要此数据。
7、gencost:发电机功率成本,如果gen有ng行,则gencost的第一行ng行包含对应发电机产生有功功率的成本。如果gencost有2ng行,那么行ng+1到2ng包含相同格式的无功成本。
字段 | 含义 |
---|---|
model | 模型。1 -分段线性,p0 <p1 <…<pn和代价f§由坐标(p0,f0), (p1,f1),…, (pn,fn)的分段线性代价函数的结束点/断点;2 -多项式 ,n阶多项式代价函数的n+1个系数,从最高阶开始,其中代价为f§ = cn * p^n +…+ c1*p + c0 |
startup | 启动成本(美元) |
shutdown | 关闭成本(美元) |
N | 多项式成本函数遵循的成本系数数,或分段线性遵循的数据点数 |
其余参数 | 定义总成本函数f§的参数,f和p的单位分别是$/hr和MW(或MVAr)。 |
数据格式详见caseformat.m文件
5、实例及计算结果介绍
接下来,我们对一个简单地电力系统通过MATPOWER进行简单地潮流计算。
电力系统图如上图所示。
我们需要在文件夹内创建一个.m 文件,将它命名为case5_01.m:
然后,我们将下面的代码放入文件内:
function mpc=case5_01
% MATPOWER Case Format:Version 2
mpc.version='2';
%%------Power Flow Data------%%
%% system MVA base
mpc.baseMVA=100;
%% Bus data
% bus_i type Pd Qd Gs Bs area Vm Va baseKV zone Vmax Vmin
mpc.bus=[
1 1 160 80 0 0 1 1 0 100 1 1.1 0.94;
2 1 200 100 0 0 1 1 0 100 1 1.1 0.94;
3 1 370 130 0 0 1 1 0 100 1 1.1 0.94;
4 2 0 0 0 0 1 1.05 0 100 1 1.1 0.94;
5 3 0 0 0 0 1 1.05 0 100 1 1.1 0.94;
];
%% generator data
% bus Pg Qg Qmax Qmin Vg mbase status Pmax Pmin
mpc.gen=[
4 500 0 99990 -9999 1.05 100 1 600 0;
5 0 0 99990 -9999 1.05 100 1 600 0;
];
%% branch data
% fbus tbus r x b rataA rataB rataC ratio angle status angmin angmax
mpc.branch=[
2 1 0.04 0.25 0.5 0 0 0 0 0 1 -360 360;
3 1 0.1 0.35 0 0 0 0 0 0 1 -360 360;
3 2 0.08 0.3 0.5 0 0 0 0 0 1 -360 360;
3 5 0 0.03 0 0 0 0 1.05 0 1 -360 360;
2 4 0 0.015 0 0 0 0 1.05 0 1 -360 360;
];
接下来,我们在命令行中输入
runpf('case5_01')
按回车后可得到打印好的计算结果:
仔细阅读结果内容,可以看到结果中有3个表格:
- System Summary 系统总结
- Bus Data 母线数据
- Branch Data 支路数据
(1) System Summary
里面描述了对原始数据的统计信息。
在表格最下面描述了电压的幅值相角的最大值和最小值,以及线路的有功无功损耗最大的线路编号及损耗值。
(2) Bus Data
表格中:
第二列和第三列分别为电压幅值和相角,
第四列和第五列是发电机输入的有功功率和无功功率,
第六列和第七列是输出负荷的有功功率和无功功率。
Total表示功率各列之和,前后差值就是线路中损耗的。
(3) Branch Data
表格中:
第二列和第三列分别是线路的起始母线和终止母线,
第四列和第五列是起始母线注入有功和无功,有正负,
第六列和第七列是终止母线注入的有功和无功,有正负,
第八列和第九列是线路上损耗的有功和无功,是前后两项的相加之和,有正负。
Total表示损耗之和,这个值应该与Bus Data的结果Total相差不大。
到这里,就已经基本掌握了MATPOWER的使用方法了!
上面的内容和顺序是我自己在学习时整理出的方便我自己理解的步骤。