预订演示
前页 后页

水箱压力调节器

在本节中,我们将介绍为水箱压力调节器创建 SysML 参数模型,该模型由两个连接的水箱、一个源和两个控制器组成,每个控制器监控水位并控制阀门以调节系统.

我们将解释 SysML模型,创建它并设置 SysMLSim 配置。然后我们将使用运行仿真。

正在建模的系统

此图描绘了连接在一起的两个源,以及填充第一个水箱的水源。每个水箱都有一个与其相连的比例积分 (PI) 连续控制器,它将水箱中的水位调节到参考水位。当源向第一个水箱注水时,PI 连续控制器根据水箱的实际水位调节水箱的流出量。第一个水箱中的水流入第二个水箱,PI 连续控制器也试图对其进行调节。这是一个自然的、非特定领域的物理问题。

创建 SysML模型

部件

讨论

端口类型

坦克有四个端口,它们分别输入到这三个块中:

  • ReadSignal:读取液位;这有一个单位为“m”的属性“val”
  • ActSignal:用于设置阀门位置的执行器信号
  • LiquidFlow:入口或出口处的液体流量;这有一个属性“lflow”,单位为“m 3 /s”

块定义图表

LiquidSource:进入水箱的水一定来自某个地方,因此我们在水箱系统中有一个液体源组件,属性flowLevel的单位为“m 3 /s”。 A “端口”键入为“端口”。

水箱:水箱通过端口连接到控制器和液体源。

  • 每个 Tank 有四个端口:
    - qIn:用于输入流
    - qOut:用于输出流
    - tSensor:用于提供液位测量
    - tActuator:用于设置阀门在出口处的位置
    坦克
  • 属性:
    - 体积(单位='m 3 '):罐的容量,参与质量平衡
           方程
    - h(单位='m'):水位,参与质量平衡
    方程;它的值由传感器读取
    - flowGain(单位='m 3 /s'):输出流量与阀门有关
    流量增益定位
          - minV, maxV:输出阀流量的限制
BaseController:这个块可以是 PI Continuous控制器和 PI Discrete控制器的父级或祖先。
  • 端口:
    - cIn:输入传感器电平
    -控件:控制执行器
  • 属性:
    - Ts(单位='s'):离散样本之间的时间周期(未使用
    在这个例子中)
    - K :增益因子
    - T (unit = 's'): 控制器的时间常数
    - 参考:参考水平
    - 误差:参考水平与实际水平之间的差异
    水位,从传感器获得
    - outCtr:到执行器的控制信号,用于控制阀门
    位置
PIcontinuousController:从 BaseController 专门化
  • 属性:
    -x:控制器状态变量

约束块

流量在时间=150 时急剧增加至先前流量水平的三倍,这产生了一个有趣的控制问题,罐的控制器必须处理。

调节罐性能的中心方程是质量平衡方程。

输出流量通过“flowGain”参数与阀门位置相关。

传感器只是读取水箱的液位。

这些图中说明了为“BaseController”和“PIcontinuousController”定义的约束。

内部块图表

这是具有单个水箱的系统的内部块图。

这是具有两个连接罐的系统的内部块图。

运行仿真

由于TankPITanksConnectedPI被定义为“SysMLSimModel”,因此它们将列在“仿真”页面的“模型”组合框中。

选择TanksConnectedPI ,并观察这些 GUI 发生的变化:

  • “数据集”组合框:将填充TanksConnectedPI中定义的所有数据集
  • 'Dependencies' 列表:将自动收集 TanksConnectedPI 直接或间接引用的所有 Blocks、约束、 SimFunctions和 ValueTypes(这些元素将生成为 OpenModelica 代码)
  • '属性Plot':将收集一长串'叶子'变量属性(即它们没有属性);您可以选择一个或几个进行模拟,属性将显示在图例中

工件和配置

选择“仿真>系统行为> Modelica/Simulink >配置管理器”

