小编mar*_*rco的帖子

带有非参数测试的 if 方程中的所有分支必须具有相同数量的方程 - Modelica

我在 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)

你知道如何处理这个错误吗?

modelica openmodelica

4
推荐指数
1
解决办法
65
查看次数

为什么 Dymola/Modelica 中的属性 min、max 不起作用?

我试图使用“min”、“max”属性来限制该值,如下所示。

SI.Angle thetta_out(start=0, min=0, max=31.4)
Run Code Online (Sandbox Code Playgroud)

但 min 和 max 属性不起作用。该值变化无限制,只有起始值按照我设置的方式工作。

有人能找出问题所在吗?

我不想像 if 语句那样制定逻辑来处理这个问题,因为这会使系统变得缓慢且扭曲。

attributes modelica dymola

3
推荐指数
1
解决办法
649
查看次数

无法表示 openmodelica 上的变量

我想用这些单位创建一个变量:((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)

modelica openmodelica

3
推荐指数
1
解决办法
69
查看次数

modelica 中小于或等于不等于小于或等于?

我使用 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不是期望的结果。

为什么?

modelica openmodelica

3
推荐指数
1
解决办法
212
查看次数

计算带连接器的模型中的方程式数量

我目前正在评估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;

modelica dymola

2
推荐指数
1
解决办法
84
查看次数

在 Dymola 中模拟后的数据后处理

我正在寻找一种在 Dymola 中进行仿真后进行数据后处理的更好方法,我可以使用 Dymola 安装附带的 MATLAB 脚本,但是是否有更多用户友好的后处理工具?例如,我想获取 10 到 100 之间的数据。

dymola

2
推荐指数
1
解决办法
52
查看次数

Modelica - 是否可以将子模型的名称设置为另一个变量的值?

我\xe2\x80\x99m 在 Modelica 语言中相当菜鸟,并且我\xe2\x80\x99d 感谢有关这个简单问题的任何帮助。我\xe2\x80\x99d想知道\xe2\x80\x99是否可以将变量名称(取决于子模型)编写为其他变量的函数,以缩短一般代码。这里有一个关于我\xe2\x80\x99d 喜欢做什么的例子。

\n

I\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

你会建议我做什么?提前致谢!

\n
model 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;\n
Run Code Online (Sandbox Code Playgroud)\n

modelica openmodelica dymola

2
推荐指数
1
解决办法
178
查看次数

Dymola 中的相对 (modellica://...) 路径名出现问题

第一篇 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

欢迎任何帮助或建议!干杯和感谢,蒂斯

filepath modelica dymola

2
推荐指数
1
解决办法
690
查看次数

如何避免 Modelica 输出文件过大

我有一个外部函数,在模拟过程中最多需要调用两次。它具有较大的输出大小Real[n][m][k],其中 n、m 和 ks 的乘积是一个相对较大的整数。我在when语句中调用该函数。我遇到的问题是,每次迭代都会在 .mat 文件中一遍又一遍地复制函数的输出,并导致它非常大,即使我很少使用输出。我想知道是否有一种方法只存储输出一次,并避免在每个时间步将输出的副本存储在结果文件中。

Ps 如果这是不可能的,我可能会尝试将函数的结果存储在另一个文件中,但需要在模拟中使用它们。因此,作为替代方案,还有一种方法可以使模拟忽略在结果文件中存储变量。

modelica openmodelica

2
推荐指数
1
解决办法
285
查看次数

如果条件发生变化,Modelica Simulation 就会中断

我使用 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 )?

我该如何解决?

谢谢你。

modelica

1
推荐指数
1
解决办法
195
查看次数

如何在仿真后自动删除 Dymolas 构建文件?

每次我在 Dymola 中进行模拟时,都会在工作目录中创建许多“无用”(对我来说)文件 - 即dsfinal.txtdsin.txtdslog.txtdsmodel.cdymosim.exe。我觉得这很烦人,因为它弄乱了我的目录。

有没有办法在模拟后只选择需要保留的输出文件,而不需要手动删除不需要的文件?

modelica dymola

1
推荐指数
1
解决办法
183
查看次数

标签 统计

modelica ×10

dymola ×6

openmodelica ×5

attributes ×1

filepath ×1