Skip to main content

 

引言

在工业自动化中,传感器的原始模拟信号往往需要转换为有意义的工程值,以便进行进一步的处理和分析。为了确保这些转换是准确的,我们使用线性插值方法来实现这一点。本文将深入探讨 PLC 功能块FB_AnalogLinearization,该功能块用于将原始 AD(模数转换)值线性化为工程值,确保测量结果的精确性和可靠性。


 

1

   

程序代码及介绍

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

FUNCTION_BLOCK FB_AnalogLinearization
VAR_INPUT    
    RawValue : INT;        // 原始AD值    
    Points : ARRAY[1..5] OF POINT; // 线性化点    
    PointCount : INT := 5; // 点数
END_VAR
VAR_OUTPUT    
    EngValue : REAL;       // 工程值    
    i : INT;    
    Ratio : INT;
END_VAR
// 线性插值
FOR i := 1 TO PointCount-1 DO    
    IF (RawValue >= Points[i].Raw) AND (RawValue <= Points[i+1].Raw) THEN        
        // 线性插值计算        
        Ratio := (RawValue - Points[i].Raw) / (Points[i+1].Raw - Points[i].Raw);        
        EngValue := Points[i].Eng + Ratio * (Points[i+1].Eng - Points[i].Eng);        
        EXIT;    
    END_IF
END_FOR
// 如果超出范围,使用最近的点
IF RawValue < Points[1].Raw THEN    
    EngValue := Points[1].Eng;
ELSIF RawValue > Points[PointCount].Raw THEN    
    EngValue := Points[PointCount].Eng;
END_IF

 

2

   

功能解析

输入变量

  • RawValue:用于接收来自传感器的原始模拟值,类型为整数(INT)。

  • Points:一个包含线性化点的数组,每个点由原始值和对应的工程值组成,最多可包含 5 个点。

  • PointCount:指定有效的线性化点数量,默认为 5。

输出变量

  • EngValue:经过线性化后的工程值,类型为实数(REAL)。

  • i:循环计数器,用于遍历线性化点。

  • Ratio:用于计算插值比率,类型为整数(INT)。


 

3

   

代码逻辑详解:

线性插值计算

使用FOR循环遍历所有线性化点,从第一个点到倒数第二个点。

检查原始值RawValue是否在当前点和下一个点之间。如果在这个范围内,利用线性插值公式计算工程值:

图片

一旦计算出工程值,使用EXIT退出循环,避免不必要的计算。

范围检查

如果RawValue小于第一个线性化点的原始值,则将EngValue设置为第一个点的工程值。

如果RawValue大于最后一个线性化点的原始值,则将EngValue设置为最后一个点的工程值。


 

4

   

应用场景

功能块的应用场景非常广泛,包括但不限于:

温度传感器:对于热电偶和热敏电阻等设备,原始 AD 值需要通过线性化转换为实际温度值,以进行精确控制和监测。

压力传感器:在压力测量中,传感器输出的原始信号需线性化为压力单位(如巴、帕斯卡),以供系统实时反馈和调整。

流量计:在流体测量系统中,将流量传感器的 AD 值线性化为实际流量值,以帮助实现流量监控和控制。

液位传感器:在液位测量中,通过线性化原始信号,使得液位读数更为准确,确保安全和效率。


 

5

   

拓展思考

随着工业 4.0 和物联网技术的发展,数据采集和转换的需求日益增加。未来的线性化功能块可能会考虑以下几个方向:

动态点数:允许用户根据实际需求灵活定义线性化点的数量,而不仅限于固定数量,这样可以适应更复杂的非线性响应。

非线性插值算法:探索其他插值算法(如多项式插值或样条插值),提高信号转换的精度,尤其是在存在较大非线性特性的应用中。

自学习能力:结合机器学习算法,根据历史数据自动调整线性化点,提高系统的适应性和准确性。


 

总结

本文详细介绍了 PLC 功能块FB_AnalogLinearization的设计与实现,重点分析了其输入输出结构、线性插值过程及应用场景。通过有效地将原始 AD 值线性化为工程值,该功能块为工业自动化中的测量提供了可靠的解决方案。随着技术的进步,线性化技术将在更多领域发挥重要作用,推动自动化系统向更高的精度和智能化发展。

图片

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

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

图片

往期回顾


 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

每周一个编程小例子:数字量输入组监控

每周一个编程小例子:实时数据分析

每周一个编程小例子:PLC 多轴同步控制的理解与应用

每周一个编程小例子:PLC 波形生成器 (正弦 方波 三角波)

每周一个编程小例子:模拟量信号报警

每周一个编程小例子:组合数概率的实现

每周一个编程小例子:多传感器信号融合与优化方案

每周一个编程小例子:监控模拟信号的健康状态

每周一个编程小例子:PLC 程序实现模拟信号的线性校准

每周一个编程小例子:智能报警过滤器:优化报警系统的 PLC 程序

每周一个编程小例子:使用 PLC 程序让灯光呼吸

每周一个编程小例子:自适应性滤波器:动态调整以平衡响应与稳定性

每周一个编程小例子:卡尔曼滤波器在自动化中的简单应用

每周一个编程小例子:多模式定时器

每周一个编程小例子:基于 PLC 的编码器速度计算器

每周一个编程小例子:电机顺序启动与停止程序

每周一个编程小例子:电梯控制程序

每周一个编程小例子:自动门控制系统

每周一个编程小例子:智能停车场计数系统

每周一个编程小例子:智能照明控制系统

每周一个编程小例子:变频器控制

每周一个编程小例子:比例阀控制

每周一个编程小例子:脉冲输出的灵活控制

每周一个编程小例子:计算移动平均值

每周一个编程小例子:速率限制器

图片

2026年8月


 

Tags