只需一步,快速开始
微信扫码登录
1 | 题目
利用PLC系统时间构造一个生成随机数的函数(范围0-1之间的浮点数)。本例摘自西门子LGF通用函数库中的一个基本随机数生成函数。
2 | 设计分析
读取PLC的系统时间会得到一个长度12字节的数据类型为DTL的日期和时间值,该值的8-11四个字节为纳秒,由于纳秒的快速变化很难预测到下一个值是什么,认为其为一个随机数。
3 | 创建功能或功能块
创建功能块FB,命名为“RandomNumReal”。
4 | 定义接口变量
具体接口变量定义见下图:
5 | 程序代码
编写程序代码。如下图:
程序中注意到纳秒占用了四个字节,随机值并未直接使用纳秒的无符号双整型数(UDINT),而是将四个字节进行了反序,这个是因为纳秒最大值为999_999_999,而无符号双整型数(UDINT)最大值是4_294_967_295,所以如果不进行反序直接使用的话映射到0-1之间得到的最大随机数为0.2328,不能满足要求。如果对999_999_999进行反序最大值就变为4_288_457_139,这个就非常接近4_294_967_295,这样得到的最大随机数为0.9985,非常接近1。需要强调的是以上生成的是随机性并不高的伪随机数,下一篇将介绍另外一种随机性稍有提高的伪随机数的生成方法。
6 | 代码测试
在循环OB中调用FB-“RadomNumReal”,调用时会自动创建背景数据块,命名为“InstRadomNumReal”,该背景数据块可以用来监视和修改数据。转至在线并监控程序。如下图:
7 | 总结
学习IF..ELSE条件语句;
学习多赋值的方法;
学习读取系统时间指令RD_SYS_T的使用方法;
-
您需要 登录 才可以下载或查看,没有账号?注册哦
举报
本版积分规则 发表回复 回帖后跳转到最后一页