主要内容

写2级MATLAB S-Functions

关于所二级MATLAB S-Functions

2级的MATLAB®s函数API允许您使用MATLAB语言来创建自定义模块与多个输入和输出端口和能够处理任何类型的信号产生的仿真软件金宝app®模型,包括矩阵和帧信号的任何数据类型。2级MATLAB函数API对应紧密API创建C墨西哥人S-functions。大部分的文档创建C墨西哥人S-functions MATLAB S-functions也适用于2级。为了避免重复,本节着重于提供特定的信息编写MATLAB S-functions 2级。

2级MATLAB函数是MATLAB函数定义的属性和行为的一个实例2级MATLAB函数块,在仿真软件MATLAB函数模型的引用。金宝app回调方法的MATLAB函数本身包含一组(见2级MATLAB函数回调方法),仿真软件引擎调用更金宝app新或模拟模型。回调方法执行初始化和计算的实际工作定义的块的输出功能。

为了便于这些任务,引擎将运行时对象传递给回调方法作为参数。运行时对象实际上是一个MATLAB的代理功能块,允许回调方法设置和访问块属性在模拟或模型更新。

关于运行时对象

当仿真软件MATL金宝appAB引擎调用一个2级s函数回调方法,它的一个实例金宝appSimulink.MSFcnRunTimeBlock类的方法作为参数。这个例子中,称为运行时对象的功能块,服务于同样的目的为2级MATLAB函数回调方法SimStruct结构符合C墨西哥人s函数回调方法。对象可以提供和获取信息的方法对各种元素的块港口、向量参数,状态,和工作。该方法通过获取或设置块运行时对象的属性或调用方法。看到的文档金宝appSimulink.MSFcnRunTimeBlock类信息获取和设置运行时对象的属性和调用运行时对象的方法。

运行时对象不支持MATLAB稀疏矩阵。金宝app例如,如果变量是一个运行时对象,以下行所二级MATLAB函数产生一个错误:

block.Outport (1)。Data = speye (10);

在哪里speye命令形式稀疏的单位矩阵。

请注意

MATLAB S-functions以外的其他MATLAB程序可以使用运行时对象获取信息MATLAB函数模型模拟。看到在模拟块数据的访问使用仿真软件金宝app为更多的信息。

2级MATLAB函数模板

使用基本的2级MATLAB函数模板msfuntmpl_basic.m要在创建一个新的2级MATLAB函数。模板包含框架的实现需要回调方法所二级MATLAB函数定义的API。写一个更复杂的功能,使用带注释的模板msfuntmpl.m

创建一个MATLAB的s函数,复制和编辑模板的复制必要的反映所需的行为你正在创造的功能。以下两个部分描述了MATLAB代码模板的内容。一节写2级MATLAB的s函数的例子描述如何编写一个2级MATLAB的s函数,模型单元延迟。

2级MATLAB函数回调方法

2级MATLAB函数API定义了签名和一般用途的回调方法构成所二级MATLAB函数。这些回调的函数本身提供了实现方法。实现反过来决定了块属性(例如,港口、参数和状态)和行为(例如,块输出作为时间的函数和输入、状态,和参数)。通过创建一个功能使用一组适当的回调方法,您可以定义一个块类型,满足应用程序的特定需求。

一个2级MATLAB函数必须包括以下回调方法:

  • 一个设置函数来初始化基本功能特点

  • 一个输出函数计算功能输出

你的s函数可以包含其他的方法,根据需求的s函数定义的块。2级定义的方法的MATLAB函数定义的API通常对应于同样的命名方法C墨西哥人s函数API。信息时,调用这些方法在模拟中,看到的流程视图金宝app仿真软件与C S-Functions引擎交互

下表列出了所有所二级MATLAB函数回调方法和C墨西哥人同行。

使用设置方法

的主体设置方法2级MATLAB函数初始化相应的实例所二级MATLAB功能块。在这方面,设置方法是类似的mdlInitializeSizesmdlInitializeSampleTimes回调方法由C实现的墨西哥人S-functions。的设置方法执行以下任务:

  • 初始化输入和输出端口的数量。

  • 设置属性,如尺寸,数据类型,复杂性,和样品时间为这些端口。

  • 指定块样品时间。看到指定样品时间使用仿真软件金宝app为更多的信息关于如何指定有效的样本。

  • 设置功能对话框参数的数量。

  • 注册s函数回调方法通过当地的处理函数的MATLAB函数RegBlockMethod功能块的运行时对象的方法。看到的文档金宝appSimulink.MSFcnRunTimeBlock对使用信息RegBlockMethod方法。

