主要内容

处理输入设定更改

R2026b

此示例说明如何控制 System object™ 的输入设定。您可以控制输入设定更改后产生的效果。

您还可以限制能否在对象使用过程中更改输入的复/实性、数据类型或大小。在您施加限制后,用户必须调用 release,才能更改这些方面。

响应输入设定更改

要在输入更改了大小、数据类型或复/实性时修改 System object 算法或属性,请实现 processInputSpecificationChangeImpl 方法。指定 System object 的各次调用之间输入设定更改时要执行的操作。

在此示例中,当任一输入为复数时,processInputSpecificationChangeImpl 会更改 isComplex 属性。

properties(Access = private)
    isComplex (1,1) logical = false;
end

methods (Access = protected)
    function processInputSpecificationChangeImpl(obj,input1,input2)
        if(isreal(input1) && isreal(input2))
            obj.isComplex = false;
        else
            obj.isComplex = true;
        end
    end
end

限制输入设定更改

要指定不能在使用 System object 使用过程中更改输入的复/实性、数据类型和大小,请实现 isInputComplexityMutableImpl、isInputDataTypeMutableImpl、isInputSizeMutableImpl 方法以返回 false。如果只想限制 System object 输入的某些方面,您可以只包含其中一个或两个方法。

methods (Access = protected)
   function flag = isInputComplexityMutableImpl(~,~)
       flag = false;
   end
   function flag = isInputDataTypeMutableImpl(~,~)
       flag = false;
   end
   function flag = isInputSizeMutableImpl(~,~)
       flag = false;
   end
end

以下 Counter System object 限制输入设定的所有三个方面。

classdef Counter < matlab.System
    %Counter Count values above a threshold
    
    properties
        Threshold = 1
    end
    
    properties (DiscreteState)
        Count
    end
    
    methods
        function obj = Counter(varargin)
            setProperties(obj,nargin,varargin{:});
        end
    end
    
    methods (Access=protected)
        function resetImpl(obj)
            obj.Count = 0;
        end
        
        function y = stepImpl(obj, u1)
            if (any(u1 >= obj.Threshold))
                obj.Count = obj.Count + 1;
            end
            y = obj.Count;
        end
        
        function flag = isInputComplexityMutableImpl(~,~)
            flag = false;
        end
        
        function flag = isInputDataTypeMutableImpl(~,~)
            flag = false;
        end
        
        function flag = isInputSizeMutableImpl(~,~)
            flag = false;
        end
    end
end

另请参阅

主题