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