📄 dat2xml.m
字号:
%% 该函数将从IEEE*.dat文件中读取所有数据。并根据其数据生成相应的XML文件。以下是部分变量说明
% 函数的输入参数:无
% 函数的输出参数:无
% n: 结点数目
% numOfBranch:支路数目 numOfBranch
% nodeOfBalance: 平衡结点编号 nodeOfBalance
% Standard: 基准功率 standard
% Kmax: 牛顿迭代最大次数
% deta: 衰减因子 deta
% precision: 收敛精度 precision
% Branchijrxb = [Branchi, % Branchi: 所有支路起点的列向量
% Branchj, % Branchj: 所有支路终点的列向量
% Branchr, % Branchr: 所有支路电阻的列向量
% Branchx, % Branchx: 所有支路电抗的列向量
% Branchb] % Branchb: 所有支路的接地电容导纳的列向量
% BranchGroundib = [BranchGroundi, % BranchGroundi 所有接地支路编号的列向量
% BranchGroundb] % BranchGroundb 所有接地支路导纳的列向量
% Transformerijrxk =[Transformeri,Transformerj,Transformerr,Transformerx,Transformerk]
% PiQiPoQo = [Pi,Qi,Po,Qo]
% PViPVv=[PVi,PVv]
%
% function status = dat2xml()
%% 初始化一个matlab的struct类型变量
IEEE = [];
%% 一次性读入整个数据文件 至allData数组
% fileName=input('please input the Data file: ','s');
tic
fileName='IEEE300.dat';
allData = dlmread(fileName,'\t');
%% 取基本参数(第一行数据)
IEEE.FirstLine.n=allData(1,1); %节点数
IEEE.FirstLine.numOfBranch = int32(allData(1,2)); %支路数
IEEE.FirstLine.nodeOfBalance = int32(allData(1,3)); %平衡节点号
IEEE.FirstLine.standard = allData(1,4); %基准功率
IEEE.FirstLine.Kmax = int32(allData(1,5)); %最大迭代次数
IEEE.FirstLine.deta = allData(1,6); %衰减因子
%% 取精度数据(第二行数据)
IEEE.SecondLine.precision=allData(2,1); %收敛精度
%% 以下各个分段要用到的公共变量
startRow =3; %startRow记录当前正在处理的数据段在allData中的开始行编号
endRow = startRow; %endRow记录正在处理的数据段的结束行编号 即只有一个0的那行
%% 从大数组中取得支路数据
while(allData(endRow,1)~=0)
endRow=endRow+1;
end
for index = startRow:endRow-1
IEEE.Branchs.Branch(index-startRow+1).no=allData(index,1);
IEEE.Branchs.Branch(index-startRow+1).i=allData(index,2);
IEEE.Branchs.Branch(index-startRow+1).j=allData(index,3);
IEEE.Branchs.Branch(index-startRow+1).r=allData(index,4);
IEEE.Branchs.Branch(index-startRow+1).x=allData(index,5);
IEEE.Branchs.Branch(index-startRow+1).b=allData(index,6);
end
% Branchijrxb=allData(startRow:endRow-1,2:6);
startRow = endRow+1;
%% 从临时大数组中取接地支路数据
endRow = startRow;
while(allData(endRow,1)~=0)
endRow=endRow+1;
end
for index = startRow:endRow-1
IEEE.BranchGrounds.BranchGround(index-startRow+1).i=allData(index,1);
IEEE.BranchGrounds.BranchGround(index-startRow+1).b=allData(index,2);
end
% BranchGroundib = allData(startRow:endRow-1,1:2);
startRow = endRow + 1;
%% 从临时大数组中取变压器数据
endRow = startRow;
while(allData(endRow,1)~=0)
endRow=endRow+1;
end
for index = startRow:endRow-1
IEEE.Transformers.Transformer(index-startRow+1).no=allData(index,1);
IEEE.Transformers.Transformer(index-startRow+1).i=allData(index,2);
IEEE.Transformers.Transformer(index-startRow+1).j=allData(index,3);
IEEE.Transformers.Transformer(index-startRow+1).r=allData(index,4);
IEEE.Transformers.Transformer(index-startRow+1).x=1./allData(index,5);
IEEE.Transformers.Transformer(index-startRow+1).k=allData(index,6);
end
% Transformerijrxk = allData(startRow:endRow-1,2:6);
% Transformerijrxk(:,5) = 1./Transformerijrxk(:,5);
startRow = endRow +1;
%% 从临时大数组中取节点功率数据
endRow = startRow;
while(allData(endRow,1)~=0)
endRow=endRow+1;
end
for index = startRow:endRow-1
IEEE.nodePQs.nodePQ(index-startRow+1).i=allData(index,1);
IEEE.nodePQs.nodePQ(index-startRow+1).Pi=allData(index,2);
IEEE.nodePQs.nodePQ(index-startRow+1).Qi=allData(index,3);
IEEE.nodePQs.nodePQ(index-startRow+1).Po=allData(index,4);
IEEE.nodePQs.nodePQ(index-startRow+1).Qo=allData(index,5);
end
% PiQiPoQo = allData(startRow:endRow-1,2:5);
startRow = endRow +1;
%% 从临时大数组中取PV节点电压数据
endRow = startRow;
while(allData(endRow,1)~=0)
endRow=endRow+1;
end
for index = startRow:endRow-1
IEEE.nodePVs.nodePV(index-startRow+1).PVi=allData(index,1);
IEEE.nodePVs.nodePV(index-startRow+1).PVv=allData(index,2);
end
% PViPVv = allData(startRow:endRow-1,1:2);
% clear allData;
status = toc-tic;
disp('In function of ylfReadParameter');
%% 将这个IEEE struct写入XML文件
Pref=[]; Pref.XmlEngine = 'Xerces'; % use Xerces xml generator directly
Pref.StructItem = false;
fileName=strrep(fileName,'dat','xml');
xml_write(fileName, IEEE, {'IEEE', 'xml-stylesheet type="text/xsl" href="IEEE.xsl"'}, Pref); %加入样式来控制显示
type(fileName)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -