小编JAG*_*KOO的帖子

为什么 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
查看次数

错误消息中的“涉及整数或布尔值的代数循环”是什么意思

我正在使用Dymola平台制作PI控制器,但遇到如下错误消息

错误信息

这是我的一些代码,其中包括用于计算分配量的阀和控制分配量的PI控制器。他们正在使用标志互相交流

  //PI controller///

  if flag_input==1 then //flag_input==1 : Stop control / flag_input==0 : Restart control//
    control:=0;
  else
    control:=(P_term+I_term)/unit;
  end if;

  if error<0 then // error<0 : flag to Valve to restart calculating the disp//
    flag_output:=1;
  else
    flag_output:=0;
  end if;

//Valve//

  if (26/5)*(thetta/(2*pi))*0.001>0.026 and flag_input==0 then
  //restart calculating the disp when received flag==1 from the PI controller//
    disp:=0.026;
    flag:=1;
  elseif (26/5)*(thetta/(2*pi))*0.001<0 and flag_input==0 then
    disp:=0;
    flag:=1;
  else
    disp:=(26/5)*(thetta/(2*pi))*0.001;
    flag:=0;
  end if;
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我代数循环错误的含义并找出问题所在吗?

modelica dymola

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

如何让包角函数在Modelica中可以区分?

我在 Modelica 中制作了包角代码,如下所示。

thetta_eq=mod(thetta, 720);
Run Code Online (Sandbox Code Playgroud)

thetta 不断增加 0 到无限角,thetta_eq 是包裹角 0 到 720deg。

但是,当我区分包裹角时会出现问题。

在此处输入图片说明

此外,我无法在 Modelica 标准库 3.2.3 中使用 wrapangle 块,因为我必须使用 3.2.2 版本。

有没有人有解决这个问题的方法?代码、逻辑还是选项?

======================== 在此处输入图片说明

我已经知道当角度从 720 度下降到 0 度时无法区分,因为它是不连续的。

所以,我想问的是使它即使在下降区域也是连续的。

在此处输入图片说明

实际上,上图是 sigmoid 函数,我想当包角下降 720 到 0 度时我可以使用这个函数。

如果我使 sigmoid 函数的倾斜度非常高,我认为这可以像原始包角一样起作用。并且导数不是无限的或无限的,因此可以微分。

你怎么想?以及我如何为这个想法制定逻辑?

ps) 非常感谢您的回复!

modelica dymola

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

如何在modelica的if语句中使用Multiple And运算符?

我正在对热传递中的 LMTD 方法进行编码,并且在同时使用 和 运算符两次以上时遇到了一些错误。

if (del_T1 > beta) and (del_T2 > beta) and (del_T1<>del_T2) then
    T_LMTD = (del_T1-del_T2) / ( (log(del_T1)) - (log(del_T2)));
  elseif (del_T1 > beta) and (del_T2 > beta) and (del_T1==del_T2) then
    T_LMTD = (del_T1-del_T2) / 2;
  elseif (del_T1 > beta) and (del_T2 < beta) then
    T_LMTD = (del_T1 - beta) / ( (log(del_T1/beta)) * (1 - zeta * (del_T2 - beta)));
  elseif (del_T1 < beta) and (del_T2 > beta) then
    T_LMTD = (del_T2 - beta) / …
Run Code Online (Sandbox Code Playgroud)

if-statement operator-keyword modelica dymola

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

为什么Dymola/Modelica中Controlbus组件连接的模型之间无法识别参数?

我正在制作可以在仿真循环中输入模型参数的接口包。为了连接接口包和仿真模型,我使用了 Standard Modelica Library Ver. 中的 Controlbus。3.2.2.

检查模型没问题,但是如果我模拟模型,则会弹出如下图所示的错误。

错误信息

这是与这个模型相关的方程

Omega_e = Omega_d * N_t[N]; Alpha_d = der(Omega_d);

为了求解微分方程,我认为求解器需要 N_t 的特定参数。所以我把来自接口模型的参数放入并使用标准 Modelica 库中的 Controlbus 组件发送参数。

在此处输入图片说明

在此处输入图片说明

如上图,我肯定把参数。(参数的具体值被删除,因为它是机密)

我找不到这个错误的问题是什么。请帮帮我。

非常感谢。

modelica dymola

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