• 大小: 11KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-09
  • 语言: Matlab
  • 标签: matlab  matpow  bpa  PSCAD  

资源简介

bpa文件转化为matpower中mpc结构体 兼容中英文环境

资源截图

代码片段和文件信息

% 读取BPA格式数据文件,生成MATPOWER所需电网对象和母线列表
function [mpc buslist] = bpa2matpower()
tic;
% 1. 读入BPA文件的所有内容
[FileNamePathName] = uigetfile(‘*.dat‘);
bpafile=fullfile(PathNameFileName);
disp([‘读入原始BPA潮流文件‘ bpafile ‘的内容...‘]);
% 1.1. 打开BPA潮流文件
fid = fopen(bpafile ‘r+‘‘n‘‘ASCII‘);%打开为ASCII
% 1.2. 将所有内容读入到字符串集合中
bpa_info = cell(5000 1);
ii = 1;
while (~feof(fid))
    newline = fgetl(fid);
    bpa_info(ii) = {newline};
    ii = ii + 1;
end
% 1.3. 将未利用到的预分配数组元素所占资源释放掉
for jj = ii : 5000
    bpa_info(ii) = [];
end
% 1.3. 关闭BPA潮流文件
fclose(fid);
% 2. 生成MatPower电力网络对象和母线名称列表
% 2.1. 得到母线个数,支路个数,基准容量
busNumber = 0;
genNumber = 0;
branchNumber = 0;
disp(‘获得电网基本参数(母线个数,支路个数,基准容量)...‘);
for ii = 1 : length(bpa_info)
    thisline = bpa_info{ii};
    % 2.1.1. 获得基准容量
    if (length(thisline) >= 13 && strcmp(thisline(2 : 9) ‘MVA_base‘))
        baseMVA = str2double(thisline(11 : 13));
    end
    % 2.1.2. 统计母线个数
    if (length(thisline) > 2 && strcmp(thisline(1) ‘B‘))
        busNumber = busNumber + 1;
        if (strcmp(thisline(1 : 2) ‘BS‘) || strcmp(thisline(1 : 2) ‘BE‘) || strcmp(thisline(1 : 2) ‘BQ‘))
            genNumber = genNumber + 1;
        end
    end
    % 2.1.3. 统计支路个数
    if (length(thisline) > 2 && (strcmp(thisline(1) ‘L‘) || strcmp(thisline(1) ‘T‘)))
        branchNumber = branchNumber + 1;
    end
end
% 2.2. 得到母线矩阵,发电机矩阵,支路矩阵,母线列表
% 2.2.1. 得到母线矩阵和母线名称列表
busMatrix = zeros(busNumber 13);
buslist = cell(busNumber 1);
busIndex = 0;
disp(‘获得母线矩阵和母线名称列表...‘);
for ii = 1 : length(bpa_info)
    thisline = bpa_info{ii};
    if (length(thisline) < 72)  % 在长度不足72的字符串后面补足空格
        thisline = [thisline blanks(72 - length(thisline))];
    end
    if (strcmp(thisline(1) ‘B‘))
        busIndex = busIndex + 1;
        busMatrix(busIndex 1) = busIndex;  % 母线编号
        switch thisline(2)  % 母线类型
            case {‘ ‘ ‘T‘ ‘C‘ ‘V‘}   % PQ节点
                busMatrix(busIndex 2) = 1;
            case {‘E‘ ‘Q‘ ‘G‘}    % PV节点
                busMatrix(busIndex 2) = 2;
            case ‘S‘    % 平衡节点
                busMatrix(busIndex 2) = 3;
        end
        if (~strcmp(thisline(21 : 25) blanks(5)))
            busMatrix(busIndex 3) = str2double(thisline(21 : 25));   % 有功负荷
        else
            busMatrix(busIndex 3) = 0.0;   % 有功负荷
        end
        if (~strcmp(thisline(26 : 30) blanks(5)))
            busMatrix(busIndex 4) = str2double(thisline(26 : 30));   % 无功负荷
        else
            busMatrix(busIndex 4) = 0.0;   % 无功负荷
        end
        if (~strcmp(thisline(31 : 34) blanks(4)))
            busMatrix(busIndex 5) = str2double(thisline(31 : 34));   % 对地电导(用额定电压下有功来表示)
        else
            busMatrix(busIndex 5) = 0.0;   % 对地电导(用额定电压下有功来表示)
        end
        if (~strcmp(thisline(35 : 38) blanks(4)))
            busMatrix(busIndex 6) = str2double(thisline(35 : 38));   % 对地电纳(用额定电压下无功来表示,容性为正)
        else
            busMatrix(busInde

评论

共有 条评论