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

引言

在工业自动化中,PLC(可编程逻辑控制器)广泛应用于各种设备的控制系统中。斜坡生成器(Ramp Generator)是一种常见的功能,用于控制某一参数从初始值逐渐过渡到目标值的过程。通过对斜坡速率、时间增量等因素的控制,斜坡生成器能够平滑地改变参数的值,避免因急剧变化而引起的系统不稳定或设备损坏。本文将介绍一个基于 PLC 的斜坡生成器程序,并探讨其应用场景与扩展思考。

程序分析

1.1 程序代码

PLC 代码,基于CodeSys平台:

FUNCTION_BLOCK PM_RampGenerator_V2
VAR_INPUT    
    Enable : BOOL;                // 使能信号    
    InitialValue : REAL;          // 初始值    
    TargetValue : REAL;           // 目标值    
    RampTime : REAL;              // 斜坡时间(秒)
END_VAR
VAR_OUTPUT    
    CurrentValue : REAL;          // 当前输出值    
    Done : BOOL;                  // 完成位
END_VAR
VAR    
    RampRate : REAL;              // 斜坡速率    
    DeltaTime : REAL;             // 时间增量    
    LastRunTimeUpdate : LTIME;    // 上一次更新时间
END_VAR

// 斜坡生成逻辑
IF Enable THEN	
        // 初始计算	
        RampRate := (TargetValue - InitialValue) / RampTime; // 计算斜坡速率	
        DeltaTime := LTIME_TO_REAL(LTIME() - LastRunTimeUpdate) / 1000 / 1000 / 1000; // 时间增量,计算PLC循环周期,转换位秒

        IF TargetValue > InitialValue THEN		
                IF TargetValue - CurrentValue > RampRate * DeltaTime THEN // 判断是否到达目标值        	
                CurrentValue := CurrentValue + RampRate * DeltaTime; // 更新当前值		
                ELSE			
                       CurrentValue := TargetValue; // 达到目标值			
                       Done := TRUE; // 设置完成位		
                END_IF	
        ELSE		
                IF TargetValue - CurrentValue < RampRate * DeltaTime THEN // 判断是否到达目标值        	
                CurrentValue := CurrentValue + RampRate * DeltaTime; // 更新当前值		
                ELSE			
                       CurrentValue := TargetValue; // 达到目标值			
                       Done := TRUE; // 设置完成位		
                END_IF       
    END_IF
ELSE    
    CurrentValue := InitialValue; // 如果未使能,保持初始值    
    Done := FALSE; // 完成位为FALSE
END_IF

// 更新上次运行时间
LastRunTimeUpdate := LTIME();

1.2 变量

输入变量:

  • Enable:使能信号,决定是否启动斜坡生成。

  • InitialValue:斜坡的起始值。

  • TargetValue:目标值,即斜坡最终要达到的值。

  • RampTime:斜坡时间,表示从初始值变化到目标值所需要的时间,单位为秒。

输出变量:

  • CurrentValue:当前的输出值,表示斜坡生成的实时值。

  • Done:完成位,指示斜坡生成是否完成。

内部变量:

  • RampRate:斜坡速率,根据初始值、目标值和斜坡时间的差值来计算。

  • DeltaTime:时间增量,表示PLC执行周期的时间差,用于确保每次更新时的平滑过渡。

  • LastRunTimeUpdate:上次更新时间,用来计算时间增量

1.3 程序逻辑

该程序的核心逻辑如下:

斜坡速率计算:根据初始值、目标值和斜坡时间计算出斜坡的速率 (RampRate),即单位时间内值的变化量:

RampRate = (TargetValue - InitialValue) \ RampTime

时间增量:计算 PLC 循环周期的时间增量 (DeltaTime),它基于上次运行时间与当前时间的差值。

斜坡生成

  • 如果目标值大于初始值,程序会逐渐增加CurrentValue,直到达到目标值。如果目标值小于初始值,则程序会逐渐减少CurrentValue,直到目标值。

  • 在每个 PLC 周期中,CurrentValue根据斜坡速率和时间增量进行更新。当CurrentValue接近目标值时,程序会将CurrentValue设置为目标值,并将Done置为 TRUE,表示斜坡生成完成。

使能信号:如果Enable信号为 FALSE,则CurrentValue会保持在初始值,Done会被置为 FALSE。

运行时间更新:每次 PLC 周期结束时,更新上次运行时间,以便计算下一周期的时间增量。

1.4 关键计算公式

  • 斜坡速率计算公式:

    图片

  • 时间增量计算公式:

    图片

    其中LTIME()是 PLC 系统的当前时间,单位为纳秒。通过此公式将时间转换为秒。

1.5  控制结构

程序中使用了条件判断结构,根据目标值与当前值的关系决定是否更新CurrentValue,并根据斜坡的方向进行适当的增减操作。通过此方式,程序实现了从初始值到目标值的平滑过渡。

2  应用场景

该斜坡生成器的应用场景非常广泛,尤其适用于以下领域:

电机控制:在变频电机启停过程中,斜坡生成器可以用于平滑控制电机转速的变化,避免由于突发的转速变化引起的机械冲击或电流波动。

液压系统:在液压系统中,斜坡生成器可以控制液压缸的运动速度,避免瞬间过大的压力变化,延长设备的使用寿命。

温度控制:在温控系统中,斜坡生成器可以平滑地调节加热或冷却设备的功率输出,从而使温度变化更加稳定。

照明控制:在自动照明系统中,斜坡生成器可以逐渐增加或减少光照强度,避免急剧的光照变化对眼睛造成不适。

3  拓展思考

虽然该程序功能简单,但它在实际应用中具有很大的扩展潜力:

多重斜坡控制:可以在同一个程序中控制多个斜坡生成器的同时工作,如多台电机或多个液压缸的协调控制。

非线性斜坡生成:当前程序采用的是线性斜坡生成方式,未来可以通过修改速率的计算方式,实现非线性斜坡生成,比如指数型或对数型的变化,以适应不同的控制需求。

动态调整斜坡时间:根据实时反馈(如电流、压力等传感器数据),可以动态调整RampTime,从而实现更精确的控制。

故障保护:可以加入故障检测机制,避免在设备出现故障时继续运行斜坡生成逻辑,例如在电流过大或压力过高时停止斜坡生成。

总结

斜坡生成器是工业自动化控制中常用的功能模块,它能够实现平滑的参数过渡,避免系统因急剧变化而导致的不稳定。本文通过分析一个典型的 PLC 程序,详细阐述了斜坡生成器的工作原理、关键计算公式以及实际应用场景。通过对该程序的拓展思考,可以进一步提升其应用价值,满足更多工业自动化控制需求。

往期回顾

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

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

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

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

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

图片

2025年05月