多领域物理统一建模语言与MWORKS实践 课件 4-7-Modelica语法详解-事件(1.5学时)_第1页
多领域物理统一建模语言与MWORKS实践 课件 4-7-Modelica语法详解-事件(1.5学时)_第2页
多领域物理统一建模语言与MWORKS实践 课件 4-7-Modelica语法详解-事件(1.5学时)_第3页
多领域物理统一建模语言与MWORKS实践 课件 4-7-Modelica语法详解-事件(1.5学时)_第4页
多领域物理统一建模语言与MWORKS实践 课件 4-7-Modelica语法详解-事件(1.5学时)_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Modelica语法详解事件哈工大计算学部-工业软件中心哈工大重庆研究院-无人装备中心曲明成

博士/副教授

qumingcheng@2025年4月23日Example触地瞬间,重置速度即可modelBall"弹跳小球"

final

parameter

Realg=9.8

"重力加速度";

parameter

Realcoef=0.9

"弹性系数";

parameter

Realh0=10

"初始高度";

Realh"小球高度";

Realv"小球速度";

Booleanflying"是否运动";initialequationh=h0;equation

flying=not(h<=0

andv<=0);

der(v)=ifflyingthen-gelse

0;v=der(h);

whenh<=0

then

reinit(v,-coef*v);

endwhen;endBall;ExamplemodelBall"弹跳小球"

final

parameter

Realg=9.8

"重力加速度";

parameter

Realcoef=0.9

"弹性系数";

parameter

Realh0=10

"初始高度";

Realh"小球高度";

Realv"小球速度";

Booleanflying"是否运动";initialequationh=h0;equation

flying=not(h<=0

andv<=0);

der(v)=ifflyingthen-gelse

0;v=der(h);

whenh<=0

then

reinit(v,-coef*v);

endwhen;endBall;输出窗口为什么输出了很多事件信息?哪些语句触发了事件?事件对仿真有什么影响?如何处理事件?目录1.

事件概述2.事件触发3.事件处理4.本章回顾1.事件概述-连续与离散连续动态特性系统:宏观物理系统的变化通常都按照物理定律连续演绎,如同一个关于时间的函数,比如物理运动、电流电压变化、化学反应等。离散行为:有时需要将某些系统组件的行为近似成离散行为,离散行为是指系统变量值只在特定时间点上瞬时的、不连续的发生改变。实际物理系统中,变化可以非常快但不是瞬时,在系统建模时进行离散近似,能够简化数学模型,使模型求解易于收敛,提高计算速度。离散近似场景:动力学的刚性碰撞问题,一个弹跳小球几乎瞬间改变了运动方向。电路中的开关操作能极快地改变电压值。液压系统中的阀门能迅速引起流量的变化。1.事件概述-事件及其特点事件:变量只在特定的时间点才改变其值,这些时间点称作为事件,在事件之间他们的值保持不变。事件的特点:时间点是瞬时的,也就是说没有持续期间当事件条件从false变为true时,事件发生与事件相关的变量集就是与事件相关的方程中引用或改变的变量与事件相关的行为(即条件方程)在事件发生时变为起作用或变为不起作用瞬态方程是特殊的条件方程,它只在事件发生时起作用1.事件概念-事件分类根据事件产生的原因,将事件分为:时间事件:明确发生时间的事件,事件点是可预知的;状态事件:由表达系统状态的变量引起,不同系统对应的状态变量的选择不同,所以不可避免的要去搜索事件点,事件点是可预知的;modelSimple

Reala;equation

iftime<5

then

a=1;

elsea=5;

endif;endSimple;modelSimple2

Reala;

Realb;equation

b=sin(time);

ifb<0

then

a=0;

elsea=b;

endif;endSimple;时间事件状态事件注意:time>=5和time<5为时间事件b<0和b>=0为状态事件目录1.

事件概述2.事件触发3.事件处理4.本章回顾2.事件触发-事件表达式连续的Real元素关系式改变其值时,积分会中止,于是产生事件。modelSimple3

Realx;

Realy(start=2);equationx=time-5;der(y)=ifx>0

then

1else2;endSimple3;如果if表达式按照字面意义进行计算,则在x=0时刻,方程是不连续的,der(y)的值产生跳跃。由于事先难以精确预测x=0的时刻点,故如直接对上述方程进行求解,则可能违背数值积分算法的连续可微性假设。为此,在Modelica语言中,x>0被当做是一个事件表达式。2.事件触发-事件表达式Modelica用条件方程来表达事件,Modelica基本的两类条件方程:if语句:包含条件表达式和条件方程,用于描述不连续条件模型;when语句:用于表示只在某些离散时刻有效的方程;modelLimit

Reala=sin(time);

Realb;equation

ifa>0.5

then

b=0.5;

elseifa<-0.5then

b=-0.5;

elseb=a;

