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

📄 fm_cac.m

📁 这是一个很适合研究和学习用的电力系统仿真软件
💻 M
字号:
function  fm_cac(flag)
% FM_CAC define Central Area Controllers
%
% Data Format Cac.con:
%          col #1: Bus number
%          col #2: Power rate [MVA]
%          col #3: Bus Voltage Rate [kV]
%          col #4: number of connected clusters
%          col #5: Vpref None [None]
%          col #6: KI integral gain
%          col #7: KP proportional gain
%          col #8: q1_max
%          col #9: q1_max
%
%Author:    Federico Milano
%Date:      11-Nov-2002
%Version:   1.0.0
%
%E-mail:    fmilano@thunderbox.uwaterloo.ca
%Web-site:  http://thunderbox.uwaterloo.ca/~fmilano
%
% Copyright (C) 2002-2006 Federico Milano

global Cac DAE Bus

q1 = DAE.x(Cac.q1);
V1 = DAE.V(Cac.bus);
Vpref = Cac.con(:,5);
KI = Cac.con(:,6);
KP = Cac.con(:,7);
q1_max = Cac.con(:,8);
q1_min = Cac.con(:,9);

switch flag
 case 0 % initialization

  %variable initialization
  DAE.x(Cac.q1) = 1;
  q1 = DAE.x(Cac.q1);
  Vpref = V1;
  Cac.con(:,5) = Vpref;
  Cac.q = q1 + KP.*(Vpref-V1);
  %check limits
  idx = find(q1 > q1_max);
  if idx
    cacwarn(idx, ' State variable q1 is over its maximum limit.')
  end
  idx = find(q1 < q1_min);
  if idx
    cacwarn(idx, ' State variable q1 is under its minimum limit.')
  end
  fm_disp('Initialization of Cac''s completed.')

 case 1 % algebraic equations


 case 2 % algebraic Jacobians


 case 3 % differential equations

  DAE.f(Cac.q1) = KI.*(Vpref-V1);
  % non-windoup limits
  idx = find(q1 >= q1_max & DAE.f(Cac.q1) > 0);
  if idx, DAE.f(Cac.q1(idx)) = 0; end
  DAE.x(Cac.q1) = min(q1,q1_max);
  idx = find(q1 <= q1_min & DAE.f(Cac.q1) < 0);
  if idx, DAE.f(Cac.q1(idx)) = 0; end
  DAE.x(Cac.q1) = max(q1,q1_min);
  Cac.q = q1 + KP.*(Vpref-V1);

 case 4 % state variable Jacobians

  % DAE.Fy
  DAE.Fy = DAE.Fy + sparse(Cac.q1,Cac.bus+Bus.n,-KI,DAE.n,2*Bus.n);

 case 5 % non-windup limiters

  global Settings
  idx = find((q1 >= q1_max | q1 <= q1_min) & DAE.f(Cac.q1) == 0);
  if ~isempty(idx)
    k = Cac.q1(idx);
    DAE.tn(k) = 0;
    DAE.Ac(:,k) = 0;
    DAE.Ac(k,:) = 0;
    DAE.Ac(k,k) = speye(length(idx));
  end

end


% -------------------------------------------------------------------
% function for creating warning messages
function cacwarn(idx, msg)
fm_disp(strcat('Warning: CAC #',int2str(idx),msg))

⌨️ 快捷键说明

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