包中的元素将被加载到配置管理器中。

配置这些块及其属性,如本表所示。

注记:未配置为“属性”的属性默认为“SimVariable”。

属性

液体源

配置为“配置”。

属性配置:

  • flowLevel:设置为“SimConstant”

坦克

配置为“配置”。

属性配置:

  • 区域:设置为“SimConstant”
  • flowGain:设置为“SimConstant”
  • maxV:设置为“SimConstant”
  • minV:设置为“SimConstant”

基本控制器

配置为“配置”。

属性配置:

  • K :设置为“SimConstant”
  • T :设置为“SimConstant”
  • Ts:设置为“SimConstant”
  • 参考:设置为“SimConstant”

PI连续控制器

配置为“配置”。

坦克PI

配置为“配置”。

TanksConnectedPI

配置为“配置”。

设置数据集

右键单击每个元素,选择“创建仿真数据集”选项,然后配置数据集,如本表所示。

元素

数据集

液体源

流量等级:0.02

坦克

h.开始:0

流量增益:0.05

面积:0.5

最大V:10

最小伏特:0

基本控制器

T :10

K : 2

TS: 0. 1

PI连续控制器

无需配置。

默认情况下,特定块将使用超级块的默认数据集中配置的值。

坦克PI

这里有趣的是可以在“配置仿真数据”对话框中加载默认值。例如,我们在每个块元素上配置为默认数据集的值被加载为属性的默认值。单击每行上的图标可将属性的内部结构扩展到任意深度。

点击确定按钮,返回配置管理器。然后配置这些值:

  • tank.area: 1这会覆盖 Tank块数据集中定义的默认值 0.5
  • piContinuous.ref:0.25

TanksConnectedPI

  • 控制器1.ref:0.25
  • 控制器2.ref:0.4

仿真分析1

选择这些变量并单击求解按钮。这个情节应该提示:

  • 源.qOut.lflow
  • tank1.qOut.lflow
  • 坦克1.h
  • 坦克2.h

以下是对结果的分析:

  • 液体流量在时间=150 时急剧增加,达到 0.06 m 3 /s,是之前流量 (0.02 m 3 /s) 的三倍
  • Tank1 调节高度 0.25,tank2 调节高度 0.4 符合预期(我们通过数据集设置参数值)
  • 在模拟过程中,tank1 和 tank2 都进行了两次调节;首次调节流量0.02 m 3 /s;第二次调节流量 0.06 m 3 /s
  • 在 tank1 有任何流量之前 Tank2 是空的

仿真分析2

在示例中,我们将坦克的属性“minV”和“maxV”分别设置为值 0 和 10。在现实世界中,10 m 3 /s 的流量需要在水箱上安装一个非常大的阀门。

如果我们将“maxV”的值更改为 0.05 m 3 /s 会发生什么?基于之前的模型,我们可能会做出这些改变:

  • 在 TanksConnectedPI 的现有“DataSet_1”上,右键单击并选择“复制数据集”,然后重命名为“Tank2WithLimitValveSize”
  • 单击按钮进行配置,展开“tank2”并在“属性”的“值”列中键入“0.05”
  • 在“仿真”页面上选择“Tank2WithLimitValveSize”并绘制属性
  • 单击求解按钮执行模拟

以下是对结果的分析:

  • 我们的更改仅适用于 tank2; tank1 可以像以前一样在 0.02 m 3 /s 和 0.06 m 3 /s 上调节
  • 当源流量为0.02 m 3 /s时,tank2可以像以前一样调节
  • 然而,当源流量增加到 0.06 m 3 /s 时,阀门太小,无法让流出流量与流入流量匹配;唯一的结果是tank2的水位升高
  • 然后由用户来解决这个问题;例如,换一个更大的阀门,减少源流量或制作一个额外的阀门
总之,此示例显示了如何通过复制现有 DataSet 来调整参数值。