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

📄 lftap.m

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