我想学习如何使用 DYMOLA 命令窗口

问题描述 投票:0回答:2

如何像在 MATLAB 中一样在 Dymola 中使用命令窗口。我在模型文件中有一个变量,变量名称是“a”,其他变量“b”,我想在 DYmola 命令窗口中打印像 a*b 这样的结果,如何做到这一点。每当我尝试时,我都会收到未声明的变量消息,我想要这个轻松调试我的模型

我还想知道在运行模型文件时我可以编写打印语句并查看该变量的值是多少

modeling modelica openmodelica dymola
2个回答
0
投票
  1. 如何像在 MATLAB 中一样在 Dymola 中使用命令窗口:访问“变量”并不简单,因为它会随着时间的推移而变化。您应该能够按照您尝试的方式访问参数(针对模拟运行而固定)。如果您需要调试变量,通常最简单的方法是将调试计算直接添加到模型中。

  2. 打印变量:打印语句可以在这里找到:

    Modelica.Utilities.Streams.print
    。示例用途可以在
    Modelica.Media.Examples.SolveOneNonlinearEquation.Inverse_sine
    Modelica.Utilities.Examples.ReadRealMatrixFromFile
    中找到。


0
投票

您在这里问两个不同的问题。模拟期间的打印与命令窗口无关。它需要在翻译之前修改模型的代码,并打印到模拟日志中。

另一方面,命令窗口与运行模拟分离,并且无法访问模型变量。它可用于设置起始值、运行模拟或创建绘图。

命令窗口

Dymola 中的命令窗口相当有限,尤其是与 Matlab 相比。在实践中我几乎不使用它,因为你在那里做的大多数事情都可以通过其他方式更方便地完成。

下表列出了一些用例和命令窗口的替代方案:

访问的变量编辑器
特点 示例 替代方案
设置翻译、模拟等标志。
OutputCPUtime=true
Evaluate=true
Advanced.AllowStringParameters=true
使用可通过 File > Variables
运行模拟
simulateModel("MyModel)
使用GUI中的按钮;键盘快捷键 F10
更改工作目录
cd C:/tmp
使用 文件 > 工作目录
翻译模型后设置参数和起始值
translateModel("MyModel"); k=3; simulate
在变量浏览器中使用编辑字段
绘制模拟变量
createPlot(y={"J4.w"}
使用图形用户界面
运行外部命令
$mkdir foo
无,只需在 Dymola 之外执行并获得适当的反馈(在 Dymola 中无法访问 stdout 和 stderr)

总而言之,命令窗口在有限的情况下很有用

  1. 当您想要编写 Modelica 脚本(
    .mos
    文件)时用于测试目的
  2. 编写模拟脚本(见下文)
  3. 重复在命令窗口中创建的命令 dymola(模拟、绘图)

编写模拟脚本

命令窗口不提供对模型中变量的访问,无论是包浏览器中的变量,还是最后翻译的模型或模拟的模型。但是,在转换或模拟模型后,可以从命令窗口设置可调参数和起始值(我不知道列出这些变量的方法,因此您必须知道可用模型中存在哪些变量 - 或者查看在变量浏览器中,您也可以在其中编辑它们)。

脚本的工作原理如下:

  1. 翻译模型:
    translateModel("Modelica.Mechanics.Rotational.Examples.CoupledClutches")
  2. 设置一些起始值:
    f=0.5
    T2=0.8
  3. 模拟活动模型:
    simulate
  4. 剧情:
    createPlot(y={"J4.w"}, grid=true)

接下来,您可以将这些命令放入 modelica 脚本(.mos 文件)中,并在 for 循环中执行一些参数变化。对于更复杂的情况,在 Dymola 之外编写脚本通常更容易,例如在 python 中使用 Dymola 的 python 接口。

印刷

要在模拟过程中打印变量的值,请使用函数

Modelica.Utilities.Streams.print()
。该函数仅接受字符串作为输入,因此您必须手动转换您的值:

model PrintDemo
  import Modelica.Utilities.Streams.print;
  parameter String s="foo";
  Real r = 1/3;
  Integer i = 1;
  Boolean b = true;
initial equation
    print(s);
    print(String(r, format=".3f"));
    print(String(i));
    print(String(b));
end PrintDemo;

模拟模型,它将在模拟开始时将值打印到模拟日志中。当然,您也可以在模拟期间打印,但一般建议将输出限制为特殊事件(使用

when
,如
when time>0.5
)。否则,您会打印每个时间步骤,从而发送垃圾邮件模拟日志。

如您所见,转换是使用内置函数

String()
执行的。对于实数值,可以按照 Modelica 规范中的第 3.6 章,运算符 3.3 字符串中所述指定转换格式。

© www.soinside.com 2019 - 2024. All rights reserved.