Modelica 为什么dsin.txt文件中的初始化设置与Dymola中的模型不同?

Modelica 为什么dsin.txt文件中的初始化设置与Dymola中的模型不同?,modelica,dymola,Modelica,Dymola,我在Dymola中构建了一个简单的模型,我选择使用I_R1设置初始化条件,如下面的代码和屏幕截图所示 model circuit1 Real i_gen(unit="A") "Current of the generator"; Real i_R1(start=1,fixed=true,unit="A") "Current of R1"; Real i_R2(unit="A") "Current of R2"; Real i_C(unit="A") "Current of the capacit

我在Dymola中构建了一个简单的模型,我选择使用I_R1设置初始化条件,如下面的代码和屏幕截图所示

model circuit1
Real i_gen(unit="A") "Current of the generator";
Real i_R1(start=1,fixed=true,unit="A") "Current of R1";
Real i_R2(unit="A") "Current of R2";
Real i_C(unit="A") "Current of the capacitor";
Real i_D(unit="A") "Current of the diode";
Real u_1(unit="V") "Voltage of generator";
Real u_2(unit="V") "Output voltage";
// Voltage generator
constant Real PI = 3.1415926536;
parameter Real U0( unit="V") = 5;
parameter Real frec( unit="Hz") = 100;
parameter Real w( unit="rad/s") = 2*PI*frec;
parameter Real phi( unit="rad") = 0;
// Resistors
parameter Real R1( unit="Ohm") = 100;
parameter Real R2( unit="Ohm") = 100;
// Capacitor
parameter Real C( unit="F") = 1e-6;
// Diode
parameter Real Is( unit="A") = 1e-9;
parameter Real Vt( unit="V") = 0.025;
equation 
// Node equations
i_gen = i_R1;
i_R1 = i_D + i_R2 + i_C;
// Constitutive relationships
u_1 = U0 * sin( w * time + phi);
u_1 - u_2 = i_R1 * R1;
i_D = Is * ( exp(u_2 / Vt) - 1);
u_2 = i_R2 * R2;
C * der(u_2) = i_C;
end circuit1;

但是翻译后,在dsin.txt中,它显示
i_R1
是一个自由变量,而
u_2
是固定的。 我的问题是: 为什么Dymola将
u_2
设置为固定,而不是
i_R1


我认为这是一个错误:即使它被标记为固定的,当我模拟它时,电压u_2从-100V开始,而不是0V,而I_R1从1A开始


推测:可能在转换过程中允许排序算法将固定的初始值设置为更有意义的变量,只要满足Modelica代码给出的条件(在您的例子中,i_R1=1)。如果是这样的话,它对我来说仍然算是一个bug,但它可能会解释发生了什么。

最好读汉斯·奥尔森的答案,他更清楚,仍然是我写的:

我没有实施它,所以对一切都要三思而后行:

dsmodel.mof
对于发布的示例,包含以下代码:

// Initial Section
  u_1 := U0*sin(w*time+phi);
  u_2 := u_1-i_R1*R1;
使用示例中的值会导致
u_1=0
u_2=-100
。因此,
i_R1
的固定起始值似乎用于使用上述方程计算初始值
u_2

这应该是模型和
dsin.txt
中的固定语句与原始Modelica代码相比在
dsin.txt
中不同的原因。基本上,来自模型的信息用于从辅助变量(
i_R1
)的起始值计算状态的初始值(
u_2
)。在执行的代码中,状态正在初始化

推测:
u_2
在创建
dsin.txt
时是未知的,因此将其设置为零并在以后计算。这应与中的
dsin.txt
中描述的第一种情况相对应

“初始值根据以下过程计算:”


此时所有状态都是固定的。

dsin.txt中的第一列现在主要用于Dymola中的继续模拟,否则会被忽略

如果您想知道哪些值与启动模拟相关,即参数和变量的fixed=true,则应查看第6列和
x&8
,该列显示
i\u R1
U0
freq
phi
R1
R2
C
为,和
Vt
将影响正常模拟。 对于继续模拟,重要的是
x&16
,因此
u_2
而不是
i_R1


上面的x是第6列中的值,
&8
表示按位和。在Modelica中,您可以使用mod(div(x,8),2)==1来测试数字。

很高兴知道。dsin文件表示忽略第5列和第6列。
x&8
是什么意思?它与第6列中的数字有何关系?我使用&表示按位and,因此第6列中的数字“按位and”8。在Modelica中,它将是mod(div(x,8),2)==1