一、使用

1.新建package-》新建modelica类

2.找组件modelica-->mechanics-->translational-->components等;找信号源blocks-->sources等

3.模件进行连接

4.元件设置参数

5.仿真-仿真设置

二、模型类化

打开类看单个构件的建模语言

新建类-->扩展 (选库中类的)-->在扩展类中写方程-->调用到modelica类中使用

三、语法

变量声明:

  1. 类型:Real,Integer, Boolean,String,enumeration
  2. 前缀:input, output, parameter;
  3. 可见性:public, protected;

注释:
1.单行;多行;
2.引号注释:

Real foo " A special comment";

数组:

parameter Real x[3,3]={1,2,3;4,5,6;4,5,6};

标注:annotation

equation
der(x) = 1-x ”Drives value of x toward 1.0”;
annotation(experiment(StartTime=0,StopTime=8));//定义模型仿真开始和结束的时间

标注中包含的信息与模型的属性没有直接联系,只是提供进行模拟仿真的条件

  1. 对变量、语句(方程)、继承:紧跟在一个声明的后面,并且在标示符 ; 的前面

    parameter Real length ”Rod length” annotation(...);
    
  2. 模型标注数据直接在模型自身定义的时候声明
  • 标注中即可以包含对变量的赋值,也可以包含对一些内部变量的修改
  • 标注就是为了方便模型开发者将任意数据添加到模型中而设计的,
  • 可以同时多个标注,
  • 只要标注的名称不同,我们就可以一次加入多个。
    :在加入零件号时,最好要将其放一个特别 的变量内。这个变量最好应该和你的公司或者应用情况相关,而且足够特别

    annotation(XogenyIndustries(PartNumber=”FF78-E4B879”),
    experiment(StartTime=0,StopTime=8));
    

    变量 XogenyIndustries 可以为某个特定组织或目的创建出一个“命名空间”

  • 几种标准标注:Documentation;experiment;Evaluate;HideResult(P37)

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

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

 循环:

for i in1:10 loop...
​​​​​​​end for;

四、函数语法

分区标志符

函数内容:alogrithm
        局部变量:protected

参数默认值:

        input Real tol=le-5 "Input with default value"

多个输出变量:

package demofunction demo_fuctioninput Real in1"The first input demo function";input Real in2"The second argument";output Real out1"The first output for demo";output Real out2"The second output for demo";/*(out1,out2)=demo(in1,in2)*/protected//局部变量Real p1;algorithmp1:=in1-in2;out1:=in1+in2;out2:=in1*in2;p1:=in1-in2;end demo_fuction;
end demo;

调用:

  (out1,out2)=Fuctions.demo_fuction(in1=10,in2=20);

函数测试:右键调用inputs,结果检验;

例题:将致密矩阵M转化为存储格式的稀疏矩阵

function  cooinput Real M[:,:] "Input dense matrix";input Real tol = le-5 "M[i,j]<tol is considered empty. Tolerance value";output Integer rows[:] "Row indices";output Integer cols[:] "Colum indices";output Real data[:] "values";
protectedInteger r_temp[size(M, 1) * size(M, 2)];Integer c_temp[size(M, 1) * size(M, 2)];Real d_temp[size(M, 1) * size(M, 2)];Integer counter;
algorithmcounter := 0;for i in 1:size(M, 1) loopfor j in 1:size(M, 2) loopif abs(M[i, j]) > tol thencounter := counter + 1;r_temp[counter] := i;c_temp[counter] := j;d_temp[counter] := M[i, j];end if;end for;end for;rows := r_temp[1:counter];cols := c_temp[1:counter];date := d_temp[1:counter];
end coo;

五、等式语法

modelica各元素的组合关系

变量-表达式-等式组件-系统

语法不同于其他语言,掌握核心

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

model/block结构

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

等式语法-基本等式

构建已知与未知或未知与未知量之间的关系

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

=不表示赋值,无因果关系

条件等式

表达形式1:

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

表达形式2:

if a>b thenx=sin(time);
elsex=cos(time);
end if

1.方程的平衡形式:
核心是要保持等式数量不变,等式有if一定有else;
变量的数量必须等于方程的数量,而且,在模拟的过程中方程的数量必须是固定的

2.不平衡形式:
​​​​​​​if 和 else 两侧的方程数量是不同的
仅当 :模拟过程中条件表达式的值不能改变 ;方程的数量在模拟过程中不能改变;

..
parameter Boolean steady_state;
initial equation
if steady_state then
der(x) = 0;
der(y) = 0;
..

如果布尔参数 steady_state(稳定状态)为真,那么初始方程是有效的。但是如果参数为假, 它们就无效。这里的条件表达式具有参数级别的可变性是因为,表达式仅仅包含一个变量,而这个变量 是个参数。

初始值等式

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

注意:变量定义域;检验等式平衡性

五、MSL

Modelica.Blocks

  • 包含强因果关系的模型
  • 一般包含一个或多个input和output连接器
  • 一般用于信号生成及信号处理
    多用于辅助物理模型,而不是建构

Modelica.Blocks.Sources
信号源输出

差值模块
Modelica.Blocks.Tables.CombiTable1Ds一维单变量差值

  • 用作信号源
  • 数据模型

**************************************************************************************************************

一、基本方程

parameter Real T_inf(unit=”K”)=298.15 ”Ambient temperature”;

1.关键字parameter 表明变量的 值是先验已知的(即仿真开始之前)
2.每个变量的声明部分都包含与变量相关联的物理单元文本 (unit=”...”):  ”1” 代表值没有物理 单位,。另一方面””(默认没有给定值)表明物理单位不确定。

model NewtonCoolingWithTypes ”Cooling example with physical types”
// Types
type Temperature=Real(unit=”K”, min=0);
type ConvectionCoefficient=Real(unit=”W/(m2.K)”, min=0);
type Area=Real(unit=”m2”, min=0);
type Mass=Real(unit=”kg”, min=0);
type SpecificHeat=Real(unit=”J/(K.kg)”, min=0);
// Parameters
parameter Temperature T_inf=298.15 ”Ambient temperature”;
parameter Temperature T0=363.15 ”Initial temperature”;
parameter ConvectionCoefficient h=0.7 ”Convective cooling coefficient”;
parameter Area A=1.0 ”Surface area”;
parameter Mass m=0.1 ”Mass of thermal capacitance”;
parameter SpecificHeat c_p=1.2 ”Specific heat”;
// Variables
Temperature T ”Temperature”;
initial equation
T = T0 ”Specify initial value for T”;
equation
m*c_p*der(T) = h*A*(T_inf-T) ”Newton’s law of cooling”;
end NewtonCoolingWithTypes;

一旦定义了一个物理类型比如 Temperature,我们可以使用它为多 个变量(例如 T、T_inf 和 T0)进行声明

Real x(start=5, fixed=true);
  1. start 属性的主要目的是(正如在初始化 ( 31) 那节里广泛讨 论过的)为状态变量提供“备用”的初始状态。
  2. start 属性的也可以用于变量,是迭代变量时的初始假想值。
  3. 最后,如果一个 parameter 没有明确指定的值,那么 start 属性的值可以作为 parameter 的默认值。

在声明变量的 start 属性时直接指 定其初始条件;变量的 fixed 属性被 用来通知编译器 start 属性必须作为初始条件来使用

start 属性的其中一个作用是提供初始化猜想值:因为该变量必须通过系统的非线性方程组来 求解。这也就意味着,我们要对变量 x 和 y 的 start 属性值进行指定,以尽量“避开”系统的零解(或 者说至少接近我们期望的非零解)

继承:

model QuiescentModelWithInheritance ”Steady state model with inheritance”
extends ClassicModel;
initial equation
der(x) = 0;
der(y) = 0;
end QuiescentModelWithInheritance;

从 ClassicModel 模型中复制(或“继承”) 其包含的所有内容,而无需重复定义。因此,除了新加入的初始化方程外,QuiescentModelWithInheritance 模型和 ClassicModel 模型其他部分完全一样

model QuiescentModelWithModifications ”Steady state model with modifications”
extends QuiescentModelWithInheritance(gamma=0.3, delta=0.01);
end QuiescentModelWithModifications;

允许对模型加入相应的“修改语句”

  • 按照惯例,extends 子句通常列在模型定义最上方,在任何变量之前

派生类型

type NewTypeName = BaseTypeName(/* attributes to be modified */);

type Temperature = Real(unit=”K”); // Could be a temperature difference
type AbsoluteTemperature = Temperature(min=0); // Must be positive

BaseTypeName(基本类型名称)一般为内置类型(比如 Real(实数))。但是它也可以是另外一种派生 类型。这意味着多层次的限定也是支持的。

Record 类型

record 类型可以有自己的变量,但是不允许包含方程。record 类型主要用于数据的分组

定义record;创建record:记录构造函数输入record类型内部定义匹配的变量

record Vector ”A vector in 3D space”
Real x;
Real y;
Real z;
end Vector;parameter Vector v = Vector(x=1.0, y=2.0, z=0.0);

二、离散行为

