主要内容

联合仿真执行与数值补偿

万博1manbetx®万博1manbetx支持与本地求解器组件之间的联合仿真,或涉及外部仿真工具。例如,协同仿真可以包含一个s函数,它被实现为Simulink和第三方工具或自定义代码之间的协同仿真网关。万博1manbetx协同仿真组件可以是导入Simulink的协同仿真模式下的功能模型单元(FMU)。万博1manbetx

执行时间

在Si万博1manbetxmulink仿真中,求解器的步长必须是每个周期性的离散块采样时间的整数因数。换句话说,如果一个联合仿真组件定义了它自己的示例时间,那么Simulink必须在这些时间步骤中与该组件通信。万博1manbetx联合仿真可能涉及到一些组件,这些组件的时间步长是在内部确定的,并且是Simulink所不知道的。万博1manbetxSimulink唯一可用的信息是块采样时间,要么通过FMU块的通信步万博1manbetx长参数,要么通过s函数实现中的采样时间定义。块采样时间决定了Simulink必须与协同仿真组件通信的时间步长。万博1manbetx如果求解器步长不是自动的,则通信步长必须是求解器步长的整数倍。

如果联合模拟组件内部使用了一个本地解算器,那么在确定块的通信步长时,也应该考虑这个本地解算器。本地解算器的步长不会暴露在Simulink中,要正确设置通信步长,必须了解实现方法。万博1manbetx在潜在的不兼容情况下,联合模拟的行为也依赖于这个内部求解器实现。

数值补偿

联合仿真信号通常表示由于联合仿真而离散的连续物理量。协同仿真组件(如C MEX s -函数和协同仿真FMU块)之间的数据交换会引入信号延迟带来的数值误差。使用数值补偿来改善涉及使用自己求解器的组件的模拟数值行为。Model Advisor包括检测联合仿真组件和建议数值补偿的检查。

数值补偿先决条件

万博1manbetxSimulink自动对协同仿真部件之间的协同仿真信号进行数值补偿。万博1manbetxSimulink在目标块的输入处执行数值补偿。如果信号的源端口和目的端口满足以下条件,则信号自动合格进行数值补偿:

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

    • 功能

      • 输出端口数据类型为双精度

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

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

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

    • FMU

      • 输出端口数据类型为双精度

      • FMU处于联合仿真模式

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

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

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

    • 功能

      • 输入端口数据类型为双精度

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

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

      • ssSetInputPortIsContinuousQuantity ()被设置为真正的这个港口

      • ssSetInputPortDirectFeedThrough ()被设置为这个港口

    • FMU

      • 输入端口数据类型为双精度

      • FMU处于联合仿真模式

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

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

有关识别数值补偿的联合仿真信号的示例,请参阅slexCoSimTripleMassSpringExample模型。

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

当Simu万博1manbetxlink检测到可以进行数值补偿的信号时,用标记标记相应的输入端口图标。

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

  1. 打开模型。

    slexCoSimTripleMassSpringExample

  2. 更新图。万博1manbetxSimulink检测到可以进行数值补偿的信号,并标记相应的端口图标。

  3. 调整补偿精度的参数:右键单击图标并选择配置协同仿真信号补偿并调整计算参数:

    • 外推法-该方法利用前一时间步生成的仿真信号值外推,计算当前仿真时间步的补偿信号值。有三种外推方法可供选择。

      • 线性为默认值,使用前两个时间步生成的信号值线性估计当前仿真时间步使用的信号值。

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

      • 立方使用前四个时间步的信号值将数据拟合为一个三次多项式。

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

    • 信号校正系数-该方法根据过去的模拟结果和过去的估计信号值进一步调整外推信号值。给出了一个校正系数以供选择01,在那里0表示不对外推信号值进行调整。修正系数的默认设置为1.对于给定时间步长的给定外推信号,信号校正系数越大,对给定外推信号的调整量越大。

    如果数值补偿不起作用,则左键单击图标。当禁用时,图标出现一个红色斜线。

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

如果自动补偿是不可能的,您可以手动启用数值补偿使用CoSimSignalCompensationMode财产。

CoSimSignalCompensationMode属性有以下值:

图标 设置 行为

“汽车”

启用自动数值补偿,允许Simulink检测端口是否有符合数值补偿条件的信号。万博1manbetx

“Auto_Off”

禁用自动数字补偿。图标出现一个红色的斜线。

“总是”

强制端口被认为是数值补偿依从,即使信号不符合数值补偿。此设置允许您添加补偿,而无需声明它是连续的。

“Always_Off”

禁用强制端口被认为是数值补偿依从。

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

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

    p = get_param(gcb, 'PortHandles')

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

    p = struct with fields: Inport: [22.0001 20.0001] Outport: [23.0001 25.0001] Enable: [] Trigger: [] State: [] LConn: [] RConn: [] Ifaction: [] Reset: []
  2. 禁用第一个端口的数值补偿。

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

    关联的端口以红色斜杠显示。

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

p = get_param(块,“PortHandles”

属性设置补偿参数CoSimSignalCompensationConfig参数,格式如下:

set_param (p。轮廓尺寸,“CoSimSignalCompensationConfig””{< CompensationParam >: < ParamValue >}”

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

补偿参数 参数名称 参数值
ExtrapolationMethod 外推法 “LinearExtrapolation”“QuadraticExtrapolation”,或“CubicExtrapolation”
CompensationCoefficient 补偿系数 标量之间01

例如,设置端口的外推方法:

set_param(p. import, 'CoSimSignalCompensationConfig', '{"ExtrapolationMethod":"LinearExtrapolation"}'))

设置外推方法和补偿系数:

set_param (p。轮廓尺寸,“CoSimSignalCompensationConfig”,'{"ExtrapolationMethod":"QuadraticExtrapolation", "CompensationCoefficient":"0.7"}' ))

参考文献

[1]龙格,卡尔。"Uber empirische Funktionen and die Interpolation zwischen a distance Ordinaten",时间:für数学和物理学.第46卷,1901年,224-243页。

另请参阅

|||||

相关的话题