课程中心
HOME
课程中心
正文内容
plc编程随机指令 西门子SCL编程实例——产生随机数的算法
发布时间 : 2025-03-18
作者 : 小编
访问数量 : 23
扫码分享至微信

西门子SCL编程实例——产生随机数的算法

今天这篇文章给大家介绍下我编写的产生随机数的函数。

函数FC5006_RandomReal可根据需要产生一个指定范围内的随机数,它采用线性同余算法产生随机数,其公式如下:

X[n+1]=(a*X[n] +c) % m

这是一个递归公式,利用X[n]产生X[n+1]。其中:

a:系数,取值范围:0<a<m;c:增量,取值范围:0<=c<m;m:模,取值范围:m>0;

说明:①m应尽可能的大,通常至少大于2^30(2的30次方);②如果m选取为2的幂(即m=2^n),则a的值通常应满足a mod 8=5;③当m和a的选取比较合理时,对于c的约束并不强,但要保证c与m互质,例如c可以选择1或11;这个递归公式中,X[n]用来产生X[n+1],因此,X[n]被称为种子。也就是说,前一个随机数是后一个随机数的种子。在实际使用时,第一个种子一般是作为参数赋值给函数的。这种递归公式计算对于C/C++等语言很适合,但是对于PLC的编程语言有所困难。因此,在实际PLC编程时,可以使用系统时间戳作为种子,即:

randomNumber=(a*seed +c) % m;

下面介绍下我编写的函数FC5006_RandomReal,它有两个输入参数:

minValue:需要产生随机数范围的最小值;maxValue:需要产生随机数范围的最大值;

三个常数:

M_MOD:公式中的m;A_FACTOR:公式中的a;C_INCREMENT:公式中的c;

所有参数如下图所示:

代码如下:

我编写了一个函数测试随机数算法,产生一个1~1000之间的实数,代码如下:

多次测试结果如下:

如果你对这个函数有任何问题,欢迎留言讨论。

我的书《西门子S7-1200/1500 PLC SCL语言编程》比较详细的介绍了SCL的编程,感兴趣的话可以看看下面的链接:

#pgc-card .pgc-card-href { text-decoration: none; outline: none; display: block; width: 100%; height: 100%; } #pgc-card .pgc-card-href:hover { text-decoration: none; } /*pc 样式*/ .pgc-card { box-sizing: border-box; height: 164px; border: 1px solid #e8e8e8; position: relative; padding: 20px 94px 12px 180px; overflow: hidden; } .pgc-card::after { content: " "; display: block; border-left: 1px solid #e8e8e8; height: 120px; position: absolute; right: 76px; top: 20px; } .pgc-cover { position: absolute; width: 162px; height: 162px; top: 0; left: 0; background-size: cover; } .pgc-content { overflow: hidden; position: relative; top: 50%; -webkit-transform: translateY(-50%); transform: translateY(-50%); } .pgc-content-title { font-size: 18px; color: #222; line-height: 1; font-weight: bold; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .pgc-content-desc { font-size: 14px; color: #444; overflow: hidden; text-overflow: ellipsis; padding-top: 9px; overflow: hidden; line-height: 1.2em; display: -webkit-inline-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; } .pgc-content-price { font-size: 22px; color: #f85959; padding-top: 18px; line-height: 1em; } .pgc-card-buy { width: 75px; position: absolute; right: 0; top: 50px; color: #406599; font-size: 14px; text-align: center; } .pgc-buy-text { padding-top: 10px; } .pgc-icon-buy { height: 23px; width: 20px; display: inline-block; background: url(https://lf3-cdn-tos.bytescm.com/obj/cdn-static-resource/pgc/v2/pgc_tpl/static/image/commodity_buy_f2b4d1a.png); } 西门子S7-1200/1500 PLC SCL语言编程从入门到精通 ¥69 购买

西门子PLC用TIA博途SCL语言写的一个产生随机实数的指令块

这是西门子的一个功能FC,我们可以用它来学习SCL语言,也可以用来分析和学习怎样做一个比较合理且完整的功能FC。

1. 在设计该功能时,先确定好,它的具体功能,比如:此例的功能是获取一个随机实数,该随机实数是可以定义在自己想要的数值范围内的,还要考虑一些错误代码的定义,该例子定义了三个错误状态码,16#7000(无当前任务)、16#0000(任务完成)、16#8200(最大值小于最小值)。 2. 这里使用一个FC块,首先定义变量。如下图:

由于变量名称很清晰地描述了变量功能,所以不逐一解释。

3. 程序段1。如下图:

块内变量初始化,三个变量分别赋值0、1、16#7000。

4. 程序段2。如下图:

检查输入范围变量,是否出现最小值大于最大值的情况。

5. 程序段3。如下图:

读系统时间,用纳秒,使用纳秒的随机性。判断读系统时间是否有误,如果有误,给状态变量赋值。

6. 程序段4。如下图:

无符号长整型数需要四个字节,每个字节和系统时间纳秒的四个字节分别对应,实际上#tempRandomValue就已经是一个随机的无符号整型数了。

7. 程序段5。如下图:

对#tempRandomValue进行标准化操作,使其变成0.0~1.0之间的一个数据,然后再逆标准化,使这个随机数产生于我们要求的最小值和最大值之间。

8. 功能调用。如下图:

要生成100.0~1000.0之间的随机数,以上为效果,每个扫描周期产生一个随机实数,监控显示随机数468.7597。

相关问答

plc用哪种信号控制电梯?

PLC控制技术加变频调速用来控制电梯。电梯是根据外部呼叫信号以及自身控制要求等运行的,而呼叫是随机的,是一个人机交互式的控制系统,当有随机的呼叫指令时,...

如何通过电脑读出PLC程序?

不管是什么PLC读取PLC程序的方法基本都一样。第一步:在电脑上安装与PLC对应的编程软件(一般买PLC时就随机带光盘,没有就网上下载)第二步:要有该PLC对应的...

行家们跪求:plc喷泉设计?,喷泉设计经常有活动吗??

[回答]使用PLC控制花式喷泉,具有使用方便、运行可靠、控制程序设计简单等优点。用SFC方法编程,可以使设计思路清晰,编程简便。若需要改变喷水花样和喷水...

【可编程控制器有哪些部分组成?各有什么特点?】作业帮

[最佳回答]可编程控制器,即PLC包括1.中央处理单元CPU:系统核心部件,由大规模或超大规模集成电路微处理芯片构成,主要完成运算控制任务,可以接受并存储从编程器...

PLC微机监控程序上,是否可修改程序。

[回答]PLC实质是一种专用于工业控制的计算机其硬件结构基本上与微型计算机相同如图所示:一.中央处理单元(CPU)中央处理单元(CPU)是PLC的控制中枢,...

加工中心怎样调首件?

8、检查数控系统和可编程控制器plc装置的设定参数是否符合随机资料中的规定数据,然后试验各主要操作功能、安全措施、常用指令的执行情况等。9、检查附件的工...

plc在自动控制范围内吗?

是的。PLC控制开关量的能力是很强的。所控制的入出点数,少的十几点、几十点,多的可到几百、几千,甚至几万点,由于它能联网,点数几乎不受限制,不管多少点都...

plc是什么?

首先感谢您提问,我从事自动化行业将近十年,每天都和PLC打交道,所以很有资历回答这个问题。从您的问题而言,什么是PLC?来进行分析说明。首先什么是PLC?可...国...

PLC继电器形式应用在什么场合?

PLC控制开关量的能力是很强的。所控制的入出点数,少的十几点、几十点,多的可到几百、几千,甚至几万点。由于它能联网,点数几乎不受限制,不管多少点都能控制...

西门子触摸屏与三菱PLC程序通讯时,触摸屏里通讯的变量怎样设...

如何在excel表格中随机生成指定范围内的一组数据,例如115-124之间的,生成的数据不带小数点的7776浏览3回答为什么Word里面的公式3.0不好用,出现许多乱码...

 olivia palermo  yico 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2025  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部