• modelica 建模知识点整理，主要包含了modelica2.2标准的知识点和部分modelica3.2标准的知识点.
• 基于组件的建模可以直接通过拖曳组件的形式建模。子系统模型是由组件或其他子系统组成的模型。 model Gear_assembly //引用案例图标 extends Modelica.Icons.Example; //齿轮总成的案例 //下面是对组件实例...
假设我们要建立一个齿轮总成的模型，示意简图如下：

方法一：基于组件的建模
基于组件的建模是直接通过拖曳组件并将组件连接起来设定相应的参数值即可。

模型建立好后，切换至代码视图（自动生成代码）如下所示：
model Gear_assembly
extends Modelica.Icons.Example;
Modelica.Blocks.Sources.Trapezoid trapezoid1(period = 0.8) annotation(
Placement(visible = true, transformation(origin = {-118, 44}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
Modelica.Mechanics.Rotational.Sources.Torque torque1 annotation(
Placement(visible = true, transformation(origin = {-70, 44}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
Modelica.Mechanics.Rotational.Components.Inertia inertia1(J = 0.01) annotation(
Placement(visible = true, transformation(origin = {-30, 44}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
Modelica.Mechanics.Rotational.Components.ElastoBacklash elastoBacklash1(b = 0.00304617, c = 1000) annotation(
Placement(visible = true, transformation(origin = {10, 44}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
Modelica.Mechanics.Rotational.Components.IdealGear idealGear1(ratio = 4) annotation(
Placement(visible = true, transformation(origin = {44, 44}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
Modelica.Mechanics.Rotational.Components.Inertia inertia2(J = 0.02) annotation(
Placement(visible = true, transformation(origin = {82, 44}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
Modelica.Mechanics.Rotational.Components.Inertia inertia3(J = 0.1) annotation(
Placement(visible = true, transformation(origin = {118, 44}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
Modelica.Mechanics.Rotational.Components.Damper damper1(d = 2) annotation(
Placement(visible = true, transformation(origin = {54, -4}, extent = {{10, -10}, {-10, 10}}, rotation = 0)));
Modelica.Mechanics.Rotational.Components.Fixed fixed1 annotation(
Placement(visible = true, transformation(origin = {-70, -18}, extent = {{-10, -10}, {10, 10}}, rotation = 0)));
equation
connect(idealGear1.support, damper1.flange_b) annotation(
Line(points = {{44, 34}, {44, -4}}));
connect(damper1.flange_a, torque1.support) annotation(
Line(points = {{64, -4}, {-70, -4}, {-70, 34}}));
connect(damper1.flange_b, inertia3.flange_b) annotation(
Line(points = {{44, -4}, {128, -4}, {128, 44}}));
connect(torque1.tau, trapezoid1.y) annotation(
Line(points = {{-82, 44}, {-106, 44}}, color = {0, 0, 127}));
connect(torque1.flange, inertia1.flange_a) annotation(
Line(points = {{-60, 44}, {-40, 44}}));
connect(torque1.support, fixed1.flange) annotation(
Line(points = {{-70, 34}, {-70, -18}}));
connect(inertia1.flange_b, elastoBacklash1.flange_a) annotation(
Line(points = {{-20, 44}, {0, 44}}));
connect(elastoBacklash1.flange_b, idealGear1.flange_a) annotation(
Line(points = {{20, 44}, {34, 44}}));
connect(inertia3.flange_a, inertia2.flange_b) annotation(
Line(points = {{108, 44}, {92, 44}}));
connect(inertia2.flange_a, idealGear1.flange_b) annotation(
Line(points = {{72, 44}, {54, 44}, {54, 44}, {54, 44}}));
end Gear_assembly;

方法二：基于子系统的建模
子系统模型是由组件或其他子系统组成的模型。为了避免冗余，我们可以将常用的子系统封装起来，方便日后建立模型的时候直接使用子系统进行建模。
在齿轮总成的案例中，我们可以将篮框部分封装成发动机子系统，步骤如下：
step1:使用基于组件建模的方法，将子系统中该有的组件以及组件之间的连接关系做好。

step2:将子系统和外部通信的接口添加到模型中，并和内部组件连接起来。

step3:切换到代码视图中，将你需要设置初始参量的参量写在模型的最前面（可以设置默认值），这么做的目的是在后面你重用这个模型时，双击它能够直接显示输入参数页面。注意，代码不用手写，直接进入相应组件的代码视图中复制相应参数行即可。然后将子系统的内部组件的关键字设置为protected，和外界通信的接口和输入参数的关键字设置为public（可省略）。如果想要将子系统设置图标，可以继承发动机的图标。如图所示：

参数代码的复制方法，以惯性元件的参数为例

step4:最后我们建立齿轮总成的模型时，我们就可以将子系统直接拖到页面来建立，如下图所示。

参考书籍：Modelica实例教程（作者:Dr.Michael M.Tiller，译者:谢东平）
展开全文
• 前四行为编译必须代码，余下是为了在modelica中输出图形化界面。方便与后面matlab生成图像比较。 需注意第四行路径与之前文档路径一致，否则会出现载入错误报错。 四个变量需要与mo文件中的变量一一对应名字不能...
运行环境
步骤1：模型程序编写
建立文档：SecondOrderSystemInitParams.mo 记录文档所在路径：“C:\Users\U2016\Desktop\cps” 内代码为：
model SecondOrderSystemInitParams
"A second order rotational system with initialization parameters"
type Inertia=Real(unit="kg.m2");
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
import matplotlib.pyplot as plt
fmu_name = compile_fmu("SecondOrderSystemInitParams","C:\Users\U2016\Desktop\cps\SecondOrderSystemInitParams.mo")
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为仿真时自动生成。
如正确运行，将会得到弹窗为如下图片：
3.1
查看ipython当前目录，会有SecondOrderSystemInitParams.fmu 文件，将其拷贝至matlab工作目录。 （或更改matlab当前目录至该文件夹，方法同样是在matlab命令行中用ls命令）
3.2
3.3
双击fmu import 模块，选择文件，选复制进来的fmu文件。 拖进来一个scope模块，连线如下：
3.4
运行仿真，查看结果如下：  观察到有一些畸变，与medelica中直接输出不一样。考虑为默认的步长设置过宽，导致数值计算失准。
3.5
3.6
再次运行，查看scope结果如下：  图像平顺光滑。达到要求。
参考
mo文件代码来源
注明
mo文件编辑可以使用vs code，其中有modelica语言包
展开全文
• Modelica是一种高级的陈述式语言用于描述事物的数学特性。它通常应用于工程领域，可以轻松的描述不同类型工程组件（例如弹簧、电阻﹑离合器等)）的工作特性。此外，这些组件又可以方便的组合成子系统、系统，甚至...

Modelica可以直接使用代码来实现模型的建立，这时只关注整个模型的原理关系的代码实现，不关注组件的可视化。以低通滤波RLC滤波器为例，电路示意图如下图所示，假设我们要去求解变量V、iL、iR以及iC，我们可以使用下面与电感、电容以及电阻有关的方程来求解。

代码如下：
model RLC1"A resistor-inductor-capacitor circuit model"
type Voltage=Real(unit="V");
type Current=Real(unit="A");
type Resistance=Real(unit="Ohm");
type Capacitance=Real(unit="F");
type Inductance=Real(unit="H");
parameter Voltage Vb=24 "Battery voltage";
parameter Inductance L = 1;
parameter Resistance R = 100;
parameter Capacitance C = 1e-3;
Voltage V;
Current i_L;
Current i_R;
Current i_C;
equation
V = i_R*R;
C*der(V) = i_C;
L*der(i_L) = (Vb-V);
i_L=i_R+i_C;
end RLC1;
代码解释如下：

RLC1的仿真结果如下（仿真过程基本上等同于求解方程并获取其解的轨迹过程）

参考书籍：Modelica实例教程（作者:Dr.Michael M.Tiller，译者:谢东平）

展开全文
• 随着建筑节能以及能量存储的需要，相变材料技术得到了飞速发展，出现了各种新型的定形相变复合材料，而定形相变复合材料的热焓、比热和导热系数等是相变材料设计、研制和生产过程中的重要物理性能参数。...
• 是一个基于Modelica的开源建模和仿真环境，旨在用于工业和学术用途。 依赖关系（Linux / OSX） 存储库中包含许多软件包。 为了使一切正常运行，您将需要一些额外的功能： C ++ 11编译器（如果需要GUI） autoconf...
• 基于Modelica的车辆动力学建模
• Modelica标准库是Modelica建模语言的模型的开源库。 通过具有来自各个工程领域的开放类型，连接器和模型定义，可以促进建模人员之间的协作。
• ThermoFluid库是一个免费的开源物理模型库，用于使用Modelica建模语言进行热工水力模型。
• 基于Modelica的电动汽车电池建模与仿真.pdf
• 主要讲解了modelica3.2语义的基础知识！
• 多领域统一建模语言Modelica及其仿真平台，田永利，颜云辉，Modelica语言能以统一的形式建立含机、电、液、热、生物和控制等多领域成分的复杂物理系统，已广泛应用于许多有需求的工业领域。本�
• Modelica语言及其多领域统一建模与仿真机理
• OpenModelica模型导入Simulink运行1、参考文献分析...1、modelica建模并导入simulink观察（机械实例） 2、FMI and TLM-Based Simulation and Co-simulation of External Models 文献1实现了OpenModelica模型导入Simulin


1、参考文献分析2 、实际操作2.1 modelica代码（参考文献1）2.2 利用OpenModelica导出FMU文件2.3 FMU文件导入simulink2.4 仿真对比
3、后记

1、参考文献分析
1、modelica建模并导入simulink观察（机械实例） 2、FMI and TLM-Based Simulation and Co-simulation of External Models
文献2提到，可以用OpenModelica来生成FMU文件，可以采用命令行方法，也可以采用鼠标操作。因此文献1中问题解决。
2 、实际操作
2.1 modelica代码（参考文献1）
model SecondOrderSystemInitParams
"A second order rotational system with initialization parameters"
type Inertia=Real(unit="kg.m2");
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文件

FMU Import在Simulink Extras的FMU Import位置 初次导入会有FMU模式选择，是做Co-simulation还是Model Exchange，暂时选择Model Exchange。
2.4 仿真对比
3、后记
最近也是在了解Modelica的优势，以及如何与simulink联合仿真。Modelica的优势在于利用非因果律建模，相当于实际的物理系统。simulink相当于因果律建模，实际上还是要先对实际物理系统抽象一次。2008年以来推出的simscape是参照Modelica进行非因果律建模，但是并不是文本形式建模，需要通过ssc语言转换成模型才能用，还是比较折腾。 后续考虑采用Modelica对模型建模，然后转化为FMU文件嵌入simulink中进行仿真。猜测到时候电机、电池等模型都用modelica写好，导入simulink后就全部为控制信号，不用考虑物理信号和控制信号转换的问题了。
展开全文
• 柏林大学ManuelLjubijankic教授等人联合TLK热电公司（TISC厂商），采用TISC...三维储水罐模型建模要求：合理的离散精度合适的运算速度合适的接口位置，接口位置选在流动状态稳定的点，储水罐连接管路长度0.275m一三维
• 研究了基于Modelica语言的复杂机械系统统一建模平台MWorks的关键技术。在分析Modelica模型描述和Modelica标准库(MSL)结构的基础上，设计了基于Modelica语言的可视化建模系统框架，提出了基于有向无环图的MSL内存存储...
• 基于Modelica的电动汽车悬架系统建模与仿真分析.pdf
• 基于Modelica的电动汽车制动系统建模仿真与参数优化.pdf
• 该存储库包含PowerGrids的代码，这是用于电力系统机电建模Modelica库。 该库最初是由RTE在Dynamica srl的帮助下开发的。它是促进Modelica在电力系统建模中的应用以及开源方法的优势的更大努力的一部分（有关更多...
• 采用面向对象的建模方法，根据独立性和物理划分原则对发动机缸内工作过程部分进行了模块化划分，利用多领域统一建模规范Modelica语言建立了天然气发动机单个气缸工作过程（包括缸内过程和换气过程）的仿真模型，仿真...
• 基于Modelica和Dymola的航空发动机燃气发生器的建模与性能仿真，任志彬，孟光， 本文介绍了航空发动机燃气发生器的数学模型，分析了压气机、涡轮与燃烧室共同工作的条件，基于这些条件以及元件库中压气机级�
• 本文利用基于Modelica语言的系统仿真验证软件MWorks.Sysplorer，介绍如何面对真实的船舶电推进系统构建统一的多学科耦合仿真模型，展示了系统建模仿真技术在船舶电推进系统性能评估、故障预测、运行控制策略优化等...
• 什么是Modelica

2021-03-03 13:19:15
自从人类第一次提出方程的概念，建模仿真的思想就正式诞生了，并贯穿于人类科技发展的各个阶段，在科学技术飞速发展的今天，人们对...提出通过国际合作的形式，研究设计下一代多领域统一建模语言Modelica，并于2000年
• OpenModelica仿真

2021-03-03 12:41:40
Modelica语言就是在这一背景下推出的一种面向对象的非因果关系的仿真建模语言。它的目的是为动态系统建立一种标准的基于方程模型的仿真语言，使得仿真建模与具体的仿真工具分离，实现仿真建模的标准化。用Modelic

...