每周一个编程小例子: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 转换的两种实现方案对比
每周一个编程小例子:PID 控制算法在 PLC 系统中的实现与应用
2026年1月


