lorenxjtu的个人博客分享 http://blog.sciencenet.cn/u/lorenxjtu

博文

[转载]跟学渣一起学Modelica,第四发——架构建模与复用

已有 425 次阅读 2019-10-11 14:17 |个人分类:modelica|系统分类:科研笔记|文章来源:转载

系统仿真建模可以分解为架构建模和组件建模两个部分,先有骨架后有肉,其建模顺序为:
  • 定义架构模型;
  • 将组件模型“装配”到架构模型中;
  • 设定参数并运行仿真

以PID反馈回路为例,一个PID反馈控制系统是闭环结构和几个核心组件的组合,其建模顺序为:

  • 按照PID反馈回路结构定义架构模型,将系统模型分解为四个组件模型,并完成关联;
  • 将输入信号、控制器、传递函数、输出增益四个组件模型“装配”到架构模型中;
  • 设定参数并运行仿真。

将架构建模与组件建模分开,有助于提升仿真建模的重用性,其优点包括:

  1. 可在不影响系统整体模型的基础上,对组件模型进行单独升级维护;
  2. 对大型系统建模时,提前建立系统架构,有助于团队分工协作;
  3. 通用架构完成一次建模后,可以在相似系统中进行多次复用,节省工作量。

modelica语言中也提供了架构建模和复用的功能,以PID回路建模为例,其架构建模方法如下:
首先,建立一个完整的PID回路模型,可用图形建模也可以用脚本建模,反正完整就行,模型脚本如下:
这一步只是完成了PID回路的建模,架构建模要求可以快速替换组件模型。
下一步,修改上述脚本,将组件模型设置为可替代。modelica通过replaceable关键字实现这一功能。其用法为在组件声明语句前加 replaceable 关键字,则该句代码所声明的组件是可以被替代的。将脚本修改为:
此时,上面定义的系统模型Feedback就可以看作是一个架构模型,使用时可以声明新的系统模型,只需通过redeclare声明即可:

Feedback FB1(redeclare Modelica.Blocks.Sources.Sine step1);

完成架构建模后,就可以很方便的更改组件模型,可以将PID回路中的增益、控制器、传递函数、输入信号更改成其它形式,例如:
这样,很容易就可以更换系统中的各个组件,同时还能够保持架构不变,从复用角度来看,这种定义方式实现了架构层的复用。
replaceable和redeclare这对关键词给系统仿真模型赋予了很大的自由度,使用时也存在一些限制,比如说:

  1. redeclare 声明的新组件要与原组件同名;
  2. 新组件要具备与原组件相同的端口,至少要具有原组件与其它组件相关联的全部端口,以匹配原组件的关联关系;

上面第2条要求可互换组件模型必须具有部分相同的“特征”,在内容上保证可互换组件模型之间具有共性,说起共性,就不得不说到modelica模型的重用功能。(没错,这是个生硬的过渡段)
以几个控制器模型为例,PI、PID、limPID三个模型是可以在上述架构中相互替代的,这三个模型具有名称、数量、类型都相同的输入和输出端口:

RealInput u
RealOutput y

MSL(modelica官方标准库)中并未在PI、PID、limPID中分别定义上述输入输出端口,而是通过extend命令调用了另外一个模型SISO
extends Interfaces.SISO;
extends命令的意思是调用后续模型中的所有代码,此处的作用是将interface.SISO模型中所有代码转移到控制器模型中。
再来看看interface.SISO:
SISO定义了一组输入输出端口,三个控制模型通过extends命令调用之后,就原封不动的借用了这组代码,等于三个控制器模型都定义了同样的端口,保证了三者端口的一致,减少工作量的同时也能够避免书写错误。
使用extends命令,可以实现模型间的继承,实现代码、端口、功能的复用,对定义模型的抽象与继承关系、优化代码结构都有很好的效果。
partial关键字并不是必须的,它的意思是该模型不完整,不可以直接运行,它的好处在于可以将不同模型中的重复部分强行抽象出来,而不必要求这部分内容可以独立运行。
最后,强行总结一下:架构模型和组件模型是系统仿真的左右手,modelica语言通过replaceable&redeclare、extends&partial这两组命令实现了架构复用和组件复用。


最后的最后,加一组tips:

  1. 系统建模分为架构建模和组件建模两部分;
  2. 架构建模的复用使用replacable和redeclare命令;
  3. 架构模型还可以衍生出多个层级,万丈高楼不用愁,分层建模replaceable;
  4. 同一架构下,可互换的模型需要具有相同的组件名称、端口类型和端口名称;
  5. 件模型的复用使用extends命令;
  6. extends命令不制造代码,它是代码的搬运工;
  7. partial是张病假条,不能正常工作,但是可以救场,搞定三缺一;
  8. 觉着还行的话,点个赞再走~____~




http://blog.sciencenet.cn/blog-687103-1201523.html

上一篇:[转载]跟学渣一起学Modelica,第二发——图形化拖拽建模

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备14006957 )

GMT+8, 2019-11-20 15:10

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部