📄 lftap.m
字号:
% m-file for calculating on load tap changing计算有载分接头的变化.
% 要求使LT母线电压保持在电压极限内,这时假定HT母线电压不变。
% 检查LT母线电压幅值,如果超出极限,计算电压和极限之间的偏差,
% 改变分抽头减小偏差,如果达到分抽头的极限还不能使电压正常,提示错误。
% called by Loadflow被loadflow调用
% calculates desired tap assuming HT(from bus) voltage fixed假定高压端电压(初始节点)固定
% and the to bus voltage is set to the voltage limit另一端节点设置为电压极限
% the tap is set to an allowable tap seting分接头设置允许范围
% and the line matrix tap setting entry is changed线路矩阵的分接头设置改变
% if all voltages are within limits the loadflow is taken as
% converged如果所有的电压都在范围内,潮流就收敛
%
%Author Graham Rogers
%Date October 1996
max_v_idx = find(V>=volt_max);%找出电压大于等于最大电压限制的
min_v_idx = find(V<=volt_min);%找出电压小于等于最小电压限制的
mm_chk = 0;
if (~isempty(max_v_idx)|~isempty(min_v_idx))%如果找到表示或的关系
mm_chk = 1;
if ~isempty(max_v_idx)%如果找到大于等于电压极限的
% change on load taps to correct voltage改变分接头使电压正常
% assumes that bus to be corrected is the to bus 假定末端节点被修正?
for fb = 1 : length(max_v_idx)%循环次数等于电压越界的节点个数
chk_fb = find(line(:,2) == bus(max_v_idx(fb),1));% 第n次循环是:找到越界电压所在的支路位置
if ~isempty(chk_fb)%如果有
% freeze dc taps冻结直流节点分抽头?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
if ~isempty(n_dcl)%*************************************************????在loadflow中定义了global,直流抽头调节
for kt = 1:2*n_dcl
dc_chk = find(chk_fb==ac_line(kt));
if ~isempty(dc_chk);chk_fb(dc_chk)=[];end
end
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if ~isempty(chk_fb) %如果找到非空
if line(chk_fb,8)~=0 %第8列是最大分接头,给出了最大分接头,最大调节为非零,还有最小分接头
% can change tap可以改变分接头
% get from bus voltage
disp('voltage high changing tap on line');disp(chk_fb)
vm2 = volt_max(max_v_idx(fb));%这个节点的最大额定电压volt_max是一个全局变量
verror = V(max_v_idx(fb))-vm2;%实际电压-上界=电压差
% voltage too high, tap must be increased
%电压太高,分抽头必须增大。高压端电压确定,变比与低压端电压成反比
if verror/vm2 < line(chk_fb,10)%电压差/最大额定电压 < 这个节点分接头的等级
% increase tap by one step一级一级的增加,比一级略小
tap = line(chk_fb,6) + line(chk_fb,10);%变比=原来的变比 + 一个等级:增加一级
else%如果电压差/最大额定电压>=一个等级
tap = line(chk_fb,6) + verror/vm2;%分接头=原来的+电压差/最大额定电压
tap_set = ceil( (tap-line(chk_fb,9))/line(chk_fb,10));%第几级=(分接头-最小分接头)/分接头等级
% ceil(x)是取最接近x的整数
tap = tap_set*line(chk_fb,10) + line(chk_fb,9);%tap=最小的分接头+等级*第几级
end
% 选择了最接近的分接头
tap = min(line(chk_fb,8),max(tap, line(chk_fb,9)));%*******************选择一个最大分接头与所选则分接头中最小的一个
% reset tap in line data重置线路数据中的分接头
disp('tap reset to');tap
line(chk_fb,6) = tap;
end
end
end
end
if ~isempty(min_v_idx)%如果有电压超过下界的。同上
% change on load taps to correct voltage
% assumes that bus to be corrected is the to bus
for fb = 1 : length(min_v_idx)
chk_fb = find(line(:,2) == bus(min_v_idx(fb),1));
if ~isempty(chk_fb)
% freeze dc taps
if ~isempty(n_dcl)
for kt = 1:2*n_dcl
dc_chk = find(chk_fb==ac_line(kt));
if ~isempty(dc_chk);chk_fb(dc_chk)=[];end
end
end
end
if ~isempty(chk_fb)
if line(chk_fb,8)~=0
% can change tap
disp('voltage low changing tap on line');disp(chk_fb)
vm2 = volt_min(min_v_idx(fb));
verror = vm2 - V(min_v_idx(fb));
% voltage too low tap must be reduced
if verror/vm2<line(chk_fb,10)
% reduce tap by one increment
tap = line(chk_fb,6)-line(chk_fb,10);
else
tap = line(chk_fb,6) - verror./vm2;
tap_set = fix( (tap-line(chk_fb,9))/line(chk_fb,10));
tap = tap_set*line(chk_fb,10) + line(chk_fb,9);
end
tap = min(line(chk_fb,8),max(tap, line(chk_fb,9)));%?
disp('taps reset to');tap
% reset tap in line data
line(chk_fb,6) = tap;
end
end
end
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -