使用模型名称作为编程接口
您可以使用模型的名称作为编程接口来执行指定的 模拟阶段,并计算各个状态和时间的值, 指定.
此功能不适用于逐步运行模型、模拟模型 编程或调试。为此,请考虑以下替代方案:
模型要求
当您使用模型名称作为编程接口来计算模拟值时, 软件忽略状态转换和条件执行的影响。使用 此功能仅适用于实现简单动态系统的模型。这样的系统 必须满足这些要求:
-
模型中的所有状态都必须具有内置的非总线数据类型。
有关内置数据类型的详细信息,请参见关于Simulink中的数据类型。
-
模型必须包含最少量的状态逻辑,例如 Stateflow®图表和有条件执行的子系统。
-
模型必须仅包含Simulink库中的块。模型不能包含S函数或Simscape™块。
-
将状态值指定为向量时,模型中的状态必须 有真实的双重价值。
将此功能用于不满足这些要求的模型和模型 使用多任务执行可能会产生意想不到的结果。欲了解更多信息 关于多任务和单任务执行,请参阅基于时间的调度和代码生成(Simulink编码器)。
输入参数
要将模型名称用作编程接口,请将模型名称用作 虽然它是一个函数的名称。您始终提供四个输入:
-
t
-模拟时间,指定为真实的,双精度 标量 -
x
-状态值,指定为真实的double的向量 价值观或结构。将状态转换为Simulink.op.ModelOperatingPoint对象不是 supported.
-
u
-输入数据,指定为真实的向量,双精度 价值观 -
phase
-要执行的模拟阶段,指定为1 在这些选项中:-
'sizes'
-大小计算阶段,其中 软件确定模型输入,输出, 和状态向量 -
'compile'
-编译阶段,其中 软件传播信号和采样时间属性 -
'update'
-更新阶段,在此阶段,模型 计算离散状态的值 -
'outputs'
-输出阶段,其中 模型计算块和模型输出值 -
'derivs'
-衍生品阶段,其中 模型计算连续状态的导数 -
'term'
-终止阶段
-
输出参数的数量、类型和维数取决于 你执行的阶段。
使用此功能时,必须手动执行 适当的顺序。有关仿真如何运行的详细信息,请参见动力学系统中的仿真阶段。 此功能并不意味着逐步运行模拟或替代 典型的模拟工作流程。
执行大小计算阶段
要运行大小阶段,请使用以下语法,为 前三个输入参数。
[sys,x0,blks,st] = modelName([],[],[],'sizes');
大小阶段返回四个输出参数:
-
sys
-系统信息,作为向量返回, 七个要素:-
sys(1)
-连续状态的数量 系统 -
sys(2)
-离散状态的数量 系统 -
sys(3)
-模型输出的数量。 -
sys(4)
-模型输入的数量。 -
sys(5)
-保留。 -
sys(6)
-直接馈通标志,用于 系统值1
表示 系统具有直接馈通。值0
表示系统没有直接 馈通 -
sys(7)
-连续、离散、 小步长固定,采样时间可控, 系统此索引处的值指示ts
输出。
-
-
x0
-包含初始条件的向量 系统状态。 -
blks
-包含块名称的向量 与系统状态相关。中元素的顺序blks
匹配中元素的顺序x0
. -
st
- m-by-2
数组 系统的采样时间信息,其中m是 等于sys(7)
的值。的第一列 数组表示采样时间,第二列表示偏移。 有关采样时间的详细信息,请参阅采样时间类型。
执行编译阶段
要运行编译阶段,请使用以下语法,为 前三个输入参数。
[sys,x0,blks,st] = modelName([],[],[],'compile');
编译阶段返回与大小阶段相同的四个输出参数:
-
sys
-系统信息,作为向量返回, 七个要素:-
sys(1)
-连续状态的数量 系统 -
sys(2)
-离散状态的数量 系统 -
sys(3)
-模型输出的数量。 -
sys(4)
-模型输入的数量。 -
sys(5)
-保留。 -
sys(6)
-直接馈通标志,用于 系统值1
表示 系统具有直接馈通。值0
表示系统没有直接 馈通 -
sys(7)
-连续、离散、 小步长固定,采样时间可控, 系统此索引处的值指示ts
输出。
-
-
x0
-包含初始条件的向量 系统状态。 -
blks
-包含块名称的向量 与系统状态相关。中元素的顺序blks
匹配中元素的顺序x0
. -
st
- m-by-2
数组 系统的采样时间信息,其中m是 等于sys(7)
的值。的第一列 数组表示采样时间,第二列表示偏移。 有关采样时间的详细信息,请参阅采样时间类型。
在运行编译阶段之后,必须运行终止阶段,然后才能 关闭模型。如果在执行之前多次执行编译阶段, 终止阶段,则必须执行相同数量的终止阶段 次
计算离散状态值
要执行更新阶段并计算离散状态值,请使用以下语法。 您可以指定要计算离散状态的时间, 计算中使用的状态和输入值。
dStates = modelName(t,x,u,'update');
更新阶段将离散状态值dStates
作为 结构或数组,具体取决于您指定当前状态值的方式, x
.
-
当您将
x
指定为空([]
)或 作为结构,更新阶段返回dStates
作为 一个结构,包含所有的离散和连续状态值 具有内置数据类型的状态。 -
当您将
x
指定为向量或数组时, phase返回dStates
作为向量或数组, 仅包含具有真实的、双精度 价值观
计算输出值
要计算模型输出,请使用以下语法。您可以指定您希望 以计算离散状态和当前状态以及输入值,以在 计算。
out = modelName(t,x,u,'outputs');
计算连续状态导数
要计算连续状态的导数,请使用以下语法。您指定 要计算离散状态和当前状态的时间,以及输入 中使用的值 计算。
derivs = modelName(t,x,u,'derivs');
执行终止阶段
分析完模型行为后,使用以下语法执行 终止阶段,以便您可以关闭模型。指定[]
用于 前三个输入参数。
modelName([],[],[],'term');
原文链接:
Use Model Name as Programmatic Interface- MATLAB & Simulink- MathWorks 中国