您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
业务架构设计
4月18-19日 在线直播
基于UML和EA进行系统分析设计
4月25-26日 北京+在线
AI 智能化软件测试方法与实践
5月23-24日 上海+在线
     
   
 
 订阅
modelica入门:模型搭建、语法详解与标准库应用
 
 
 
  173  次浏览      5 次
2025-4-23
 
编辑推荐:
本文主要介绍了modelica入门:模型搭建、语法详解与标准库应用等相关内容。希望对你的学习有帮助。
本文来源于CSDA,由火龙果软件Linda编辑,推荐。

一、基础知识

1、modelica特点

  • 面向对象

    • 模拟人类思维方法、高效表达模型物理属性

    • 极大促进模型复用

  • 基于等式、无因果关系

    • 等式不是其他编程语言的赋值

  • 只负责建立模型,不负责模型求解

2、优势

  • 高效:面向对象、基于等式、跨学科

  • 灵活:支持多种形式的模型构建

    • 连续模型

    • 离散模型

    • 混合模型

  • 自由:丰富且高质量的开源和商用模型库

    • 开源库:Modelica standard library、linearSystems2

    • 商用库:Modelon,claytex

    • 语言开源

开发环境:Dymola(商业软件、贵)、OpenModelica(开源)、MWorks(国产工业软件)

下载地址(win10):

OpenModelica 16.2下载地址

Dymola 2021x试用版下载地址

二、Modelica模型搭建流程

建模准备流程

  • 积累基本物理规律

    • 上课认真听讲,多读Paper,看视频教程。

  • 确立模型用途

    • 影响搭建过程,工具选用及模型本身(做什么:系统分析、模型控制、实时仿真)

  • 分析并确定模型复杂度

    • 不要太高,也不要太低,满足要求最好。

三、基本语法

按照模型类型学习语法

  • 通用语法

  • 函数语法

  • 连续模型语法

  • 离散及混合模型语法 (跳过)

3.1 通用语法 (部分)

  • 变量声明

    • 类型: Real, Integer, Boolean , String

    • 前缀: input, output, parameter

    • 可见性: public,protected

  • 算术运算: +,-,*,/,^

  • 导数运算符:der(x)表示x的一阶导;y1=der(x),y2=der(y1),其中y2表示对x求二阶导

  • 延时运算符:z=delay(x,2),z为对x延时2s后的结果

  • 注释:

    • 单行注释:// this is a line comment

    • 多行注释:/* this is a block comment */

    • 引号注释:Real foo "A special comment";

  • 数组:

    • x[3]:一维数组 (3-element vector)

    • x[3, 3]:二维数组 (3x3 matrix)

    model demo
      Real foo "this is a foo variable";
      Integer bar;
      Boolean foo2;
      input Real foo3;
      output Integer bar2;
      parameter Real foo4 = 1.0;
      parameter Real  x[3] = 
    {1,2,3} "A 3 ELEMENT VECTOR"; input Real x1[:]"定义输入为一维数组"; input Real x2[:,:]"定义输入为二维数组"; parameter Real x2[3,3] = [1,2,3;2,3,4;3,4,5] protected Integer bar3; equation //foo = foo2 + foo3; /*foo = foo2 * foo3; */ annotation (Icon(coordinateSystem
    (
    preserveAspectRatio=false)), Diagram( coordinateSystem(preserveAspectRatio=false))); end demo;

     

  • 逻辑运算符:and,or,not,<,>,<>,<=,>=

  • 条件语句:

    if <condition> then
    ...
    elseif <condition> then
    ...
    else
    ...
    end if;
    

     

  • 循环语句:

for i in 1:10 loop
    ...
end for;

 

3.2 函数语法

  • 参数声明:input

  • 输出声明:output

  • 赋值运算符::=

  • 特点(部分):

    • 自上至下顺序执行

    • 参数引用方式为只读, 即函数内无法更改输入参数数值

函数语法及调用

  • 分区标识符

    • 函数内容:algorithm

    • 局部变量:protected

  • 参数默认值:input Real tol = 1e-5 "Input with default value"

  • 多个输出变量

  • 调用

function demo_function "demo function"
  input Real in1 "The first argument for demo function";
  input Real in2 "The second argument for demo function";
  input Real tol = 5 "Tolerance";
  output Real out1 "The first output for demo";
  output Real out2 "The second output for demo";

  /*(out1,out2) = demo(in1,in2)*/
protected 
  Real p1;

algorithm 
  p1 := in1 - in2;
  out1 := in1 + in2 + p1;
  out2 := in1 * in2;

end demo_function;

 

函数语法及调用

function <函数名>
  input  TypeI1 in1;
  input  TypeI2 in2;
  input  TypeI3 in3 = <默认值> "注释" annotation(...);
  ...
  output TypeO1 out1;
  output TypeO2 out2 = <默认值>;
protected
  <局部变量>
  ...
algorithm
  <语句>
  ...
end <函数名>;

 

函数语法练习

编写一个coo函数将致密矩阵M转换为Coordinate/Triplet储存格式的稀疏矩阵。

例子:

M = [1.0,2.0,3.0;0,4.0,0;5.0,0,0]; "致密

M = [1.0,2.0,3.0;0,4.0,0;5.0,0,0]; "致密矩阵"

// M转换为COO格式的稀疏矩阵
i, j, value
1, 1, 1.0
1, 2, 2.0
1, 3, 3.0
2, 2, 4.0
3, 1, 5.0

函数语法实例

function emo
  input Real M[:,:];
  output Real row[:];
  output Real col[:];
  output Real value[:];
  
protected 
  Integer count;
  Real temp_row[size(M,1)*size(M,2)];
  Real temp_col[size(M,1)*size(M,2)];
  Real temp_value[size(M,1)*size(M,2)];

algorithm
  count := 1;
  for i in 1 : size(M,1) loop
    for j in 1 : size(M,2) loop
      if M[i,j]<>0 then
        temp_row[count] := i;
        temp_col[count] := j;
        temp_value[count] := M[i,j];
        count := count + 1;
      end if;
    end for;
  end for;
  
  row := temp_row[1:count-1]; 
  col := temp_col[1:count-1];
  value := temp_value[1:count-1]; 
  

end emo;

3.3 等式语法(equation)

Modelica各元素的组成关系

  • 变量:

    • parameter Modelica.Units.SI.mass m = 10 "质量";

    • Modelica.Units.SI.Velocity v "速度"

  • 表达式expression: m*der(v)

  • 等式equation: m*der(v) = F

  • 组件component: Modelica.Mechanics.Translational.Components.Mass

  • 系统system: Modelica.Mechanics.Translational.Examples.Accelerate

等式语法的核心 - 构建平衡模型

  • 语法不同于其他语言,但只要掌握核心便可加速理解。

  • 核心:通过等式建立变量之间的关系,并使未知变量数量与等式数量一致

  • 详细信息可参见:

    • ModelicaReference.BalancedModel

    • Modelica Language Specification v3.5 - Section 4.7

model/block 结构

  • Modelica模型中最常见的单位

  • 以模型名称开头(CamelCase),以同样的模型名称结尾。

model ModelName "模型描述(非必要)"
  // 声明状态变量, 参数, 输入/输出变量等
initial equation
  // 初始化等式
equation
  /* 构建已知未知变量之间的关系的等式 */
end ModelName;

等式语法 - 基本等式

  • 作用: 用于构建已知与未知,或未知与未知变量之间的关系。

  • 格式: <表达式1> = <表达式2>;

  • =符号不表示赋值,不同于其他语言,左侧是表达式而不是变量。m*a = F是合法的。

  • 无因果关系: <表达式1> = <表达式2>; 与 <表达式2> = <表达式1>; 是等效的,且无先后顺序。

等式语法 - 条件等式

  • 作用: 用于表达模型根据条件变化发生行为的改变。

  • 格式1:

    if a > b then
        x = sin(time);
    else
        x = cos(time);
    end if
    

  • 格式2:

    x = if a > b then sin(time) else cos(time);
    

     

  • 核心是要保持等式数量不变,等式语句中有if一定就有else。

等式语法 - 初始化等式

  • 作用: 用于设置状态变量,或状态变量导数的初始值(稳态分析)。

  • 格式:

...
initial equation
    x = 3;
    der(y) = 0;
    z = p0;
equation
...

 

等式语法 - 注意事项

  • 时刻检测等式平衡性

  • 注意变量的定义域,例如log(x), sqrt(x), 1/x

变量数量及等式数量计算

  • 已知变量:input, parameter, constant

  • 未知变量:其他变量都是未知(output, flow, Real/Integer/Boolean/Enumeration) -->

四、标准库 Modelica Standard Library

Modelica Standard Libary (MSL) 介绍

Free library from the Modelica Association to model mechanical
(1D/3D), electrical (analog, digital, machines), magnetic, thermal,
fluid, control systems and hierarchical state machines. Also numerical
functions and functions for strings, files and streams are included.

  • Modelica Association (权威性)

  • BSD 3-Clause License (开放性)

  • https://github.com/modelica/ModelicaStandardLibrary

  • 最新版本: v4.0.0 (2020-06-04)

MSL 常识

  • Modelica编译器,Modelica语言,MSL标准库三者之间的关系

    • 相互独立又相互依赖。

      • Dymola: 2022 | 语言: 3.5 | MSL: 4.0.0

    • 举例 - OpenModelica报错分析:

    • Modelica.SIunits -> Modelica.Units.{SI, NonSI, Conversions}

  • 版本管理

    • MAJOR.MINOR.BUGFIX (参见语义化版本Semantic Versioning)