写2级MATLAB的s函数的例子

下面的步骤说明了如何编写一个简单的2级MATLAB函数。当适用时,步骤包括例子的s函数的例子msfcn_unit_delay.m使用的模型msfcndemo_sfundsc2。所有的代码使用的变量名称的s函数运行时对象。

  1. 复制所二级MATLAB函数模板msfuntmpl_basic.m你的工作目录。如果你改变文件名复制文件时,改变的函数名函数相同的名称。

  2. 修改设置方法来初始化函数的属性。对于这个示例:

    • 运行时对象的集合NumInputPortsNumOutputPorts属性1为了初始化一个输入端和一个输出端口。

    • 调用运行时对象的SetPreCompInpPortInfoToDynamicSetPreCompOutPortInfoToDynamic方法表明,输入和输出端口继承他们编译属性(尺寸、数据类型、复杂性和采样模式)的模型。

    • 设置DirectFeedthrough运行时对象的属性InputPort为了显示输入端口并不直接引线。保留默认值对于所有其他输入和输出端口属性设置在你的模板文件的副本。设置的值,DatatypeID,复杂性属性覆盖值继承使用SetPreCompInpPortInfoToDynamicSetPreCompOutPortInfoToDynamic方法。

    • 运行时对象的集合NumDialogPrms财产1为了初始化一个功能对话框参数。

    • 指定该功能有一个继承了样本时间通过设置运行时对象的价值SampleTimes财产[1 0]

    • 调用运行时对象的RegBlockMethod方法注册以下四个回调方法中使用这一功能。

      • PostPropagationSetup

      • InitializeConditions

      • 输出

      • 更新

      删除任何其他注册回调方法从你的模板文件的副本。在调用RegBlockMethod,第一个输入参数是函数API方法的名称,第二个输入参数是函数处理在MATLAB函数相关的本地函数。

    以下设置方法从msfcn_unit_delay.m执行前面的步骤:

    函数设置(块)% %注册一个对话框参数块。NumDialogPrms = 1;% %注册数量的输入和输出端口。NumInputPorts = 1;块。NumOutputPorts = 1;% %设置功能港口动态% %继承属性。block.SetPreCompInpPortInfoToDynamic;block.SetPreCompOutPortInfoToDynamic;% %硬编码特定端口属性block.InputPort (1)。尺寸= 1;block.InputPort (1)。DirectFeedthrough= false; block.OutputPort(1).Dimensions = 1; %% Set block sample time to [0.1 0] block.SampleTimes = [0.1 0]; %% Register methods block.RegBlockMethod('PostPropagationSetup',@DoPostPropSetup); block.RegBlockMethod('InitializeConditions',@InitConditions); block.RegBlockMethod('Outputs', @Output); block.RegBlockMethod('Update', @Update);

    如果你的s函数需要连续状态,初始化的连续状态设置使用运行时对象的方法NumContStates财产。不初始化离散状态设置方法。

  3. 初始化的离散状态PostPropagationSetup方法。一个2级MATLAB函数离散状态信息存储在一个DWork向量。默认的PostPropagationSetup方法在模板文件中对于这个例子就足够了。

    以下PostPropagationSetup方法从msfcn_unit_delay.m,名叫DoPostPropSetup的初始化一个DWork向量的名字x0

    函数DoPostPropSetup(块)% %设置Dwork块。NumDworks = 1;block.Dwork (1)。Name = ' x0 ';block.Dwork (1)。维= 1; block.Dwork(1).DatatypeID = 0; block.Dwork(1).Complexity = 'Real'; block.Dwork(1).UsedAsDiscState = true;

    如果您的s函数使用额外DWork向量,初始化它们PostPropagationSetup方法,(见使用MATLAB S-Functions DWork向量2级)。

  4. 初始化的值离散和连续状态或其他DWork向量InitializeConditions开始回调方法。使用开始回调方法值仿真开始时初始化一次。使用InitializeConditions值方法需要初始化时使再能使子系统包含功能。

    对于这个示例,使用InitializeConditions方法将离散状态的初始条件的价值功能的对话框参数。例如,InitializeConditions方法msfcn_unit_delay.m是:

    函数InitConditions(块)% %初始化Dwork block.Dwork (1)。Data = block.DialogPrm (1) . Data;

    为S-functions连续状态,使用ContStates运行时对象方法初始化连续的状态数据。例如:

    block.ContStates.Data (1) = 1.0;
  5. 计算函数的输出输出回调方法。对于这个示例,将输出设置为当前值的离散状态存储在DWork向量。

    输出方法msfcn_unit_delay.m是:

    函数输出(块)block.OutputPort (1)。Data = block.Dwork (1) . Data;
  6. 与连续函数,计算状态的衍生品衍生品回调方法。导数数据存储在运行时对象衍生品财产。例如,下面的行集第一个状态导数等于第一输入信号的值。

    block.Derivatives.Data (1) = block.InputPort (1) . data;

    这个示例不使用连续状态和,因此,不落实衍生品回调方法。

  7. 更新任何离散状态更新回调方法。在这个例子中,将值设置的当前值的离散状态第一输入信号。

    更新方法msfcn_unit_delay.m是:

    函数更新(块)block.Dwork (1)。Data = block.InputPort (1) . Data;
  8. 执行任何清理,如清除变量或内存终止方法。MATLAB与C墨西哥人S-functions所二级功能不需要有一个终止方法。

