每周一个编程小例子:流量累积计算器

引言

在自动化控制中,PLC(可编程逻辑控制器)程序的作用无可替代,它能将工业设备的运行状态转换成我们可以操控的控制信号。在流量监测领域,尤其是在液体、气体等流体的计量上,准确的流量累积计算是至关重要的。本篇文章将介绍如何通过 PLC 编程实现一个简单的流量累积器(Totalizer),并且讨论如何优化该程序以便适应不同的应用场景。

程序代码及介绍

下面是完整的 PLC 程序代码(代码基于 CodeSys 平台的 ST 语言): 

  • FUNCTION_BLOCK PM_Totalizer
  • VAR_INPUT  
  •     Value : Real;  // 输入的实时流量值 (单位: 流量) 
  •     MinimumFlow : Real := 2.0;  // 最小流量阈值,若输入流量低于此值,则忽略该流量值 (单位: 流量) 
  •     Intervall : TIME := T#60S;  // 单位转换,转换成秒 
  •     Cycle : Time := T#100ms;  // 计算更新周期,即每次计算的时间间隔 (单位: 时间, 默认 100毫秒) 
  •     Reset : Bool;  // 复位信号,当复位为TRUE时,累积值和总值会清零
  • END_VAR
  • VAR_OUTPUT  
  •     Total : LReal;  // 输出变量,累计的总流量值 (单位: 流量)
  • END_VAR
  • VAR  
  •     Accum : LReal;  // 累计的流量值,存储中间结果
  • END_VAR
  • VAR_TEMP  
  •     intervall_real : Real;  // 时间间隔的实数形式,用于计算 
  •     cycle_real : Real;  // 周期的实数形式,用于计算 
  •     intervall_dint : DInt;  // 时间间隔转换后的整数表示 
  •     cycle_dint : DInt;  // 周期转换后的整数表示 
  •     Value_temp : Real;  // 临时存储流量值,用于判断是否超过最小流量阈值
  • END_VAR
  • // 复位条件判断
  • IF Reset THEN   
  •       Accum := 0.0;  // 若复位信号为TRUE,清零累积流量   
  •       Total := 0.0;  // 清零总流量
  • ELSE    
  •       // 判断输入的流量值是否小于或等于最小流量阈值   
  •       IF Value <= MinimumFlow THEN       
  •             Value_temp := 0;  // 如果流量小于最小流量,则忽略该流量   
  •       ELSE       
  •             Value_temp := Value;  // 否则,使用当前流量值        
  •             // 将单位(Intervall)转换为整数形式(DInt)       
  •             intervall_dint := TIME_TO_DINT(Intervall);          
  •             // 将转换后的整数单位重新转换为实数       
  •             intervall_real := DINT_TO_REAL(intervall_dint);       
  •             // 将周期时间(Cycle)转换为整数形式(DInt)       
  •             cycle_dint := TIME_TO_DINT(Cycle);        
  •             // 将转换后的整数周期值重新转换为实数       
  •             cycle_real := DINT_TO_REAL(cycle_dint);        
  •             // 累计流量计算:当前流量乘以周期时间,除以时间间隔,然后加到累积流量中       
  •             Accum := ((Value_temp * cycle_real) / intervall_real) + Accum;        
  •             // 更新总流量值为当前累积值       
  •             Total := Accum;   
  •       END_IF;
  • END_IF;

2  程序解释

这个程序的核心功能是根据实时流量计算累计总流量。其工作原理如下:

输入参数:程序接受多个输入,包括实时流量值 (Value),最小流量阈值 (MinimumFlow),单位时间间隔 (Intervall),计算周期 (Cycle),以及复位信号 (Reset)。

判断复位信号:当复位信号 (Reset) 为 TRUE 时,程序会将所有的累积值和总流量清零。

流量处理:当输入流量低于最小流量阈值时,该流量会被忽略。否则,程序会根据输入的流量值计算累计流量,计算公式为:

输出总流量:每次计算后,总流量 (Total) 会更新为当前的累计流量。

应用场景

这种流量累计器广泛应用于工业自动化系统中,特别是液体、气体等流体的计量。以下是一些具体应用场景:

  • 水处理厂:用于监测水的流量,确保水处理过程的效率与质量。

  • 化工厂:对于化学物质的流量进行实时监控,以避免过量或不足的流动。

  • 石油和天然气行业:在油气的提取与输送过程中,确保流量数据的准确性,避免安全隐患。

4  拓展思考

精度优化:在实际应用中,流量值可能会受到噪声影响,如何通过滤波算法来提高数据的稳定性和精度是一个值得考虑的问题。

多通道支持:目前该程序仅支持一个输入流量的处理。如果需要处理多个流量源(如多个管道),可以考虑扩展程序支持多通道累积。

实时监控与报警:通过与 SCADA 系统连接,可以实现实时流量监控,超出预设的流量阈值时触发报警信号。

总结

本文介绍了一种基于 PLC 的流量累计器程序,通过合理的算法和控制逻辑实现了对流量的实时累积。通过优化该程序,可以在不同的工业场景中应用,从而确保生产过程的顺畅和安全。在未来,随着自动化水平的提高,流量监控系统将更加智能化和精确化。

你来出题 我来答图片图片图片

欢迎大家在评论区提一些标准功能块的需求,如果合适,我们会在以后的文章中与大家分享。

图片

往期回顾

每周一个编程小例子 :Bit 到 Word 转换的两种实现方案对比

每周一个编程小例子:记录设备运行时间

每周一个编程小例子:基于长按检测的启动控制系统

每周一个编程小例子:探秘 PLC 数据记录功能块

每周一个编程小例子:心跳检测与 PLC 应用

每周一个编程小例子:斜坡发生器

每周一个编程小例子:旋转速度计算

每周一个编程小例子:计算 PLC 循环周期|例程需求征集!

每周一个编程小例子:如何优雅的分割字符串

每周一个编程小例子:带反馈的阀门控制程序

每周一个编程小例子:西门子 LGF 库中的脉冲继电器功能块

每周一个编程小例子:曲线加减速的控制应用

每周一个编程小例子:轻松去除字符串前导字符

每周一个编程小例子:根据阈值更新输入

每周一个编程小例子:官方模拟量输入处理模块

每周一个编程小例子:主从电机的时序控制

每周一个编程小例子:基于一阶滞后滤波的优化方案

每周一个编程小例子:16 进制到浮点数的神奇转换

每周一个编程小例子:PLC 长按控制程序

每周一个编程小例子:PLC 程序实现多位整数拆分

图片

2025年09月

Tags: