OpenModelica 中文教程

OpenModelica 中文教程

一、OpenModelica简介

1.1 什么是OpenModelica?

OpenModelica是一个开源的多领域建模与仿真环境,基于Modelica语言。它为工程师和学者提供了强大的平台来设计、分析和优化复杂系统。

Modelica语言特点:

  • 面向对象的建模语言

  • 支持多领域物理系统建模(机械、电气、热力、液压、控制等)

  • 基于方程而非赋值语句

  • 非专有、统一的建模语言

1.2 主要特点

特点 说明
开源免费 基于OSMC-PL开源许可证
跨平台 支持Windows、Linux、macOS
图形化建模 OMEdit图形化连接编辑器
多领域支持 机械、电气、热力学、液压等
Modelica标准库 内置丰富的模型库
FMI/FMU支持 功能模型接口标准
脚本接口 Python、Matlab、Julia API

二、安装与配置

2.1 下载安装

Windows系统:

  1. 访问OpenModelica官方网站下载页面

  2. 选择适合系统架构的安装包(64位)

  3. 双击安装包,按照安装向导完成安装

  4. 确保安装路径不包含空格或特殊字符

Linux系统(Ubuntu/Debian):

bash

复制代码
# 添加软件源
echo "deb https://build.openmodelica.org/apt $(lsb_release -cs) release" | sudo tee /etc/apt/sources.list.d/openmodelica.list

# 添加GPG密钥
wget -q https://build.openmodelica.org/apt/openmodelica.asc -O- | sudo apt-key add -

# 安装
sudo apt-get update
sudo apt-get install openmodelica

macOS:

  • 下载.dmg安装包

  • 拖拽到应用程序文件夹

  • 注意:1.17.0版本后官方不再提供macOS构建,建议使用Linux虚拟机

2.2 环境变量配置

配置环境变量确保OpenModelica命令行工具可被系统调用:

Windows:

  • 添加 MODELICAPATH 变量指向OpenModelica安装路径

  • C:\OpenModelica\bin 添加到系统Path变量

Linux/macOS:

bash

复制代码
# 编辑 ~/.bashrc 或 ~/.profile
export MODELICAPATH="/path/to/openmodelica/libraries:$MODELICAPATH"
source ~/.bashrc

2.3 验证安装

bash

复制代码
omc --version

返回版本信息则表示安装成功。

2.4 界面语言设置

OMEdit支持中文界面:

  • 点击菜单栏 Tools → Options → General Options

  • 将语言更改为中文


三、OMEdit图形化建模

3.1 启动OMEdit

平台 启动方式
Windows 开始菜单 → OpenModelica → OpenModelica Connection Editor
Linux 终端输入 OMEdit 或应用菜单
macOS /Application/MacPorts/OMEdit.app

3.2 主窗口组成

OMEdit包含以下可停靠浏览器:

  • 库浏览器:显示已加载的Modelica类

  • 文档浏览器:显示类的HTML文档

  • 变量浏览器:显示模型变量,可勾选绘图

  • 消息浏览器:显示错误和通知信息

3.3 四种视角

视角 用途
欢迎视角 显示最近文件和新闻
建模视角 创建和设计模型
绘图视角 显示仿真结果
调试视角 调试模型代码

3.4 创建新模型

方法:

  1. 点击 Ctrl+N 或 File → New → New Modelica Class

  2. 输入模型名称

  3. 选择类类型(model、connector、block、record、function)

3.5 图形化建模

步骤:

  1. 从库浏览器拖拽组件到图标/图表视图

  2. 启用连接模式(工具栏连接按钮)

  3. 鼠标移动到组件连接点(光标变十字)

  4. 拖拽连线到目标组件

  5. 双击组件设置参数

快捷键:

  • Ctrl+R:旋转组件

  • Delete:删除组件

  • Ctrl+鼠标滚轮:缩放视图

3.6 简单示例:RLC电路

  1. 新建模型命名为 RLC_TEST

  2. Electrical/Analog/Basic 拖拽组件:

    • Resistor(电阻)

    • Capacitor(电容)

    • Inductor(电感)

    • Ground(接地)

  3. Sources 拖拽 ConstantVoltage(恒压源)

  4. 按电路图连接,右键设置元件参数

  5. 点击仿真按钮运行

四、Modelica语言基础

4.1 模型结构

modelica

复制代码
model SimpleCircuit
  // 参数声明
  parameter Real V = 5;    // 电压
  parameter Real R = 100;  // 电阻值
  Real i;                   // 电流变量
  
  // 方程部分
equation
  V = i * R;  // 欧姆定律
  
end SimpleCircuit;

4.2 变量类型

关键字 说明 示例
parameter 常量参数 parameter Real R=100
Real 实数变量 Real x(start=1)
Integer 整数变量 Integer n=5
Boolean 布尔变量 Boolean flag=true
String 字符串 String name="test"

4.3 方程式 vs 算法

方程式(方程部分):

  • 声明式,不指定计算顺序

  • 使用 = 符号

modelica

复制代码
equation
  der(x) = -k * x;  // 微分方程

算法(算法部分):

  • 过程式,指定执行顺序

  • 使用 := 赋值符号

modelica

复制代码
algorithm
  y := 2 * x;
  for i in 1:10 loop
    sum := sum + i;
  end for;

4.4 RLC电路代码示例

modelica

复制代码
model RLC_TEST
  Modelica.Electrical.Analog.Basic.Resistor R1(R = 100);
  Modelica.Electrical.Analog.Basic.Ground G;
  Modelica.Electrical.Analog.Basic.Capacitor C1(C = 0.001);
  Modelica.Electrical.Analog.Basic.Inductor L1(L = 1);
  Modelica.Electrical.Analog.Sources.ConstantVoltage CV1(V = 5);
  
equation
  connect(R1.p, C1.p);
  connect(L1.n, C1.p);
  connect(CV1.p, L1.p);
  connect(CV1.n, C1.n);
  connect(R1.n, C1.n);
  connect(CV1.n, G.p);
  
  annotation(uses(Modelica(version = "4.0.0")));
end RLC_TEST;

五、仿真操作

5.1 仿真流程

  1. 检查模型Ctrl+Shift+C 或 Simulation → Check Model

  2. 设置仿真参数:点击仿真设置按钮

  3. 运行仿真:点击运行按钮(绿色箭头)

  4. 查看结果:自动切换到绘图视角

5.2 仿真参数设置

参数 说明 默认值
Start Time 开始时间 0.0
Stop Time 停止时间 1.0
Number of Intervals 输出时间点数量 500
Tolerance 容差 1e-6
Method 求解器 dassl

5.3 求解器选择

求解器 类型 适用场景
dassl BDF隐式 刚性系统(默认)
ida BDF隐式 大型稀疏系统
cvode Adams/BDF 通用
euler 显式 简单教学示例
rungekutta 显式 固定步长求解

5.4 命令行仿真

modelica

复制代码
loadFile("RLC_TEST.mo");
simulate(RLC_TEST, startTime=0, stopTime=10, numberOfIntervals=500);
plot({R1.i, L1.i});

六、结果绘图

6.1 变量浏览器

  • 仿真完成后,变量浏览器显示所有变量

  • 勾选变量复选框即可在绘图窗口显示曲线

  • 支持:时间曲线、参数图、数组图

6.2 绘图操作

变量浏览器过滤选项:

  • 正则表达式:der(.*) 匹配所有导数

  • 通配符:R* 匹配所有R开头的变量

  • 固定字符串:直接输入变量名

6.3 绘图命令

modelica

复制代码
plot(x);                          // 单变量
plot({x1, x2});                   // 多变量
plotParametric(x, y);             // 参数图
plotAll();                         // 全部变量

6.4 绘图选项

modelica

复制代码
plot(Resistor.i, 
     title="电流曲线",
     grid="simple",
     logX=false,
     xLabel="时间(s)",
     yLabel="电流(A)");

七、OMShell交互式会话

7.1 启动OMShell

  • Windows:开始菜单 → OpenModelica → OpenModelica Shell

  • Linux :终端运行 OMShell-terminal

7.2 基本命令