额外的回调方法的信息,请参阅2级MATLAB函数回调方法。运行时对象属性的列表,请参阅页面的引用金宝appSimulink.MSFcnRunTimeBlock和父类金宝appSimulink.RunTimeBlock

实例化一个2级MATLAB函数

使用2级MATLAB函数在一个模型中,复制的一个实例2级MATLAB函数块到模型中。打开块参数对话框,输入名称的MATLAB实现你的功能到文件功能名称字段。如果你的s函数使用任何额外的参数,输入参数值作为一个逗号分隔的列表块参数对话框参数字段。

为适应业务信号

以下是修改所二级MATLAB S-functions模板(msfuntmpl_basic.m)和额外的操作,这些操作允许您使用适应信号。

函数设置(块)%寄存器输出端口的属性block.OutputPort (1)。DimensionsMode =“变量”;块。RegBlockMethod (SetInputPortDimensionsMode, @SetInputDimsMode);函数DoPostPropSetup(块)%注册依赖规则更新当前的输出端口输出尺寸取决于输入端口% b和c。AddOutputDimsDependencyRules (a、b [c] @setOutputVarDims);%配置输出端口b相同的维数作为输入端口block.InputPortSameDimsAsOutputPort (a, b);%配置DWork时其大小重置输入大小变化。block.DWorkRequireResetForSignalSize(真正的);函数SetInputDimsMode(块、端口、dm) %设置维度模式block.InputPort(港口)。DimensionsMode = dm;block.OutputPort(港口)。DimensionsMode = dm;函数setOutputVarDims(块,opIdx inputIdx) %设置输出的电流(运行时)维度outDimsAfterReset = block.InputPort (inputIdx (1) .CurrentDimensions; block.OutputPort(opIdx).CurrentDimensions = outDimsAfterReset;

从2级MATLAB函数生成代码

生成代码的模型包含一个2级MATLAB函数要求您提供一个相应的目标语言编译器(TLC)文件。你不需要TLC文件加速模型包含一个2级MATLAB函数。的金宝app仿真软件加速器™软件运行所二级MATLAB S-functions解释模式。然而,m文件S-functions与加速模式不工作如果m文件s函数模型参考。有关编写MATLAB S-functions TLC文件的更多信息,参见内联S-Functions(金宝app仿真软件编码器)内联MATLAB文件S-Functions(金宝app仿真软件编码器)

MATLAB的s函数的例子

2级MATLAB函数示例提供一套自我记录的模型,说明了使用MATLAB S-functions 2级。输入sfundemos在MATLAB命令提示符查看示例。

MATLAB功能的局限性

  • 2级MATLAB S-functions不支持零交点检测。金宝app

  • 你不能触发的函数调用子系统所二级MATLAB函数。

另请参阅

|||

相关的话题