恭喜,你发布的帖子
发布于 2023-05-18 17:07:15
19楼
//Check if the maximal Value is less than the minimal value
IF (#minValue > #maxValue) THEN
#error := true;
#生成随机数 := 0;
ELSE
#R_TRIG_Instance(CLK := #start);
IF #R_TRIG_Instance.Q THEN
#tempTimeStatus := RD_SYS_T(#tempTime);
IF (#tempTimeStatus <> 0) THEN
//读取失败
#error := true;
#生成随机数 := 0;
ELSE
#error := FALSE;
//读取成功
//Callculate a random-start-value depending on the time
#tempRandomValue.%B1 := #tempTime.NANOSECOND.%B0;
#tempRandomValue.%B0 := #tempTime.NANOSECOND.%B1;
//
#tempNormReal := NORM_X(MIN := 1, VALUE := #tempRandomValue.%B1, MAX := 255);
#生成随机数 := SCALE_X(MIN := #minValue, VALUE := #tempNormReal, MAX := #maxValue);
//
#start := 0;
END_IF;
上面标色那句完全没用上,后面NORM_X使用的是高字节。
//Check if the maximal Value is less than the minimal value
IF (#minValue > #maxValue) THEN
#error := true;
#生成随机数 := 0;
ELSE
#R_TRIG_Instance(CLK := #start);
IF #R_TRIG_Instance.Q THEN
#tempTimeStatus := RD_SYS_T(#tempTime);
IF (#tempTimeStatus <> 0) THEN
//读取失败
#error := true;
#生成随机数 := 0;
ELSE
#error := FALSE;
//读取成功
//Callculate a random-start-value depending on the time
#tempRandomValue.%B1 := #tempTime.NANOSECOND.%B0;
#tempRandomValue.%B0 := #tempTime.NANOSECOND.%B1;
//
#tempNormReal := NORM_X(MIN := -32768, VALUE := #tempRandomValue, MAX := 32767);
#生成随机数 := SCALE_X(MIN := #minValue, VALUE := #tempNormReal, MAX := #maxValue);
//
#start := 0;
END_IF;
修改成这样测试了一下可以,将两个字节组成的int数据标准化后生成0-1.0的数,在设定的取值范围内按比例生成随机数。不知道符合不符合完全随机要求。
请填写推广理由:
分享
只看
楼主