exponenta event banner

Укажите примерное время для системных объектов блока MATLAB

В этом примере показано, как управлять временем выборки системного блока MATLAB с помощью методов System object™.

В определении класса используйте методы времени выборки объекта System для настройки времени выборки и изменения поведения объекта System на основе текущего времени моделирования. Если требуется использовать наследуемое время образца, указывать время образца в определении системного объекта не требуется.

Укажите время образца

Чтобы указать время выборки, выполните команду 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 для текущего времени выборки и времени моделирования соответственно. 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

Включить этот объект System в блок 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

См. также

| | | | |

Связанные темы