命令 说明 示例
cd() 获取当前目录 cd()
cd("dir") 切换目录 cd("D:/models")
loadFile("file.mo") 加载模型文件 loadFile("RLC.mo")
loadModel(Modelica) 加载标准库 loadModel(Modelica)
simulate(model) 仿真 simulate(RLC_TEST)
plot(x) 绘图 plot(R1.i)
val(var, time) 获取变量值 val(R1.i, 0.5)
list() 列出所有类 list()
clear() 清除所有 clear()
getErrorString() 查看错误 getErrorString()

7.3 交互式编程示例

For循环求和:

modelica

复制代码
k := 0;
for i in 1:1000 loop
  k := k + i;
end for;
k;  // 500500

函数定义与调用:

modelica

复制代码
function mySqr
  input Real x;
  output Real y;
algorithm
  y := x * x;
end mySqr;

b := mySqr(2);  // 4.0

八、库管理

8.1 加载Modelica标准库

modelica

复制代码
loadModel(Modelica, {"4.0.0"});

8.2 加载自定义库

modelica

复制代码
loadFile("C:/my_libraries/MyPackage.mo");

8.3 查看已加载库

modelica

复制代码
getClassNames();  // 列出所有已加载类
getLoadedLibraries();  // 列出已加载库

8.4 包管理器命令

命令 说明
updatePackageIndex() 更新包索引
getAvailablePackageVersions(Pkg, "") 查看可用版本
installPackage(Pkg, "version") 安装包
upgradeInstalledPackages() 升级所有已安装包

九、脚本编程

9.1 MOS脚本文件

创建 simulate.mos 文件:

modelica

复制代码
loadFile("RLC_TEST.mo");
simulate(RLC_TEST, stopTime=5, numberOfIntervals=1000);
plot({R1.i, L1.i});

执行脚本:

bash

复制代码
omc simulate.mos

9.2 参数扫描示例

modelica

复制代码
loadFile("RLC_TEST.mo");
buildModel(RLC_TEST);

for i in 1:3 loop
  system("./RLC_TEST -override=R1.R=" + String(100*i) + " -r=result_" + String(i) + ".mat");
end for;

十、Python接口 (OMPython)

10.1 安装

bash

复制代码
pip install OMPython

10.2 基本使用

python

复制代码
from OMPython import OMCSessionZMQ

omc = OMCSessionZMQ()

# 加载模型
omc.sendExpression('loadFile("RLC_TEST.mo")')

# 仿真
omc.sendExpression('simulate(RLC_TEST, stopTime=5)')

# 获取结果
val = omc.sendExpression('val(R1.i, 2.0)')
print(val)

10.3 使用ModelicaSystem类

python

复制代码
from OMPython import ModelicaSystem

mod = ModelicaSystem("RLC_TEST.mo", "RLC_TEST")

# 获取参数
mod.getParameters()

# 修改参数
mod.setParameters(["R1.R=200"])

# 仿真
mod.simulate()

# 获取结果
mod.getSolutions(["time", "R1.i"])

十一、FMI/FMU导出

11.1 导出FMU

modelica

复制代码
buildModelFMU(RLC_TEST, version="2.0", fmuType="me");

参数说明:

  • version: "1.0" 或 "2.0"

  • fmuType: "me"(模型交换)/"cs"(协同仿真)/"me_cs"

11.2 导入FMU

modelica

复制代码
importFMU("RLC_TEST.fmu");

十二、常见问题与技巧

12.1 常用快捷键

快捷键 功能
Ctrl+N 新建模型
Ctrl+O 打开文件
Ctrl+S 保存
Ctrl+R 旋转组件
Ctrl+Shift+C 检查模型
F5 仿真

12.2 常见错误解决

问题 解决方案
模型加载失败 检查MODELICAPATH环境变量
仿真不收敛 调整容差或更换求解器
变量不存在 检查变量名拼写和大小写
初始化失败 添加state变量的start属性

12.3 调试技巧

modelica

复制代码
// 查看错误信息
getErrorString();

// 设置详细输出
setCommandLineOptions("-d=initialization");

// 检查模型结构
checkModel(RLC_TEST);
instantiateModel(RLC_TEST);

十三、学习资源

13.1 官方资源

相关推荐
Wumbuk2 年前
【OpenModelica】4命令行大全
开发语言·python·modelica