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