事件是任何在系统内触发了某种不连续性的东西:
“时间事件”:发生在某个特定时间的事件是最简单的一类事件;
“状态事件”:等到某信号越过特定阈值

time 是一个内置在所有 Modelica 模型内的变量

T_inf = 298.15 - (if time<0.5 then 0 else 20*(time-0.5));
 T_inf = 298.15 - max(0, 20*(time-0.5));//用max表示环境温度的变化

model NewtonCooling
//Types
type Temperature=Real(unit="K",min=0);
type ConvectionCoefficient=Real(unit="W/(m2.k)",min=0);
type Area=Real(unit="m2",min=0);
type Mass=Real(unit="kg",min=0);
type SpecificHeat=Real(unit="J/(K.kg)",min=0);//Parameters
parameter Temperature T0=363.15"Initial temperature";
parameter ConvectionCoefficient h=0.7"Convective cooling coefficient";
parameter Area A=1.0"Surface area";
parameter Mass m=0.1"Mass of thermal capacitance";
parameter SpecificHeat c_p=1.2"Specific heat";//Variables
Temperature T_inf"Ambient temperature";
Temperature T "Temperature";initial equationT=T0"Specify initial value for T";
equationif time<=0.5 thenT_inf=298.15"Constant temperature when time <=0.5";elseT_inf=298.15-20*(time-0.5)"Otherwise,increasing";end if;m*c_p*der(T)=h*A*(T_inf-T)"Newton's law of cooling";  end NewtonCooling;

问题:0x000002错误

另:可以用初始方程,方程从平衡态开始

if表达式代替if语句

Modelica学习笔记相关推荐

  1. PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call

    您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...

  2. 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  3. 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移

    暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...

  4. 2020年Yann Lecun深度学习笔记(下)

    2020年Yann Lecun深度学习笔记(下)

  5. 2020年Yann Lecun深度学习笔记(上)

    2020年Yann Lecun深度学习笔记(上)

  6. 知识图谱学习笔记(1)

    知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...

  7. 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记

    计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...

  8. Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)

    Go by example 中文版 Go 构建 Web 应用 Go 学习笔记:无痕 Go 标准库中文文档 Golang开发新手常犯的50个错误 50 Shades of Go: Traps, Gotc ...

  9. MongoDB学习笔记(入门)

    MongoDB学习笔记(入门) 一.文档的注意事项: 1.  键值对是有序的,如:{ "name" : "stephen", "genda" ...

  10. NuGet学习笔记(3) 搭建属于自己的NuGet服务器

    文章导读 创建NuGetServer Web站点 发布站点到IIS 添加本地站点到包包数据源 在上一篇NuGet学习笔记(2) 使用图形化界面打包自己的类库 中讲解了如何打包自己的类库,接下来进行最重 ...

最新文章

  1. mysql单机多实例启动不了_mysql单机启用多实例的配置方法
  2. 堆排序最坏时间复杂度
  3. git log 查看提交记录,参数:
  4. Linux新手生存笔记[2]——vim训练稿
  5. 醒来觉得甚是爱你。--朱生豪
  6. matlab三相异步电动机仿真,MATLAB中的三相异步电动机仿真
  7. 【README1】动态规划之解题思路
  8. oracle column的设置,SQL*PLUS的命令行——column命令 - [ORACLE]
  9. delphi2007安装说明(备忘)
  10. 命令执行专题总结突破
  11. C++实现小写转大写
  12. 【泛函分析】巴拿赫空间
  13. os I/O设备和设备控制器
  14. scrapy爬取微信公众号内容,多管道储存,orm数据储存
  15. 七日年化收益率怎么算「知识普及」
  16. iPhone 和iPad的Icon大小和设置
  17. 海关外贸企业大数据风控平台
  18. PAT-A1010解题报告
  19. 软件开发和硬件开发编程的比较
  20. 计算方法 matlab代码,计算方法及其MATLAB实现

热门文章

  1. 五色电阻在线计算机,色环电阻在线计算器
  2. 自动对焦模式与af区域模式_什么是自动对焦,不同模式意味着什么?
  3. matlab图片数据库读取,MATLAB无法读取图像数据库问题
  4. POI excel 添加水印 xls,xlsx
  5. 服务器状态显示异常,进lol显示服务器异常请稍后再试
  6. linux更改jdk版本
  7. win10桌面便签_用这几款小众软件点缀桌面,效率与幸福感爆棚
  8. 图片放大以后不清晰怎么办?
  9. 浅谈打印机驱动安装的常见方法及安全防护
  10. 1.49万件区块链专利全景:BATJP占26%,游戏类迎突破