读取本地时间的纳秒时间,计算取余数得到随机数
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