⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inv_lf.asv

📁 潮流计算
💻 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 + -