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

[复制链接]
查看69254 | 回复0 | 2024-3-15 09:39:48 | 显示全部楼层 |阅读模式
在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.下图(真伪随机数形成的图)直观说明,如果数据够多的情况下,伪随机数的产生是有规律的。





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

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


    【视频课程】Codesys V3.5系列入门课程【视频课程】Codesys SoftMotion软运动控制基础课程【视频课程】Codesys SoftMotion电子齿轮课程【视频课程】Codesys SoftMotion电子凸轮CAM课程【视频课程】Codesys Library自定义库的制作
    Codesys V3.5系列最全免费公开资料汇总

    十大常用滤波算法(ST语言)

    集成Chat GPT的PLC长啥样?

    2023年度TOP 10的PLC编程书籍分享

    HMI&SCADA之间的异同?

    MC_Power.status = FALSE,轴也可以运动?

    ST语言学习资料汇总

    TCP:Ping 命令在Codesys中如何使用?

    如何判断CODESYS PLC选型是否合适?

    PLC 常见的通讯接口和协议有哪些?

    第三方EtherCAT总线伺服驱动配置




--------END--------

喜欢本文还请大家分享及右下角“点赞”和“在看”

本帖子中包含更多资源

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

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

本版积分规则