技术论坛

 一个简单的随机数生成器

返回主题列表
作者 主题
shine
至圣

经验值:19950
发帖数:8944
精华帖:39
楼主    2020-03-03 12:41:48
主题:一个简单的随机数生成器 精华帖 

有时候会要用到随机数,但PLC并没有随机数指令,网上搜了随机数算法,最常用的是线性同余法,Xn+1=(aXn+c) mod m,但是需要一个种子X0,这个种子最好也要随机,要不每次生成的序列都是一样的,一般取当前时间作为X0。既然是这样,我为啥不用当前时间作为我的随机数呢?之前的CPU,从200到400,其内部时钟分辨率都是ms,除非两次随机数间隔比较大,这个随机效果不好,但是到了1200/1500,其内部时钟的分辨率已经到了10的-10次方了,DTL类型的NANOSECOND域的范围是0~999999999,如果我只取其中的后面几位作为随机数,其效果应该还是很好的。

我做了下面的FC块,输入参数为随机数的上下限(range_hi和range_lo),输出一个包含上下限的随机数,原理就是读取当前时间到一个DTL的变量中,然后对DTL.NANOSECOND取(range_hi-  ruange_lo +1)的模。然后将余数加上range_lo。


然后自己做了一个测试程序,将产生的随机数保存到DB块的数组中,然后统计每个数字出现的次数



我是在plcsim上模拟测试的,在线后用python写了个脚本,每隔0.5+随机(0~0.5)秒对M0.0按一次CTRL+F2,使其接通,计算一次随机数,获取了11000个数据,然后统计了一下每个数出现的次数

出现次数最少80多,最多不到140,大多数落在了100到120之间


您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。