直接馈通表示输出(或可变采样时间块的可变采样时间)直接由输入端口信号的值控制。通常,S功能输入端口在以下情况下具有直接馈通:
输出函数(mdlOutputs
)是输入的函数u
.也就是说,如果输入u
可通过访问mdlOutputs
.输出还可以包括图形输出,如XY Graph作用域。
“下次点击时间”功能(mdlGetTimeOfNextVarHit
)对于可变采样时间,S函数访问输入u.
一个需要其输入(即具有直接馈通)的系统的例子是操作
在哪里u是输入,k这就是收益,并且y是输出。
简单积分算法是不需要输入(即没有直接馈通)的系统的一个例子
在哪里x是国家, 是相对于时间的状态导数,u是输入,并且y是输出。金宝app动态仿真模块®集成的变量
正确设置direct feedthrough标志非常重要,因为它会影响模型中块的执行顺序,并用于检测代数循环(请参见代数循环概念在里面使用Simu金宝applink)。如果包含S函数的模型的模拟结果不收敛,或模拟失败,则可能错误地设置了直接馈通标志。请尝试打开直接馈通标志并设置代数循环求解器诊断到警告
(见代数循环选择权型号配置参数:诊断中的参考页金宝appSimulink图形用户界面)。随后运行仿真将显示模型中的任何代数循环,并显示引擎是否将s函数置于代数循环中。
您可以编写s函数来支持任意输入维度。金宝app在这种情况下,当仿真启动时,Simu金宝applink引擎通过评估驱动s函数的输入向量的维度来确定实际的输入维度。s函数还可以使用输入维度来确定连续状态的数量、离散状态的数量和输出的数量。
请注意
在特定的模型或不同的仿真期间,动态大小的输入可以对s函数的每个实例具有不同的大小,但是在特定的仿真过程中,s函数的每个实例的输入大小是静态的。
C-MEX函数与二级MATLAB®S函数可以有多个输入和输出端口,每个端口可以有不同的维度。维度的数量和每个维度的大小可以动态确定。
例如,下图显示了模型中相同S功能块的两个实例。
上部S功能块由一个具有三元素输出向量的块驱动。下部S功能块由一个具有标量输出的块驱动。通过指定S功能块具有动态大小的输入,相同的S功能可以适应这两种情况。Simulink引擎会自动调用具有相应输出向量的块大小输入向量。类似地,如果其他块特征(如输出数量或离散或连续状态数量)指定为动态大小,则引擎将这些向量定义为与输入向量相同的长度。金宝app
看到输入输出端口有关配置s功能输入和输出端口的更多信息。
2级MATLAB和C MEX s -函数都提供了以下示例时间选项,这允许在指定s -函数执行时具有高度的灵活性:
连续采样时间-对于具有连续状态和/或非采样过零的S函数(参见动态系统的仿真阶段对于零交叉点的解释)。对于这种类型的S函数,输出在较小的时间步长内发生变化。
连续但固定在次要时间步采样时间-用于需要在每个主要模拟步骤执行但在次要时间步期间不改变值的S函数。
离散采样时间-如果S函数的行为是离散时间间隔的函数,则可以定义采样时间来控制Simulink引擎调用S函数的时间。还可以定义延迟每个采样时间命中的偏移量。偏移量的值不能超过相应的采样时间。金宝app
一个采样时间命中在公式确定的时间值处发生
TimeHit = (n * period) + offset
其中整数n
是当前模拟步骤。的第一个值n
总是零。
如果定义离散采样时间,引擎将调用S函数mdlOutputs
和mdlUpdate
每次采样时间命中的例程(如前一等式中所定义)。
可变样本时间-一个离散的样本时间,其中样本之间的间隔可以变化。在每个仿真步骤开始时,对具有可变采样次数的s函数进行查询,以确定下一次命中的时间。
继承采样时间-有时S函数没有固有的采样时间特征(即,它是连续的或离散的,取决于系统中其他某些块的采样时间)。在这种情况下,您可以指定采样时间为继承.一个简单的例子是一个Gain块,它从驱动它的块继承了它的样本时间。
S函数可以从中继承其采样时间
开车的块
目的地的块
系统中最快的采样时间
要指定一个s函数的采样时间继承,在MATLAB二级s函数中使用-1INHERITED_SAMPLE_TIME
在C MEX中,S函数用作采样时间。有关采样时间传播的更多信息,请参阅传播如何影响继承的样本时间在金宝appSimulink用户指南.
s函数可以是单速率的,也可以是多速率的;多速率s函数有多个采样次数。
样本时间成对指定,格式如下:[采样时间
,偏移时间
].
C MEX S函数的有效采样时间对为
[continuous_sample_time, 0.0] [continuous_sample_time, fixed_in_minor_step_offset]离散样本时间周期,抵消][变量样本时间,0.0]
在哪里
连续样本时间=0.0固定样本时间=0.0小步偏差=1.0变量样本时间=-2.0
斜体中的变量名表示需要一个实值。
或者,您可以指定采样时间是从驱动块继承的
[继承的样本时间,0.0]
或
[继承的\u采样\u时间,固定的\u在\u次要\u步长\u偏移]
在哪里
继承的样本时间=-1.0
二级MATLAB S函数的有效采样时间对如下
[0抵消%连续采样时间[离散样本时间周期,抵消%离散样本时间[- 1,0]%继承样本时间[- 2,0]%变量样本时间
其中斜体的变量名表示需要一个实值。当使用连续采样时间时抵消
属于1
表示输出固定在较小的积分时间步长中。一个抵消
属于0
指示在每个较小的积分时间步长的输出更改。
使用以下指导原则来帮助指定示例时间:
在较小的集成步骤中发生变化的连续s函数应该注册[连续采样时间
,0
样品时间。
在较小的集成步骤中不发生变化的连续s函数应该注册[CONTINUOUS_SAMPLE_TIME, FIXED_IN_MINOR_STEP_OFFSET]
样品时间。
一个以指定速率变化的离散s函数应该寄存器离散采样时间对,[离散样本时间周期
,抵消
],在哪里
离散采样周期> 0.0
和
0≤抵消<离散采样周期
以可变速率变化的离散S函数应记录可变步长离散采样时间。
[变量样本时间,0.0]
在C MEX s -函数中mdlGetTimeOfNextVarHit
例程用于获取变步长离散任务的下一个样本命中时间。在二级MATLAB s函数中下一次
属性是在输出
方法设置下一个样本命中。
如果S函数没有内在采样时间,则必须指出采样时间是继承的。有两种情况:
如果s函数随着输入的变化而变化,即使是在很小的集成步骤中,也应该注册[继承的样本时间,0.0]
样品时间。
当输入发生变化时,S函数发生变化,但在次要集成步骤中不会发生变化(即,在次要时间步骤中保持不变),应注册[继承的\u采样\u时间,固定的\u在\u次要\u步长\u偏移]
样品时间。
的范围块是这种类型块的一个很好的例子。此块以其驱动块的速率运行,无论是连续的还是离散的,但从不以小步运行。如果它运行,范围显示将显示解算器的中间计算,而不是每个时间点的最终结果。
看到指定S函数采样时间有关在S函数中实现不同类型的采样时间的信息。
二级MATLAB S函数|MATLAB函数|功能|S函数生成器