前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Matlab的水箱液位控制

Matlab的水箱液位控制

作者头像
用户9925864
发布2022-07-27 09:35:33
1.2K0
发布2022-07-27 09:35:33
举报
文章被收录于专栏:算法工程师的学习日志

新年第一篇,一位读者朋友后台留言咨询关于水箱液位控制的问题,因为没描述具体的问题需求,本文分享一篇Matlab自带的样例-基于模糊理论的水箱液位控制。

该模型实现了在Simulink模型中模糊推理系统(FIS)+水箱液位控制。

Simulink模型

该模型使用模糊逻辑控制器块实现的模糊推理系统来控制水箱中的水位。控制模型如下图

代码语言:javascript
复制
open_system('sltank')

对于这个系统,你可以使用阀门控制流入水箱的水。流出率取决于输出管的直径(恒定)和水箱中的压力(随水位变化)。因此,该系统具有非线性特性。

模糊推理系统

模糊系统在MATLAB工作空间中的FIS对象tank中定义。

模糊系统的两个输入是水位误差和水位变化率。每个输入有三个成员函数。

代码语言:javascript
复制
figure
plotmf(tank,'input',1)
figure
plotmf(tank,'input',2)

模糊系统的输出是控制阀打开或关闭的速率,该控制阀有五个隶属函数。

代码语言:javascript
复制
plotmf(tank,'output',1)

由于出水管道的直径,该系统中的水箱排空的速度比注满的速度慢。为了补偿这种不平衡,关闭慢阀和打开慢阀的隶属函数是不对称的。PID控制器不支持这种不对称性。

模糊系统有五条规则。前三条规则仅根据水位误差调整阀门。

  • 如果水位正常,则不要调整阀门。
  • 如果水位低,则快速打开阀门。
  • 如果水位高,则快速关闭阀门。

当水位接近设定点时,其他两条规则根据水位变化率调整阀门。

  • 如果水位正常且正在上升,则缓慢关闭阀门。
  • 如果水位正常且下降,则缓慢打开阀门。
代码语言:javascript
复制
tank.Rules
ans = 

  1×5 fisrule 数组 - 属性:

    Description
    Antecedent
    Consequent
    Weight
    Connection

  Details:
                              Description                      
         ______________________________________________________

    1    "level==okay => valve=no_change (1)"                  
    2    "level==low => valve=open_fast (1)"                   
    3    "level==high => valve=close_fast (1)"                 
    4    "level==okay & rate==positive => valve=close_slow (1)"
    5    "level==okay & rate==negative => valve=open_slow (1)"

在此模型中,还可以使用PID控制器控制水位。要切换到PID控制器,将const块设置为大于或等于零的值。

模拟

该模型通过水位设定点的周期性变化来模拟控制器。运行模拟。

代码语言:javascript
复制
sim('sltank',100)
open_system('sltank/Comparison')

水位很好地跟踪设定点。可以通过修改油箱FIS的规则来调整控制器的性能。例如,如果删除后两条类似于衍生控制动作的规则,控制器的性能会很差,水位会出现大幅波动。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档