• 大小: 18KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: Matlab
  • 标签: BPA  matpower  

资源简介

BPA格式转matpower格式Matlab程序,考虑了母线包含汉字、直流线路、bpa数据省略小数点格式等各种情况。在超过一万节点的实际电力系统中进行了验证。

资源截图

代码片段和文件信息

function [mpc] = bpa2mpc(bpafile)
% BPA2MPC Convert BPA format file to Matpower mpc format file
% X类型母线(自动控制投切电容电抗器)暂未考虑
% buslist中母线名称格式为:母线名+额定电压等级因为bpa中允许同一母线名对应多个电压等级
% 抽头可调节变压器的变比固定为设定变比
% 非对称线路(两侧电纳不相等)的情况按对称线路考虑,两侧电纳均取左侧电纳
% mpc中没有线路接地电导G和变压器等效电导G
% 线路并联高抗(L+支路)加到线路对地电纳中b=-2*Mvar/U^2(只能认为两侧高抗相等),也可以加到线路首末的母线上(第六列)感性为负。
% 如果提前用BPA计算了系统潮流,则两端直流线路按其指定输送功率等效为一正一负的两个负荷,注意直流线路可以传输无功(P,Q),多端直流线路没有考虑
% mpc.branch中第14列存回路标志,回路标志是数字或字符的ascll码
% L卡中线路的额定电流不是线电流,而是一个等效的虚拟电流,其值为sqrt(3)倍线电流(待定)
% case118.m 由118bpa.dat转换的118mpc,用BPA计算的118bpadat 三者结果相同
% By Shijun Tian Xi‘an Jiaotong University,tsjguoke@163.com 2017/10/20

% Define Default Values
defaultVmax = 1.052;
defaultVmin = 0.95;
defaultQgmax = 9999.0;
defaultQgmin = -9999.0;
defaultPgmin = 0.0;
baseMVA = 100; 
% 读入BPA文件的所有内容
bpa_info = cell(500001); % 默认.dat文件最大行数
bpa_info(:) = {blanks(80)}; % 数据行最大列数为80
disp([‘读入原始BPA潮流文件‘ bpafile ‘的内容...‘]);
% 打开BPA潮流文件
fid = fopen(bpafile ‘r‘‘n‘‘GBK‘);
% 将所有内容读入到字符串集合中
ii = 1;
while (~feof(fid))
    newline = fgetl(fid);
    bpa_info{ii}(1:length(newline)) = newline;
    ii = ii + 1;
end
fclose(fid);%  关闭BPA潮流文件
bpa_info(ii:end) = []; %释放多余的空间
% 删除注释语句
temp=1;
for ii = 1 : length(bpa_info)
    thisline = bpa_info{ii};
    if ( strcmp(thisline(1) ‘.‘) || strcmp(thisline(1) ‘ ‘) )
        deleteLine(temp)=ii;
        temp=temp+1;
    end
end
bpa_info(deleteLine)=[];
% 统计某类型节点或支路数量
% 经统计nwsgdata.dat中TP=0,BX=0,E=0LD=22LM=0+A=1
Num=0;
for ii = 1 : length(bpa_info)
    thisline = bpa_info{ii};
    if (strcmp(thisline(1:1) ‘+‘))
        Num=Num+1;
    end
end
% 得到母线个数,支路个数,基准容量
busNumA = 0; % 交流母线个数
branchNumA = 0; % 交流支路个数
busNumD = 0; % 直流母线个数
branchNumD = 0; % 直流支路个数
disp(‘获得电网基本参数(母线个数,支路个数,基准容量)...‘);
for ii = 1 : length(bpa_info)
    thisline = bpa_info{ii};
    % 获得基准容量
    if (strcmp(thisline(1 : 9) ‘/MVA_base‘))
        baseMVA = str2double(thisline(11 : 13));
    end
    % 统计交流母线个数
    if (strcmp(thisline(1) ‘B‘) &&  ~strcmp(thisline(2) ‘D‘) && ~strcmp(thisline(2) ‘M‘))
        busNumA = busNumA + 1;
    end
    % 统计交流支路个数
    if (strcmp(thisline(1:2) ‘L ‘) || strcmp(thisline(1) ‘T‘) || strcmp(thisline(1) ‘E‘) )
        branchNumA = branchNumA + 1;
    end
    % 统计直流母线个数
    if (strcmp(thisline(1:2) ‘BD‘) ||  strcmp(thisline(1:2) ‘BM‘))
        busNumD = busNumD + 1;
    end
    % 统计直流支路个数
    if (strcmp(thisline(1:2) ‘LD‘) || strcmp(thisline(1:2) ‘LM‘))
        branchNumD = branchNumD + 1;
    end
end
% 母线名称可能出现汉字,为保证字符长度对应bpa中的长度,要在汉字后面补充空格
for ii = 1 : length(bpa_info)
    thisline = bpa_info{ii};
    if ( ~strcmp(thisline(1) ‘(‘) && ~strcmp(thisline(1) ‘/‘) && ~strcmp(thisline(1) ‘>‘) ) %排除控制行,所有包含母线名称的数据行都是7:14
        temp = unicode2native(thisline(7:14)‘GBK‘);
        numChn = length(temp)-8;% 母线名中包含的中文字符数 0<=numChn<=4
        thisline=[thisline(1:14-numChn)blanks(numChn)thisline(15-numChn:end)];
    end
    if (strcmp(thislin

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-04-26 16:07  bpa2mpc\
     文件       94541  2018-04-26 16:07  bpa2mpc\118bpa.dat
     文件       21974  2018-04-26 16:07  bpa2mpc\bpa2mpc.m
     文件       33539  2018-04-26 16:07  bpa2mpc\case118.m
     文件          77  2018-04-26 16:07  bpa2mpc\main.m

评论

共有 条评论