endif;endLimit;只要“a-0.5”或“a-(-0.5)”穿越零,积分就被中止,并产生事件,在事件时刻,选择正确的if-分支,并重新开始积分2.事件触发-触发函数与相关函数事件相关函数函数说明initial()在初始化阶段结果为true,否则为falseterminal()在成功分析的结尾返回truesample(start,interval)在时刻start+i*interval(i=0,1,….)结果为true并触发事件,否则为falsepre(y)结果在变量y(t)在t时刻的左极限y(tpre)edge(b)等价于“(bandnotpre(b))”,b为Boolean类型change(v)等价于“(v<>pre(v))”reinit(x,expr)仅在when结构中使用,在事件时刻以expr初始化状态变量x事件触发函数函数说明div(x,y) 返回x/y的商且丢弃小数部分mod(x,y)返回x/y的整数模,即x-floor(x/y)*yrem(x,y)返回x/y整除的余数ceil(x)返回不小于x的最小整数floor(x)返回不大于x的最大整数integer(x)返回不大于x的最大整数,结果必为整型2.事件触发-相关函数详解initial():在初始化阶段返回true,否则返回falsemodelInitial

Reala;equation

wheninitial()then

a=2;

endwhen;endInitial;terminal():在成功分析的结尾返回true,否则返回falsemodelTerminal

Reala;equation

whenterminal()then

a=5;

endwhen;endTerminal;2.事件触发-相关函数详解sample(start,interval):从start时间开始,每隔

interval时间结果为ture。modelSampleReala;equation

whensample(2,0.5)thena=time;

end

when;endSample;pre(y):返回变量y(t)在时刻t的“左极限”

注意:只能用在when语句中。modelPre

Reala;

Realb;equation

whensample(2,0.5)then

a=time;b=pre(a);

endwhen;endPre;modelEdge

Booleana;

Booleanb;

Realc;equation

a=iftime>2

andtime<3

thentrue

else

false;b=edge(a);

whenbthen

c=2;

end

when;endEdge;2.事件触发-相关函数详解edge(b):b从false变为true时返回true注意:b和返回值类型均为booleanchange(a):a变化时返回true,否则为false注意:只能用在when语句中。modelChange

Reala;

Booleanb;equation

whensample(2,0.5)thena=2;b=change(a);

endwhen;endChange;2.事件触发-相关函数详解reinit(x,expr):在事件时刻以expr初始化状态变量x。注意:只能用在when语句中。modelBall"弹跳小球"

final

parameter

Realg=9.8

"重力加速度";

parameter

Realcoef=0.9

"弹性系数";

parameter

Realh0=10

"初始高度";

Realh"小球高度";

Realv"小球速度";

Booleanflying"是否运动";initialequationh=h0;equation

flying=not(h<=0

andv<=0);

der(v)=ifflyingthen-gelse

0;v=der(h);

whenh<=0

then

reinit(v,-coef*v);

endwhen;endBall;目录1.

事件概述2.事件触发3.事件处理4.本章回顾3.事件处理-事件抑制-noEvent()modelwhy

Realx1;

Realx2;equation

x1=iftime>=5

then

1

else

0;x2=noEvent(iftime>=5

then

1

else

0);endwhy;事件抑制未事件抑制3.事件处理-事件抑制-noEvent()modelwhy

Realx1;

//Realx2;equation

x1=ifsin(100*time)>=0.5

then

1

else

0;

//x2=noEvent(ifsin(100*time)>=0.5then1else0);endwhy;modelwhy

//Realx1;

Realx2;equation

//x1=ifsin(100*time)>=0.5then1else0;

x2=noEvent(ifsin(100*time)>=0.5then1else0);endwhy;优点1:节省求解时间3.事件处理-事件抑制-noEvent()modelnegativesqrt

Realh(start=5);

parameter

Realc=0.9;equation

der(h)=ifh>0then-c*sqrt(h)else0;endnegativesqrt;优点2:避免负数开平方modelnegativesqrt

Realh(start=5);

parameter

Realc=0.9;equation

der(h)=noEvent(ifh>0then-c*sqrt(h)else0);endnegativesqrt;3.事件处理-事件平滑-smooth()modelSmoothAndEvents

Realx;

Realy;

Realz;equation

x=iftime<1then2elsetime-2;y=smooth(0,iftime<1then2elsetime-2);z=smooth(1,noEvent(iftime<1then2elsetime-2));endSmoothAndEvents;注意:将不连续变量变成连续变量,提高仿真效率。系统不会为smooth表达式产生事件,但是smooth本身不能保证不产生事件,因此在smooth中使用noEvent进一步抑制事件。目录1.

事件概述2.事件触发3.事件处理4.本章回顾4.总结事件分为:时间事件和状态事件事件语句:if和when函数说明initial()在初始化阶段结果为true,否则为falseterminal()在成功分析的结尾返回truesample(start,interval)在时刻start+i*interval(i=0,1,….)结果为true并触发事件,否则为falsepre(y)结果在变量y(t)在t时刻的左极限y(tpre)edge(b)等价于“(bandnotpre(b))”,b为Boolean类型change(v)等价于“(v<>pre(v))”reinit(x,expr)仅在when结构中使用,在事件时刻以expr初始化状态变量x事件函数:事件处理:noEvent()和smooth()4.总结课堂回顾1.和事件无关的函数是()。

A.initialB.terminalC.cosD.pre2.仅在when结构中使用,在事件时刻初始化状态变量的函数是()。

A.initialB.cosC

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论