Задайте Шаг расчета для MATLAB System Block Системных объектов

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

Поведение в Simulink

Включите этот системный объект в блок 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

См. также

| | | | |

Похожие темы