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 编写的旋转速度计算器功能块,能够粗略地通过传感器信号计算设备的运行速度。该方法简单高效,实现成本低,适用于多种工业自动化场景。
往期回顾
CODESYS 的ST语言实战 - 主备切换及保养提示解决方案
2024年08月