一个简单的随机数生成器

已锁定

shine

  • 帖子

    8944
  • 精华

    39
  • 被关注

    153

论坛等级:至圣

注册时间:2003-06-06

普通 普通 如何晋级?

一个简单的随机数生成器

10161

20

2020-03-03 12:41:48

star star star star

有时候会要用到随机数,但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之间


一个简单的随机数生成器 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-1200系列

共有13037条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

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