[CodeSys] CODESYS中如何产生随机数??

[复制链接]
查看61 | 回复0 | 2025-3-25 07:50:34 | 显示全部楼层 |阅读模式

在CODESYS程序开发中,可能需要一些随机数来进行仿真模拟、小游戏开发或者加密等应用,我们这里和大家共同探讨随机数。



两种方式


方式一:自定义函数实现

自己根据随机数的定义和产生原理来自定义FUNCTION。根据网络的资源,主要有以下几种(具体不做介绍,大家自行搜索):

  • 平方取中法

  • 线性同余法

  • 梅森旋转算法


方式二:CODESYS自带的库或者第三方库函数实现

利用CODESYS自带的库或者第三方库函数直接调用。这里我们重点讨论下。

CODESYS库:SM3_Shared,4.9.0.0

关于库的添加和使用具体方法可以参考入门课程介绍。


添加完成后,可以选择RndI和RndI_Range这两个函数功能块来获取随机数。区别主要在于RndI_Range可以定义随机数产生范围中的最小值和最大值,而RndI只能在0和最大值间产生。


OSCAT_Basic第三方库

关于这个库的说明和下载链接参考往期文章:

OSCAT自动化技术开源社区源代码分享

这个库比自带的SM3_Shared区别在于,产生的随机数类型不同,RDM返回的值是Real类型,而且是FUCTION,调用更加方便。具体的产生随机数的源代码也可以清楚了解:


伪随机数


我们注意到上述函数的说明中出现的pseudo-random,翻译过来就是伪随机数。对于第一次了解这个概念,我们也搜索到相关的知识,分享如下:


针对伪随机数,相关的总结如下:


1.什么是随机数?通俗说法就是随机产生一个数,这个数预先不能计算出来,并且每个数字出现的概率是一样的。随机数必须满足以下两个条件:

  • 不可计算性。即在随机数产生前,不能通过任何方式计算出来。

  • 机会均等性。即需要保证每个数出现的概率是相等的。


2.真伪随机数目前学界划分真伪随机数的方式非常简单,一句话就能说明白,凡是用一定的算法使用程序生成的都是伪随机数,通过物理现象产生的随机数才是真随机数


3.下图(真伪随机数形成的图)直观说明,如果数据够多的情况下,伪随机数的产生是有规律的。

也就是说,只要给出足够多的伪随机数数据,是有可能逆推产生随机数的算法的。

上述只是简单的说明,详尽的内容大家自行网上搜寻,欢迎各位探讨。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则