📄 inv_lf.asv
字号:
function [gamma] = inv_lf(mode,idc,Vdc_max,Vdc_min,ga_min,ga_max,Vdo,Rc)
%Syntax: [gamma] = inv_lf(mode,idc,Vdc_max,Vdc_min,ga_min,ga_max,Vdo,RC)
% 8/12/97
%Purpose: Finds gamma for inverter and sets inverter taps求逆变器的熄弧角,设置逆变器分接头
%Inputs: mode - a vector giving the mode of operation of the inverter
%输入: 模式 -一个向量,给出逆变器的运行模式
% mode(i) = 1 indicates that the ith inverter is operating at gamma min
% 模式为1表示第i个逆变器运行在最小熄弧角
% mode(i) = 2 indicates that the ith inverter is controlling current
% 模式为2表示第i个逆变器是定电流控制
% Note: when mode(i) = 2, idc(i) should be reduced by the current margin
% 注意:当模式为2时,第i个条线路的直流电流减小电流裕量
% idc specified dc line current vector给定直流线路电流
% Vdc_max vector of maximum allowed inverter dc voltages逆变器最大直流电压
% Vdc_min vector of minimum allowed inverter dc voltages逆变器最小直流电压
% ga_min vector of minimum gamma最小熄弧角
% ga_max vector of maximum gamma最大熄弧角
% Vdo vector of ideal inverter dc voltages理想逆变器直流电压
% Rc vector of inverter commutating resistances逆变器换流电抗
%Output: gamma, the inverter extinction angle in radians 输出:熄弧角(弧度)
%Author: Graham Rogers
%Date: November 1996
% (c) Copyright Joe Chow 1996 - All rights Reserved
global i_idx tapi tmaxi tmini tstepi Vdc
Vdo_new = Vdo;%理想直流电压
mode_idx = find(mode ==1);
if ~isempty(mode_idx)%如果模式为1
% inverter at constant ga_min逆变器在恒定的最小熄弧角
% calculate inverter dc voltage计算逆变器直流电压
ga1 = ga_min(mode_idx);%最小熄弧角,根据熄弧角算出直流电压
Rc1 = Rc(mode_idx);%换流电阻
idc1 = idc(mode_idx);%直流电流
Vdo1 = Vdo(mode_idx);%理想直流电压
Vdc1 = Vdo1.*cos(ga1) - Rc1.*idc1;%直流电压
Vdc(i_idx) = Vdc1;
% check that Vdc is within range检查直流电压是否在范围内
max_idx = find(Vdc1> Vdc_max(mode_idx));%电压越上界的线路
min_idx = find(Vdc1<Vdc_min(mode_idx));%电压越下界的线路
oor_idx = find(Vdc1> Vdc_max(mode_idx)|Vdc1<Vdc_min(mode_idx));%电压越界线路
if ~isempty(max_idx)%如果有越上界的
for k = 1:length(max_idx)
mo_idx(k) = find(oor_idx==max_idx(k));%找出oor_idx中哪些越上界,哪些越下界
end
end
if ~isempty(min_idx)
for k = 1:length(min_idx)
mno_idx(k) = find(oor_idx == min_idx(k));
end
end
t_idx = mode_idx(oor_idx);%模式为1且电压越界的线路
% reset taps if voltage out of limits如果电压越界重置分接头
if ~isempty(oor_idx)
% reset inverter taps to bring dc voltage back to limit
% 重置逆变器分接头使电压回到范围内
if ~isempty(max_idx)%如果越上界
Vdo_new(max_idx,1) = (Vdc_max(mode_idx(max_idx)) + Rc1(max_idx).*idc1(max_idx))...
./cos(ga1(max_idx));%(直流电压上界+换流电阻×直流电流)/cos(熄弧角)
end
if ~isempty(min_idx)%如果越下界
Vdo_new(min_idx,1) = (Vdc_min(mode_idx(min_idx)) + Rc1(min_idx).*idc1(min_idx))...
./cos(ga1(min_idx));%(直流电压下界+直流电阻×直流电流)/cos(熄弧角)
end
tapn = tapi(t_idx).*Vdo1(oor_idx)./Vdo_new(oor_idx);%模式为1且电压越界线路的分接头×理想直流电压/调整后的电压
% get the right tap setting选择合理的分接头等级
tnum = (tapn - tmini(t_idx))./tstepi(t_idx);%(tanp-最小分接头)/分接头等级
% set tap step to the nearest integer higher for the maximum limit
% 选择最接近的整数的分接头,比最大限制高
if ~isempty(max_idx);tnum(mo_idx) = ceil(tnum(mo_idx));end%越上界:ceil朝正无穷方向取整,第几级
% set tap step to the nearest integer lower for the minimum limit
%选择最接近的整数的分接头,小于最小限制
if ~isempty(min_idx);tnum(mno_idx) = fix(tnum(mno_idx));end%越下界:朝小的方向取整,第几级
tapin = tmini(t_idx) + tstepi(t_idx).*tnum;%设置的分接头
tmax_idx = find(tapin>tmaxi(t_idx));
if ~isempty(tmax_idx)%如果大于了最大的分接头
inv_bus = num2str(i_idx(t_idx(tmax_idx)));
disp([' maximum tap at inverter bus number ',inv_bus])
error('stop')%提示错误,停止
end
tmin_idx = find(tnum ==0);
if ~isempty(tmin_idx)%如果分接头没有变化
inv_bus = num2str(i_idx(t_idx(tmin_idx)));
disp([' minimum tap at inverter bus number ',inv_bus])
error('stop')%显示:逆变器在最小分接头处,停止
end
% recalculate Vdo重新计算理想直流电压
Vdo1(t_idx)= Vdo1(t_idx).*tapi(t_idx)./tapin;%乘上原来的分接头,再除以现在的分接头
tapi(t_idx) = tapin;%分接头
Vdc1= Vdo1.*cos(ga1)-Rc1.*idc1;%直流电压
Vdc(i_idx) = Vdc1;
end
% set gamma at gamma min熄弧角设置为最小熄弧角
gamma(mode_idx,1) = ga1*180/pi;%化成角度
end
mode_idx = find(mode ==2);%如果模式为2
if ~isempty(mode_idx)
% inverter controlling current逆变器定电流控制
% idc must be set in the calling program to the lower current in this mode
% 这种模式中,直流电流必须设置为小的电流
% dc voltage is specified at the rectifier整流器的直流电压给定
% determine gamma and inverter taps required to maintain idc
% 根据直流电流决定熄弧角和逆变器分接头
Vdc2 = Vdc(i_idx(mode_idx)); % inverter dc voltage逆变器直流电压,重算过的Vdc是global
Rc2 = Rc(mode_idx);%直流电阻
idc2 = idc(mode_idx);%直流电流,经REC_LF,计算后,除去了电流裕量的电流值
Vdo2 = Vdo(mode_idx);%理想直流电压
gamn2 = ga_min(mode_idx);%熄弧角下界
gamx2 = ga_max(mode_idx);%熄弧角上界
cgamma = (Vdc2 + Rc2.*idc2)./Vdo2;% cos熄弧角 ????????????
% find gamma out of range找出超过范围的熄弧角
min_idx = find(cgamma>cos(gamn2));%角度越下界,熄弧角的余弦大于最大余弦值
max_idx = find(cgamma<cos(gamx2));%角度越上界
oor_idx = find(cgamma>cos(gamn2)|cgamma<cos(gamx2));%熄弧角越界
t_idx = mode_idx(oor_idx);%模式2且熄弧角越界的
if ~isempty(max_idx)
for k = 1:length(max_idx)
mo_idx(k) = find(oor_idx==max_idx(k));%越界且越上界
end
end
if ~isempty(min_idx)%角度越下界
for k = 1:length(min_idx)
mno_idx(k) = find(oor_idx == min_idx(k));%越界且越下界
end
end
if ~isempty(oor_idx)
if ~isempty(min_idx)
cgamma(min_idx) = cos(gamn2(min_idx));%如果角度越下界,就等于角度最小值
end
if ~isempty(max_idx)
cgamma(max_idx) = cos(gamx2(max_idx));%如果越上界,就等于最大值
end
% calculate the required Vdo计算要求的直流电压
Vdo_new = (Vdc2(oor_idx) + Rc2(oor_idx).*idc2(oor_idx))./cgamma(oor_idx);
% calculate ideal tap setting计算理想分接头设置
tapn = tapi(t_idx).*Vdo2(oor_idx)./Vdo_new;
% get the right tap setting设置合理的分接头
tnum = (tapn - tmini(t_idx))./tstepi(t_idx);
if ~isempty(max_idx);tnum(mo_idx) = ceil(tnum(mo_idx));end% set to next whole number up向上取整
if ~isempty(min_idx);tnum(mno_idx) = fix(tnum(mno_idx));end% set to next whole number down向下取整
tapin = tmini(t_idx) + tstepi(t_idx).*tnum;
tmax_idx = find(tapin>tmaxi(t_idx));
if ~isempty(tmax_idx)%如果超过了最大的分接头限制
inv_bus = num2str(i_idx(t_idx(tmax_idx)));
disp([' maximum tap at inverter bus number ',inv_bus])
error('stop')%显示:逆变器处的分接头为最大值
end
tmin_idx = find(tnum ==0);%如果没有变化
if ~isempty(tmin_idx)
inv_bus = num2str(i_idx(t_idx(tmin_idx)));
disp([' minimum tap at inverter bus number ',inv_bus])
error('stop')%逆变器的分接头为最小值
end
% recalculate Vdo重新计算理想直流电压
Vdo2= Vdo2.*tapi(t_idx)./tapin;
tapi(t_idx) = tapin;
Vdc2= Vdo2.*cgamma-Rc2.*idc2;
Vdc(i_idx) = Vdc2;
sgamma = sqrt(ones(length(mode_idx),1)-cgamma.*cgamma);
gamma = atan2(sgamma,cgamma);
end
end
return
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -