主要内容

指定输出

有时,Simulink万博1manbetx.®不能在模型编译期间推断System对象™的输出特征。要给Simuli万博1manbetxnk更多关于System对象输出的信息,请使用以下方法。

设置输出大小

属性指定System对象输出的大小getOutputSizeImpl方法。当Simulink无法在模型编译期间无法从万博1manbetx输入中推断出输出大小时,使用此方法。例如,当系统对象具有多个输入或输出或具有可变的输出时。

对于可变大小的输入,传播的输入大小来自传播inputsizeimpl.根据环境的不同而不同。

  • 马铃薯®—当你第一次运行一个对象时,它使用输入的实际大小。

  • 万博1manbetxSimulink - 在模型运行之前设置所有输入大小的最大值,并且在运行期间不会更改。

类的子类matlab。系统基类和传播mixin类。

Classdef.逆符号......matlab.system.mixin.propagates.

使用getOutputSizeImpl方法指定输出大小。

方法(访问=保护)函数sizeout = getoutputsizeimpl(〜)sizeout = [1 1];结尾结尾

在完整的类定义文件中查看该方法。

Classdef.逆符号%逆决计数在阈值高于属性阈值= 1结尾属性(DiscreteState)数结尾方法(访问=保护)函数setupimpl(obj)obj.count = 0;结尾函数y = stepimpl(obj,u1,u2)如果u1大于阈值,则添加计数如果U2为真,则重置%如果(u2) obj。数数=0;eleesif.(任何(u1> obj.threshold))obj.count = obj.count + 1;结尾y = obj.Count;结尾函数resetImpl (obj) obj。数= 0;结尾函数[sz,dt,cp] = getDiscrotestatesPecificationImpl(〜,name)如果Strcmp(名称,'数数') sz = [1 1];dt ='双倍的';cp = false;别的错误(['错误:状态名称不正确:', 名称。']);结尾结尾函数getOutputDataTypeImpl(~) dataout ='双倍的';结尾函数sizeout = getoutputsizeimpl(〜)sizeout = [1 1];结尾函数cplxout = isOutputComplexImpl(~) cplxout = false;结尾函数fixedout = isOutputFixedSizeImpl(~) fixedout = true;结尾函数flag = isinputsizemutableimpl(〜,idx)如果Idx == 1 flag = true;别的标志= false;结尾结尾结尾结尾

设置固定或可变大小的输出

指定System对象输出为固定大小。固定大小的输出总是相同大小,而可变大小的输出可以是不同大小的向量。

万博1manbetxSimulink无法推断出可变大小输出的输出大小。为避免错误,实施IsoutputixedSizeImpl.getOutputSizeImpl

IsoutputixedSizeImpl.接受系统对象句柄并返回一个标志数组。数组大小等于输出端口的大小。这些标志的值及其含义如下:

  • 真正的- 输出大小是固定的(输出端口Matlab系统块会创建可变大小信号)

  • 错误的-输出大小是可变的(输出端口在Matlab系统块会产生固定尺寸的信号)

类的子类matlab。系统基类和matlab.system.mixin.propagates.mixin类。

Classdef.逆符号......matlab.system.mixin.propagates.

使用IsoutputixedSizeImpl.方法指定输出为固定大小。

方法(访问=保护)函数fixedout = isOutputFixedSizeImpl(~) fixedout = true;结尾结尾

在完整的类定义文件中查看该方法。

Classdef.逆符号%逆决计数在阈值高于属性阈值= 1结尾属性(DiscreteState)数结尾方法(访问=保护)函数setupimpl(obj)obj.count = 0;结尾函数y = stepimpl(obj,u1,u2)如果u1大于阈值,则添加计数如果U2为真,则重置%如果(u2) obj。数数=0;eleesif.(任何(u1> obj.threshold))obj.count = obj.count + 1;结尾y = obj.Count;结尾函数resetImpl (obj) obj。数= 0;结尾函数[sz,dt,cp] = getDiscrotestatesPecificationImpl(〜,name)如果Strcmp(名称,'数数') sz = [1 1];dt ='双倍的';cp = false;别的错误(['错误:状态名称不正确:', 名称。']);结尾结尾函数getOutputDataTypeImpl(~) dataout ='双倍的';结尾函数sizeout = getoutputsizeimpl(〜)sizeout = [1 1];结尾函数cplxout = isOutputComplexImpl(~) cplxout = false;结尾函数fixedout = isOutputFixedSizeImpl(~) fixedout = true;结尾函数flag = isinputsizemutableimpl(〜,idx)如果Idx == 1 flag = true;别的标志= false;结尾结尾结尾结尾

设置输出数据类型

使用该系统对象输出的数据类型getOutputDataTypeImpl方法。第二个示例显示如何使用总线输出指定增益对象。当Simulink无法在模型编译期间或想要万博1manbetx不同的输入和输出数据类型时,使用此方法。如果想要总线输出,也使用getOutputDataTypeImpl方法。要使用总线输出,必须在基础工作区中定义总线数据类型,您必须包含getOutputDataTypeImpl方法。

对于两个示例,来自两个例子的子类matlab。系统基类和matlab.system.mixin.propagates.mixin类。

Classdef.DataTypeChange < matlab。系统&......matlab.system.mixin.propagates.

在类定义文件中指定如何从MATLAB控制输出数据类型系统堵塞。使用getOutputDataTypeImpl方法将输出数据类型从双精度型更改为单精度型,或将输入传播为双精度型。类中的输出数据类型Stepimpl.方法,如有必要。

方法(访问=保护)函数= getOutputDataTypeImpl (obj)如果obj.quantize == trueout ='单身的';别的= propagatedInputDataType (obj, 1);结尾结尾结尾
Classdef.DataTypeChange < matlab。系统&......matlab.system.mixin.propagates.属性(nononnable)量化= false;结尾方法(访问=保护)函数y = stepimpl(obj,u)如果obj.quantize == true%强制转换以使输出数据类型与输入数据类型不同。Y =单身(U);别的%传播输出数据类型。y = u;结尾结尾函数= getOutputDataTypeImpl (obj)如果obj.quantize == trueout ='单身的';别的= propagatedInputDataType (obj, 1);结尾结尾结尾结尾

此模型显示了传播的双数据类型。

此模型显示将数据类型从DOUBLE更改为单个单个。这展示块显示量化数据的效果。

块面罩Matlab系统块包括在使用传播之间切换的编辑字段(量化=错误的)和从双倍切换到单个(量化=真正的)。

使用getOutputDataTypeImpl方法将输出数据类型指定为总线。在属性中指定总线名称。

属性(非全额)outputbusname ='bus_name';结尾方法(访问=保护)函数out = getoutputdatatypeimpl(obj)out = obj.outputbusname;结尾结尾

在完整的类定义文件中查看该方法。类定义文件中还包含用于实现对象自定义图标的代码Matlab系统堵塞

Classdef.busGain < matlab。系统&matlab.system.mixin.propagates.总线输入增益为2。属性gaink = 2;结尾属性(nononnable)outputbusname ='bus_name';结尾方法(访问=受保护)函数OUT = STEPIMPL(OBJ,IN)OUT.A = OBJ.GAINK * IN.A;out.b = obj.gaink * in.b;结尾函数out = getoutputsizeimpl(obj)out =传播inputsize(obj,1);结尾函数输出= isOutputComplexImpl(obj)输出= propagatedInputComplexity(obj, 1);结尾函数out = getoutputdatatypeimpl(obj)out = obj.outputbusname;结尾函数OUT = ISOUTPUTFIXEDSIZEIMPL(obj)out =传播inputfixedsize(obj,1);结尾结尾结尾

设置输出的复杂性

属性指定System对象输出是复杂的还是真实的isOutputComplexImpl方法。当Simulink不能在模型编译期间从输入万博1manbetx推断输出复杂度时,请使用此方法。

类的子类matlab。系统基类和传播mixin类。

Classdef.逆符号......matlab.system.mixin.propagates.

使用isOutputComplexImpl指定输出是真实的方法。

方法(访问=保护)函数cplxout = isOutputComplexImpl(~) cplxout = false;结尾结尾

在完整的类定义文件中查看该方法。

Classdef.逆符号%逆决计数在阈值高于属性阈值= 1结尾属性(DiscreteState)数结尾方法(访问=保护)函数setupimpl(obj)obj.count = 0;结尾函数y = stepimpl(obj,u1,u2)如果u1大于阈值,则添加计数如果U2为真,则重置%如果(u2) obj。数数=0;eleesif.(任何(u1> obj.threshold))obj.count = obj.count + 1;结尾y = obj.Count;结尾函数resetImpl (obj) obj。数= 0;结尾函数[sz,dt,cp] = getDiscrotestatesPecificationImpl(〜,name)如果Strcmp(名称,'数数') sz = [1 1];dt ='双倍的';cp = false;别的错误(['错误:状态名称不正确:', 名称。']);结尾结尾函数getOutputDataTypeImpl(~) dataout ='双倍的';结尾函数sizeout = getoutputsizeimpl(〜)sizeout = [1 1];结尾函数cplxout = isOutputComplexImpl(~) cplxout = false;结尾函数fixedout = isOutputFixedSizeImpl(~) fixedout = true;结尾函数flag = isinputsizemutableimpl(〜,idx)如果Idx == 1 flag = true;别的标志= false;结尾结尾结尾结尾

设置离散状态输出规范

使用该方法指定离散状态属性的大小,数据类型和复杂性getDiscretestatesPecificationImpl.方法。当系统对象有一个属性时,使用此方法DiscreteState属性,并且在模型编译期间,S万博1manbetximulink无法推断出输出规范。

类的子类matlab。系统基类和来自传播mixin类。

Classdef.逆符号......matlab.system.mixin.propagates.

使用getDiscretestatesPecificationImpl.指定大小和数据类型的方法。还指定了离散状态属性的复杂性数数,用于计数器重置示例。

函数[sz,dt,cp] = getDiscrotestatesPecificationImpl(〜,name)如果Strcmp(名称,'数数') sz = [1 1];dt ='双倍的';cp = false;别的错误(['错误:状态名称不正确:', 名称。']);结尾结尾

在完整的类定义文件中查看该方法。

Classdef.逆符号%逆决计数在阈值高于属性阈值= 1结尾属性(DiscreteState)数结尾方法(访问=保护)函数setupimpl(obj)obj.count = 0;结尾函数y = stepimpl(obj,u1,u2)如果u1大于阈值,则添加计数如果U2为真,则重置%如果(u2) obj。数数=0;eleesif.(任何(u1> obj.threshold))obj.count = obj.count + 1;结尾y = obj.Count;结尾函数resetImpl (obj) obj。数= 0;结尾函数[sz,dt,cp] = getDiscrotestatesPecificationImpl(〜,name)如果Strcmp(名称,'数数') sz = [1 1];dt ='双倍的';cp = false;别的错误(['错误:状态名称不正确:', 名称。']);结尾结尾函数getOutputDataTypeImpl(~) dataout ='双倍的';结尾函数sizeout = getoutputsizeimpl(〜)sizeout = [1 1];结尾函数cplxout = isOutputComplexImpl(~) cplxout = false;结尾函数fixedout = isOutputFixedSizeImpl(~) fixedout = true;结尾函数flag = isinputsizemutableimpl(〜,idx)如果Idx == 1 flag = true;别的标志= false;结尾结尾结尾结尾

也可以看看

|||||

相关的话题