PID 控制器和 InfluxDB:第 1 部分 - 背景
作者:Anais Dotis-Georgiou / 开发者
2024 年 8 月 27 日
导航到
在快速发展的化工行业中,对像连续搅拌式反应器(CSTRs)这样的化学反应器进行精确控制至关重要,这有助于确保最佳性能和产品质量。本博客文章深入探讨了如何整合先进的数据工具和技术来实现这种控制。我们将探讨如何利用 InfluxDB、Kafka 和 Faust 流式处理,以及 Telegraf,来有效地建模和管理 CSTR 及其比例-积分-微分控制器(PID 控制器)。在本系列文章结束时,您将深入了解创建一个强大的数据管道,实现实时监控和控制,从而提高您的流程效率和可靠性。
为了有效地建模和管理 CSTR 及其 PID 控制器,我们使用了一系列强大的工具。InfluxDB 是一种针对高写入和查询负载进行优化的时间序列数据库,非常适合处理我们化学过程产生的实时数据。Kafka 是一种分布式流平台,允许我们构建实时数据管道,确保我们系统组件之间的数据流无缝。Faust 是一个 Python 流处理库,提供了一个高级 API,用于构建复杂的流应用程序,对于实时数据转换和分析至关重要。最后,Telegraf 是一个用于收集、处理和写入指标的代理,它作为桥梁,将我们的实时数据输入到 InfluxDB 中。这些工具共同创建了一个全面的环境,用于精确、高效地监控和控制化学过程。本博客文章的相应存储库可以在这里找到。
本博客描述的项目架构图。CSTR 的数字孪生产数据,Kafka 收集数据。Faust 充当 PID 控制器。Telegraf 订阅 Kafka 主题,将传感器和控制数据发送到 InfluxDB。Grafana 监控反应器和冷却夹套。
CSTR 是什么?
连续搅拌式反应器(CSTR)是工业过程中常用的化学反应器。它通过连续搅拌反应物和产物,在整个反应器中保持均匀的组成。CSTR 的主要优点是能够处理大规模反应,并保持一致的质量,使其非常适合需要稳态操作的过程。
为了模拟连续搅拌罐反应器(CSTR),我们使用一组描述随时间变化反应物和产物浓度变化的微分方程。通过调整控制变量(通常是冷却夹套)来维持系统中的期望设定点,我们使用比例-积分-微分(PID)控制器。PID控制器通过计算期望设定点与测量过程变量之间的误差值,并根据比例、积分和微分项进行修正来应用校正。
CSTR的一个典型应用例子是在乙二醇的生产中,乙二醇是防冻剂和聚酯纤维的关键成分。生产过程涉及在水存在下对环氧乙烷的水解。在这个例子中,我们可以将环氧乙烷视为化学物质A,水视为化学物质B。以下是从APMonitor的CSTR示意图。
您可以在此处了解建模此类反应器的具体数学知识这里。但基本上,CSTR模型使用常微分方程(ODEs)描述,考虑了反应器中的质量和能量平衡,其中
- Ca是离开反应器的反应物A的浓度。
- Cb是离开反应器的反应物B的浓度。
- Caf是进入反应器的反应物A的浓度,是一个常数。
- Tf是进入反应器的反应物A的温度,是一个常数。
- Tc或u是冷却夹套或控制变量的温度,由PID控制器确定。
本质上,CSTR中的许多化学反应都是放热的,会随时间产生热量,例如乙二醇的生产。随着反应的进行和热量的产生,反应器的温度会升高,进一步加速反应并可能产生更多的热量。需要控制这个温度的原因有很多
- 安全
- 未受控制的热量产生可能导致失控反应,反应速率无法控制地增加,导致危险的高温和高压。
- 这可能导致设备损坏、有害物质的释放,甚至爆炸。
- 产品质量
- 许多反应都有最佳温度范围,这可以最大化所需产品的产率和选择性。
- 偏离这个温度范围可能导致不需要的副产品的形成,降低所需产品的整体质量和产率。
- 工艺效率
- 保持反应在特定的温度范围内,可以确保资源得到有效利用。
- 过多的热量可能需要额外的冷却,增加运营成本,而不足的温度控制可能减慢反应速度,降低产量。
因此,PID控制器持续计算期望温度(设定点)和实际反应器温度之间的误差,并调整冷却夹套温度以最小化此误差。在CSTR和PID控制系统中改变设定点有几个原因
- 最大化产率和质量:不同的反应阶段可能有不同的最佳温度以实现产品产率和质量的最大化。调整设定点可以帮助在整个过程中保持最佳条件。
- 一些反应在较高温度下进行得更快,而另一些反应如果温度过高可能会产生不需要的副产品。调整设定点有助于优化这些反应动力学。
- 安全:防止失控反应和爆炸。
- 过程转换:在涉及多个步骤或阶段的过程,每个步骤可能需要不同的温度以实现最佳性能。设定点可以实现平稳过渡。
- 研发:改变设定点允许研究人员在开发新过程或优化现有过程时研究温度对反应动力学和产率的影响。
项目概述和需求
本博客文章的对应仓库可以在这里找到。它包含三个目录
- without_kafka:此目录包含一个使用Python不使用InfluxDB、Kafka或Telegraf建模CSTR和PID控制器的示例。
- cstr_kafka_influxdb:此目录包含一个使用Kafka和Python建模CSTR的示例。
- cstr_kafka_influxdb_docker:此目录包含一个建模CSTR的示例,该CSTR已docker化。这是您独立尝试此示例推荐的环境。
每个目录都包含一个README.md文件,其中包含如何运行这些演示的说明。
本项目提供CSTR数字孪生,模仿在提供的温度设定点条件下执行反应(A → B)。我们生成如下所示的数据:
CSTR数字孪生的结果。顶部图表显示反应物A(Ca)随时间的变化浓度;中间图表显示反应器温度(T)和设定点(设定点),底部图表显示冷却夹套的温度(u)。
结论
本博客文章为创建CSTR的数字孪生、使用Kafka和Faust作为PID控制器以及在InfluxDB中存储温度数据奠定了基础。我们使用Telegraf从Kafka主题获取数据。然后,我们使用Grafana来可视化结果。始终从InfluxDB v3 Cloud开始。在下一篇文章中,我们将介绍如何运行项目,深入了解架构和逻辑,并讨论所选堆栈的一些优缺点。如果您需要帮助,请通过我们的社区网站或Slack频道联系我们。如果您也在使用InfluxDB进行数据处理项目,我很乐意听到您的声音!