问题标签 [dymola]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
539 浏览

c - 是否可以将多个值从外部文件返回到 Dymola?

例如,我有一个返回结构的 C 外部函数。是否可以将结构返回给 Modelica?

在 Modelica 中,

0 投票
3 回答
1046 浏览

real-time - Dymola/Modelica 实时仿真进展太快

我想在 Dymola 中实时模拟模型以供 HiL 使用。在结果中,我看到模拟的推进速度太快了大约 5%。

积分在 T = 691200 成功终止

集成的 CPU 时间:6.57e+005 秒

一个 GRID 间隔的 CPU 时间:951 毫秒

我已经尝试增加网格间隔以减少相对误差,但模拟仍然进展得太快。我只阅读了降低模型复杂性以允许在定义的时间步长内进行仿真的方法。

请注意,模拟确实跟上实时,甚至更快。我怎样才能在这种情况下匹配模拟时间和实时?

编辑1:

我使用了 Lsodar 求解器,并在实时选项卡中选中了“与实时选项同步”。我有实时模拟许可证选项。我在 Windows 7 上使用 Dymola 2013。这是步长为 15 秒的结果:

积分在 T = 691200 成功终止

集成的 CPU 时间:6.6e+005 秒

一个 GRID 间隔的 CPU 时间:1.43e+004 毫秒

偏差仍然约为 4.5%。

但是,我没有使用内联集成。

我是否需要硬实时或内联集成来改善这些结果?是否可以使用软实时获得低于 4.5% 的偏差?

编辑2:实时和模拟进度之间的相对差异(以 % 为单位)

我从 Berkeley Buildings 库中取出 Python27 块来读取系统时间并将其与 Simulation Advance 进行比较。结果显示,模拟开始 36 小时后,模拟速度略有下降(与实时相比)。模拟开始大约 72 小时后,它开始比实时速度快 10%。此外,在 72 小时之后,结果中的抖动会增加。

有什么解释吗?

下一步将是: - 更改为固定步长求解器(这可能是解决方案的重要组成部分) - 从 DDE 服务器更改为 OPC 服务器,但目前在 Dymola 2013 中似乎不可能。

编辑3: 使用固定步长求解器的相对仿真时间偏差

不...使用固定步长求解器似乎确实可以解决问题。在模拟时间的前 48 小时内,偏差似乎等于使用​​可变步长求解器的偏差。在此示例中,我使用了 Rkfix 3 求解器,积分器步长为 0.1。

没有人知道如何摆脱那些巨大的偏差?

0 投票
1 回答
568 浏览

modelica - 在 Modelica 中模拟空间偏微分方程 - 在特定时间访问变量值

这个问题与我以前的问题有些相关,我没有得到正确的解决方案。链接:早期的 SO-thread

我正在求解具有一个空间维度的时变偏微分方程(例如热方程 - 请参见下面的链接)。我正在使用线的数值方法,即将空间导数离散化,产生一个 ODE 系统,该系统很容易在 Modelica 中求解(使用 Dymola 工具)。准确地说,当我模拟系统或绘制结果时,我的问题就会出现。方程本身似乎得到了正确求解,但我想表达所有离散状态变量在特定时间点的空间变化,而不是每个离散状态的单个时变行为。

导致我的问题的策略在这个Youtube 教程中进行了说明,顺便说一下,这不是我制作的。正如您在本教程最后看到的那样,分别为棒中的所有离散点绘制了温度随时间变化的行为。我想要的是显示在特定时间通过棒的温度的图,即作为空间坐标函数的温度。我正在努力实现这一目标的策略是:给定一个包含 N 个条目的状态向量:

..我会使用plotArray如下所示的 Dymola 函数。

直观地说,这将产生一个图,显示温度作为空间坐标的函数,或者准确地说是离散单位行中的数字。尽管此命令会产生结果,但图中的所有 T 值似乎都为 0,这绝对不是这种情况。我的问题是:如何在给定时间成功获取并绘制所有离散点的温度?在此先感谢您的帮助。

该问题的代码如下所示。

附加编辑:模拟清楚地表明,例如 T[3],即离散段的温度。3,从30度开始,到70度结束。但是,当我在命令窗口中写入 T[3] 时,我得到 T3 = 0.0 作为回报。这是为什么?这是问题的核心,因为plotArray如果我设法在特定时间提取实际变量值而不仅仅是 0.0,该函数就会起作用。

建议的解决方案:这是实现我想要的一个相当繁琐的解决方案,我希望有人知道更好的解决方案。当我在 Dymola 中运行模拟时,软件会生成一个 .mat 文件,其中包含整个模拟期间的变量值。我能够将此文件加载到 MATLAB 中并手动提取我选择的绘图变量。针对上面的问题,我写了如下命令:

此命令将绘制温度(因为温度与它们的导数一起存储在 .mat 文件中的 data_2 数组中)与离散段/元素的相对编号。我真的希望在 Dymola 中做到这一点,即避免为此使用 MATLAB。对于这个特定的问题,由于这个问题的简单性,变量的数量很少,但我可以轻松地绘制一个 .mat 文件,这比我刚刚做的手动导航要困难得多。

0 投票
1 回答
943 浏览

modelica - 使用方程式部分中的 if 案例

我想知道如何在 Modelica 中实现以下功能:

Modelica 如何确定 if 语句的哪种情况为真?如果没有“b”的值,它就无法计算“a”的值,这是在 if 语句中确定的。

0 投票
0 回答
543 浏览

compiler-construction - FMU 从 Dymola 到 Energyplus

