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

    function update(this,Comps)
% UPDATE method to update compensator data
%

% Author(s): A. Stothert 22-Aug-2005
% Copyright 2005-2007 The MathWorks, Inc.
if numel(Comps)<size(this.CompensatorNames,1)
    % A Compensator was deleted
    ID = Comps.getIdentifier;
    CompBeingDeleted = this.CompensatorNames(~ismember(this.CompensatorNames(:,2),ID),2);
    if ~isempty(this.MaskParameters)
        %Have at least one mask parameter
        idxMask = strcmp({this.MaskParameters.CompId},CompBeingDeleted);
    else
        idxMask = [];
    end
    if ~isempty(this.KParameters)
        %Have at least one gain parameter
        idxK = strcmp({this.KParameters.CompId},CompBeingDeleted);
    else
        idxK = [];
    end
    if ~isempty(this.PZParameters)
        %Have at least one pzgroup
        idxPZ = strcmp({this.PZParameters.CompId},CompBeingDeleted);
    else
        idxPZ = [];
    end
    %Clear any data associated with this compensator
    this.MaskParameters(idxMask) = [];
    this.PZParameters(idxPZ)     = [];
    this.KParameters(idxK)       = [];
    idx = find(strcmp(this.CompensatorNames(:,2),CompBeingDeleted));
    this.CompensatorNames(idx,:) = [];

    %Pass on event
    ed = srocsddata.csddataevent(this,'CompensatorChanged');
    ed.Data = idx;
    this.send('CompensatorChanged',ed)
else
    IDs = cell(size(this.CompensatorNames,1),1);
    for ct=1:numel(Comps)
        Compensator = Comps(ct);
        %Check if need to reset parameters
        ID = Compensator.getIdentifier;
        if ~isempty(this.MaskParameters)
            %Have at least one mask parameter
            idxMask = strcmp({this.MaskParameters.CompId},ID);
        else
            idxMask = [];
        end
        if ~isempty(this.KParameters)
            %Have at least one gain parameter
            idxK = strcmp({this.KParameters.CompId},ID);
        else
            idxK = [];
        end
        if ~isempty(this.PZParameters)
            %Have at least one pzgroup
            idxPZ = strcmp({this.PZParameters.CompId},ID);
        else
            idxPZ = [];
        end
        %if the number of maskparameters, pzgroups, of gains have changed delete the
        %compensator and reinitialize it
        resync = sum(idxMask) ~= numel(Compensator.MaskParamSpec);
        resync = resync || sum(idxPZ) ~= numel(Compensator.getZPKParameterSpec.PZGroupSpec);
        resync = resync || sum(idxK) ~= numel(Compensator.getZPKParameterSpec.GainSpec);
        if resync
            %Clear any data associated with this compensator
            this.MaskParameters(idxMask) = [];
            this.PZParameters(idxPZ)     = [];
            this.KParameters(idxK)       = [];
            idx = find(strcmp(this.CompensatorNames(:,2),ID));
            this.CompensatorNames(idx,:) = [];
            
            this.addCompensator(Compensator);  %This regets all compensator parameters
            %Put compensator name back in correctly indexed location
            if ~isempty(idx)
                this.CompensatorNames = this.CompensatorNames([1:idx-1, end, idx:end-1],:);
            end
            IDs{ct,1} = ID;
        end
    end
    %Pass on event
    idx = ~cellfun('isempty',IDs);
    IDs = IDs(idx);
    ed = srocsddata.csddataevent(this,'CompensatorChanged');
    ed.Data = IDs;
    this.send('CompensatorChanged',ed)
end