协同仿真执行和数值补偿

金宝app®金宝app支持组件之间的协同仿真与当地求解器或外部涉及仿真工具。例如,协同仿真可以包括为Simulink和第三方工具或自定义代码之间的协同仿真网关实现的S-功能。金宝app甲协同仿真组件可以在导入到Simulink的协同仿真模式是一个功能性样机单元(FMU)。金宝app

执行时机

在Si金宝appmulink仿真中,求解器的步长必须是每个周期的、离散的块样本时间的整数因子。换句话说,如果一个联合模拟组件定义了它自己的样本时间,那么Simulink必须在这些时间步长与组件通信。金宝app联合仿真可能涉及的组件的时间步长是内部确定的,而Simulink不知道这些组件的时间步长。金宝appSimulink唯一可用的信息是块样本时间,可以通过FMU块的通信步金宝app长参数获得,也可以通过S-function实现中的样本时间定义获得。块样本时间决定了Simulink必须与联合仿真组件通信的时间步长。金宝app如果求解器步长不是自动的,则通信步长必须是求解器步长的整数倍。

如果协同仿真部件在内部使用的本地解算器,则该本地解算器也应确定所述块的通信步骤大小时予以考虑。当地求解器的步长不暴露在Simulink和实施的知识是要正确设置通信步长。金宝app协同仿真的潜在的不兼容的情况下,该行为还取决于该内部求解器的实现。

数值补偿

协同仿真信号通常代表了由于协同仿真离散连续物理量。协同仿真部件,诸如C MEX S函数和协同仿真FMU块之间的数据交换可以由信号延迟引进数值不准确性。使用数字补偿,提高了使用自己的求解仿真涉及的组件数值行为。模型顾问包括检查其检测协同仿真组件和建议的数值补偿。

数值补偿先决条件

金宝appSimulink中自动执行用于协同仿真组件之间的协同仿真信号数值的补偿。金宝appSimulink中执行在目标块的输入数值的补偿。的信号被自动资格数值补偿如果它的源端口和目的端口满足这些条件:

  • 信号的源端口必须满足以下要求:

    • S-功能

      • 输出端口数据类型为double

      • 输出端口采样时间具有周期性和离散性

      • 输出端口的复杂性是真实的

      • ssSetOutputPortIsContinuousQuantity ()被设置为真正的的端口

    • FMU

      • 输出端口数据类型为double

      • FMU处于协同仿真模式

      • 块样本时间具有周期性和离散性

      • 输出端口映射到具有可变可变性=“连续”modelDescription.xml

  • 信号的目的端口必须满足以下要求:

    • S-功能

      • 输入端口的数据类型是双

      • 输入端口采样时间具有周期性和离散性

      • 输入端口的复杂性是真实的

      • ssSetInputPortIsContinuousQuantity()被设置为真正的此端口

      • ssSetInputPortDirectFeedThrough()被设置为此端口

    • FMU

      • 输入端口的数据类型是双

      • FMU处于协同仿真模式

      • 块样本时间具有周期性和离散性

      • 输入端口映射到一个变量可变性=“连续”modelDescription.xml

有关识别用于数值补偿的联合模拟信号的示例,请参见slexCoSimTripleMassSpringExample模型。

管理数值补偿选项使用对话框

当Simu金宝applink中检测到可以具有数值补偿的信号,它标志着与对应的输入端口图标。

以下模型包括可以进行数值补偿的共仿真信号:

  1. 打开模型。

    slexCoSimTripleMassSpringExample

  2. 更新图表。金宝appSimulink中检测到可以具有数值补偿的信号,并且标记与相应的端口图标。

  3. 调整补偿精度的参数:右键单击该图标,然后选择配置联合仿真信号补偿并调整计算参数:

    • 外推法-该方法利用由先前的时间步长产生的模拟信号值外推法,计算出当前模拟时间步长的补偿信号值。有三种外推法可供选择。

      • 线性是默认的,它使用来自先前两个时间步骤来线性地估计在模拟的当前时间步骤中使用的信号值生成的信号的值。

      • 二次用途信号的前三个时间值的步骤将数据拟合为二次多项式。

      • 立方体使用信号的前四个时间步骤的值将数据代入到一个三次多项式。

      在仿真开始时,当过去的信号值数量不足时,自动采用低阶外推法。高阶外推法利用更多的过去信号值来预测当前信号值,可以提高预测精度。然而,高阶外推法在数值上也是不稳定的[1]。最好的外推法取决于信号的性质。

    • 信号校正系数- 该方法进一步调节基于过去的模拟结果和过去的估计信号值的外插信号值。的校正系数供之间的选择01,在那里0表示不需要对外推的信号值进行调整。修正系数的默认设置是1。对于给定的外推信号,在给定的时间步长下,信号校正系数越大,对外推信号的调整量越大。

    如果数值补偿不利于通过左键单击禁用图标。当禁用时,图标将显示一个红色斜线。

从命令行管理数值补偿选项

如果自动补偿是不可能的,你可以使用手动启用数字补偿CoSimSignalCompensationMode属性。

CoSimSignalCompensationMode属性有以下值:

图标 设置 行为

'汽车'

启用自动数字补偿,允许Simulink检测端口是否有适合数字补偿的信号。金宝app

“Auto_Off”

禁用自动数字补偿。图标出现带有红色斜杠。

“总是”

强迫端口被认为是数字补偿兼容的,即使信号不符合数字补偿的条件。这个设置允许您添加补偿,而不必声明它是连续的。

“Always_Off”

禁用强制端口被认为是数字补偿兼容的。

例如,要禁用前一个模型的第一个输入端口的数值补偿:

  1. 选择要为其选择数字补偿端口的块。例如,获取当前选择块的所有端口句柄,华东桐柏

    P = get_param(GCB, 'PortHandles')

    该函数返回的所有端口当前所选块。例如,

    p = struct with fields: Inport: [22.0001 20.0001] Outport:[23.0001 25.0001]使能:[]触发器:[]状态:[]LConn: []
  2. 禁用第一个端口的数字补偿:

    set_param (p.Inport (1),“CoSimSignalCompensationMode”、“Auto_Off”)

    关联端口以红色斜线显示。

您还可以从命令行设置信号补偿参数。同样,第一步是获取端口句柄:

P = get_param(块,“PortHandles”

使用。设置补偿参数CoSimSignalCompensationConfig参数,格式为:

set_param(p.Inport,“CoSimSignalCompensationConfig””{< CompensationParam >: < ParamValue >}’

在此表中查找补偿参数名称和可能的值:

补偿参数 参数名称 参数值
ExtrapolationMethod 外推法 “LinearExtrapolation”'QuadraticExtrapolation', 要么“CubicExtrapolation”
CompensationCoefficient 补偿系数 标间01

例如,设定该端口的外推法:

set_param(p.Inport, 'CoSimSignalCompensationConfig', '{ “ExtrapolationMethod”: “LinearExtrapolation”}'))

设置外推法和补偿系数:

set_param(p.Inport,“CoSimSignalCompensationConfig”,'{"ExtrapolationMethod":"QuadraticExtrapolation", "CompensationCoefficient":"0.7"}' ))

参考文献

[1]龙格,卡尔。"超级经验主义"数学和物理的时代。1901年第46卷第224-243页。

也可以看看

|||||

相关的话题