我想用在 energyplus 中创建的建筑物来模拟在 Dymola 中创建的系统。我正在遵循功能模型的指南。我从 Dymola 导出了 FMU 文件,并通过 FMI 解析器使其与 Eplus 兼容。当我运行联合仿真时,Eplus 显示以下错误:

ExternalInterface/InitExternalInterfaceFMUImport:尝试加载实例 [..] 的 FMI 函数库时出错。检查 FMU 二进制文件夹并查看所使用的 EnergyPlus 版本的系统架构是否存在库。

我不明白要使用的实例的名称是什么(FMU 实例名称)。它是dll文件的名称吗?

此外,在 FMU 二进制文件夹中,我有一个适用于 win32 而不是 64 位的 dll 文件。我使用 Visual Studio 2010 Express Edition,如果我在 dymola 上对其进行测试,程序会告诉我无法编译 64 位 dymosim。这可能是问题吗?你能给我推荐另一个可以构建 64 位 dymosim 的 dymola 编译器吗?

谢谢!

0 投票
2 回答
459 浏览

modelica - modelica:方程部分与算法部分的不同结果

以下简单模型是正确的并且在 dymola 中工作:

但是,在使用 dymola 进行“检查”期间,以下一项是正确的,但在模拟期间不起作用:

我想知道并寻找一种使后者工作的方法。dymola报错如下:

0 投票
1 回答
834 浏览

matlab - 一段时间后matlab dymola连接失败

我有一个 .mat 文件中的实验数据和一个用 dymola 编写的模型。我使用 dymolaM.m 文件将命令从 matlab 发送到 dymola。这样我就可以使用 matlab 来优化我的模型的参数。Matlab 从 .mat 文件中读取数据,以正确的方式初始化 dymola,让 dymola 模拟模型,读取 dymola 的输出并将其与实验数据进行比较。

这一切都很好,但如果我重复 matlab dymola 连接太多,我总是会收到以下错误:

我尝试重复完全相同的命令 200 次。我总是在第 26 次迭代时遇到错误。

我应该怎么办?这是 dymolaM.m 文件的代码

0 投票
2 回答
2232 浏览

dymola - 协同仿真 dymola fmu 文件不能被 fmuchecker 仿真

我们正在尝试测试 Dymola 的协同仿真选项并创建了一个 fmu 文件。我们从 www.fmi-standard.org 安装/构建了 FMILibrary-2.0b2 和 FMUChecker-2.0b1。

我在尝试运行我的同事使用 Dymola 创建的 fmu 文件的 FMUChecker (fmuCheck.linux32) 时遇到问题。Wenn 我用我的 Dymola 许可证从同一个 Dymola 模型创建了一个 fmu 文件,这个问题是不可重现的。因为 fmuCheck.linux32 运行良好,没有任何错误消息。我的同事可以毫无问题地运行这两个文件!

由于我们的目标是使用此选项进行联合仿真,因此我尝试在没有 Dymola 的 PC 上运行 fmu 文件,但我的 fmu-copy 和我的同事创建的文件再次出现相同的错误。

这是错误消息

我认为 fmu 文件不需要模拟 Dymola 许可证,因此我看不出此模拟失败的原因。这种奇怪行为的原因可能是什么?

部分是此问题的相同错误消息 在 Simulink 中初始化 Dymola FMU

任何建议都非常感谢。谢谢你。

0 投票
1 回答
157 浏览

modelica - 在 Dymola 中编写 i++ 的理论方法是什么?并有混合连续和离散模型?

我刚开始学习modelica,我有一个(新手)问题。对我来说,问题是将思维方式从传统的编程思维方式转变为模型思维方式。

我想做简单的程序。我的输入数组具有 5 分钟分辨率的 PV 输出值。我的输入数组具有 60 分钟分辨率的热负荷值。我有一个能量储存器,可以存储多余的能量或实时获取能量来满足热量需求。

我在 openmodelica 中写了这个:

但是当我 c/p 到 dymola 时,它会在这个“p=Storage+ pre(p);”部分出现错误,因为它说 pre() 不能用于连续模型。当我删除 pre() 时,它说它不能除以 0。

你能解释一下我做错了什么吗?

谢谢!

0 投票
0 回答
250 浏览

modelica - Dymola 优化库约束

又是我。对不起,可能是愚蠢的问题,但我是新手,所以我遇到了最初的问题和困境。

我想在这个理论案例上使用 dymola 优化库来优化碳排放。有电网和光伏作为供应手段,有需求。如果使用网格,它会排放一些碳。因此,应始终使用 PV。但有时光伏发电不足,所以不得不使用电网。电网和光伏使用量由变量 x1 和 x2 控制,变量 x1 和 x2 应限制在 0 到 1 之间(以百分比表示)。如果我运行以下代码,它说明变量太多。如果我将 x1 设置为值为 1 的参数,它会运行但无法进行优化,因为即使我在优化设置中设置 x1 可以从 0 更改为 1,但由于代码的原因它无法更改它。

我该怎么做才能运行它?我想优化依赖于 x1 和 x2 的排放变量。变量 x1 和 x2 的约束应为 0<=x1<=1, 0<=x2<=1。x1 和 x2 缺少一个方程。但是 x1 + x2 不需要为 0,因为 solarThermal.y 和电不相等。那么有没有一种方法可以从优化中改变 2 个变量以最小化第 3 个变量?我可以将 x1 设置为 1 作为参数,以便可以编译代码,然后我希望优化同时改变 x1 和 x2。可能吗?

先感谢您!