如何像在 MATLAB 中一样在 Dymola 中使用命令窗口。我在模型文件中有一个变量,变量名称是“a”,其他变量“b”,我想在 DYmola 命令窗口中打印像 a*b 这样的结果,如何做到这一点。每当我尝试时,我都会收到未声明的变量消息,我想要这个轻松调试我的模型
我还想知道在运行模型文件时我可以编写打印语句并查看该变量的值是多少
如何像在 MATLAB 中一样在 Dymola 中使用命令窗口:访问“变量”并不简单,因为它会随着时间的推移而变化。您应该能够按照您尝试的方式访问参数(针对模拟运行而固定)。如果您需要调试变量,通常最简单的方法是将调试计算直接添加到模型中。
打印变量:打印语句可以在这里找到:
Modelica.Utilities.Streams.print
。示例用途可以在 Modelica.Media.Examples.SolveOneNonlinearEquation.Inverse_sine
或 Modelica.Utilities.Examples.ReadRealMatrixFromFile
中找到。
您在这里问两个不同的问题。模拟期间的打印与命令窗口无关。它需要在翻译之前修改模型的代码,并打印到模拟日志中。
另一方面,命令窗口与运行模拟分离,并且无法访问模型变量。它可用于设置起始值、运行模拟或创建绘图。
Dymola 中的命令窗口相当有限,尤其是与 Matlab 相比。在实践中我几乎不使用它,因为你在那里做的大多数事情都可以通过其他方式更方便地完成。
下表列出了一些用例和命令窗口的替代方案:
特点 | 示例 | 替代方案 |
---|---|---|
设置翻译、模拟等标志。 |
|
使用可通过 File > Variables |
运行模拟 |
|
使用GUI中的按钮;键盘快捷键 F10 |
更改工作目录 |
|
使用 文件 > 工作目录 |
翻译模型后设置参数和起始值 |
|
在变量浏览器中使用编辑字段 |
绘制模拟变量 | ) |
使用图形用户界面 |
运行外部命令 |
|
无,只需在 Dymola 之外执行并获得适当的反馈(在 Dymola 中无法访问 stdout 和 stderr) |
总而言之,命令窗口在有限的情况下很有用
.mos
文件)时用于测试目的命令窗口不提供对模型中变量的访问,无论是包浏览器中的变量,还是最后翻译的模型或模拟的模型。但是,在转换或模拟模型后,可以从命令窗口设置可调参数和起始值(我不知道列出这些变量的方法,因此您必须知道可用模型中存在哪些变量 - 或者查看在变量浏览器中,您也可以在其中编辑它们)。
脚本的工作原理如下:
translateModel("Modelica.Mechanics.Rotational.Examples.CoupledClutches")
f=0.5
、T2=0.8
simulate
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 字符串中所述指定转换格式。