OpenModelica模型导入Simulink运行的方法
1、参考文献分析
1、modelica建模并导入simulink观察(机械实例)
2、FMI and TLM-Based Simulation and Co-simulation of External Models
文献1实现了OpenModelica模型导入Simulink运行的基本过程,但是存在两个问题,即JModelica已经不再开源。
windows用户还需要安装jmodellica-SDK才行,而安装这个还要填各种表。
用linux的话还得安装很多环境
因此这两个问题导致文献1的方法后续基本难以执行。不过观察文献1的方法,最终导入simulink的是FMU文件,那么最终只需要将modelica模型转化为FMU文件即可,因此问题变为如何转化为FMU文件。
文献2提到,可以用OpenModelica来生成FMU文件,可以采用命令行方法,也可以采用鼠标操作。因此文献1中问题解决。
2 、实际操作
2.1 modelica代码(参考文献1)
model SecondOrderSystemInitParams
"A second order rotational system with initialization parameters"
type Angle=Real(unit="rad");
type AngularVelocity=Real(unit="rad/s");
type Inertia=Real(unit="kg.m2");
type Stiffness=Real(unit="N.m/rad");
type Damping=Real(unit="N.m.s/rad");
parameter Angle phi1_init = 0;
parameter Angle phi2_init = 1;
parameter AngularVelocity omega1_init = 0;
parameter AngularVelocity omega2_init = 0;
parameter Inertia J1=0.4 "Moment of inertia for inertia 1";
parameter Inertia J2=1.0 "Moment of inertia for inertia 2";
parameter Stiffness k1=11 "Spring constant for spring 1";
parameter Stiffness k2=5 "Spring constant for spring 2";
Damping d1=0.2 "Damping for damper 1";
Damping d2=1 "Damping for damper 2";
output Angle phi1 "Angle for inertia 1";
output Angle phi2 "Angle for inertia 2";
output AngularVelocity omega1 "Velocity of inertia 1";
output AngularVelocity omega2 "Velocity of inertia 2";
initial equation
phi1 = phi1_init;
phi2 = phi2_init;
omega1 = omega1_init;
omega2 = omega2_init;
equation
omega1 = der(phi1);
omega2 = der(phi2);
J1*der(omega1) = k1*(phi2-phi1)+d1*der(phi2-phi1);
J2*der(omega2) = k1*(phi1-phi2)+d1*der(phi1-phi2)-k2*phi2-d2*der(phi2);
end SecondOrderSystemInitParams;
2.2 利用OpenModelica导出FMU文件
2.3 FMU文件导入simulink
FMU Import在Simulink Extras的FMU Import位置
初次导入会有FMU模式选择,是做Co-simulation还是Model Exchange,暂时选择Model Exchange。
2.4 仿真对比
FMU导入后能在simulink中运行,仿真曲线和在OpenModelica内仿真一致。
3、后记
最近也是在了解Modelica的优势,以及如何与simulink联合仿真。Modelica的优势在于利用非因果律建模,相当于实际的物理系统。simulink相当于因果律建模,实际上还是要先对实际物理系统抽象一次。2008年以来推出的simscape是参照Modelica进行非因果律建模,但是并不是文本形式建模,需要通过ssc语言转换成模型才能用,还是比较折腾。
后续考虑采用Modelica对模型建模,然后转化为FMU文件嵌入simulink中进行仿真。猜测到时候电机、电池等模型都用modelica写好,导入simulink后就全部为控制信号,不用考虑物理信号和控制信号转换的问题了。