我在 Modelica 上收到一条错误消息:
带有非参数测试的 if 方程中的所有分支必须具有相同数量的方程
错误的来源是代码的以下部分:
equation
if der(Posit2.s)<=0 then
pressure=4e5+((500e5-4e5)/0.0111)*(0.0111-Posit2.s);
end if;
Run Code Online (Sandbox Code Playgroud)
你知道如何处理这个错误吗?
我试图使用“min”、“max”属性来限制该值,如下所示。
SI.Angle thetta_out(start=0, min=0, max=31.4)
Run Code Online (Sandbox Code Playgroud)
但 min 和 max 属性不起作用。该值变化无限制,只有起始值按照我设置的方式工作。
有人能找出问题所在吗?
我不想像 if 语句那样制定逻辑来处理这个问题,因为这会使系统变得缓慢且扭曲。
我想用这些单位创建一个变量:((rad/s)/((N/m)^0.5))
我尝试了很多设置,但仍然不起作用。
这是我最后一次尝试:
Real Cap_fact (quantity = "CapacityFactor", unit = "((rad/s)/((N/m)^0.5))");
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
Real Cap_fact (final unit = ((rad/s)/((N/m)^0.5)));
Run Code Online (Sandbox Code Playgroud) 我使用 OpenModelica v1.20.0 尝试了一个简单的示例,但发现结果令人困惑。
代码如下:
model test
Boolean state1;
Boolean state2;
Real f;
equation
f = if time<1 then 0.5 else if time<3 then 0.4 else if time<5 then 0.3 else if time<7 then 0.4 else 0.5;
state1 = f<=0.4;
state2 = f<0.4 or f==0.4;
end test;
Run Code Online (Sandbox Code Playgroud)
显然,state1(<=)的结果不等于state2(<或==),state1不是期望的结果。
为什么?
我目前正在评估Dymola 2020,以建立一个太阳能发电厂模型,但是我对使用自定义连接器的模型中的方程式数量感到困惑。
这是代码:
connector Port
flow Real Q;
Real P;
Real T;
end Port;
Run Code Online (Sandbox Code Playgroud)
model Inlet
parameter Real Q = 1;
parameter Real P = 2;
parameter Real T = 3;
Port a;
equation
a.Q = Q;
a.P = P;
a.T = T;
end Inlet;
Run Code Online (Sandbox Code Playgroud)
我在模型中设置了3个方程,但是有一个错误显示存在4个方程。如何计算方程式?为什么有四个?
这个问题在结构上是单一的。
它具有3个标量未知数和4个标量方程。实部有3个未知数和4个方程式。整数部分有0个未知数和0个等式。布尔部分有0个未知数和0个等式。字符串部分具有0个未知数和0个等式。
标量Real未知元素的数量为3。标量Real方程元素的数量为4。
Real元素的部分问题是确定得过高的。集合中有1个标量方程过多:aT = T; aP = P; aQ = Q;
我正在寻找一种在 Dymola 中进行仿真后进行数据后处理的更好方法,我可以使用 Dymola 安装附带的 MATLAB 脚本,但是是否有更多用户友好的后处理工具?例如,我想获取 10 到 100 之间的数据。
我\xe2\x80\x99m 在 Modelica 语言中相当菜鸟,并且我\xe2\x80\x99d 感谢有关这个简单问题的任何帮助。我\xe2\x80\x99d想知道\xe2\x80\x99是否可以将变量名称(取决于子模型)编写为其他变量的函数,以缩短一般代码。这里有一个关于我\xe2\x80\x99d 喜欢做什么的例子。
\nI\xe2\x80\x99m 考虑一个顶级模型,其中包括标准 Modelica 库的三个相同的子模型 (OpenTank)(tank1、tank2 和 Tank3)。我\xe2\x80\x99d想知道\xe2\x80\x99s是否可以使用类似的循环从顶级模型调用子模型内的变量(\xe2\x80\x9clevel\xe2\x80\x9d)这样(附有示例代码)或类似的东西,而不是重复代码三次(I\xe2\x80\x99m 真的有兴趣在顶级模型中设置此操作)
\n你会建议我做什么?提前致谢!
\nmodel threeTanks\n Modelica.Fluid.Vessels.OpenTank tank1;\n Modelica.Fluid.Vessels.OpenTank tank2;\n Modelica.Fluid.Vessels.OpenTank tank3;\nequation\n for i in 1:3 loop\n tank(i).level= /* \xe2\x80\xa6 */;\n end for;\nend threeTanks;\nRun Code Online (Sandbox Code Playgroud)\n 第一篇 Stack Overflow 帖子!
我在 Dymola 2021x 工作,我正在尝试运行同事为我提供的模型。其中一个组件的 package.mo 文件正在加载一些文件
```fileName=ModelicaServices.ExternalReferences.loadResource("modelica://Master_Branch/components.../filename.mos")```
Run Code Online (Sandbox Code Playgroud)
现在,据我了解,应该发生的是该路径中的“modelica://”是工作目录,这样无论我将项目文件夹放在哪里都可以找到资源。然而,实际发生的情况如下:
当我尝试模拟组件时,我在翻译过程中收到消息,提示找不到“modelica://...”引用的所有文件。我收到如下错误:
Not possible to open file "C:/Program Files/Dymola 2021x/Modelica/Master_Branch/modelica:/Master_Branch/.../filename.mos" for reading:
Invalid argument
Run Code Online (Sandbox Code Playgroud)
现在我认为发生的情况是程序无法识别 modelica:// 应该是工作目录,而是尝试在工作目录内查找目录 modelica:// 。
我的同事没有收到此错误。我们都不太熟悉 Dymola,所以我想知道是否有一些我可能遗漏的基本知识?作为参考,我正在使用的库是:
MSL3.2.3
ModelicaServices 3.2.3
AixLib 0.10.7
BuildingSystems 2.0.0-Beta
Modelica_Synchronous 0.92.2
NCDataReader2 2.5
SDF 0.41
Modelica_DeviceDrivers 1.7.0
ExternData 2.5.0
Run Code Online (Sandbox Code Playgroud)
我尝试在https://specation.modelica.org/v3.4/Ch13.html (13.2.3 外部资源)查看 modelica 文档, 但没有从中得到太多信息,以及加载的文档.Resource() 命令位于https://doc.modelica.org/om/Modelica.Utilities.Files.loadResource.html
欢迎任何帮助或建议!干杯和感谢,蒂斯
我有一个外部函数,在模拟过程中最多需要调用两次。它具有较大的输出大小Real[n][m][k],其中 n、m 和 ks 的乘积是一个相对较大的整数。我在when语句中调用该函数。我遇到的问题是,每次迭代都会在 .mat 文件中一遍又一遍地复制函数的输出,并导致它非常大,即使我很少使用输出。我想知道是否有一种方法只存储输出一次,并避免在每个时间步将输出的副本存储在结果文件中。
Ps 如果这是不可能的,我可能会尝试将函数的结果存储在另一个文件中,但需要在模拟中使用它们。因此,作为替代方案,还有一种方法可以使模拟忽略在结果文件中存储变量。
我使用 if 在 modelica 上尝试了一个简单的代码:
model thermostat1
parameter Real T0=10;
Real T(start=T0);
equation
if T<73 then
der(T)=-T+80;
else
der(T)=-T+50;
end if;
end thermostat1;
Run Code Online (Sandbox Code Playgroud)
模拟在 T 达到 73 的时刻停止。
为什么模拟不能继续使用新方程( der(T)=-T+50 )?
我该如何解决?
谢谢你。
每次我在 Dymola 中进行模拟时,都会在工作目录中创建许多“无用”(对我来说)文件 - 即dsfinal.txt、dsin.txt、dslog.txt、dsmodel.c、dymosim.exe。我觉得这很烦人,因为它弄乱了我的目录。
有没有办法在模拟后只选择需要保留的输出文件,而不需要手动删除不需要的文件?