📄 fm_cac.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 + -