主要内容

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/fmi2SetRealfmiSetInteger/fmi2SetIntegerfmiSetBoolean/fmi2SetBoolean,或fmiSetString/fmi2SetString

  • fmiGetXXX(FMI 1.0版)和fmi2GetXXX(FMI 2.0版)来表示任何方法:fmiGetReal/fmi2GetRealfmiGetInteger/fmi2GetIntegerfmiGetBoolean/fmi2GetBoolean,或fmiGetString/fmi2GetString

FMI 1.0版本的联合仿真调用序列

这些是s函数回调方法调用的FMI方法的调用顺序。

设置阶段

在编译结束时,FMU块通过调用这些FMI方法来执行设置活动:

  1. fmiGetTypesPlatform

  2. fmiGetVersion

  3. fmiInstantiateModel

  4. fmiSetTime

  5. 对于具有初始值的变量,fmiSetXXX

初始化阶段

在模拟开始时,FMU块设置内部状态并通过调用函数来执行其他初始化活动fmiSetXXX可调参数的方法。

输出阶段

在此阶段,FMU块通过调用以下FMI方法计算当前时间步的输出:

  1. 如果呼叫是第一步:

    1. fmiSetXXX

    2. fmiInitialize

    3. 如果事件发生,fmiEventUpdate

  2. 如果呼叫不是第一步:

    1. fmiSetTime

    2. fmiSetXXX(输入)

    3. fmiSetContinuousStates

    4. fmiCompletedIntegratorStep

    5. 如果事件发生,fmiEventUpdate

  3. 为输出,fmiGetXXX

更新阶段

函数来计算当前时间步长的状态,并执行其他主要的时间步活动fmiSetXXX输入的方法。

衍生品相

FMU模块通过调用以下FMI方法计算FMU连续状态的导数:

  1. fmiSetTime

  2. fmiSetContinuousStates

  3. fmiGetDerivatives

过零信号相位

FMU块通过调用以下FMI函数从FMU事件指示器计算过零矢量:

  1. fmiSetTime

  2. fmiSetContinuousStates

  3. fmiGetEventIndicators

终止阶段

在模拟结束时,FMU块通过调用这些FMI方法在结束模拟之前执行活动:

  1. fmiTerminate

  2. fmiFreeModelInstance

FMI 1.0版本的模型交换调用序列

这些是s函数回调方法调用的FMI方法的调用顺序。

设置阶段

在编译结束时,FMU块通过调用这些FMI函数来执行设置活动:

  1. fmiGetTypesPlatform

  2. fmiGetVersion

  3. fmiInstantiateModel

  4. fmiSetTime

  5. 对于具有初始值的变量,fmiSetXXX

初始化阶段

在模拟开始时,FMU块设置内部状态并通过调用这些状态来执行其他初始化活动fmiSetXXX可调参数的方法。

输出阶段

FMU块通过调用以下FMI函数来计算当前时间步长的输出:

  1. 如果呼叫是第一步:

    1. fmiSetXXX

    2. fmiInitialize

    3. 如果事件发生,fmiEventUpdate

  2. 如果打电话不是第一步,fmiDoStep

  3. 为输出,fmiGetXXX

更新阶段

函数来计算当前时间步长的状态,并执行其他主要的时间步活动fmiSetXXX输入的方法。

终止阶段

在模拟结束时,FMU块在结束模拟之前执行活动。该方法调用以下方法:

  1. fmiTerminate

  2. fmiFreeModelInstance

FMI 2.0版本的联合仿真调用序列

这些是s函数回调方法调用的FMI方法的调用顺序。

设置阶段

在编译结束时,FMU块通过调用这些FMI方法来执行设置活动:

  1. fmi2GetTypesPlatform

  2. fmi2GetVersion

  3. fmi2Instantiate

  4. 对于具有初始值的变量,fmi2SetXXX

初始化阶段

在模拟开始时,FMU块通过调用这些FMI方法来设置内部状态并执行其他初始化活动:

  1. 对于具有初始值的变量,fmi2SetXXX

  2. fmi2SetupExperiment

输出阶段

在此阶段,FMU块通过调用以下FMI方法计算当前时间步的输出:

  1. 如果呼叫是第一步:

    1. fmi2EnterInitializationMode

    2. 为输入,fmi2SetXXX

    3. fmi2InitializationMode

  2. 如果打电话不是第一步,fmi2DoStep

  3. 为输出,fmi2GetXXX

更新阶段

在此阶段,FMU块计算当前时间步长的状态,并执行其他主要时间步的活动。此方法调用fmi2SetXXX为输入。

终止阶段

在模拟结束时,FMU块在调用这些方法结束模拟之前执行活动:

  1. fmi2Terminate

  2. fmi2FreeModelInstance

FMI 2.0版本的模型交换调用序列

这些是s函数回调方法调用的FMI方法的调用顺序。

设置阶段

在编译结束时,FMU块通过调用这些FMI方法来执行设置活动:

  1. fmi2GetTypesPlatform

  2. fmi2GetVersion

  3. fmi2Instantiate

  4. 对于具有初始值的变量,fmi2SetXXX

初始化阶段

在模拟开始时,FMU块通过调用这些FMI方法设置内部状态并执行其他初始化活动。

  1. 对于可调参数,fmi2SetXXX

  2. fmi2SetupExperiment

输出阶段

FMU块通过调用以下FMI方法计算当前时间步的输出:

  1. 如果呼叫是第一步:

    1. fmi2EnterIntializationMode

    2. 为输入,fmi2SetXXX

    3. fmi2ExitIntializationMode

  2. 如果呼叫不是第一步:

    1. fmi1SetTime

    2. 对于连续输入,fmi2SetXXX

    3. fmi2SetContinuousStates

    4. fmi2SetContinuousStates

    5. fmi2CompletedIntegratorStep

    6. 如果事件发生:

      1. fmi2EnterEventMode

      2. 为输入,fmi2SetXXX

      3. fmi2NewDiscreteStates

      4. fmi2EnterContinuousTimeMode

      5. 如果事件发生:

        1. fmi2EnterEventMode

        2. 为输入,fmi2SetXXX

        3. fmi2NewDiscreteStates

        4. fmi2EnterContinuousTimeMode

  3. 为输出,fmi2GetXXX

更新阶段

函数来计算当前时间步长的状态,并执行其他主要的时间步活动fmi2SetXXX输入的方法。

衍生品相

FMU模块通过调用以下FMI方法计算FMU连续状态的导数:

  1. fmi2SetTime

  2. fmi2SetContinuousStates

  3. fmi2GetEventIndicators

过零信号相位

FMU块通过调用以下FMI方法从FMU事件指示器计算过零矢量:

  1. fmi2SetTime

  2. fmi2SetContinuousStates

  3. fmi2GetEventIndicators

终止阶段

在模拟结束时,FMU块在调用这些方法结束模拟之前执行活动:

  1. fmi2Terminate

  2. fmi2FreeInstance

另请参阅

外部网站