liangyangli
级别: 家园常客
精华主题: 0
发帖数量: 18 个
工控威望: 560 点
下载积分: 848 分
在线时间: 183(小时)
注册时间: 2009-11-25
最后登录: 2014-09-03
查看liangyangli的 主题 / 回贴
楼主  发表于: 2013-04-05 01:04
  S7200  PLC都没有随机函数指令,但有时工艺还是需要的,如何生成呢?求高手指教

cvlsam
富士低压,POD(觸摸屏),PLC专卖
级别: VIP会员

精华主题: 3 篇
发帖数量: 6770 个
工控威望: 38371 点
下载积分: 3262 分
在线时间: 9513(小时)
注册时间: 2006-09-13
最后登录: 2024-11-26
查看cvlsam的 主题 / 回贴
1楼  发表于: 2013-04-05 08:02
先描述一下何种工艺需要随机数,难道双色球?然后我告诉你如何生成伪随机数的方法。

Good Luck~
月泽
时间嘛!就象乳沟,挤一挤总归还是有的!
级别: 工控侠客
精华主题: 1 篇
发帖数量: 1285 个
工控威望: 2921 点
下载积分: 4511 分
在线时间: 642(小时)
注册时间: 2009-03-28
最后登录: 2024-06-12
查看月泽的 主题 / 回贴
2楼  发表于: 2013-04-05 20:26
我感觉  楼主在搞什么赌博机啊   哈哈

揭开神秘的工控面纱
QQ:2631001081
Emal:strong20671713@163.com
shfxfa
级别: 家园常客
精华主题: 0
发帖数量: 640 个
工控威望: 810 点
下载积分: 2908 分
在线时间: 411(小时)
注册时间: 2011-09-09
最后登录: 2013-11-20
查看shfxfa的 主题 / 回贴
3楼  发表于: 2013-04-06 11:53
产生随机数的话应该是搞赌博机,而且这个随机数是可控的,我以前有个同事用三菱的PLC加触摸屏做过,有大奔宝马奥迪捷达啥的。
zedy888
回收 西门子PLC,存储卡,触摸屏,变频器
级别: 家园常客
精华主题: 0
发帖数量: 1256 个
工控威望: 709 点
下载积分: 750 分
在线时间: 1200(小时)
注册时间: 2010-09-23
最后登录: 2024-11-13
查看zedy888的 主题 / 回贴
4楼  发表于: 2013-04-06 17:41
恰好本人也对此有过研究,现贴出供大家研究,可以用状态图监控效果。
伪随机数的产生,现在用得较多的是“线性同余法"  公式 = R(n+1) = [R(n) * a + b]  mod  c  为使随机数分布尽量均匀,a、b 均为质数, c 一般取值域内的最大值(mod 是求余数)  从这个式了可以看出,每次产生的随机数都跟上一次产生的数有关系,那么,第一个数是怎么来的呢?这就是线性同余法中必须用的的”种子",也就是说,给定某个种子后,所产生的随机数序列是固定的,在计算机编程中,一般使用系统时间来初始化种子,就是前面代码中的 srand((unsigned)time(NULL)); 这一句了。因为每次运行程序的时间肯定不一样,所以产生散列肯定也不一样,从而达到“随机”的目的。  a,b,c 的取值我用的是 a=3373, b=1, c=32768 下面的两个子程序是我在我的项目(S7-200 226)中产生随机的系统编号用的,因为我的编号中只有4位数采用了随机数,所以下面的程序中用的是整型,最大范围为32767。如果需要更宽范围的随机数,可以采用双字类型,并适当修改程序,代码很简单,就是将上面那个表达式用 S7-200 的指令表示出来就行了。  这两个子程序是从 MicroWIN V4.0 中导出来的,可以将它们用文本编辑器保存为 AWL 文件后直接导入 MicroWIN。  使用时在第一个扫描周期调用  Srand 初始种子,需要随机数的地方调用 Random Random 有了个最大范围参数,可以限制生成的随机数的最大范围,比如我只需要4位随机数,所以一般这样调用   CALL  Random, 10000, vw0,生成的数就在 0-9999 范围内  下面是代码: SUBROUTINE_BLOCK Srand:SBR17 TITLE=初始化随机数种子 //  // 直接使用系统时钟的分秒来作为种子 VAR_OUTPUT seed:WORD; END_VAR BEGIN Network 1  LD     SM0.0  TODR   VB1990  Network 2  LD     SM0.0 BTI    VB1994, AC1 SLW    AC1, 8  BTI    VB1995, AC3 +I     AC3, AC1  MOVW   AC1, LW0  END_SUBROUTINE_BLOCK  SUBROUTINE_BLOCK Random:SBR16 TITLE=随机数发生器 //  // 线性同余法获取伪随机数,范围:0~32767 //  // seed = (seed * 3373 + 1) % 32768; //  VAR_INPUT wMax:WORD; // 最大范围 END_VAR VAR_OUTPUT wOut:WORD; END_VAR BEGIN Network 1  // wSeed * 3373 + 1  => AC1 LD     SM0.0  ITD    VW1940, AC1 *D     3373, AC1 INCD   AC1  Network 2  // AC1 mod 32768 => wSeed LD     SM0.0  MOVD   AC1, AC3 /D     +32768, AC3 *D     32768, AC3 -D     AC3, AC1  DTI    AC1, VW1940  Network 3  // wSeed / 32768 * wMax => wOut LD     SM0.0 DTR    AC1, AC1 /R     32768.0, AC1  ITD    LW0, AC3 DTR    AC3, AC3 *R     AC3, AC1  ROUND  AC1, AC1 DTI    AC1, LW2  END_SUBROUTINE_BLOCK
[ 此帖被zedy888在2013-04-06 17:50重新编辑 ]
长期回收西门子 PLC  变频器,触摸屏,成套伺服等,电微:I8I2I923860注明二手电气