Настройка времени выборки для системных объектов MATLAB System Block

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

Поведение в Simulink

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

Смотрите также

| | | | |

Похожие темы

Была ли эта тема полезной?