OpenModelica用户指南
第1页:封面与版权
OpenModelica用户指南 v1.27.0-dev-430
-
版权 © 1998-2026 开源Modelica联盟(OSMC)
-
瑞典林雪平大学计算机与信息科学系
-
遵循知识共享署名4.0国际许可协议
-
Modelica®是Modelica协会注册商标
第2页:系统目标
短期目标
-
开发高效的Modelica交互式计算环境
-
完整实现Modelica语言
长期目标
-
完整的Modelica语言参考实现
-
语言设计研究(PDE扩展、离散建模等)
-
并行硬件代码生成
-
改进调试支持
第3页:系统架构
主要子系统:
-
交互式会话处理器(OMShell)
-
Modelica编译器子系统
-
执行和运行时模块
-
Eclipse插件编辑器(MDT)
-
OMNotebook编辑器
-
OMEdit图形编辑器
-
OMOptim优化子系统
-
动态优化子系统
-
方程/算法调试器
第4页:交互式会话示例
基本命令:
text
>>> x := 1:12 # 赋值向量
>>> bubblesort(x) # 调用函数
>>> loadFile("model.mo") # 加载模型
>>> simulate(model) # 仿真模型
>>> plot({h,v}) # 绘图
>>> val(h, 2.0) # 获取变量值
>>> clear() # 清除所有
>>> quit() # 退出
第5页:OMEdit图形编辑器
主要功能:
-
图形化模型创建
-
组件拖放建模
-
智能连接编辑
-
仿真参数设置
-
2D/3D绘图与可视化
-
后处理与数据查看
四种视角:
-
欢迎页 | 建模 | 绘图 | 调试
第6页:OMEdit - 创建模型
新建Modelica类:
-
File → New → New Modelica Class
-
选择类类型:model, connector, block, record, function
添加组件:
-
从库浏览器拖放组件
-
启用连接模式后绘制连接线
创建自定义图标:
-
线条、多边形、矩形、椭圆、文本、位图工具
第7页:OMEdit - 仿真设置
通用设置:
-
起始/停止时间
-
间隔数/步长
-
求解器选择:dassl, ida, cvode, euler, gbode
-
容差设置
-
Jacobian方法
输出设置:
-
格式:mat, csv, plt, empty
-
变量过滤器(正则表达式)
-
保护变量输出选项
第8页:2D绘图
绘图命令:
text
plot(x) # 单变量
plot({x1, x2}) # 多变量
plotParametric(x, y) # 参数图
plotAll() # 全部变量
绘图选项:
-
网格:simple/detailed/none
-
对数坐标:logX/logY
-
坐标轴标签、标题、图例位置
-
曲线样式、宽度
-
自动缩放
第9页:OpenModelica编译器
编译流程:
-
词法分析
-
解析 → 抽象语法树
-
语义分析
-
中间表示(SCode → DAE)
-
符号优化后端
-
代码生成
后端模块:
-
预优化(分区、别名删除)
-
因果化(匹配、排序、指标降低)
-
后优化(撕裂、Jacobian)
第10页:求解Modelica模型
积分方法对比:
| 求解器 | 类型 | 适用系统 | 阶数 | 步长控制 |
|---|---|---|---|---|
| DASSL | BDF隐式 | 刚性 | 1-5 | 自适应 |
| IDA | BDF隐式 | 刚性 | 1-5 | 自适应 |
| CVODE | Adams/BDF | 非刚性/刚性 | 1-12 | 自适应 |
| GBODE | RK | 两者 | 1-14 | 自适应 |
| Euler | 显式 | 非刚性 | 1 | 固定 |
第11页:初始化
起始值选择:
-
只有非线性迭代变量需要起始值
-
使用
-d=initialization查看初始化信息
从先前仿真导入:
-
方法1:作为迭代初值(求解初始方程)
-
方法2:直接初始化(跳过初始方程)
-
标志:
-iif=result.mat和-iim=none
同伦方法:
-
复杂初始条件求解
-
homotopy(actual, simplified)
第12页:调试功能
方程调试器:
-
跟踪符号变换
-
显示方程到bug的完整路径
-
需要
-d=infoXmlOperations
算法调试器:
-
支持断点设置
-
单步执行(Step Over/In/Return)
-
变量检查
-
堆栈帧查看
-
GDB集成
第13页:Modelica库移植
常见问题及解决:
| 问题 | 解决方案 |
|---|---|
| 数组修饰符不匹配 | 添加 each 关键字 |
| 条件组件访问 | 使用内部辅助变量/连接器 |
| 算法中等号误用 | 使用 := 而非 = |
| 函数中public非IO变量 | 移到protected部分 |
| 初始条件不完整 | 添加固定start属性或初始方程 |
第14页:FMI支持
FMI导出:
text
buildModelFMU(Model, version="2.0", fmuType="cs")
-
版本:FMI 1.0 / 2.0.4
-
类型:Model Exchange / Co-Simulation
-
平台:native / 交叉编译 / Docker
FMI导入:
-
需设置
--allowNonStandardModelica=reinitAlgorithms -
使用
importFMU()命令
OMSimulator:
-
FMI仿真工具,支持Lua/Python脚本
第15页:OMSimulator
核心功能:
-
FMI基协同仿真
-
TLM(传输线建模)连接
-
SSP格式支持
-
多变量建模
脚本API:
-
C-API / Lua / Python / OpenModelicaScripting
关键操作:
-
oms_newModel()/oms_addSubModel() -
oms_addConnection()/oms_simulate() -
oms_setReal()/oms_setBoolean()
第16页:系统辨识(OMSysIdent)
功能:
-
线性和非线性动态模型参数估计
-
基于Ceres求解器
Python API示例:
python
simodel = OMSysIdent("model")
simodel.initialize(nSeries, time, inputvars, measurementvars)
simodel.addParameter("param", startvalue)
simodel.addMeasurement(0, "var", data)
simodel.solve("BriefReport")
第17页:优化功能
动态优化(注解法):
-
使用
input变量作为控制输入 -
isMayer=true/isLagrange=true定义目标 -
isConstraint=true定义路径约束 -
isFinalConstraint=true定义终端约束
OMOptim参数扫描:
-
遗传算法优化
-
多目标Pareto前沿
-
需要设置:优化变量、目标函数、算法参数
第18页:参数敏感性分析
IDA/Sundials方式:
-
需要
--calculateSensitivities编译标志 -
仿真时使用
-idaSensitivity
OMSens模块:
三种分析模式:
-
单参数敏感性 - 单个参数的影响
-
多参数扫描 - 参数空间探索
-
向量敏感性 - 最大化/最小化目标变量
输出:热力图、参数组合、优化结果
第19页:脚本API概览
常用命令分类:
| 类别 | 示例命令 |
|---|---|
| 模型加载 | loadFile(), loadModel(), loadString() |
| 仿真 | simulate(), buildModel(), optimize() |
| 信息查询 | getClassNames(), getComponents(), checkModel() |
| 绘图 | plot(), plotParametric(), plotAll() |
| 文件操作 | readFile(), writeFile(), cd(), system() |
| 调试 | getErrorString(), clearMessages() |
第20页:Python/Matlab/Julia接口
OMPython:
python
from OMPython import OMCSessionZMQ
omc = OMCSessionZMQ()
omc.sendExpression("simulate(model)")
OMMatlab:
matlab
omc = OMMatlab();
omc.sendExpression("getVersion()");
OMJulia:
julia
using OMJulia
omc = OMCSession()
omc.sendExpression("loadModel(Modelica)")
第21页:OMNotebook
特点:
-
文学编程式电子笔记本
-
支持Modelica代码交互执行
-
包含DrModelica教学系统
-
包含DrControl控制理论教程
单元格类型:
-
Textcell(文本)
-
Inputcell(代码输入)
-
Latexcell(数学公式)
-
Groupcell(分组)
第22页:加密功能
加密库导出:
-
调用
buildEncryptedPackage() -
输出
.mol文件 -
不加密资源文件
加载加密库:
-
loadEncryptedPackage() -
需要特殊版OpenModelica(OSMC Level 2会员)
注意:
-
不含许可证管理
-
仅防止源码查看
-
生成C代码被混淆
第23页:编译器标志速查
重要选项:
| 标志 | 说明 |
|---|---|
-g=Modelica |
设置语法(MetaModelica/Optimica) |
--std=3.6 |
语言标准版本 |
--simCodeTarget=C |
代码生成目标 |
--preOptModules |
预优化模块 |
--postOptModules |
后优化模块 |
--tearingMethod=cellier |
撕裂方法 |
--generateDynamicJacobian |
Jacobian生成方式 |
--profiling=blocks |
性能分析级别 |
第24页:仿真运行时标志速查
重要标志:
| 标志 | 说明 |
|---|---|
-s=dassl |
积分方法 |
-tolerance=1e-6 |
容差 |
-lv=LOG_STATS |
日志级别 |
-override=param=value |
参数覆盖 |
-r=result.mat |
结果文件名 |
-csvInput=input.csv |
CSV输入 |
-iim=none |
跳过初始化 |
-jacobian=symbolical |
Jacobian类型 |
第25页:数据协调
目的: 利用物理模型减少测量误差影响
定义:
-
边界条件:
annotation(__OpenModelica_BoundaryCondition = true) -
兴趣变量:
uncertain = Uncertainty.refine
输入文件:
-
测量输入文件(变量名、测量值、半宽置信区间)
-
相关矩阵文件(可选)
输出: 协调值、协调协方差矩阵、HTML报告
第26页:版本发布记录
最新版本 1.26.0 (2025冬季):
主要亮点:
-
OMEdit支持保存语法错误的模型
-
参数编辑对话框改进
-
条件组件规则放宽
-
调试功能增强
-
大型结果文件处理改进
-
移除废弃求解器
第27页:贡献者列表
项目负责人: Peter Fritzson
主要贡献者(部分):
-
Adrian Pop, Adeel Asghar, Willi Braun
-
Lennart Ochel, Martin Sjölund, Per Östlund
-
Bernhard Bachmann, Francesco Casella
-
以及来自全球众多研究机构和公司的贡献者
贡献时期: 1998-2026
第28页:快速参考 - 常用命令
| 任务 | 命令 |
|---|---|
| 加载模型 | loadFile("model.mo") |
| 仿真 | simulate(model, stopTime=10) |
| 绘图 | plot(x) |
| 获取值 | val(x, 2.0) |
| 查看错误 | getErrorString() |
| 清空 | clear() |
| 列出类 | list() |
| 实例化 | instantiateModel(model) |
| 检查模型 | checkModel(model) |
第29页:资源链接
-
OMSimulator:https://github.com/OpenModelica/OMSimulator
联系: OpenModelica@ida.liu.se
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)