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

📄 chq_lim.asv

📁 潮流计算
💻 ASV
字号:
function f = chq_lim(qg_max,qg_min)
%Syntax:
%       f = chq_lim(qg_max,qg_min)
% function for detecting generator vars outside limit检查发电机发出的无功功率是否超出标准

% sets Qg to zero if limit exceded, sets Ql to negative of limit
%如果超出限制,置发电机无功Qg为0,负荷无功Ql为极限的负值
% sets bus_type to 3, and recalculates ang_red and volt_red
% 置节点类型为3,重新计算这两个矩阵 见loadflow.m
% changes  generator bus_type to type 3将发电机节点改为3(负荷节点)?
% recalculates the generator index重新计算发电机系数

% inputs: qg_max and qg_min are the last two clumns of the bus matrix
% 输入:节点矩阵的最后两列是qg_max和qg_min.(发电机发出的最大、最小无功)列矩阵
% outputs:f is set to zero if no limit reached, or to 1 if a limit is reached
% 输出:如果没超出限制f置0,如果达到极限置1
% Version:  1.1
% Author: Graham Rogers
% Date:   May 1997
% Purpose: Addition of var limit index
% Version:  1.0
% Author:   Graham Rogers
% Date:     October 1996
%
% (c) copyright Joe Chow 1996
global Qg bus_type g_bno PQV_no PQ_no ang_red volt_red 
global Q Ql
global gen_chg_idx
%         gen_chg_idx indicates those generators changed to PQ buses
%                     表示发电机节点变为负荷节点
%         gen_cgq_idx = ones(n of bus,1) if no gen at vars limits
%                     = 0 at the corresponding bus if generator at var limit 
%                     =1阵,n*1,一列, 如果发电机没达到无功极限
%                     =0,达到无功极限的发电机对应的节点

f = 0;%初始化
lim_flag = 0;
% indicates whether limit has been reached判断是否超出极限
gen_idx = find(bus_type ==2);%找出发电机节点 一列矩阵
qg_max_idx = find(Qg(gen_idx)>qg_max(gen_idx)); %找出超出极限的节点 一列的矩阵
qg_min_idx = find(Qg(gen_idx)<qg_min(gen_idx)); %找出小于最小值的节点,一列的矩阵
if ~isempty(qg_max_idx)%如果有超出最大极限的节点
  %some q excedes maximum
  %set Qg to zero
  Qg(gen_idx(qg_max_idx)) = zeros(length(qg_max_idx),1);%将这些节点的发电机的无功置为0
  % modify Ql
  Ql(gen_idx(qg_max_idx)) = Ql(gen_idx(qg_max_idx))...   (Ql由节点母线的第七列给出)该节点的负荷无功-发电机无功
                            - qg_max(gen_idx(qg_max_idx));
  % modify bus_type to PQ bus改成负荷节点
  bus_type(gen_idx(qg_max_idx)) = 3*ones(length(qg_max_idx),1);%超出极限的节点的类型改为3
  gen_chg_idx(gen_idx(qg_max_idx)) = zeros(length(qg_max_idx),1);%超出无功极限的发电机节点对应的=0
  lim_flag = 1;%表示已经检查完
end
if ~isempty(qg_min_idx)%如果有超出最小极限的
  %some q less than minimum
  
  Qg(gen_idx(qg_min_idx)) = zeros(length(qg_min_idx),1);%set Qg to zero置0
  % modify Ql
  Ql(gen_idx(qg_min_idx)) = Ql(gen_idx(qg_min_idx))...该节点的负荷无功-发电机无功
                            - qg_min(gen_idx(qg_min_idx));
  % modify bus_type to PQ bus改成负荷节点
  bus_type(gen_idx(qg_min_idx)) = 3*ones(length(qg_min_idx),1);%超出极限的节点的类型改为3
  gen_chg_idx(gen_idx(qg_min_idx)) = zeros(length(qg_min_idx),1);%超出无功极限的发电机节点对应的=0
  lim_flag = 1;%表示已经检查完,节点有改变
end
%重新生成计算中需要的矩阵及其节点信息
if lim_flag == 1%如果已经检查完,节点有改变
  %recalculate g_bno重新计算这个矩阵
  nbus = length(bus_type);%赋值:节点数
  g_bno = ones(nbus,1);% 一列的1阵
  bus_zeros=zeros(nbus,1);% 一列0阵
  bus_index=[1:1:nbus]';% 一列矩阵,从1到节点总数
  PQV_no=find(bus_type >=2);% 非平衡节点所在的行数形成的列矩阵
  PQ_no=find(bus_type==3);%负荷节点所在的行数形成的列矩阵 
  gen_index=find(bus_type==2);% 发电机节点所在行数行成的列矩阵
  g_bno(gen_index)=bus_zeros(gen_index); % 发电机节点所在位置元素为0,其他为1,单列阵
  % construct sparse angle reduction matrix建立稀疏矩阵
  il = length(PQV_no);%非平衡节点数 
  ii = [1:1:il]';% 一个列阵,从1到节点总数
  ang_red = sparse(ii,PQV_no,ones(il,1),il,nbus);% 稀疏矩阵:il行nbus列,非0元素是1,一共il个1
  % construct sparse voltage reduction matrix
  il = length(PQ_no);%负荷节点数
  ii = [1:1:il]';%单列阵
  volt_red = sparse(ii,PQ_no,ones(il,1),il,nbus);%稀疏矩阵
end
f = lim_flag;% =1节点有变化 =0节点无变化
return

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -