问题标签 [modelica]
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.
modelica - 在 Modelica 中正确使用 inStream()
我正在尝试在 Modelica 中构建一个非常简单的分布式热流体体积模型,并且正在努力使用流运算符正确实现它。这个体积使用 DryAirNasa 作为介质,我希望它没有大容量存储、没有压降和没有能量存储(很像 Modelica.Fluid.Pipes.StaticPipe 模型)。但是,我想明确执行能量平衡,以便可以进行热传递相互作用。我也不想在这个模型中定义质量流量,而是让它在连接到管道末端的边界之一中定义(例如,Modelica.Fluid.Sources.MassFlowSource_h)。
我已经创建了这样一个模型的测试实现,但是这个模型显然缺少一个根据 Dymola 的方程。我将不胜感激有关如何修复此模型以使其正确的任何见解。如果我添加等式
在方程部分,模型具有相同数量的方程和未知数,但我没有任何充分的理由来添加这样的方程。
modelica - 在 Modelica 中计算平均值和标准差
在 Modelica 中计算连续信号的平均值 (mean) 和标准偏差 (StdDev) 的最佳方法是什么。应计算固定时间段 T 的平均值和 StdDev;即,从 tT 到 t。
modelica - 调试 Modelica 代码
我想知道是否有办法“调试”modelica 代码,我的意思是逐行调试代码,您可以看到变量如何变化,诸如此类?
我知道modelica代码被翻译成C,我只是想知道是否有可能以某种方式做到这一点,如果有,我相信这对任何模拟环境都会有很大的改进。谢谢。
HY
semantics - Modelica 离散语义
我试图理解离散信号的 Modelica 语义。给定一个在 t = 0.5 处以无限斜率瞬时从 0.0 过渡到 1.0 的阶跃信号。然后假设您还有一个 when 语句,如下面的代码所示:
我的问题是 q 是 0.0 还是 1.0?让我们假设 q 被初始化为 -1。当我实现代码时,它会转换为 1.0,但我的困惑是 0.0 也会满足等式。所以我只是想知道是否有任何规则可以防止非决定性行为。如果有人可以帮助或指出我的任何文献,那将不胜感激!谢谢你的时间。
modelica - modelica中的数值抖动
我在 Dymola 中遇到了一个有趣的现象,我认为它的原因可能来自我的模型,但我不知道是什么样的事情可能会导致这种情况。如果有人能给我一点提示,将不胜感激。
我的问题是,模拟将在某个时间“停止”(它正在运行但非常缓慢),当我绘制结果时,一个测试错误是否在容差范围内的块会不断以非常大的频率生成事件。
从“公差范围内”块追溯,它是标准库中的“错误块”,具有 3 个信号
u1 - 传感器数据,u2 - 参考值,y - 输出信号[u1-u2=y]
(不幸的是,由于我的声誉低,我无法上传我的情节)
这是我放大(很多次)这些信号的“尾部”(它们停止运行的地方)时发现的,
对于error.y信号:我可以看到非常微小(1e-10)但在我的 errorTolerance 目标周围出现高频颤动,但仅在模拟开始运行非常缓慢的尾部。它的行为类似于锯齿形信号。
对于u1(传感器数据)信号:我放大到与信号 error.y 相同的比例,但我没有看到任何抖动。
对于u2(参考)信号:始终不变
不知道是什么原因造成的,因为错误块只是一个简单的减法计算,为什么会引起这种颤抖。谢谢!
HY
modelica - 在 Modelica 中调用多个相同的组件
我似乎在 Modelica 中遇到了一个建模问题(使用 Dymola),特此寻求您的帮助。这个想法是这样的:
我已经对一些我想通过它们的端口连接在一起的组件(模型)进行了建模。模型正在工作。问题是我想将几个相同的单元(在下面的伪代码中称为 myUnit)串联起来。如果单位数量只有 5 个,那么我可以轻松地将它们一一拖出并以标准方式连接它们,但假设我想要 100 个单位。有没有一种简单而优雅的方法来做到这一点?我不相信 for 循环在模型的方程部分之外工作,我想要一种优雅的方式来命名单位。我将尝试通过执行下面的伪代码来说明这一点,解释我希望实现的目标:
我希望我现在已经设法正确解释了我的问题。
解决此问题的任何提示?我非常感谢解决问题的战略建议以及纯粹的句法建议。在此先感谢您的帮助。:)
modelica - 基于布尔条件在 Modelica 中使用单位/组件
假设我可能想根据某些条件导入一个组件,比如说一个布尔变量。我已经尝试过了,但它给了我一条错误消息。例如,考虑以下代码:
直观地说,这是一个安全的声明,只要布尔变量为真,它就会按预期工作。对于某些单元,例如 Modelica 标准库的流体端口,它也适用于 [0] 大小。但是,一旦我将变量设置为 false,就会遇到许多组件与“零大小”不兼容的错误。例如,我在 Modelica 标准库中的 MassFlowSources 中遇到过这个问题。有没有一种流畅/优雅的方式来解决这个问题?提前致谢!
visual-studio-2010 - 如何在 Dymola (Modelica) 中使用 /bigobj 进行编译
我正在将一个相对较小的有限元 (FE) 模型集成到 Modelica 中。为此,我创建了一个模型(Modelica 类),它可以读取 Matlab 二进制文件格式的质量 (M) 和刚度 (K) 矩阵。我将 FE 模型与 Modelica 标准库 (Modelica.Mechanics.MultiBody) 中的一些组件连接起来。如果 M 和 K 非常小(例如 20x20),则 Dymola 能够运行模型并提供与 Abaqus 相比相当准确的结果(但计算效率不高)。但是,如果我增加包含较大 M 和 K 的 FE 模型的复杂性(例如 size(M)=[200,200]),则 Dymola 会提供以下错误:
编译和链接模型 (Visual C++)。
设置使用 Microsoft Visual Studio 2010 x86 工具的环境。dsmodel。 C
生成代码...
c:\sentient\src\gll\gearlibrary\dsmodel.c(185115):致命错误 C1128:超出目标文件格式限制的节数:使用 /bigobj 编译
生成 Dymosim 时出错。
我将 Visual Studio C++ Express Edition (10.0) 与 Dymola 连接起来。
在我看来,Dymola 为 M 和 K 的每个实体提供了一个变量名。这超出了 C++ 编译器的最大对象限制。
我怎样才能防止 Dymola 这样做?如何在 Dymola 环境中设置 /bigobj?
modelica - Dymola_InlineAfterIndexReduction
这个问题与我在玩一些积木时遇到的问题有关。这是我的模型,
如您所见,有两种连接,第一种连接的输入(从上到下)是u[1],u[2],u[3]
,其他块非常不言自明(所有默认值,除了startTime = 5
步进输入块)。
据我所知,第一种连接只输出角速度,但不输出角和角加速度(它们都为零),这有点不现实(我会解释为什么这样做)。第二个连接也输出角速度。
我的问题是,在第二次连接中,离合器似乎工作正常(5秒后离合器接合(相对角速度w_rel = 0
))
但是,第一个连接的行为完全不同。我们可以看到它们都是法兰连接,角速度都是从 计算出来的flange_a/b.phi
,所以我们应该期望无论输入(realExperssion1)是什么,离合器都没有角速度差。但有趣的是,当我模拟模型时,离合器的左法兰没有移动,而右法兰在旋转。这是我的结果的两个图。
连接1
连接2
实际上,我应该期望看到flange_a.phi和flange_b.phi都为零,然后我不小心删除__Dymola_InlineAfterIndexReduction = true
了移动块中的注释,然后模型的行为符合我的预期。如果有人可以帮助我解释我所看到的,我将不胜感激。多谢!
modelica - 在 Modelica 中的特定时间评估变量
我在我的 Modelica 模拟(使用 Dymola)中选择了一些运行良好的变量。现在我想绘制其中某些变量的行为,这些变量已编号(带有索引)。我不想绘制变量与时间的关系,而是与它们的索引。我打算使用这个plotArray
功能,但这并不是我在这篇文章中真正感兴趣的。问题是,当我调用它们时,所有变量都为零,这确实是它们的初始值,但我想在稳定状态进入时达到它们的值,比如说当time = 5000
. 因此,我需要在这个特定时间评估变量。
如何在模拟的特定时间或在模拟结束时评估变量?
编辑:经过广泛的谷歌搜索后,我发现了一个名为 的函数val()
,它似乎可以满足我的要求,但我无法让它与我的 Dymola 软件一起使用。
编辑2:我已经设法根据需要评估我的变量,但我使用的方法(在我看来)非常乏味。我将 .mat 文件从仿真中提取到 MATLAB 中,在那里我最终设法识别出我想要的变量,然后在所需的时间绘制它们。然而,真正让我吃惊的是 .mat 文件中的变量明显混乱。乍一看,我的变量在 Modelica 模型中的排序方式与它们在 .mat 文件中的排序方式之间几乎没有一致,并且没有变量的命名,让我仅根据比较它们来搜索变量Dymola 模拟的值。我在这里完全误会了,还是有一些更简单的方法可以从 .mat 文件中提取变量?