Этот пример показывает, как управлять частотой дискретизации блока MATLAB System с помощью Системы object™ методы.
В определении класса используйте методы matlab.system.mixin.SampleTime, чтобы сконфигурировать частоту дискретизации и изменить поведение Системного объекта на основе текущего времени симуляции.
Чтобы задать частоту дискретизации, реализуйте метод getSampleTimeImpl. В этом примере свойство SampleTimeTypeProp создается, чтобы присвоить частоту дискретизации на основе различных значений свойств. Метод getSampleTimeImpl создает спецификацию частоты дискретизации на основе свойства SampleTimeTypeProp. Метод getSampleTimeImpl возвращает объект sts спецификации частоты дискретизации установить спецификации частоты дискретизации.
16 function sts = getSampleTimeImpl(obj) 17 switch char(obj.SampleTimeTypeProp) 18 case 'Inherited' 19 sts = createSampleTime(obj,'Type','Inherited'); 20 case 'InheritedNotControllable' 21 sts = createSampleTime(obj,'Type','Inherited',... 22 'Disallow','Controllable'); 23 case 'FixedInMinorStep' 24 sts = createSampleTime(obj,'Type','Fixed In Minor Step'); 25 case 'Discrete' 26 sts = createSampleTime(obj,'Type','Discrete',... 27 'SampleTime',obj.SampleTime, ... 28 'OffsetTime',obj.OffsetTime); 29 case 'Controllable' 30 sts = createSampleTime(obj,'Type','Controllable',... 31 'TickTime',obj.TickTime); 32 end 33 end
Используйте getSampleTime и методы getCurrentTime, чтобы запросить блок MATLAB System для текущей частоты дискретизации и времени симуляции, соответственно. getSampleTime возвращает объект спецификации частоты дискретизации со свойствами, описывающими настройки частоты дискретизации.
35 function [Count, Time, SampleTime] = stepImpl(obj,u) 36 Count = obj.Count + u; 37 obj.Count = Count; 38 Time = getCurrentTime(obj); 39 sts = getSampleTime(obj); 40 if strcmp(sts.Type,'Controllable') 41 setNumTicksUntilNextHit(obj,obj.Count); 42 end 43 SampleTime = sts.SampleTime; 44 end
Включайте этот Системный объект в блок MATLAB System.

В осциллографе вы видите эффекты изменений частоты дискретизации в блоке.

Полное определение класса Системного объекта CountTime и его связанного класса перечисления SampleTimeTypePropValues.
classdef CountTime < matlab.System & matlab.system.mixin.SampleTime % Counts Hits and Time properties(Nontunable) SampleTime = 1.4; % Sample Time OffsetTime = 0.2; % Offset Time TickTime = 0.1; SampleTimeTypeProp (1, 1) SampleTimeTypePropValues = SampleTimeTypePropValues.Discrete end properties(DiscreteState) Count end methods(Access = protected) function sts = getSampleTimeImpl(obj) switch char(obj.SampleTimeTypeProp) case 'Inherited' sts = createSampleTime(obj,'Type','Inherited'); case 'InheritedNotControllable' sts = createSampleTime(obj,'Type','Inherited',... 'Disallow','Controllable'); case 'FixedInMinorStep' sts = createSampleTime(obj,'Type','Fixed In Minor Step'); case 'Discrete' sts = createSampleTime(obj,'Type','Discrete',... 'SampleTime',obj.SampleTime, ... 'OffsetTime',obj.OffsetTime); case 'Controllable' sts = createSampleTime(obj,'Type','Controllable',... 'TickTime',obj.TickTime); end end function [Count, Time, SampleTime] = stepImpl(obj,u) Count = obj.Count + u; obj.Count = Count; Time = getCurrentTime(obj); sts = getSampleTime(obj); if strcmp(sts.Type,'Controllable') setNumTicksUntilNextHit(obj,obj.Count); end SampleTime = sts.SampleTime; end function setupImpl(obj) obj.Count = 0; end function resetImpl(obj) % Initialize / reset discrete-state properties obj.Count = 0; end function flag = isInactivePropertyImpl(obj,prop) flag = false; switch char(obj.SampleTimeTypeProp) case {'Inherited', ... 'InheritedNotControllable', ... 'FixedInMinorStep'} if any(strcmp(prop,{'SampleTime','OffsetTime','TickTime'})) flag = true; end case 'Discrete' if any(strcmp(prop,{'TickTime'})) flag = true; end case 'Controllable' if any(strcmp(prop,{'SampleTime','OffsetTime'})) flag = true; end end end end end
classdef SampleTimeTypePropValues < int32 enumeration Discrete (0) Inherited (1) InheritedNotControllable (2) FixedInMinorStep (3) Controllable (4) end end
createSampleTime | getCurrentTime | getSampleTime | getSampleTimeImpl | matlab.system.mixin. 'SampleTime' | setNumTicksUntilNextHit