CODESYS 实战:实现随机数生成功能

引言

在自动化控制系统中,随机数生成器常用于模拟测试、随机选择等场景。本文将通过一个简单的 CODESYS 函数块示例,讲解如何实现一个可配置上下限的随机数生成器。

1  程序设计思路

我们的目标是创建一个可以在特定范围内生成随机数的函数块。该函数块接受触发信号和上下限参数,输出一个在范围内的随机数。为了确保随机性,我们将使用当前时间初始化种子,并在每次触发时更新种子。

2  程序代码

  • FUNCTION_BLOCK PM_RandomNumber
  • VAR_INPUT
  •      Trigger : BOOL; (* 上升沿触发信号 *)
  •          UpperLimit : REAL; (* 随机数上限 *)
  •          LowerLimit : REAL; (* 随机数下限 *)
  • END_VAR
  • VAR_OUTPUT
  •      RandomNumber : REAL; (* 输出的随机数 *)
  • END_VAR
  • VAR
  •      LastTrigger : BOOL; (* 上一次的触发信号状态 *)
  •      RandomSeed : DWORD; (* 随机种子 *)
  • END_VAR
  •  
  • (*
  • 版本记录:
  • 版本           日期           作者
  •  V1      2024-3-09     工控老王
  • *)
  •  
  • // 初始化随机种子
  • IF RandomSeed = 0 THEN
  •        RandomSeed := TO_DWORD(TIME_TO_TOD(TIME())); // 使用当前时间作为种子
  • END_IF
  •  
  • // 检测上升沿
  • IF Trigger AND NOT LastTrigger THEN
  •       // 生成 0 到 1 之间的随机数
  •       RandomSeed := RandomSeed * 1664525 + 1013904223;
  •       RandomNumber := TO_REAL(RandomSeed MOD 10000) / 10000.0;
  •  
  •       // 缩放到指定的上下限范围
  •       RandomNumber := LowerLimit + RandomNumber * (UpperLimit - LowerLimit);
  • END_IF
  •  
  • // 更新上一次的触发信号状态
  • LastTrigger := Trigger;

3  代码解释

输入输出变量:

  • Trigger:控制随机数生成的触发信号。

  • UpperLimit 和 LowerLimit:定义生成随机数的范围。

  • RandomNumber:输出结果。

内部变量:

  • LastTrigger:用于检测信号的上升沿。

  • RandomSeed:用于生成随机数的种子。

随机数生成逻辑:

  • 初始时,使用当前时间初始化随机种子。

  • 在检测到触发信号的上升沿时,更新随机种子并生成随机数。

  • 随机数缩放至指定范围内。

4  应用场景

该随机数生成器可以用于模拟动态输入、创建测试用例、或者在需要随机选择的场合。通过配置上下限,用户能够灵活地调整输出范围。

5  拓展思考

在实际应用中,可以考虑使用不同的随机种子生成算法以提高随机性,例如:PLC扫描时间,PLC循环计数或外部模拟量传感器,如温湿度压力等。还可以实现对种子的外部设置功能,从而在不同的运行场景中实现可重复的随机序列。

6  开源版本说明

该程序遵循开源原则,任何人都可以使用、修改和分发此代码。在使用前应进行充分的测试,修改代码时,请秉持分享精神,将您的改进和成果进行分享,以便更多人受益。

总结

通过本文的介绍,我们实现了一个基本的随机数生成器,并探讨了它的应用场景和可能的拓展方向。这为在 CODESYS 环境中实现更复杂的功能提供了一个良好的起点。希望这能为您的项目带来帮助。

往期回顾

CODESYS 的简介及环境安装

在 CODESYS 平台,创建你的第一个项目

介绍 CODESYS 编程软件中的变量

CODESYS 编程软件基本语法和运算符介绍

CODESYS 的ST语言实战 - 主备切换及保养提示解决方案

CODESYS 中的字符串及其基本操作

PLC 数组处理难?看这一篇就够了

CODESYS 中的特殊数据类型 - 指针

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

图片

2024年09月

Tags: