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

引言

在自动化控制系统中,PLC(可编程逻辑控制器)不仅用于控制工业设备,还可以用于生成测试信号以验证和调试系统性能。本文将介绍一个名为 FB_SignalGenerator 的 PLC 功能块,它能够根据不同需求生成多种波形信号,如正弦波、方波和三角波。通过调整波形类型、频率、幅度和偏移量,工程师能够在开发和测试阶段提供所需的标准信号,为系统调试提供强有力的支持。

1  程序代码及介绍

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

  • FUNCTION_BLOCK FB_SignalGenerator
  • VAR_INPUT   
  •         Enable : BOOL;         // 使能   
  •         WaveType : INT := 1;        // 波形类型:1=正弦,2=方波,3=三角波   
  •         Frequency : REAL;      // 频率(Hz)   
  •         Amplitude : REAL := 1.0; // 幅度   
  •         Offset : REAL := 0.0;  // 偏移
  • END_VAR
  • VAR_OUTPUT   
  •         Signal : REAL;         // 输出信号
  • END_VAR
  • VAR   
  •         TimeCounter : REAL := 0.0; // 时间计数器   
  •         Phase : REAL;          // 相位   
  •         Step : REAL;           // 每一步的时间增量
  • END_VAR
  • // 应用:生成测试信号,用于调试
  • // 计算每一步的时间增量(假设扫描周期为10ms)
  • Step := 0.01 * Frequency;  // 0.01秒 = 10ms扫描周期
  • IF Enable THEN    
  •         // 更新相位   
  •         TimeCounter := TimeCounter + Step;   
  •         Phase := TimeCounter - DINT_TO_REAL( TRUNC(TimeCounter)); // 取小数部分,0-1   
  •         CASE WaveType OF        
  •                 1:  // 正弦波           
  •                     Signal := Amplitude * SIN(Phase * 2 * 3.14159) + Offset;        
  •                 2:  // 方波           
  •                     IF Phase < 0.5 THEN               
  •                           Signal := Amplitude + Offset;           
  •                     ELSE               
  •                           Signal := -Amplitude + Offset;           
  •                     END_IF        
  •                 3:  // 三角波           
  •                     IF Phase < 0.5 THEN               
  •                           Signal := 4 * Amplitude * Phase - Amplitude + Offset;           
  •                     ELSE               
  •                           Signal := -4 * Amplitude * (Phase - 0.5) + Amplitude + Offset;           
  •                     END_IF   
  •         END_CASE
  • ELSE   
  •         Signal := 0.0;
  • END_IF

2  程序介绍

输入变量

  • Enable:启用信号输出。如果为 TRUE,功能块将开始生成信号;为 FALSE 时,输出信号为 0。

  • WaveType:指定波形类型。1 代表正弦波,2 代表方波,3 代表三角波。

  • Frequency:信号的频率,以赫兹(Hz)为单位。它决定了信号周期的长短。

  • Amplitude:信号的幅度,默认为 1.0。幅度控制信号的最大强度。

  • Offset:信号的偏移量,默认值为 0。偏移量可将信号在垂直方向上平移。

输出变量

  • Signal:生成的信号值,根据输入参数计算并输出。

内部变量

  • TimeCounter:用于计时的变量,跟踪时间进度。

  • Phase:信号的相位,控制波形的生成。

  • Step:根据频率计算的时间增量,控制信号生成的精度。

功能实现

程序的核心是根据频率生成波形信号,逐步更新相位,并根据选定的波形类型计算信号值。程序首先计算每个采样周期的时间增量 Step,然后根据波形类型计算不同的信号输出。支持的波形类型包括:

  • 正弦波:通过 SIN 函数计算相位的正弦值。

  • 方波:相位在 0 到 1 之间,前半周期输出最大幅度,后半周期输出最小幅度。

  • 三角波:生成上下对称的线性波形,随着相位的变化逐步增加或减少。

如果 Enable 为 FALSE,则输出信号为 0。

3  应用场景

调试与测试:工程师可以使用此功能块生成各种标准波形信号,用于调试控制系统和检测设备的响应。

自动化控制系统:在一些需要模拟真实世界信号的系统中,可以通过此功能块模拟输入信号,测试系统对不同波形的处理能力。

信号生成与实验:在实验室环境中,可以用来生成频率、幅度和偏移量可调的信号,帮助验证实验设备的性能。

4  拓展思考

波形的进一步扩展:目前支持的波形有三种,未来可以扩展支持更多类型的波形,如锯齿波、噪声信号等,以适应更多应用场景。

频率自动调整:可以根据外部条件(如负载变化)自动调整信号频率,支持更智能的信号生成。

信号合成:可以将多种波形信号组合起来,生成更复杂的信号波形,用于更高精度的测试和实验。

总结

FB_SignalGenerator 是一个简单而强大的 PLC 功能块,它能够生成多种波形信号,广泛应用于系统调试、设备测试以及实验室研究。通过调整频率、幅度和偏移量,用户可以灵活控制信号的生成,满足不同的测试需求。随着需求的变化,功能块也可以进一步扩展和优化,提供更多的波形选择和智能化的信号生成。

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

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

图片

往期回顾

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

图片

2026年1月