问题标签 [openmodelica]
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.
simulation - Modelica 翻译阶段的障碍?
一些通用的 Modelica 建议?
我们已经建立了一个模型,其中包含约 2000 个方程和来自测量数据的三个输入向量。使用 OpenModelica,模拟的尝试已经开始在翻译阶段挂起(运行几个小时,过去需要不到一分钟),现在我经常“失去与 omc.exe 的连接”。是否可能有一些累积的事情会降低翻译/编译性能?
一般来说,有没有什么好的经验法则可以让模拟更轻松、更快?我意识到,根据耦合,附加方程可能会以指数方式增加所得方程组的大小——这可能是个问题吗?
谢谢你的想法!
modelica - 从连接器数组中提取数组
似乎至少不鼓励使用连接器作为参数编写 Modelica 函数。如果我尝试,我会收到警告。
假设我有一个连接器
一个记录
和一个函数
给定一个连接器数组,即con c[N]
,如何将其转换为记录数组rec
?
一种方法是使用函数
并通过调用它convert(size(c, 1), c.x, c.y)
。
有没有更简单的方法?
c - 将有状态的 C 计算与 Modelica 集成
我已经将用 C 语言实现的机器学习算法与在 OpenModelica 中运行的 Modelica 模型集成在一起。
机器学习算法是闭环的,将与目标状态的偏差作为输入,并提供控制信号作为输出。
我已经设置了一个采样周期,以便 C 算法仅每 X 毫秒调用一次。但是,我看到对于相同的时钟值,该算法被多次调用。
这让我怀疑为了求解模型,OpenModelica 需要在每次模拟迭代中调用它多次。
这会影响算法的学习方式,因为它会保持有关其经验的状态。
为什么 OpenModelica 每个时钟周期都会多次调用我的算法?我该如何解决这个问题,以免导致学习同时被多次调用弄糊涂?
modelica - 部分模型的Modelica数组
设A
为 部分模型C
,D
为 扩展的模型A
。给定一个模型
我如何实例化 X,例如类似的东西
更新:我尝试了 2 个变体。一个是
失败并显示警告“只能使用默认值设置输入、参数和变量,但已修改 a。” . 另一个是
失败并出现错误“组件 a = {c,b,c},但以前 a = << Empty >>。组件不相同。”
请注意,可以执行以下操作。
但我想P.X
使用参数数组。话又说回来,下面的想法来实现这一点,是行不通的。
simulation - 从多个 LUT 中选择的最佳方法是什么?(模型)
在我们的物理系统模型中,我们通过查找表中的一个因子来修改一个通量值。LUT 本身是从基于整数索引的 LUT 目录中选择的。我们目前正在将表格数据加载到 CombiTable2D 组件中。选择/定义正确 LUT 的正确方法是什么?如果我们将它们全部作为一个输入数据文件中的命名表,有没有办法根据它的 tableName(CombiTable 参数)选择一个 LUT?我一直在使用方程式或算法格式的 For 循环,但还没有找到一种有效的语法。
提前感谢您的想法...
modelica - Modelica 中的抽象开关
我想激发我之前提出的关于Modelica array of partial model的问题。考虑以下 2 个控制器之间的切换模型。
让我们忽略一个事实,即 PI 控制器在一段时间未选择时可能会由于 的分歧而中断x
。这可以通过x
在选择 PI 控制器时复位来解决。然而,这不是重点。
我想以两种方式抽象这个开关。首先,在参数数量的控制器之间切换。其次,使用部分模型来抽象控制器。设Ctrl
为控制器的部分模型。
我们可以如下实例化嵌入在交换机中的两个控制器。
开关的抽象版本应该是这样的:
但是,这种模式存在一些问题。首先,尚不清楚如何实例化该模型,例如使用P
一对一PI
控制器。其次,我收到一个令我惊讶的警告,即:以下输入缺少绑定方程:c[1].u
是否有可能以某种方式在 Modelica 中表达这个抽象开关?
modelica - Modelica:混合连接器和直接输入
下面的 Modelica 包——虽然既不是特别有用也不是特别有趣——不会产生任何警告。
但是,A
在以下情况下不使用连接器时,会出现警告:以下输入缺少绑定方程:a.x
。显然,对于 有一个约束方程a.x
。为什么会有这样的警告?
utf-8 - Modelica 编码问题
从 Modelica 3.2(2010 年 3 月发布)开始,允许在注释、描述字符串和/或注释中使用任意 Unicode 字符。
但由于某种原因,我在使用如下代码时遇到了问题:
要重现我的问题,请尝试以下 UTF-8 往返:
- 将上述文本复制并粘贴到您喜欢的文本编辑器中
- 使用 UTF-8(带或不带 BOM,或任何其他编码)保存文件并关闭
- 在最喜欢的编辑器中再次打开,然后在 OpenModelica 和 Dymola 中打开(按此顺序)
- 如果一切看起来还不错,请点击 Dymola 中的保存按钮(可能删除一个字符并重新输入)
- 在最喜欢的编辑器 OpenModelica 和 Dymola 中再次打开
- 至少某些符号在某处看起来会有所不同
有人可以告诉我如何以一种在任何地方看起来都不错的方式保存该文件吗?还是我期望太高?什么必须修复,在哪里?
modelica - Dymola 中的录音通话问题
以下包'RecordTest'(重现更大模型的错误的示例)包含一个记录来定义一些数据的结构。进一步在包“DataDefintion”中定义了两组数据。最后,此数据应在包“UseOfData”中使用。这里读取数据集,并在函数“FunctionWithData”中评估所有数组 A 的总和。
模型“FunctionCall”的模拟在 OpenModelica 中运行良好。在 Dymola 中,我收到错误消息:“对于变量包常量 RecordTest.UseOfData.ReadData[1].A,数组变量的下标 RecordTest.UseOfData.ReadData.Index 不是整数。”
我想念什么吗?常量“Index”被定义为记录“DataStructure”中的一个整数。此外,该模型在 OpenModelica 中运行。我不明白 Dymola 的错误。
提前致谢。
conditional-statements - 从我没有提供的条件选择算法返回的值?
在 Modelica 中,我构建了一个简单的映射(一对案例结构),以将 MxN 值表简化为 5x5 值表。但是,当我使用边界处的输入(行 = M 或列 = N)进行模拟时,映射在应该返回“5”时返回“0”。我包括了一个越界情况,但返回的值应该是“3”,而不是“0”;我从不指定“0”作为输出。
这可能是由于函数是时不变的,也许是缺乏初始条件?
这是代码:
感谢您的任何想法!