OpenModelica 中文教程一、OpenModelica简介1.1 什么是OpenModelicaOpenModelica是一个开源的多领域建模与仿真环境基于Modelica语言。它为工程师和学者提供了强大的平台来设计、分析和优化复杂系统。Modelica语言特点面向对象的建模语言支持多领域物理系统建模机械、电气、热力、液压、控制等基于方程而非赋值语句非专有、统一的建模语言1.2 主要特点特点说明开源免费基于OSMC-PL开源许可证跨平台支持Windows、Linux、macOS图形化建模OMEdit图形化连接编辑器多领域支持机械、电气、热力学、液压等Modelica标准库内置丰富的模型库FMI/FMU支持功能模型接口标准脚本接口Python、Matlab、Julia API二、安装与配置2.1 下载安装Windows系统访问OpenModelica官方网站下载页面选择适合系统架构的安装包64位双击安装包按照安装向导完成安装确保安装路径不包含空格或特殊字符Linux系统Ubuntu/Debianbash# 添加软件源 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 openmodelicamacOS下载.dmg安装包拖拽到应用程序文件夹注意1.17.0版本后官方不再提供macOS构建建议使用Linux虚拟机2.2 环境变量配置配置环境变量确保OpenModelica命令行工具可被系统调用Windows添加MODELICAPATH变量指向OpenModelica安装路径将C:\OpenModelica\bin添加到系统Path变量Linux/macOSbash# 编辑 ~/.bashrc 或 ~/.profile export MODELICAPATH/path/to/openmodelica/libraries:$MODELICAPATH source ~/.bashrc2.3 验证安装bashomc --version返回版本信息则表示安装成功。2.4 界面语言设置OMEdit支持中文界面点击菜单栏Tools → Options → General Options将语言更改为中文三、OMEdit图形化建模3.1 启动OMEdit平台启动方式Windows开始菜单 → OpenModelica → OpenModelica Connection EditorLinux终端输入OMEdit或应用菜单macOS/Application/MacPorts/OMEdit.app3.2 主窗口组成OMEdit包含以下可停靠浏览器库浏览器显示已加载的Modelica类文档浏览器显示类的HTML文档变量浏览器显示模型变量可勾选绘图消息浏览器显示错误和通知信息3.3 四种视角视角用途欢迎视角显示最近文件和新闻建模视角创建和设计模型绘图视角显示仿真结果调试视角调试模型代码3.4 创建新模型方法点击CtrlN或 File → New → New Modelica Class输入模型名称选择类类型model、connector、block、record、function3.5 图形化建模步骤从库浏览器拖拽组件到图标/图表视图启用连接模式工具栏连接按钮鼠标移动到组件连接点光标变十字拖拽连线到目标组件双击组件设置参数快捷键CtrlR旋转组件Delete删除组件Ctrl鼠标滚轮缩放视图3.6 简单示例RLC电路新建模型命名为RLC_TEST从Electrical/Analog/Basic拖拽组件Resistor电阻Capacitor电容Inductor电感Ground接地从Sources拖拽 ConstantVoltage恒压源按电路图连接右键设置元件参数点击仿真按钮运行四、Modelica语言基础4.1 模型结构modelicamodel SimpleCircuit // 参数声明 parameter Real V 5; // 电压 parameter Real R 100; // 电阻值 Real i; // 电流变量 // 方程部分 equation V i * R; // 欧姆定律 end SimpleCircuit;4.2 变量类型关键字说明示例parameter常量参数parameter Real R100Real实数变量Real x(start1)Integer整数变量Integer n5Boolean布尔变量Boolean flagtrueString字符串String nametest4.3 方程式 vs 算法方程式方程部分声明式不指定计算顺序使用符号modelicaequation der(x) -k * x; // 微分方程算法算法部分过程式指定执行顺序使用:赋值符号modelicaalgorithm y : 2 * x; for i in 1:10 loop sum : sum i; end for;4.4 RLC电路代码示例modelicamodel 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 仿真流程检查模型CtrlShiftC或 Simulation → Check Model设置仿真参数点击仿真设置按钮运行仿真点击运行按钮绿色箭头查看结果自动切换到绘图视角5.2 仿真参数设置参数说明默认值Start Time开始时间0.0Stop Time停止时间1.0Number of Intervals输出时间点数量500Tolerance容差1e-6Method求解器dassl5.3 求解器选择求解器类型适用场景dasslBDF隐式刚性系统默认idaBDF隐式大型稀疏系统cvodeAdams/BDF通用euler显式简单教学示例rungekutta显式固定步长求解5.4 命令行仿真modelicaloadFile(RLC_TEST.mo); simulate(RLC_TEST, startTime0, stopTime10, numberOfIntervals500); plot({R1.i, L1.i});六、结果绘图6.1 变量浏览器仿真完成后变量浏览器显示所有变量勾选变量复选框即可在绘图窗口显示曲线支持时间曲线、参数图、数组图6.2 绘图操作变量浏览器过滤选项正则表达式der(.*)匹配所有导数通配符R*匹配所有R开头的变量固定字符串直接输入变量名6.3 绘图命令modelicaplot(x); // 单变量 plot({x1, x2}); // 多变量 plotParametric(x, y); // 参数图 plotAll(); // 全部变量6.4 绘图选项modelicaplot(Resistor.i, title电流曲线, gridsimple, logXfalse, xLabel时间(s), yLabel电流(A));七、OMShell交互式会话7.1 启动OMShellWindows开始菜单 → OpenModelica → OpenModelica ShellLinux终端运行OMShell-terminal7.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循环求和modelicak : 0; for i in 1:1000 loop k : k i; end for; k; // 500500函数定义与调用modelicafunction mySqr input Real x; output Real y; algorithm y : x * x; end mySqr; b : mySqr(2); // 4.0八、库管理8.1 加载Modelica标准库modelicaloadModel(Modelica, {4.0.0});8.2 加载自定义库modelicaloadFile(C:/my_libraries/MyPackage.mo);8.3 查看已加载库modelicagetClassNames(); // 列出所有已加载类 getLoadedLibraries(); // 列出已加载库8.4 包管理器命令命令说明updatePackageIndex()更新包索引getAvailablePackageVersions(Pkg, )查看可用版本installPackage(Pkg, version)安装包upgradeInstalledPackages()升级所有已安装包九、脚本编程9.1 MOS脚本文件创建simulate.mos文件modelicaloadFile(RLC_TEST.mo); simulate(RLC_TEST, stopTime5, numberOfIntervals1000); plot({R1.i, L1.i});执行脚本bashomc simulate.mos9.2 参数扫描示例modelicaloadFile(RLC_TEST.mo); buildModel(RLC_TEST); for i in 1:3 loop system(./RLC_TEST -overrideR1.R String(100*i) -rresult_ String(i) .mat); end for;十、Python接口 (OMPython)10.1 安装bashpip install OMPython10.2 基本使用pythonfrom OMPython import OMCSessionZMQ omc OMCSessionZMQ() # 加载模型 omc.sendExpression(loadFile(RLC_TEST.mo)) # 仿真 omc.sendExpression(simulate(RLC_TEST, stopTime5)) # 获取结果 val omc.sendExpression(val(R1.i, 2.0)) print(val)10.3 使用ModelicaSystem类pythonfrom OMPython import ModelicaSystem mod ModelicaSystem(RLC_TEST.mo, RLC_TEST) # 获取参数 mod.getParameters() # 修改参数 mod.setParameters([R1.R200]) # 仿真 mod.simulate() # 获取结果 mod.getSolutions([time, R1.i])十一、FMI/FMU导出11.1 导出FMUmodelicabuildModelFMU(RLC_TEST, version2.0, fmuTypeme);参数说明version: 1.0 或 2.0fmuType: me模型交换/cs协同仿真/me_cs11.2 导入FMUmodelicaimportFMU(RLC_TEST.fmu);十二、常见问题与技巧12.1 常用快捷键快捷键功能CtrlN新建模型CtrlO打开文件CtrlS保存CtrlR旋转组件CtrlShiftC检查模型F5仿真12.2 常见错误解决问题解决方案模型加载失败检查MODELICAPATH环境变量仿真不收敛调整容差或更换求解器变量不存在检查变量名拼写和大小写初始化失败添加state变量的start属性12.3 调试技巧modelica// 查看错误信息 getErrorString(); // 设置详细输出 setCommandLineOptions(-dinitialization); // 检查模型结构 checkModel(RLC_TEST); instantiateModel(RLC_TEST);十三、学习资源13.1 官方资源官网https://www.openmodelica.org用户指南https://openmodelica.org/doc/OpenModelicaUsersGuide/latest/API文档https://build.openmodelica.org/Documentation/GitHubhttps://github.com/OpenModelica