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