FMU块调用序列
在模拟包含FMU块的模型时,如Simulink金宝app®通过不同的Simulink引擎阶段,FMU块调用F金宝appMU联合仿真和模型交换方法的FMI版本1.0和2.0 (fmi
*和fmi2
*方法)。本主题介绍FMI标准在这些阶段调用序列。
本主题使用:
fmiSetXXX
(FMI 1.0版)和fmi2SetXXX
(FMI 2.0版)来表示任何方法:fmiSetReal
/fmi2SetReal
,fmiSetInteger
/fmi2SetInteger
,fmiSetBoolean
/fmi2SetBoolean
,或fmiSetString
/fmi2SetString
.fmiGetXXX
(FMI 1.0版)和fmi2GetXXX
(FMI 2.0版)来表示任何方法:fmiGetReal
/fmi2GetReal
,fmiGetInteger
/fmi2GetInteger
,fmiGetBoolean
/fmi2GetBoolean
,或fmiGetString
/fmi2GetString
.
FMI 1.0版本的联合仿真调用序列
这些是s函数回调方法调用的FMI方法的调用顺序。
设置阶段
在编译结束时,FMU块通过调用这些FMI方法来执行设置活动:
fmiGetTypesPlatform
fmiGetVersion
fmiInstantiateModel
fmiSetTime
对于具有初始值的变量,
fmiSetXXX
初始化阶段
在模拟开始时,FMU块设置内部状态并通过调用函数来执行其他初始化活动fmiSetXXX
可调参数的方法。
输出阶段
在此阶段,FMU块通过调用以下FMI方法计算当前时间步的输出:
如果呼叫是第一步:
fmiSetXXX
fmiInitialize
如果事件发生,
fmiEventUpdate
如果呼叫不是第一步:
fmiSetTime
fmiSetXXX
(输入)fmiSetContinuousStates
fmiCompletedIntegratorStep
如果事件发生,
fmiEventUpdate
为输出,
fmiGetXXX
更新阶段
函数来计算当前时间步长的状态,并执行其他主要的时间步活动fmiSetXXX
输入的方法。
衍生品相
FMU模块通过调用以下FMI方法计算FMU连续状态的导数:
fmiSetTime
fmiSetContinuousStates
fmiGetDerivatives
过零信号相位
FMU块通过调用以下FMI函数从FMU事件指示器计算过零矢量:
fmiSetTime
fmiSetContinuousStates
fmiGetEventIndicators
终止阶段
在模拟结束时,FMU块通过调用这些FMI方法在结束模拟之前执行活动:
fmiTerminate
fmiFreeModelInstance
FMI 1.0版本的模型交换调用序列
这些是s函数回调方法调用的FMI方法的调用顺序。
设置阶段
在编译结束时,FMU块通过调用这些FMI函数来执行设置活动:
fmiGetTypesPlatform
fmiGetVersion
fmiInstantiateModel
fmiSetTime
对于具有初始值的变量,
fmiSetXXX
初始化阶段
在模拟开始时,FMU块设置内部状态并通过调用这些状态来执行其他初始化活动fmiSetXXX
可调参数的方法。
输出阶段
FMU块通过调用以下FMI函数来计算当前时间步长的输出:
如果呼叫是第一步:
fmiSetXXX
fmiInitialize
如果事件发生,
fmiEventUpdate
如果打电话不是第一步,
fmiDoStep
,为输出,
fmiGetXXX
更新阶段
函数来计算当前时间步长的状态,并执行其他主要的时间步活动fmiSetXXX
输入的方法。
终止阶段
在模拟结束时,FMU块在结束模拟之前执行活动。该方法调用以下方法:
fmiTerminate
fmiFreeModelInstance
FMI 2.0版本的联合仿真调用序列
这些是s函数回调方法调用的FMI方法的调用顺序。
设置阶段
在编译结束时,FMU块通过调用这些FMI方法来执行设置活动:
fmi2GetTypesPlatform
fmi2GetVersion
fmi2Instantiate
对于具有初始值的变量,
fmi2SetXXX
初始化阶段
在模拟开始时,FMU块通过调用这些FMI方法来设置内部状态并执行其他初始化活动:
对于具有初始值的变量,
fmi2SetXXX
fmi2SetupExperiment
输出阶段
在此阶段,FMU块通过调用以下FMI方法计算当前时间步的输出:
如果呼叫是第一步:
fmi2EnterInitializationMode
为输入,
fmi2SetXXX
fmi2InitializationMode
如果打电话不是第一步,
fmi2DoStep
为输出,
fmi2GetXXX
更新阶段
在此阶段,FMU块计算当前时间步长的状态,并执行其他主要时间步的活动。此方法调用fmi2SetXXX
为输入。
终止阶段
在模拟结束时,FMU块在调用这些方法结束模拟之前执行活动:
fmi2Terminate
fmi2FreeModelInstance
FMI 2.0版本的模型交换调用序列
这些是s函数回调方法调用的FMI方法的调用顺序。
设置阶段
在编译结束时,FMU块通过调用这些FMI方法来执行设置活动:
fmi2GetTypesPlatform
fmi2GetVersion
fmi2Instantiate
对于具有初始值的变量,
fmi2SetXXX
初始化阶段
在模拟开始时,FMU块通过调用这些FMI方法设置内部状态并执行其他初始化活动。
对于可调参数,
fmi2SetXXX
fmi2SetupExperiment
输出阶段
FMU块通过调用以下FMI方法计算当前时间步的输出:
如果呼叫是第一步:
fmi2EnterIntializationMode
为输入,
fmi2SetXXX
fmi2ExitIntializationMode
如果呼叫不是第一步:
fmi1SetTime
对于连续输入,
fmi2SetXXX
fmi2SetContinuousStates
fmi2SetContinuousStates
fmi2CompletedIntegratorStep
如果事件发生:
fmi2EnterEventMode
为输入,
fmi2SetXXX
fmi2NewDiscreteStates
fmi2EnterContinuousTimeMode
如果事件发生:
fmi2EnterEventMode
为输入,
fmi2SetXXX
fmi2NewDiscreteStates
fmi2EnterContinuousTimeMode
为输出,
fmi2GetXXX
更新阶段
函数来计算当前时间步长的状态,并执行其他主要的时间步活动fmi2SetXXX
输入的方法。
衍生品相
FMU模块通过调用以下FMI方法计算FMU连续状态的导数:
fmi2SetTime
fmi2SetContinuousStates
fmi2GetEventIndicators
过零信号相位
FMU块通过调用以下FMI方法从FMU事件指示器计算过零矢量:
fmi2SetTime
fmi2SetContinuousStates
fmi2GetEventIndicators
终止阶段
在模拟结束时,FMU块在调用这些方法结束模拟之前执行活动:
fmi2Terminate
fmi2FreeInstance