首页 > 其他分享 >随机数生成器,支持Udint和Char两个格式

随机数生成器,支持Udint和Char两个格式

时间:2024-05-13 13:30:38浏览次数:20  
标签:Udint min max random 生成器 Char myDtl static Out

读取本地时间的纳秒时间,计算取余数得到随机数
1. 变量声明,定义

2. 模式选择,支持UDINT和CHAR

  • CHAR仓库定义了72个字符,由自定的字符串长度决定的
  • char没有从0开始;PLC字符串长度为(2+n);第一个byte保存的是最大长度,第二个是当前长度,后面才是用户指定的长度,如string[78]总占用长度80个bytes。
//mode transfer
IF NOT #udintORchar THEN
    #min := #In_min;
    #max := #In_max;
ELSE
    #min := 1;
    #max := 72;
END_IF;

3. UDINT随机数生成

//udint random
IF #min >= 0 AND #max > #min THEN
    #return_int := RD_LOC_T(#myDtl);
    #random_static := (#myDtl.NANOSECOND * 7 + #myDtl.SECOND) MOD #max;
    IF #random_static < #min THEN
        #random_static := #min;
    END_IF;
    #Out_udint_random := #random_static;
    #Out_status := #ERROR_CODE1;
ELSIF #min < 0 THEN
    #Out_status := #ERROR_CODE2;
ELSIF #min >= #max THEN
    #Out_status := #ERROR_CODE3;
END_IF;

4. 基于UDINT的结果,寻址到字符仓库中的对应字符

//char random
#CharRepertoire :=
'qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM-=[];_>/<!';
#Out_char_random := #CharRepertoire[#random_static];

5. 整体代码如下

//mode transfer
IF NOT #udintORchar THEN
    #min := #In_min;
    #max := #In_max;
ELSE
    #min := 1;
    #max := 72;
END_IF;

//udint random
IF #min >= 0 AND #max > #min THEN
    #return_int := RD_LOC_T(#myDtl);
    #random_static := (#myDtl.NANOSECOND * 7 + #myDtl.SECOND) MOD #max;
    IF #random_static < #min THEN
        #random_static := #min;
    END_IF;
    #Out_udint_random := #random_static;
    #Out_status := #ERROR_CODE1;
ELSIF #min < 0 THEN
    #Out_status := #ERROR_CODE2;
ELSIF #min >= #max THEN
    #Out_status := #ERROR_CODE3;
END_IF;

//char random
#CharRepertoire :=
'qwertyuiopasdfghjklzxcvbnm1234567890QWERTYUIOPASDFGHJKLZXCVBNM-=[];_>/<!';
#Out_char_random := #CharRepertoire[#random_static];

标签:Udint,min,max,random,生成器,Char,myDtl,static,Out
From: https://www.cnblogs.com/xiacuncun/p/18189026

相关文章

  • LeetCode 3009. Maximum Number of Intersections on the Chart
    原题链接在这里:https://leetcode.com/problems/maximum-number-of-intersections-on-the-chart/description/题目:Thereisalinechartconsistingof n pointsconnectedbylinesegments.Youaregivena 1-indexed integerarray y.The kth pointhascoordinates......
  • pycharm
    1、打开File->Settings->VersionControl->Git,在PathtoGitexecutable处选择git的安装位置2、pip3install -rrequirements/base.txt-ihttps://repo.huaweicloud.com/repository/pypi/simple/3、File>>NewProject>>NewenvironmentusingVirtu......
  • 七十八、fiddler、Charles请求重定向---路由转发Map Remote
    一、fiddlerfiddler、charles的MapRemote(请求重定向)功能,说白了就是你本来要请求A接口拿数据,重定向后,你实际请求的是B接口,拿到的是B接口返回的数据。     二、Charles......
  • 利用pycharm对分布式命令的设备进行debug(Vision mamba)
    背景介绍接着上次的visionmamba初步跑通,想进一步了解内部代码运行的过程,模型的工作机理,因此打算利用pycharm进行断点调试(即debug),花了半天时间终于学会了如何将控制台命令的形式传入pycharm中进行传参。在此,感谢大佬的博客,这里只是具体结合本机安装wsl2对大佬的博客进行......
  • FlexibleButton - 一个小巧灵活的C语言按键处理库+SerialChart - 能将串口数据实时绘
    1、FlexibleButton-一个小巧灵活的C语言按键处理库FlexibleButton是一个基于标准C语言的小巧灵活的按键处理库,支持单击、连击、短按、长按、自动消抖,可以自由设置组合按键,可用于中断和低功耗场景。项目主页:https://github.com/murphyzhao/FlexibleButton该按键库解耦了......
  • Echarts设置饼状图保证你看的明明白白
    简单的饼状图<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>ECharts-动画</title>......
  • PyCharm编辑器结合Black插件,轻松实现Python代码格式化
    1、简介使用Black对Python代码进行格式化,可使代码看起来更美观。但是,随着项目规模不断变大,对每个文件运行Black变得很繁琐。能否在文件保存后立即运行Black呢?本文就来介绍在PyCharm中实现这一目标的方法。2、安装Black首先,在虚拟环境中安装Black。$pipinstallblack ......
  • echarts折线鼠标悬浮时只显示了一条线的数据
    项目中对悬浮的值formatter进行了唯一给值,并没有针对每一个进行赋值问题代码大致为:formatter:(params)=>{return`${params[0].name}<br/>${params[0].值1}${params[0].值2}:${params[0].value==0?"-":Number(params[0].value).toLoca......
  • Python高级之生成器
    【一】什么是生成器Python中的生成器是一种特殊的迭代器可以在需要时生成数据,而不必提前从内存中生成并存储整个数据集通过生成器,可以逐个生成序列中的元素,而无需一次性生成整个序列【二】生成器的创建方式【1】列表推导式#列表生成式生成列表num_list=[iforiinra......
  • 一篇文章掌握Python中多种表达式的使用:算术表达式、字符串表达式、列表推导式、字典推
    Python中的表达式可以包含各种元素,如变量、常量、运算符、函数调用等。以下是Python表达式的一些分类及其详细例子:1.算术表达式算术表达式涉及基本的数学运算,如加、减、乘、除等。#加法表达式sum=3+5#结果为8#乘法表达式product=4*6#结果为24#复......