Michael M. Tiller《Modelica多领域物理系统建模入门与提高》Chapter 4学习笔记

第四章 组件重用

目标:提升模型的可重用性——非因果建模的本质利于重用1

4.1 概述

Modelica中实现模型重用的途径

  1. 创建连接器:连接联合工作的组件,共享信息
  2. 扩展现有模型:模型之间共享方程集、参数集、算法集等

4.2 公共代码开发

4.2.1 识别和定义公共代码

避免重复——关键词partial限定的partial2 model

example: Modelica.Electrical.Analog包中的OnePort模型

定义一个端口电气组件的通用基础模型

4.2.2 使用公共代码定义模型

使用OnePort定义电阻模型

  • 继承OnePort模型,增加电阻类型参数R
  • 欧姆定律i*R=v描述i与v的本构关系

4.3 构建可重用的块

4.3.1 建立控制器模型

  • 对于每一个需要PI控制器的系统,建立一个通用的PI控制器模型,能够将其置于任一需要它的模型中
  • 基于其他模型建立的新模型可视化的两种途径
    * 原理图:展现内部连接细节
    * 图标视图(icon):从外部看模型,“黑盒”
  • 将子组件模型作为构成块,使建立和增强系统复杂性更容易

4.3.2 传递信息

当利用一系列子组件创建一个新模型时,必须将连接参数向下传递到子组件层

4.3.3 小结

利用其他“构建块”创建组件的步骤:

  1. 确定外部连接和参数
  2. 对内部组件进行声明和连接
  3. 将外部参数及连接器–>传递到子组件

4.4 允许替换的组件

模型相互替换的前提是两者必须兼容,即两种模型拥有相同的连接器以及参数,也即新模型必须是旧模型的子类型

4.4.1 通用控制器接口

确保控制器兼容性:运用通用partial块扩展定义

  1. 确定一个通用接口:确定控制器通用属性、创建partial块、基于partial块扩展得到控制器
  2. 通用模型:输入、输出、参数
    通用控制器接口

4.4.2 特定控制器模型

4.4.2.1 比例控制器
比例增益控制器
4.4.2.2 比例微分控制器
比例微分增益控制器
扩展建模:每一个扩展而来的模型自动成为被扩展模型的一个子集/子类型/特例,它包含了被扩展模型的全部组件

4.4.3 使用可替换组件

model ControllerAndMotor
...
replaceable PIController con(Kp = 0.4) extends Controller;
...
end ControllerAndMotor;
  • 声明一个PIController叫做con,它可以被任一Controller子类型的组件替换
  • 限定词extend:限制模型可以被那些模型替换

三个不同控制器类型组成的实例–>redeclare定义

model CompareControllers
	ControllerAndMotor pic;
	ControllerAndMotor pc(
	redeclare PController con(Kp=1.1));
	ControllerAndMotor pdc(
	redeclare PDController con(Kp=1.1,Kd=0.2));
	end CompareControllers;

4.4.4 小结

使用一个模型替换另一个模型的方法来设计组件或系统

4.5 其他可替换的实体

关键词replaceable除了使得组件可替换,还可以使得组件类型可替换,并允许重新声明多个组件

  • Modelica中的简短定义——模型扩展的简化方法
...
Analog.Basic.Resistor R1(R=15);
Analog.Basic.Resistor R2(R=5000);
...

//等效声明:定义一个本地模型,利用其对R1,R2进行声明

...
model ResModel
		extends Analog.Basic.Resistor;
end ResModel;
ResModel R1(R=15);
ResModel R2(R=5000);
...

//等效声明-简短定义

...
model ResModel =Analog.Basic.Resistor;
ResModel R1(R=15);
ResModel R2(R=5000);
...
  • 实现一个可替换对象类型
model RLC5
import Modelica.Electrical.Analog;
replaceable model ResModel =Analog.Basic.Resistor;
ResModel R1(R=15);
ResModel R2(R=5000);
...
end RLC5;

// 使用本地模型的优势在于所有此模型的实例均可以同时进行重新声明

model MyRLC = RLC5(redeclare model Resmodel = MyResistor);

4.6 对灵活性的限制

当利用已有模型实例创建一个新模型时,可能需要新模型作为一个黑盒,即不允许模型使用者或其他开发人员深入模型内部,并更改一些默认条件。

关键字final可以用来禁止这样的更改

model Gear
...
parameter Real gear_ratio=1;
...
end Gear;

// 重用Gear模型创建皮带模型TimingBelt

model TimingBelt = Gear(final gear ratio=2);

//关键字final通过实例化或特例化阻止了对传动比的任何并发的更改

