问题标签 [jmodelica]

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 回答
103 浏览

modelica - Modelica - 如何最好地调整从库到应用程序代码的导入

我有一个关于在可重用库部分和特定应用程序部分中构建 Modelica 代码的问题。问题涉及依赖于介质的介质和设备,我受到 MSL 流体库中的一些结构的启发,但我想制作更小的东西并适应我的需要,但我也可以随之成长。

问题是关于如何方便地使库适应应用程序代码中定义的新介质。由于不同设备有多种型号,因此很自然会有一个局部模型来定义设备应具有的连接器类型,然后只有在需要适配连接器时才对局部模型进行更改。对我来说,看起来我需要一个三步适应库的过程,而不是我希望的一步。我在下面有一个详细的示例,可以更清楚地提出问题。

该示例是将液体从一个容器泵送到另一个容器的模型,即我们有一个进料罐、一个泵和一个收获罐。液体介质最初包含两种物质,现在在应用程序中我们要对七种物质进行建模。

在应用程序代码中,包含七种物质的新介质被声明为包 Medium7。泵、饲料和收获罐的库模型的调整分以下三个步骤进行:

  1. 将连接器 LiquidCon7 定义为从库中导入标准连接器 LiquidCon 的扩展,并将介质重新声明为 Medium7
  2. 将部分模型 EquipmentMedium7 定义为标准部分模型 EquipmentMedium 导入的扩展,并且连接器被重新声明为 LiquidCon 到 LiquidCon7
  3. 将包 Equipment7 定义为标准包 Equipment 的导入扩展,其中部分模型从 EquipmentMedium 重新声明为 EquipmentMedium7。

首先,现在可以使用 Equipment7 中的设备在为 Medium7 定制的应用程序代码中定义一个系统。——我希望我能比上面描述的更直接地进行改编。如果我避免像这里那样在库和应用程序中划分代码,那么从 Medium2 切换到 Medium7 会容易得多,只需更改 LiquidConType 中使用的介质,然后该更改就会传播到整个系统。

当我阅读 Tiller 和 Fritzson 关于该主题的教科书材料时,或者当我尝试理解 MSL 代码时,我发现了类似的结构,但仍然不是我在这里所拥有的。我还认为我关于如何有效地使库适应新应用程序所要求的接口变化的问题不仅限于介质,而是更广泛的代码。

只需阅读 2008 年的 Tillers 论文“Modelica 中的模式和反模式”,在第 2.3 节“中模型模式”中,这里有一个与我的问题相关的讨论,并考虑了 pg 649 的最后几行。

我刚刚意识到我的模型结构违反了 Modelica 的定义,因为您不允许从部分模型 EquipmentMedium 扩展 PumpType、FeedtankType 等,因为我需要 EquipmentMedium 是可替换的。请参阅 Modelica def 3.2 rev 2 第 6.2.1 节“传递性不可替换”。

我将不胜感激有关该主题的一些评论,也许还有阅读建议。我的玩具问题的替代解决方案也很受欢迎!

谢谢,简彼得

我不知道如何附加代码文件,但下面我展示了上面描述的应用程序代码。库 DATA_v04 是直截了当的。但请注意,我需要使用从部分模型 EquipmentMedium 扩展来定义模型 PumpType、FeedtankType 等......并且不允许。

0 投票
1 回答
109 浏览

modelica - 目前是否可以在 OpenModelica 中的 ThermoPower 库中创建/建模系统?

一个月以来,我一直在尝试模拟动力循环,特别是布雷顿和兰金动力循环,然后尝试模拟组合动力循环。

ThermoPower 库中的 Brayton Cycle 示例实际上可以运行和模拟。这使我能够正确地对自己的模型进行建模,该模型也可以运行和模拟。但是当涉及到 Rankine Power Cycle 时,Library 模型总是无法运行/模拟。尽管库模型无法正常工作,但我还构建了我自己的 Rankine Power Cycle 的许多迭代。我所有的模型也无法运行/模拟。

我尝试过复杂的模型和非常非常简单的模型。我所有的迭代都失败了。另外值得注意的是,与 pump.mo 相关的变量会出现很多错误和翻译错误,这些似乎无法排除故障。

我也一直在 ThermoPower 库的主分支上工作,对库进行了最新的编辑。仍然没有成功运行/模拟我自己的模型以及 ThermoPower 库中的 Rankine 闭环示例。

自一月份以来,热电库的工作一直是一个挑战。似乎大多数库示例/组件中都有错误,阻止了大多数示例的模拟。我还联系了 ThermoPower 图书馆的建设者,他告诉我图书馆目前正在进行重建。

因此,在体验/学习了所有这些因素之后,实际上是否可以从 ThermoPower 库中对系统进行建模,或者只是我无法正确建模系统?

0 投票
0 回答
66 浏览

modelica - 如何解决变量的 Modelica 错误,其中变量是模型使用的扩展参数?

一段时间以来,我一直在尝试在 OpenModelica 上构建 Rankine Power Cycle,并且遇到了一个反复出现的问题,我只是不确定如何进行故障排除。

