用户登陆
免费注册
找回密码
站内短信
论坛搜索
工控下载
用户名
密码
输入验证码:
发财
综合讨论
资料互助
程序样例
三菱工控
西门子区
欧姆龙区
触摸屏区
工控人家园
西门子工控论坛
如何让S7-200产生一个随机数??
上一主题
下一主题
liangyangli
级别: 家园常客
发送短信
加为好友
精华主题:
0
发帖数量:
18 个
工控威望:
560 点
下载积分:
848 分
在线时间: 183(小时)
注册时间:
2009-11-25
最后登录:
2014-09-03
查看liangyangli的
主题
/
回贴
楼主
发表于: 2013-04-05 01:04
全看
|
小
中
大
S7200 PLC都没有随机函数指令,但有时工艺还是需要的,如何生成呢?求高手指教
分享
zedy888
回收 西门子PLC,存储卡,触摸屏,变频器
级别: 家园常客
发送短信
加为好友
QQ联系
精华主题:
0
发帖数量:
1256 个
工控威望:
709 点
下载积分:
750 分
在线时间: 1200(小时)
注册时间:
2010-09-23
最后登录:
2024-11-13
查看zedy888的
主题
/
回贴
1楼
发表于: 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注明二手电气
分享
上一主题
下一主题
工控人家园
西门子工控论坛
如何让S7-200产生一个随机数??
http://www.ymmfa.com
访问内容超出本站范围,不能确定是否安全
继续访问
取消访问