Codesys 编程实现随机数字+仿照rand()原理+代码下载

2024-06-18 02:20

本文主要是介绍Codesys 编程实现随机数字+仿照rand()原理+代码下载,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、C语言中rand()随机数的演示及问题
二、同样的原理,在Codesys中实现随机数
三、codesys在线仿真验证功能
四、代码下载

一、C语言中rand()随机数的演示及问题

(1)只用rand()函数的问题
//只有rand,没有srand生成随机种子
#include<stdio.h>
#include<unistd.h>
int main()
{int i=0;for(;i<10;i++){printf("%d\n",rand()%10);//打印10个随机数,随机数的范围是0--9sleep(1);//延时}return 0;
}

运行结果如下:
在这里插入图片描述

运行了2次程序:每次都能产生0到9之间的随机数,但是第2次重新运行程序产生的随机数和上次一样,这是伪随机。

(2) 添加srand生成随机种子
//有srand生成随机种子
#include<stdio.h>
#include<unistd.h>
int main()
{srand(time(NULL));int i=0;for(;i<10;i++){printf("%d\n",rand()%10);//打印10个随机数,随机数的范围是0--9sleep(1);//延时}return 0;
}

运行结果如下:
在这里插入图片描述

可以看到:2次运行结果完全不同。消除了伪随机

(3) 推断原理
  • 在rand函数的内部,是通过一个公式计算出一个值作为随机值,下次再调用rand的时候,再把这个随机值作为参数传给这个公式计算出一个新的随机值,周而复始。
  • 在C库中,是通过一个静态全局变量来作为“种子”,而这个“种子”的值是通过srand函数改变的,如果不写srand函数,这个“种子”值默认赋值为1。这就解释了“为何不写srand函数,rand函数就会生成伪随机数”,因为程序只要重新开始运行,“种子”值就会被默认赋值为1,那么通过公式算出来的序列肯定就一直相同了。
(4) C语言代码模拟实现rand和srand
#include<stdio.h>
#include<unistd.h>static unsigned long next=1;//静态全局变量,作为种子
void my_srand(unsigned long seed)//通过传不同的参数更改种子值,一般传time(NULL)
{next=seed;
}int my_rand(void)//将srand更改过的种子值通过公式计算出结果作为随机值
{next = next * 1103515245 + 12345;return((unsigned)(next/65536) % 32768);
}int main()
{my_srand(time(NULL));int i=0;for(;i<10;i++){printf("%d\n",my_rand()%10);sleep(1);}return 0;
}

运行结果如下:
在这里插入图片描述

可以看到,运行正常

二、同样的原理,在Codesys中实现随机数

1 平台说明

  • 编程软件: Codesys V3.5 SP19 Patch3 (3.5.19.30)
  • 运行设备:PC电脑
  • 编程语言: ST语言

2 工程创建流程

(1) 新建Codesys工程,依次点击【文件】—【新建工程】—【标准工程】— 输入名称,如下图所示

请添加图片描述

(2) 设备可以任意选,这里选择【CODESYS Control Win V3】,编程语言选择【结构化文本(ST)】,点击【确定】

请添加图片描述

(3) 右键点击【Application】—【添加对象】—【Pou】

请添加图片描述

(4) 【名称】为FB_Rand , 【类型(T)】为功能块 ,【实现语言】为结构化文本(ST)

请添加图片描述

(5) 在功能块FB_Rand中,编写程序随机数功能

每次启动时,获取系统时间给种子赋初始值,这样能保证每次启动,种子的初始值不一样
在这里插入图片描述

三、codesys在线仿真验证功能

(1) 在PLC_PRG中,调用FB_Rand功能块,编写测试程序,验证效果

在这里插入图片描述

(2) 在线仿真

请添加图片描述

四、代码下载

点击【这里】,获取完整代码

请添加图片描述

这篇关于Codesys 编程实现随机数字+仿照rand()原理+代码下载的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1071040

相关文章

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

常用的jdk下载地址

jdk下载地址 安装方式可以看之前的博客: mac安装jdk oracle 版本:https://www.oracle.com/java/technologies/downloads/ Eclipse Temurin版本:https://adoptium.net/zh-CN/temurin/releases/ 阿里版本: github:https://github.com/

hdu4407(容斥原理)

题意:给一串数字1,2,......n,两个操作:1、修改第k个数字,2、查询区间[l,r]中与n互质的数之和。 解题思路:咱一看,像线段树,但是如果用线段树做,那么每个区间一定要记录所有的素因子,这样会超内存。然后我就做不来了。后来看了题解,原来是用容斥原理来做的。还记得这道题目吗?求区间[1,r]中与p互质的数的个数,如果不会的话就先去做那题吧。现在这题是求区间[l,r]中与n互质的数的和

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor