小编Kau*_*ubh的帖子

有没有办法使用 python 库 FMPy 或 pyFMI 列出 FMU(或 FMU 中的子模型)的参数?

我有一个模型的 FMU,用例是更改 FMU 的参数值以查看对结果的影响。如果我无法访问 Modelica 模型,有没有办法使用 FMPy 或 pyFMI 列出 FMU 的顶级参数?

我一直在遵循的过程之一是使用 FMPy.gui 打开 FMU 并查看参数列表,然后在脚本中使用它们,但我想知道是否有更简单的方法,以便我可以列出然后在 Jupyter notebook 中根据需要更改参数?

python modelica fmi pyfmi

5
推荐指数
1
解决办法
605
查看次数

如何使用Python函数联合模拟fmu?

通过像 FMPy 这样的 Python 库,我能够针对给定的和模拟 fmus(使用fmpy.simulate_fmu) 。在这种情况下,函数simulate_fmu完成模拟并返回时间序列结果。start_timestop_time

但是,我想在 fmu 和 Python 函数之间创建一个闭环(即在 Python 脚本中初始化 fmu,每 0.1 秒后从 fmu 获取结果,并基于该结果将下一个时间步的输入值更新到 fmu) 。有没有办法使用 fmpy 或 pyfmi 等现有库来实现此目的?

python modelica fmi pyfmi

3
推荐指数
1
解决办法
4649
查看次数

如何通过 Python 在 Dymola 中设置 Advanced.EnableCodeExport 标志?

在工作流中,我尝试使用 dymola.egg 中的 Python 函数从 Dymola 自动执行 fmu 生成过程。我能够使用以下功能实现这一点。

dymola.translateModelFMU(model, True, 
                              fmiVersion ="2",
                              fmiType ="all");
Run Code Online (Sandbox Code Playgroud)

然而,这会生成没有二进制导出的 fmus(生成依赖于许可证的 fmus)。
我有可用的二进制导出浮动许可证,因此我想通过脚本检出并返回二进制导出许可证。为了实现这一点,有没有办法Advanced.EnableCodeExport = True通过Python进行设置?
有没有其他方法(其他库)来实现这一目标?目标是根据需要检查浮动二进制导出许可证。我想 dymola.close()Dymola 和二进制出口许可证都将退还给其他人使用。

python modelica dymola

2
推荐指数
1
解决办法
87
查看次数

Modelica 模型及其 fmu 对于相同的输入给出不同的结果

我在 Modelica 中有一个简单的电机模型,它在 Dymola 中以恒定电压运行时给出了预期的速度输出。但是当我将它导出为联合仿真 fmu(使用 Dymola 的 dassl 求解器)时,它在 fmpy 和 Simulink 等其他环境中给出了不同的答案。

model motor
  Modelica.Blocks.Interfaces.RealInput vol "voltage" annotation (Placement(
        transformation(extent={{-140,-20},{-100,20}})));
  Modelica.Blocks.Interfaces.RealOutput v[1] "velocity" annotation (Placement(
        transformation(extent={{100,-10},{120,10}})));
  Real x[2](start={0,0}) "stateVector";
  parameter Real A[:,:]=[1.511, -0.5488;1, 0];
  parameter Real B[:] = {0.0625,0};
  parameter Real C[:,:] = [0.03294,0.02697];
  parameter Modelica.SIunits.Time dT = 0.1 "samplingTime";
equation 
  x = A*delay(x, dT) + B*vol;
  v = C*x;
  annotation (Icon(coordinateSystem(preserveAspectRatio=false)), Diagram(
        coordinateSystem(preserveAspectRatio=false)));
end motor;
Run Code Online (Sandbox Code Playgroud)

只有当输入(此处为 vol)是恒定输入时,才能看到这种差异。对于阶跃或斜坡输入,Modelica 模型和 fmu 给出相同的答案。因此我认为这可能与 Dymola vs fmu 中 vol 的起始值有关。因此,我在输入端口上添加了起始值,但这没有帮助。

  Modelica.Blocks.Interfaces.RealInput …
Run Code Online (Sandbox Code Playgroud)

modelica dymola fmi

2
推荐指数
1
解决办法
87
查看次数

标签 统计

modelica ×4

fmi ×3

python ×3

dymola ×2

pyfmi ×2