modelica建模并导入simulink观察(机械实例)

运行环境

win10系统
安装有jmodelica matlab的simulink

步骤1:模型程序编写

建立文档:SecondOrderSystemInitParams.mo
记录文档所在路径:“C:\Users\U2016\Desktop\cps”
内代码为:

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;

步骤二:模型在jmodelica下编译,运行

打开ipython
查看当前文件夹是否在安装文件夹下(可用ls命令查看),否则前两个模块载入可能出现问题。
运行以下代码

from pymodelica import compile_fmu 
from pyfmi import load_fmu
import matplotlib.pyplot as plt
fmu_name = compile_fmu("SecondOrderSystemInitParams","C:\Users\U2016\Desktop\cps\SecondOrderSystemInitParams.mo")
SecondOrderSystemInitParams= load_fmu(fmu_name)
res = SecondOrderSystemInitParams.simulate(final_time=10)
phi1 = res['phi1']  
phi2 = res['phi2']
omega1=res['omega1']
omega2=res['omega2']
t=res['time']
plt.figure(1) 
plt.plot(t, phi1,t,phi2,t,omega1,t,omega2) 
plt.show()
  1. 前三行为载入编译,加载以及绘图模块,为系统自带,不需编写。
  2. 前四行为编译必须代码,余下是为了在modelica中输出图形化界面。方便与后面matlab生成图像比较。
  3. 需注意第四行路径与之前文档路径一致,否则会出现载入错误报错。
  4. 四个变量需要与mo文件中的变量一一对应名字不能错。
  5. 变量t为仿真时自动生成。

如正确运行,将会得到弹窗为如下图片:
在这里插入图片描述

步骤三:模型导入simulink

3.1

查看ipython当前目录,会有SecondOrderSystemInitParams.fmu 文件,将其拷贝至matlab工作目录。
(或更改matlab当前目录至该文件夹,方法同样是在matlab命令行中用ls命令)

3.2

进入simulink环境
高版本可以直接点击一下,出现蓝点,键入fmu,就出现fmu import 模块,拖进来。(fmu 模块在库中路径为:Simulink Library /Simulink Extras/FMU Import)

3.3

双击fmu import 模块,选择文件,选复制进来的fmu文件。
拖进来一个scope模块,连线如下:
在这里插入图片描述

3.4

运行仿真,查看结果如下:
在这里插入图片描述
观察到有一些畸变,与medelica中直接输出不一样。考虑为默认的步长设置过宽,导致数值计算失准。

3.5

在simulink环境下,右键选择Model Configuration Parameters(或快捷键ctrl+E),修改步长为0.0001秒
在这里插入图片描述

3.6

再次运行,查看scope结果如下:
在这里插入图片描述
图像平顺光滑。达到要求。

参考

mo文件代码来源

注明

mo文件编辑可以使用vs code,其中有modelica语言包

发布了13 篇原创文章 · 获赞 0 · 访问量 668

猜你喜欢

转载自blog.csdn.net/cwdben/article/details/104425240