运行环境
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()
- 前三行为载入编译,加载以及绘图模块,为系统自带,不需编写。
- 前四行为编译必须代码,余下是为了在modelica中输出图形化界面。方便与后面matlab生成图像比较。
- 需注意第四行路径与之前文档路径一致,否则会出现载入错误报错。
- 四个变量需要与mo文件中的变量一一对应名字不能错。
- 变量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文件编辑可以使用vs code,其中有modelica语言包