model Engine
	TimingBelt belt (gear ratio=3); //error
	model OddTimingBelt = TimingBelt ( gear ratio=2.25); //error
end Engine;

4.7 其他注意事项

4.7.1 参数

一般,不希望数字直接出现在方程中,设置参数可以使模型更易理解和重用。

4.7.2 通用性

通过重用一个已存在的、更通用的模型并添加约束的方式去构建 VS 直接创建

  • 重用性最高的模型时那些假设条件很少的模型
  • 一个模型越通用,模型本身越趋向于抽象和复杂
  • 当开发一个可重用模型时,需要弄清其如何被重用
  • 模型应具备足够通用性,使其可以作为开发其他模型的基础;同时该模型也足够简单,使得后续开发的模型简单易懂

4.7.3 注释

模型开发者对模型的解释

  • “… …” 描述性文本
  • // 注释
  • 嵌入HTML代码

4.8语言基础

4.8.1 模型的扩展

extends关键字:允许将一个模型的内容“复制粘贴”到另一个模型中

  • 应用场合:当许多模型拥有相同变量、连接器、方程时
  • 限制条件:不能替换扩展模型中的任一方程
model A
	Real x;
equation
	x=5;
end A;

model B1
	extends A;
equation
	x=3;
end A;	

//将B1展开得

model B2
	Real x;
equation
	x=5;
	x=3;
end B2;

//一个未知数,两个方程,方程超定
  • 当开发partial模型时,为了保证衍生模型创建方程时有足够的灵活性,partial模型应包含最少数量的方程

4.8.2 简短定义

  • 应用场景:新模型与已有模型非常相似,即新模型没有引入任何新的子组件
model MyRLC
	extends RLC5(R1(R=12));
end MyRLC;

//等价于

model MyRLC = RLC5(R1(R=12));

//本质上是用等号并在语句末尾用分号来替换关键词extends

4.8.3 子类型

定义:若B包含与A相同的所有组件(相同名称),则B为A的子类型

4.8.4 partial定义

关键字partial表明,此模型可以扩展,但不能实例化,其本身并不是一个严格意义上的模型(通常因为其缺少本构方程)。

4.8.5 创建可替换的模型元素

4.8.5.1 可替换的子组件
标准声明与可替换声明的不同

  1. 可替换声明前有关键字replaceable
  2. 可替换声明可跟extends语句,作为约束类型,限制可以被什么组件替换

4.8.5.2 使用可替换类型定义

  • 可替换类型定义在同一时刻可以同时更改很多组件的类型
  • 可替换类型定义通常包含一个本地类型定义(即此类型尽在指定模型的上下文中应用)

4.8.6 final 类型组件

final关键字通过禁止进一步更改以限制灵活性,增强模型的鲁棒性


更新2024.06.22
最新modelica语言中已使用constrainedy代替extends作为限制可替换类型/组件的关键字


  1. 即使对系统其他部分的应用方程或因果关系不太了解,也可以独立建立系统的每一个组件模型 ↩︎

  2. 暗指此模型不完整,仅以它为基础创建其他模型 ↩︎

  • 26
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一些关于学习Simscape的推荐书籍: 1. "Physical Modeling in MATLAB" by Allen Downey: 这本书介绍了如何使用MATLAB和Simscape进行物理建模。它提供了许多示例和练习,帮助读者理解和应用Simscape的基本概念和技术。 2. "Modeling and Simulation of Systems Using MATLAB and Simulink" by Devendra K. Chaturvedi: 这本书详细介绍了如何使用MATLAB和Simulink进行系统建模和仿真。其中包括对Simscape的介绍和示例,帮助读者学习如何使用Simscape进行物理建模。 3. "Physical Modeling with Simulink" by Michael Tiller: 这本书专门讲解了如何使用Simulink和Simscape进行物理建模。它涵盖了从基本原理到高级技术的内容,适用于初学者和有经验的用户。 4. "Simscape Power Systems Examples" by MathWorks: 这是MathWorks官方提供的一本示例集,展示了如何使用Simscape Power Systems工具箱进行电力系统建模和仿真。它包含了各种实际应用的示例和教程,适用于电力系统工程师和研究人员。 5. "Simscape Multibody Examples" by MathWorks: 这本书由MathWorks官方提供,介绍了Simscape Multibody工具箱的应用。它包含了多种机械系统建模和仿真示例,有助于读者学习如何使用Simscape Multibody进行机械系统建模。 除了这些书籍,您还可以参考MathWorks官方网站上的文档和教程,以及社区论坛上的讨论和分享资源。这些资源将为您提供更深入的学习Simscape的资料和实践经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值