threephasese-onlyenquationc.../dataRead.m

81 lines
2.7 KiB
Matlab
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

function [ fsY0, fsY1, fsY2,phaseASpotLoadP,phaseBSpotLoadP,phaseCSpotLoadP ...
phaseASpotLoadQ,phaseBSpotLoadQ,phaseCSpotLoadQ,setIJ,nodeNum,Balance,phaseABCY ...
cap] = dataRead(lineZ,dataFile )
data=dlmread(dataFile);
baseHighU=data(1,2);
fsY0=sparse(0);
fsY1=sparse(0);
fsY2=sparse(0);
zeroEntries=find(data(:,1)==0);
lines=data(zeroEntries(1)+1:zeroEntries(2)-1,:);
[setIJ,nodeNum]=numberNode(lines);
if size(setIJ,2)>size(setIJ,1)
setIJ=setIJ';
end
Balance=data(1,1);
Balance=nodeNum(setIJ==Balance);
%%three-phase
phaseABCY=sparse(3*length(nodeNum),3*length(nodeNum));
%把线路型号都给读出来
linePar=lines(:,1);
linePar=unique(linePar);
for I=1:length(linePar)
[fs30,fs31,fs32,retphaseABCY]=lineWithConfig(setIJ,nodeNum,lineZ,lines,linePar(I),baseHighU);
%phaseABCY 三相的导纳矩阵3n x 3n 维
fsY0=fsY0+fs30;
fsY1=fsY1+fs31;
fsY2=fsY2+fs32;
phaseABCY=phaseABCY+retphaseABCY;
end
%% 把电容加到矩阵中
cap=data(zeroEntries(2)+1:zeroEntries(3)-1,:);
if ~isempty(cap)
capNode=nodeNum(ismember(setIJ,cap(:,1)));
end
%电容引起的电流
capG=1j*cap(:,2)/1000;
% fs3Y=3/3*diag([Zl+2*Zm,Zl-Zm,Zl-Zm]);%这里不是1/3IEEE上的公式错了。
fsY0=fsY0+sparse(capNode,capNode,capG,length(fsY0),length(fsY0));
fsY1=fsY1+sparse(capNode,capNode,capG,length(fsY1),length(fsY1));
fsY2=fsY2+sparse(capNode,capNode,capG,length(fsY2),length(fsY2));
%% spot load
busNum=length(nodeNum);
spotloads=data(zeroEntries(3)+1:zeroEntries(4)-1,:);
spotloads(:,2:end)=spotloads(:,2:end)/1000;
phaseASpotLoadP=sparse(busNum,1);
phaseBSpotLoadP=sparse(busNum,1);
phaseCSpotLoadP=sparse(busNum,1);
phaseASpotLoadQ=sparse(length(nodeNum),1);
phaseBSpotLoadQ=sparse(length(nodeNum),1);
phaseCSpotLoadQ=sparse(length(nodeNum),1);
phaseASpotLoadP( ismember(setIJ,spotloads(:,1) ) )=spotloads(:,2);
phaseBSpotLoadP( ismember(setIJ,spotloads(:,1) ) )=spotloads(:,4);
phaseCSpotLoadP( ismember(setIJ,spotloads(:,1) ) )=spotloads(:,6);
phaseASpotLoadQ( ismember(setIJ,spotloads(:,1) ) )=spotloads(:,3);
phaseBSpotLoadQ( ismember(setIJ,spotloads(:,1) ) )=spotloads(:,5);
phaseCSpotLoadQ( ismember(setIJ,spotloads(:,1) ) )=spotloads(:,7);
%% 补偿电容
cap=data(zeroEntries(2)+1:zeroEntries(3)-1,:);
if ~isempty(cap)
capNode=nodeNum(ismember(setIJ,cap(:,1)));
%数据文件中的补偿电容给的是补偿容量,要将其转换为导纳。
capB=cap(:,2:4)/1000;
cap=struct();
cap.capNode=capNode;
cap.capB=capB;
%把补偿电容加到矩阵中。
offSet=(capNode-1)*3+1;
phaseABCY=phaseABCY+sparse(offSet,offSet,1j*capB(:,1),busNum*3,busNum*3);
offSet=(capNode-1)*3+2;
phaseABCY=phaseABCY+sparse(offSet,offSet,1j*capB(:,2),busNum*3,busNum*3);
offSet=(capNode-1)*3+3;
phaseABCY=phaseABCY+sparse(offSet,offSet,1j*capB(:,3),busNum*3,busNum*3);
else
cap=struct();
cap.capNode=[];
cap.capB=sparse(1,3);
end
end