每周一个编程小例子:PLC 权重比例分配器

引言

在自动化控制系统中,比例分配是一种重要的控制方式,广泛应用于多通道执行器的协调控制中。PLC(可编程逻辑控制器)能够精确地将一个总设定值根据各个通道的权重,按比例分配到多个输出通道,以实现精细化控制。在很多工业应用中,比例分配器程序能够大大提高系统的效率和精确度。本文将详细解析一个 PLC 比例分配器功能块的实现,帮助大家理解如何将一个总设定值按照不同权重分配到多个通道的输出。

1  程序代码及介绍

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

  • FUNCTION_BLOCK FB_ProportionalSplitter
  • VAR_INPUT   
  •         IN_TotalSetpoint : REAL;   // 总设定值   
  •         IN_Weights : ARRAY[1..cMaxChannels] OF REAL; // 各通道权重   
  •         IN_Enable : ARRAY[1..cMaxChannels] OF BOOL;  // 通道使能   
  •         IN_Reset : BOOL;           // 复位
  • END_VAR
  • VAR_OUTPUT   
  •         OUT_ChannelOutputs : ARRAY[1..cMaxChannels] OF REAL; // 各通道输出   
  •         OUT_TotalOutput : REAL;    // 总输出(用于校验)
  • END_VAR
  • VAR   
  •         TotalWeight : REAL;   
  •         WeightSum : REAL;
  • i : INT;
  • END_VAR
  • VAR CONSTANT   
  •         cMaxChannels : INT := 8;
  • END_VAR
  • // 计算总权重
  • TotalWeight := 0;
  • FOR i := 1 TO cMaxChannels DO   
  •         IF IN_Enable[i] THEN       
  •                TotalWeight := TotalWeight + IN_Weights[i];   
  •         END_IF
  • END_FOR
  • // 计算各通道输出
  • WeightSum := 0;
  • FOR i := 1 TO cMaxChannels DO   
  •         IF IN_Enable[i] AND (TotalWeight > 0) THEN       
  •              OUT_ChannelOutputs[i] := IN_TotalSetpoint * (IN_Weights[i] / TotalWeight);   
  •         ELSE       
  •              OUT_ChannelOutputs[i] := 0;   
  •         END_IF   
  •         WeightSum := WeightSum + OUT_ChannelOutputs[i];
  • END_FOR
  • OUT_TotalOutput := WeightSum;

2  代码解析:

2.1 变量解释:

输入变量

  • IN_TotalSetpoint:总设定值,即需要分配到各个通道的总值。

  • IN_Weights:各通道的权重数组,用于决定各通道占总输出的比例。

  • IN_Enable:通道使能信号,用来判断哪些通道可以参与计算。

  • IN_Reset:复位信号,用于重置所有输出。

输出变量

  • OUT_ChannelOutputs:各通道的输出值,根据设定的权重和总设定值计算得出。

  • OUT_TotalOutput:所有通道输出的总和,用于校验总输出是否正确。

内部变量

  • TotalWeight:所有使能通道的总权重,用于按比例分配设定值。

  • WeightSum:用于累加各通道输出的总和,确保总输出与预期一致。

常量

  • cMaxChannels:最大通道数,这里设置为 8,可以根据需求调整。

2.2 功能实现:

计算总权重:首先,我们通过累加所有使能通道的权重,计算出总权重 TotalWeight。只有使能的通道才会参与计算。

按比例计算各通道输出:接着,使用公式 OUT_ChannelOutputs[i] = IN_TotalSetpoint * (IN_Weights[i] / TotalWeight),将总设定值按比例分配到各通道。

输出总和校验:最后,计算所有通道输出的总和,确保其等于总设定值。

3  应用场景

比例分配器程序在许多工业应用中具有广泛的使用场景,尤其在多通道执行器的协调控制中,常见的应用包括:

多执行器控制系统:在需要多个执行器按比例分配力量或资源的系统中,例如液体分配、气体分配或温度控制等,比例分配器能够确保每个执行器获得正确的控制信号。

智能温控系统:在建筑物的智能空调或暖气系统中,各个区域的温度控制系统可以根据预设的权重,按比例分配总的温控设定值,以达到最优的温度分配效果。

能源分配:在能源管理系统中,比例分配器能够根据各个区域或设备的需求,将有限的能源按比例进行分配,确保整体能源利用效率最大化。

自动化生产线:在多通道传输系统中,比例分配器可以根据每个传输通道的工作负载,将总传输量按比例分配到各个通道,实现高效的资源分配。

4  拓展思考

虽然这个比例分配器功能块非常有效,但它也可以根据不同的需求进行拓展和优化:

动态权重调整:在某些应用中,通道的权重可能是动态变化的。可以增加对权重的动态调整功能,根据实时数据变化来调整各通道的权重。

多维度控制:如果需要考虑多个参数的比例分配(例如温度、湿度、流量等),可以将程序拓展为支持多维度数据的输入和输出。

故障容错设计:在一些关键的控制系统中,可能会出现通道故障的情况,可以增加故障检测与容错处理机制,确保系统的稳定性。

网络通信:为了远程控制或监控,可以将比例分配器功能块与工业物联网(IIoT)技术结合,通过网络传输数据,实现更智能的分配控制。

总结

PLC 比例分配器程序能够根据不同通道的权重,精确地将一个总设定值分配到多个通道,广泛应用于多执行器协调控制、能源分配、温控系统等领域。通过这篇文章,我们了解了比例分配器的基本原理、程序实现及应用场景。在实际应用中,我们可以根据需求对该功能块进行扩展与优化,提升系统的灵活性和可靠性。通过这种方式,我们能够实现更加智能、高效的控制系统,为自动化行业的发展贡献力量。

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

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

图片

往期回顾

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

每周一个编程小例子:用于连锁的电机标准控制模块

每周一个编程小例子:PID 控制算法在 PLC 系统中的实现与应用

每周一个编程小例子:自定义种子生成随机数

每周一个编程小例子:可调时间的脉冲生成器

每周一个编程小例子:带滤波的标准模拟量输入功能块

每周一个编程小例子:使用 PLC 将字符串转换为日期格式

每周一个编程小例子:PLC 配方管理

每周一个编程小例子:比较两个 DB 块(STL)

每周一个编程小例子:如何使用 PLC 实现数组逆序

每周一个编程小例子:流量累计与批次控制

每周一个编程小例子:自定义循环执行控制程序

每周一个编程小例子:步进控制功能块

图片

2025年12月