MSL 概述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
(img-DHyCyMri-1646963763516)(…/modelica资料/
ModelicaPrimer-master/lecture05a/images/LibStructure.png)]

  • Blocks(貌似)强因果关系模型

  • Clocked/StateGraph 离散模型/状态机

  • Magnetic/Electrical/Mechanics/Fuild/Thermal 各领域基础物理模型

  • Math/ComplexMath/Utilities/Constants/Units 辅助应用

Modelica.Blocks

  • 主要包含一些强因果关系的Block模型。

  • 一般都包含一个或多个input和output连接器

  • 一般被用于信号生成及信号处理

  • 建议:多用于辅助物理模型,而不是构建物理模型。

Modelica.Blocks.Sources

基于time变量的各种信号发生器,一般通过更改参数的形式改变信号的形状

  • Modelica.Blocks.Sources.Constant

  • Modelica.Blocks.Sources.Sine/Cosine... etc

  • Modelica.Blocks.Sources.Step/Ramp... etc

  • Modelica.Blocks.Sources.RealExperession

  • Modelica.Blocks.Sources.CombiTimeTable

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
(img-MIS9Pr4T-1646963763517)(…/…/AppData/Roaming/
Typora/typora-user-images/image-20211231143541106.png)]

五、标准库MSL - CombiTable插值模块

功能介绍

  • 插值: 是一种通过已知的、离散的数据点,在范围内推求新数据点的过程或方法。

  • 举例

  • 一维单变量插值: Modelica.Blocks.Tables.CombiTable1Ds

    • 输入(自变量,Real): u

    • 输出(插值结果,Real[:]):y

    • 可以理解为y = {f1(u), f2(u), ... fn(u)}

    • 图像

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
      (img-SouPrj38-1646963763517)(…/…/AppData/Roaming/Typora/
      typora-user-images/image-20211231173040802.png)]

基本用法

  • 信号源:万能的信号发生器、可以连接在电流源、电压源、温度源、力

  • 数据模型

数据导入

  • 以参数方式导入数据

    • table (Real[:][:]) : 二维数组,第一列为自变量,且需单调递增!

    • 示例

  • 以文件方式导入数据(*.txt,*.mat)

    • fileName (String类型):数据文件所在位置,注意\\, NoName

    • tableName (String类型):table名称

    • 格式/示例

  • 两种方式的区别

    • 动态矩阵大小

插值属性

  • columns:决定输出向量的大小

  • smoothness:插值方式

    • Linear

    • Piecewise Constant

  • extrapolation:外推法

    • Hold first/last table point

    • Extrapolate using last two point derivative

openmodelica

单摆modelica模型

model simplePendulum
parameter Real L=2 "参量";
constant Real g=9.81 "常量";
Real theta"变量";
Real omega;

initial equation
  //---------------------------------------
  // 设定初始值
  //---------------------------------------
  omega = 0;
  theta = 2.3;

equation

der(theta) = omega;
der(omega) = -(g/L)*Modelica.Math.sin(theta);

end simplePendulum;

 

   
173 次浏览       5
 
相关文章

用户手册:EA Helper
自然语言自动化生成图
使用iSpace进行多人协作建模
基于模型的软件复用(MBSR)
 
相关文档

AUTOSAR_TR_BSW UML模型建模指南
UML时间图建模(基于EA)
UML 模型框架(基于EA)
UML序列图编写规范
 
相关课程

UML+EA+面向对象分析设计
UML + 嵌入式系统分析设计
业务建模与业务分析
基于UML和EA进行系统分析设计

最新活动计划
人工智能.机器学习TensorFlow 5-22[北京]
AI智能化软件测试方法与实践 5-23[北京]
图数据库与知识图谱 5-22[北京]
DeepSeek大模型应用开发 6-12[厦门]
基于 UML 和EA进行分析设计 6-23[北京]
嵌入式软件架构-高级实践 7-9[北京]
 
 
最新文章
在EA中内嵌文档- Artifact
EA中模型视图
EA中的实体关系图
使用EA进行风险建模
EA中的项目词汇表
EA的模型导出或导入csv文件
自定义表格(Custom Table)EA中使用
Gap Analysis Matrix(差距分析矩阵)
更多...   
MBSE工具
MBSE平台
建模工具 EA
模型库-Model Center
需求管理-ReqManager
自动建模-Modeler
多级仿真-Sys Simulator
代码工程-Code Engineer
文档生成器-DocGenerator
更多...   
成功案例
广汽研究院 SysML+EA+软件分析设计
高合汽车研发部门 建模工具EA、WebEA、
国汽智联 建模工具EA、模型库、WebEA
亿咖通 MBSE工程体系与工具链咨询
中航无人机 MBSE工具链
吉利汽车 购买EA工具
华科汽车零部件 购买EA工具
东风岚图汽车 购买EA工具 以及EA定制开发
更多...