В этом примере показано, как управлять шагом расчета блока MATLAB System с помощью методов System object™.
Внутри определения класса используйте метод шага расчета системного объекта, чтобы сконфигурировать шаг расчета и изменить поведение системного объекта на основе текущего времени симуляции. Если необходимо использовать унаследованные шаги расчета, указывать шаг расчета в определении системного объекта не требуется.
Чтобы задать шаг расчета, реализуйте getSampleTimeImpl
метод и создать объект спецификации шага расчета с createSampleTime
.
В этом примере свойство SampleTimeTypeProp
создается для назначения шага расчета на основе различных значений свойств. The getSampleTimeImpl
метод создает спецификацию шага расчета на основе SampleTimeTypeProp
свойство. The 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 на текущий шаг расчета и время симуляции, соответственно. 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