第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编译器

编译流程:

  1. 词法分析

  2. 解析 → 抽象语法树

  3. 语义分析

  4. 中间表示(SCode → DAE)

  5. 符号优化后端

  6. 代码生成

后端模块:

  • 预优化(分区、别名删除)

  • 因果化(匹配、排序、指标降低)

  • 后优化(撕裂、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模块:
三种分析模式:

  1. 单参数敏感性 - 单个参数的影响

  2. 多参数扫描 - 参数空间探索

  3. 向量敏感性 - 最大化/最小化目标变量

输出:热力图、参数组合、优化结果


第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页:资源链接

联系: OpenModelica@ida.liu.se

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