我的问题:我能够让我的所有 Rankine Power Cycle 模型迭代中的大部分至少获得一个经过检查的模型以及一个成功的实例化。在这一点上,我认为我的模型已准备好尝试和模拟。通常会破坏我的模拟的错误类型是位于我的模型正在使用的扩展模型中的变量。

例如:目前我正在检查和验证 Rankine Power Cycle 的子组件,以便能够正确验证哪些组件在 x、y、z 情况下工作,哪些不工作。我的热交换器模型经过检查并且能够实例化,但在模拟时我得到错误代码:

对我来说,这里的问题是上述错误或这些类型的所有错误都超链接到我自己的模型扩展的部分模型或包。因此,“vbar”或“drbdX1”上方的变量在我构建的 HeatExchanger 模型中不存在,但我自己模型中的组件以某种方式扩展到这些不可避免地导致错误的变量。

我尝试过的事情:

我尝试向扩展的超链接模型/包添加值以修复错误。这没有任何作用。

我已经尝试将上述代码行复制并粘贴到我自己的模型中,以声明已在扩展中声明的任何包/函数。这不起作用,因为通常会因不正确的声明而产生错误。

超链接错误几乎无助于我应该如何修复模型,或者我应该修复它的位置或模型。

如果您对如何解决此类问题有任何见解或建议,请随时在下面发表评论!感谢您抽出宝贵的时间阅读我的求助信息:)

热交换器代码:

型号 HX_Turbine_Check

0 投票
1 回答
169 浏览

modelica - Modelica - 如何扩展(最小)中型包

我想要一个从另一个基本包扩展的包。基本包包含向量类型和常量整数,其中包含向量的每个索引号的名称。它还包含一个向量常数,为每个元素赋予一个值(描述元素的某些属性)。在扩展包中,我想添加一个向量类型的元素并为新索引添加一个新名称,并向向量常量添加一个具有特定值的元素(描述物质的某些属性)。

使用可替换 - 扩展 - 重新声明的技术,可以直接使用元素扩展向量类型,并将附加元素的新常量整数附加到包中。但我不确定如何在常量向量上附加一个新元素。

下面的代码在 JModelica (2.4) 中工作,但涉及重新声明和复制原始基本包中的值。但是在 Medium3 中,JModelica 不接受常数向量 mw 的第四个重新声明语句。但是,如果我在扩展完成后将 redeclare 语句作为第一行,它确实有效(参见 Fritzson 4.3.1 节)。但是,重新声明应该是原始的子类型,而 Real3] 不是 Real[2] 的子类型,但编译器似乎无论如何都可以管理。

当我在 OpenModelica (1.13) 中尝试相同的代码时,我收到错误消息,因为我重新声明了一个常量,并且在 Medium3 中的第一次重新声明时已经出错。我不确定这是一条正确的错误消息,并且不会出现在 JModelica 中。

否则,OpenModelica(和 JModelica)都接受 Medium2 而不会出现任何警告或错误。而这些测试只需改变 LiquidCon 中使用的介质。

我的主要问题是,与我的代码相比,这里是否有一种更直接的解决方案,可以用上述一种物质来扩展中型包,并且更标准(当然,通常可以同时使用 JModelica 和 OpenModelica 和 Modelica )。

理清 Modelica 标准在这里所说的内容当然很有趣,然后我们可以将这些信息作为错误报告提供给 JModelica 和 OpenModelica 背后的组织。

非常感谢您的意见/ Jan Peter

下面是软件包 DEMO_v8 的摘录

0 投票
1 回答
69 浏览

modelica - 我是否在 OpenModelica 上正确合并了这个嵌套函数?

注意:这个问题引用了位于 ThermoPower.Examples.RankineCycle.Models.PrescribedSpeedPump 的 PrescribedSpeedPump.mo

我正在尝试简单的泵模型,因为我构建的所有包含该泵的模型总是产生相同的错误消息:

[1] 16:02:01 转换错误 [ThermoPower.PowerPlants: 2071:95-2071:108]:在 ThermoPower.PowerPlants.HRSG.Components 范围内找不到变量 q_nom。

[2] 16:02:01 转换错误 [ThermoPower.PowerPlants: 2076:84-2076:132]:在范围内找到循环相关的常量或参数:{q_nom}、{head_nom}(使用 -d=ignoreCycles 忽略)。

在检查这个 PrescribedSpeedPump 后,它由两个类组成:“FluidMedium”和“flowCharacteristic”。导致错误的是函数 - “FlowCharacteristic”。

为什么我感到困惑:错误表明它在 ThermoPower.PowerPlants.HRSG.Components 的路径中找不到变量 q_nom。好吧,前面提到过,我说它位于 ThermoPower 库的示例包中。

我对这种情况感到困惑的另一个原因是,我能够手动输入 q_nom 和 head_nom 的参数值。他们都被赋予了 {1,2,3} 的虚拟值。尽管如此,变量“找不到”。

最后,我尝试自己手动编辑“flowCharacteristic”函数,然后尝试检查我的模型。仍然出现相同的错误。我现在真的不知道如何解决这个错误,并尝试了我能想到的。

