无心飞扬 发表于 2024-9-6 09:10:08

CODESYS 实战:单开关量传感器实现旋转速度计算

引言在工业自动化领域,实时监测机器的速度对于确保生产效率和安全性至关重要。本文将介绍如何使用 CODESYS 编写一个旋转速度计算器功能块,通过传感器信号计算设备的运行速度。1程序设计思路本程序的核心是根据传感器的触发时间差来计算速度。通过检测传感器信号的上升沿,记录时间,并利用两次传感器触发的时间差计算速度。2程序代码FUNCTION_BLOCK PM_RotationSpeedCalculator
VAR_INPUT
    Sensor : BOOL;       // 感应传感器信号
    RunLength : REAL := 10;   // 运行长度(单位:米)
END_VAR
VAR_OUTPUT
    Speed : REAL;      // 速度(单位:米/秒)
END_VAR
VAR
    LastTime : TIME;   // 上一次检测到传感器的时间
    CurrentTime : TIME;// 当前检测到传感器的时间
    TimeElapsed : REAL;// 两次检测的时间差(单位:秒)
    SensorTriggered : BOOL; // 传感器触发状态
END_VAR

(*
版本记录:
版本          日期          作者
V1         2024-1-13   工控老王
*)

IF Sensor AND NOT SensorTriggered THEN
    CurrentTime := TIME(); // 记录当前时间
    IF LastTime <> T#0s THEN
      TimeElapsed := TIME_TO_REAL(CurrentTime - LastTime) / 1000.0; // 计算时间差并转换为秒
      IF TimeElapsed > 0 THEN
            Speed := RunLength / TimeElapsed; // 计算速度
      END_IF
    END_IF
    LastTime := CurrentTime; // 更新上一次时间
    SensorTriggered := TRUE;
ELSIF NOT Sensor THEN
    SensorTriggered := FALSE;
END_IF
3代码解释变量定义:
[*]Sensor:检测传感器信号的布尔输入。
[*]RunLength:设备的运行长度,单位为米。
[*]Speed:输出速度,单位为米/秒。
[*]LastTime和CurrentTime:分别记录上一次和当前的传感器触发时间。
[*]TimeElapsed:计算两次传感器触发时间的差值。
[*]SensorTriggered:防止连续多次检测干扰计时。
核心逻辑:
[*]检测传感器信号的上升沿,记录当前时间。
[*]计算与上一次触发时间的差值,得到时间间隔。
[*]使用时间间隔和运行长度计算速度。

程序运行展示
设置设备的运行长度为10米,传感器设置为10秒的脉冲,计算出结果为0.998m/s。因为存在 PLC 扫描周期的影响,计算结果并不是1m/s。但对于在低速应用场景这个速度误差影响不大。4应用场景该功能块适用于需要粗略监测速度的场合,精确检测请使用编码器。如传送带、旋转机械等。通过对传感器信号的检测,可以实施监控设备的运行状态,通过速度的变化,也可以感知到负载的变化。当异常时可以输出报警,确保设备的稳定性和安全性。5开源版本说明该程序遵循开源原则,任何人都可以使用、修改和分发此代码。在使用前应进行充分的测试,修改代码时,请秉持分享精神,将您的改进和成果进行分享,以便更多人受益。总结通过 CODESYS 编写的旋转速度计算器功能块,能够粗略地通过传感器信号计算设备的运行速度。该方法简单高效,实现成本低,适用于多种工业自动化场景。
页: [1]
查看完整版本: CODESYS 实战:单开关量传感器实现旋转速度计算