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

📄 fm_statcom.m

📁 基于PSAT 软件的多目标最优潮流计算用于中小型电力系统的分析和管理
💻 M
字号:
function  fm_statcom(flag)% FM_STATCOM defines Statcom components%% FM_STATCOM(FLAG)%       FLAG = 0 initialization%       FLAG = 1 algebraic equations%       FLAG = 2 algebraic Jacobians%       FLAG = 3 differential equations%       FLAG = 4 state matrix%       FLAG = 5 non-windup limits%%Author:    Hugo M. Ayres (revised by Federico Milano)%Date:      18-Feb-2006%Version:   1.0.0%%E-mail:    hmayres@dsce.fee.unicamp.br%E-mail:    fmilano@thunderbox.uwaterloo.ca%Web-site:  http://thunderbox.uwaterloo.ca/~fmilano%% Copyright (C) 2006 Hugo M. Ayres & Federico Milanoglobal Statcom Syn Pod Bus DAE PVV = DAE.V(Statcom.bus);ist = DAE.x(Statcom.ist);Kr = Statcom.con(:,5);Tr = Statcom.con(:,6);ist_max = Statcom.con(:,7);ist_min = Statcom.con(:,8);% Algebraic Equations:switch flag case 0  % eliminate PV components used for initializing STATCOM's  global Syn  for i = 1:Statcom.n    idxg = find(Syn.bus == Statcom.bus(i));    if ~isempty(idxg)      statcomwarn(i,[' STATCOM cannot be connected at the same bus as ' ...                 'synchronous machines.'])      continue    end    idx = findbus(PV,Statcom.bus(i));    PV = remove(PV,idx);    if isempty(idx)      statcomwarn(i,' no PV generator found at the bus.')    end  end  DAE.x(Statcom.ist) = Bus.Qg(Statcom.bus)./V;  idx = find(DAE.x(Statcom.ist) > ist_max);  if idx, statcomwarn(idx,' Ish is over its max limit.'), end  idx = find(DAE.x(Statcom.ist) < ist_min);  if idx, statcomwarn(idx,' Ish is under its min limit.'), end  DAE.x(Statcom.ist) = max(DAE.x(Statcom.ist),ist_min);  DAE.x(Statcom.ist) = min(DAE.x(Statcom.ist),ist_max);  % reference voltages  Statcom.Vref = DAE.x(Statcom.ist)./Kr + V;  fm_disp('Initialization of Static Synchronous Compensators completed.') case 1 % algebraic equations  DAE.gq = DAE.gq - sparse(Statcom.bus,1,ist.*V,Bus.n,1); case 2 % algebraic Jacobians  DAE.J22 = DAE.J22 - sparse(Statcom.bus,Statcom.bus,ist,Bus.n,Bus.n); case 3 % differential equations  % Updating reference voltages  Vref = Statcom.Vref;  if Statcom.pod    Vref(Statcom.pod) = Vref(Statcom.pod) + DAE.x(Pod.Vs(Pod.statcom));  end      u = ~(ist >= ist_max & DAE.f(Statcom.ist) > 0) & ...      ~(ist <= ist_min & DAE.f(Statcom.ist) < 0);  DAE.f(Statcom.ist) = u.*(Kr.*(Vref-V)-ist)./Tr;    DAE.x(Statcom.ist) = min(ist_max,DAE.x(Statcom.ist));  DAE.x(Statcom.ist) = max(ist_min,DAE.x(Statcom.ist)); case 4 % Jacobians of state variables  DAE.Fx = DAE.Fx + sparse(Statcom.ist,Statcom.ist,-1./Tr,DAE.n,DAE.n);       u = (ist <= ist_max & ist >= ist_min);    DAE.Gx = DAE.Gx - sparse(Bus.n+Statcom.bus,Statcom.ist,u.*V,2*Bus.n,DAE.n);  DAE.Fy = DAE.Fy - sparse(Statcom.ist,Bus.n+Statcom.bus,u.*Kr./Tr, ...                           DAE.n,2*Bus.n);  if Statcom.pod    DAE.Fx(Statcom.ist(Statcom.pod),Pod.Vs(Pod.statcom)) = ...        Pod.u(Pod.statcom).*u(Statcom.pod).*Kr(Statcom.pod)./Tr(Statcom.pod);  end   case 5 % non-windup limiters  a = find((ist >= ist_max | ist <= ist_min) & DAE.f(Statcom.ist) == 0);  if ~isempty(a)    DAE.tn(Statcom.ist(a)) = 0;    DAE.Ac(Statcom.ist(a),:) = 0;    DAE.Ac(:,Statcom.ist(a)) = 0;    DAE.Ac(Statcom.ist(a),Statcom.ist(a)) = speye(length(a));  endend  % function for creating warning messagesfunction statcomwarn(idx, msg)global Statcom Varnamefm_disp(strcat('Warning: STATCOM #',int2str(idx), ...	       ' at bus <',Varname.bus(Statcom.bus(idx)), ...	       '>: ',msg))

⌨️ 快捷键说明

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