Specify Sample Time for MATLAB System Block System Objects - MATLAB & Simulink (original) (raw)

This example shows how to control the sample time of the MATLAB System block using System objectâ„¢ methods.

Inside the class definition, use the System object sample time methods to configure the sample time and modify the System object behavior based on the current simulation time. If you want to use inherited sample time, you do not need to specify a sample time in your System object definition.

Specify Sample Time

To specify the sample time, implement the getSampleTimeImpl method and create a sample time specification object with createSampleTime.

In this example, a property SampleTimeTypeProp is created to assign the sample time based on different property values. The getSampleTimeImpl method creates a sample time specification based on the SampleTimeTypeProp property. The getSampleTimeImpl method returns the sample time specification object sts created by 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

Query Simulation Time and Sample Time

Use the getSampleTime and getCurrentTime methods to query the MATLAB System block for the current sample time and simulation time, respectively. getSampleTime returns a sample time specification object with properties describing the sample time settings.

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

Include this System object in a MATLAB System block.

In the scope, you can see the effects of the sample time changes to the block.

Full Class Definition

Full class definition of the CountTime System object.

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,:) char {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

See Also

Functions

Topics