Modelica学习笔记
一、使用
1.新建package-》新建modelica类
2.找组件modelica-->mechanics-->translational-->components等;找信号源blocks-->sources等
3.模件进行连接
4.元件设置参数
5.仿真-仿真设置
二、模型类化
打开类看单个构件的建模语言
新建类-->扩展 (选库中类的)-->在扩展类中写方程-->调用到modelica类中使用
三、语法
变量声明:
- 类型:Real,Integer, Boolean,String,enumeration
- 前缀:input, output, parameter;
- 可见性: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));//定义模型仿真开始和结束的时间
标注中包含的信息与模型的属性没有直接联系,只是提供进行模拟仿真的条件
- 对变量、语句(方程)、继承:紧跟在一个声明的后面,并且在标示符 ; 的前面
parameter Real length ”Rod length” annotation(...);
- 模型标注数据直接在模型自身定义的时候声明
- 标注中即可以包含对变量的赋值,也可以包含对一些内部变量的修改
- 标注就是为了方便模型开发者将任意数据添加到模型中而设计的,
- 可以同时多个标注,
- 只要标注的名称不同,我们就可以一次加入多个。
:在加入零件号时,最好要将其放一个特别 的变量内。这个变量最好应该和你的公司或者应用情况相关,而且足够特别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);
- start 属性的主要目的是(正如在初始化 ( 31) 那节里广泛讨 论过的)为状态变量提供“备用”的初始状态。
- start 属性的也可以用于变量,是迭代变量时的初始假想值。
- 最后,如果一个 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学习笔记相关推荐
- PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 call
您的位置 首页 PyTorch 学习笔记系列 PyTorch 学习笔记(六):PyTorch hook 和关于 PyTorch backward 过程的理解 发布: 2017年8月4日 7,195阅读 ...
- 容器云原生DevOps学习笔记——第三期:从零搭建CI/CD系统标准化交付流程
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 容器云原生DevOps学习笔记——第二期:如何快速高质量的应用容器化迁移
暑期实习期间,所在的技术中台-效能研发团队规划设计并结合公司开源协同实现符合DevOps理念的研发工具平台,实现研发过程自动化.标准化: 实习期间对DevOps的理解一直懵懵懂懂,最近观看了阿里专家带 ...
- 2020年Yann Lecun深度学习笔记(下)
2020年Yann Lecun深度学习笔记(下)
- 2020年Yann Lecun深度学习笔记(上)
2020年Yann Lecun深度学习笔记(上)
- 知识图谱学习笔记(1)
知识图谱学习笔记第一部分,包含RDF介绍,以及Jena RDF API使用 知识图谱的基石:RDF RDF(Resource Description Framework),即资源描述框架,其本质是一个 ...
- 计算机基础知识第十讲,计算机文化基础(第十讲)学习笔记
计算机文化基础(第十讲)学习笔记 采样和量化PictureElement Pixel(像素)(链接: 采样的实质就是要用多少点(这个点我们叫像素)来描述一张图像,比如,一幅420x570的图像,就表示 ...
- 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 ...
- MongoDB学习笔记(入门)
MongoDB学习笔记(入门) 一.文档的注意事项: 1. 键值对是有序的,如:{ "name" : "stephen", "genda" ...
- NuGet学习笔记(3) 搭建属于自己的NuGet服务器
文章导读 创建NuGetServer Web站点 发布站点到IIS 添加本地站点到包包数据源 在上一篇NuGet学习笔记(2) 使用图形化界面打包自己的类库 中讲解了如何打包自己的类库,接下来进行最重 ...
最新文章
- mysql单机多实例启动不了_mysql单机启用多实例的配置方法
- 堆排序最坏时间复杂度
- git log 查看提交记录,参数:
- Linux新手生存笔记[2]——vim训练稿
- 醒来觉得甚是爱你。--朱生豪
- matlab三相异步电动机仿真,MATLAB中的三相异步电动机仿真
- 【README1】动态规划之解题思路
- oracle column的设置,SQL*PLUS的命令行——column命令 - [ORACLE]
- delphi2007安装说明(备忘)
- 命令执行专题总结突破
- C++实现小写转大写
- 【泛函分析】巴拿赫空间
- os I/O设备和设备控制器
- scrapy爬取微信公众号内容,多管道储存,orm数据储存
- 七日年化收益率怎么算「知识普及」
- iPhone 和iPad的Icon大小和设置
- 海关外贸企业大数据风控平台
- PAT-A1010解题报告
- 软件开发和硬件开发编程的比较
- 计算方法 matlab代码,计算方法及其MATLAB实现