www.gusucode.com > sloptim工具箱matlab源码程序 > sloptim/sloptguis/@srocsddata/@tunedparameterdata/addCompensator.m

    function addCompensator(this,Compensator) 
% ADDCOMPENSATOR  method to add compensator to data object
%
 
% Author(s): A. Stothert 07-Oct-2005
% Copyright 2005-2007 The MathWorks, Inc.

%Where to add new compensator
idxComp = strcmp(this.CompensatorNames(:,2),Compensator.getIdentifier);
if ~any(idxComp)
   idxComp = size(this.CompensatorNames,1)+1;
end

%Set compensator name
this.CompensatorNames{idxComp,1} = Compensator.Name;
this.CompensatorNames{idxComp,2} = Compensator.getIdentifier;

%Add mask and pz parameters
addP = Compensator.getMaskParameterSpec;
if ~isempty(addP)
   %Have mask parameters to add
   this.MaskParameters = localAddParam(...
      this.MaskParameters, ...
      localCopyP(addP), ...
      getIdentifier(Compensator));
   addP = [];
end
if Compensator.isTunable
   ZPKSpecs = Compensator.getZPKParameterSpec;
   kSpec = localCopyP(ZPKSpecs.GainSpec);
   this.KParameters = localAddParam(...
      this.KParameters,...
      kSpec,...
      getIdentifier(Compensator));
   if ~isempty(ZPKSpecs.PZGroupSpec)
      addP = [addP; ZPKSpecs.PZGroupSpec];
   end
   if ~isempty(addP)
      %Have PZ parameters to add
      this.PZParameters = localAddParam(...
         this.PZParameters, ...
         localCopyP(addP), ...
         getIdentifier(Compensator));
   end
end

%Add listeners to keep data upto date
L = addlistener(Compensator, 'Name', 'PostSet', ...
   @(es,ed)localCompNameChange(this, Compensator));
this.addListeners(L);

%--------------------------------------------------------------------------
function Param = localAddParam(Param,newParam,CompId)

for ct=numel(newParam):-1:1
   newStruct(ct) = struct(...
      'pSpec', newParam(ct), ...
      'AbsMin', newParam(ct).Minimum, ...
      'AbsMax', newParam(ct).Maximum, ...
      'CompId', CompId);
end
Param = [Param; newStruct(:)];

%--------------------------------------------------------------------------
function outP = localCopyP(inP)
%Helper function to copy vector of objects

nP   = numel(inP);
outP = handle(nan(nP,1));
for ct = 1:nP
   outP(ct) = copy(inP(ct));
end

%--------------------------------------------------------------------------
function localCompNameChange(this,Compensator)

idx = strcmp(this.CompensatorNames(:,2),getIdentifier(Compensator));
if any(idx)
   this.CompensatorNames{idx,1} = Compensator.Name;
end