如果您有任何见解或建议,请随时在下面发表评论!感谢您阅读本文,感谢您花时间和精力帮助社区中的其他人。下面我已将代码复制到我的泵模型中。

代码更新:

0 投票
3 回答
134 浏览

modelica - 参数化 Modelica 库和使用模型作为参数的可能性

我尝试制作一个参数化库。我使用包和连接器作为参数工作正常。

使用模型作为参数也是可能的。但是,如果在库中使用模型来使用扩展构建新模型,那么这是不允许的,我理解。

我想知道库是否包含具有内部/外部连接器样式的模型,是否允许让内部模型成为库的参数?

下面用一个简单的例子来说明问题。TEST 是库,Fish3b 是应用程序。当我在库 TEST 中运行示例时,一切正常,但是当我有一个单独的应用程序文件时,它就不行了。

错误文本是:找不到运行 JModelica 2.4 的 AquariumType 的类声明

下面是从上面的库导入的应用程序代码示例 - 我认为这是一些错误。

0 投票
5 回答
157 浏览

modelica - 参数化 Modelica 库和使用模型作为参数的可能性 - 第 2 部分

我的工作是了解库中的参数化包如何适应外部应用程序代码,即我喜欢将库代码和应用程​​序代码保持分离。

在我的示例中,我的设备包有两个参数,一个连接器 LCon 和一个模型 CType。连接器影响设备包中的所有模型。模型 CType 仅影响设备中的一个模型 RType(并且具有更密切的内外关系)到该模型。

当我使 Package Equipment 适应 LCon2 和 CTyp2 的应用要求时,我可以如下所示一次性完成。

但是,如果我将这两种改编分成两个不同的部分,我认为代码(从长远来看)更具可读性。我尝试下面的代码,但不起作用。错误文本:找不到 RType 的类声明 - 当我在 JModelica 中运行它时。

(对于代码 2,库进行了修改,因此将参数 CType 移动到了单个模型 RType,其中 CType 应作为参数。最后,我希望代码 2 的 BRType2 对应于代码 1 中的 Equipment2.RType) .

我想知道是否有可能在这样的几个步骤中进行更改,即首先 RType 获得一个新的连接器 LCon2,然后在下一步中,现在从 Equipment2 导入的 RType 将 CType 替换为 CType2?

我知道代码不应被视为一系列“赋值语句”,而应视为并行。在我看来,代码 2 中“方程式”的逻辑应该可以得到正确的 BRType2。

0 投票
2 回答
341 浏览

interpolation - Modelica 模块中的多维表

几天前我开始使用 openmodelica。我创建了很多表格,其中数据是除霜效率,第一行是空气温度,这是我的第一个输入,第一列是冷凝器的出水温度,这是我的第二个输入。我为五个湿度级别和 4 个压缩机创建了这种矩阵,所以我有 20 个矩阵。

我想创建一个具有 4 个输入的 modelica 块:

  • 气温
  • 出水温度
  • 压缩机数量
  • 湿度水平

并作为输出表中的除霜效率。有人能帮助我吗 ?

我不能使用CombiTable2dvopen modelica 中的块,因为我有 4 个输入和 20 个表。我找到了关于图书馆的modelon 文章,但我不知道如何使用它。

0 投票
1 回答
1061 浏览

modelica - 如何修复错误,“模型在结构上是奇异的,发现错误排序方程”

这是我在使用 OpenModelica 软件时收到的最常见错误之一。

我已经了解当系统参数发生冲突并且彼此不一致时,通常如何触发此错误。

我已经尝试省略我认为对我的系统不是必需的系统参数,但是似乎没有任何东西可以解决该错误。

我的系统一开始就非常简单。目前,我正在进行子组件验证过程,以正确构建有效的 Rankine Power 模型。该子组件侧重于 (2) 个热交换器中的 (1) 个,该热交换器将用于双 HX 系统,该系统在高压和低压涡轮机之间包含再热过程。

该子组件试图描述来自泵的冷凝液体状态的水,在该状态下它将通过热交换器“过热器”,在那里它将状态从压缩液体变为过热蒸汽。然后,这种蒸汽将被送入高压涡轮机并返回压力槽。

我已经完成了对我的系统的手动计算热力学分析,并且知道出口温度和焓。但是,这些出口参数是我选择删除的一些参数,因为我觉得我会让系统解决它们,而不是告诉它应该计算什么。删除这些值以解决错误也不起作用。

如果您有任何想法、建议或考虑,请告诉我!下面我将代码发布到我一直在做的事情上。再次感谢!

代码:

0 投票
3 回答
560 浏览

python - Ubuntu 18.04 上的 JModelica

你好 JModelica 社区。我已经设法在 CentOS 上编译 JModelica,但在 Ubuntu 18.04 上仍然失败。编译本身是成功的,但是正在运行

失败了

我尝试降级几个软件包,但问题仍然存在。顺便说一句,我在 Arch Linux 上遇到了同样的错误。

我知道 Ubuntu 18.04 不受官方支持,但我希望有人已经找到了解决此问题的方法。

make install 编辑:来自和的日志make casadi_interface

https://pastebin.com/ADRyE7XV

https://pastebin.com/dL4SCWdb