Этот пример показывает, как управлять шагом расчета блока 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