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

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

Полное определение класса CountTime Системный объект.
classdef CountTime < matlab.System % Counts Hits and Time properties(Nontunable) SampleTime = 1.4; % Sample Time OffsetTime = 0.2; % Offset Time TickTime = 0.1; SampleTimeTypeProp (1, 1) {mustBeMember(SampleTimeTypeProp, ... ["Discrete","FixedInMinorStep","Controllable",... "Inherited","InheritedNotControllable",... "InheritedErrorConstant"])} = "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',... 'AlternatePropagation','Controllable'); case 'InheritedErrorConstant' sts = createSampleTime(obj,'Type','Inherited',... 'ErrorOnPropagation','Constant'); 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
createSampleTime | getCurrentTime | getSampleTime | getSampleTimeImpl | matlab.system.mixin.SampleTime | setNumTicksUntilNextHit