前页 后页

水箱压力调节器

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

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

正在建模的系统

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

创建SysML模型

零件

讨论区

端口类型

坦克有四个端口。将它们键入以下三个块:

  • ReadSignal:读取液位;具有单位为“ m”的属性“ val”
  • ActSignal:发送给执行器以设置阀位的信号
  • LiquidFlow:入口或出口处的液体流;它的属性为“ lflow”,单位为“ m 3 / s”

块定义图

LiquidSource:进入水箱的水必须来自某个地方,因此水箱系统中有一个水源组件,其flowLevel属性的单位为'm 3 / s'。端口“ qOut”键入为“ LiquidFlow”。

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

  • 每个坦克有四个端口:
    -qIn:用于输入流量
    -qOut:用于输出流量
    -tSensor:用于提供液位测量
    -tActuator:用于设置阀门在出口处的位置
    坦克
  • 特性:
    -面积(单位='m 2 '):储罐的面积,涉及质量平衡
           方程
    -h(单位='m'):水位,与质量平衡有关
    方程;其值由传感器读取
    -flowGain(单位='m 2 / s'):输出流量与阀门有关
    流量位置
          -minV,maxV:输出阀流量极限
BaseController:该块可以是PI Continuous Controller和PI Discrete Controller的替代。
  • 端口:
    -cIn:输入传感器电平
    -cOut:执行器控制
  • 特性:
    -Ts(单位='s'):离散采样之间的时间段(未使用
    在这个例子中)
    -K:增益系数
    -T(单位='s'):控制器的时间常数
    -参考:参考等级
    -错误:参考水平与实际水平之间的差异
    从传感器获得的水位
    -outCtr:执行器的控制信号,用于控制阀门
    位置
PIcontinuousController:从BaseController概括
  • 特性:
    -x:控制器状态变量

约束块

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

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

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

传感器仅读取罐的液位。

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

内部框图

这是具有单个储罐的系统的内部框图。

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

运行模拟

由于TankPITanksConnectedPI被定义为“ SysMLSimModel”,因此将在“模拟”页面上的“模型”的组合框中填充它们。

选择TanksConnectedPI ,并观察发生的这些GUI更改:

  • “数据集”组合框:将填充TanksConnectedPI中定义的所有数据集
  • “依赖”列表:将自动收集所有的块,约束,和SimFunctions由值类型TanksConnectedPI直接或间接引用(这些元素将作为Modelica的代码来生成)
  • “要绘制的属性”:将收集一长串“叶”变量属性(即它们没有属性);您可以选择一个或多个进行模拟,它们将成为情节的传奇

创建工件并配置

选择“模拟>系统行为> Modelica / Simulink> SysMLSim配置管理器”

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

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

注意:默认情况下,未配置为“ SimConstant”的属性为“ SimVariable”。

物产

液体源

配置为“ SysMLSimClass”。

属性配置:

  • flowLevel:设置为“ SimConstant”

坦克

配置为“ SysMLSimClass”。

属性配置:

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

BaseController

配置为“ SysMLSimClass”。

属性配置:

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

PIcontinuousController

配置为“ SysMLSimClass”。

TankPI

配置为“ SysMLSimModel”。

TanksConnectedPI

配置为“ SysMLSimModel”。

设置数据集

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

元件

数据集

液体源

流量水平:0.02

坦克

h.start:0

流量增益:0.05

面积:0.5

最大V:10

minV:0

BaseController

电话:10

K:2

Ts:0.1

PIcontinuousController

无需配置。

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

TankPI

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

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

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

TanksConnectedPI

  • controller1.ref:0.25
  • controller2.ref:0.4

仿真与分析1

选择这些变量,然后单击求解按钮。该图应提示:

  • source.qOut.lflow
  • tank1.qOut.lflow
  • tank1.h
  • tank2.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”上,右键单击并选择“ Duplicate DataSet”,然后重命名为“ Tank2WithLimitValveSize”
  • 单击按钮进行配置,展开“ tank2”,然后在属性“ maxV”的“值”列中键入“ 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来调整参数值。