技术论坛

博图随机函数全局库

作者 主题
游侠

经验值: 346
发帖数: 5
精华帖: 2
主题:【分享】博图随机函数全局库
推荐帖


只看楼主 楼主 2022-02-10 16:14:56

软件版本:TIA15.1

功能:用户设定随机数范围后,可输出随机数。

此函数参考西门子官方库修改得来。简化成最简单的了。

封装:

代码如下:

//Status Codes:

// 16#7000:  No current jobs

// 16#0000:  Job finished; Note: There is no "Busy"-Status because the block

//           is finished within a single cycle

// 16#8200:  maxValue is samller then minValue 

//=============================================================================


//Set "No current job" status

#error := false;

#statusID := #ERROR_IN_THIS_BLOCK;

#status := #NO_CURRENT_JOBS;


//Check if the maximal Value is less than the minimal value

IF (#minValue > #maxValue) THEN

  #error := true;

  #statusID := #ERROR_IN_THIS_BLOCK;

  #status := #MAX_LESS_MIN;

  #生成随机数 := 0;

  RETURN;

END_IF;


//Read system time

#tempTimeStatus := RD_SYS_T(#tempTime);


IF (#tempTimeStatus <> 0) THEN

  #error := true;

  #statusID := #ERROR_RD_SYS_T;

  #status := INT_TO_WORD(#tempTimeStatus);

  #生成随机数 := 0;

  RETURN;

END_IF;


//Callculate a random-start-value depending on the time

#tempRandomValue.%B1 := #tempTime.NANOSECOND.%B0;

#tempRandomValue.%B0 := #tempTime.NANOSECOND.%B1;


//adapt the calculated random number to the given number span

#tempNormReal := NORM_X(MIN := 1, VALUE := #tempRandomValue.%B1, MAX := 255);

#生成随机数 := SCALE_X(MIN := #minValue, VALUE := #tempNormReal, MAX := #maxValue);


#status := #NO_ERROR;


附件为随机函数的全局库文件

随机函数全局库.rar

编写不易 点个赞呗



仰天大笑出门去我辈岂是蓬蒿人
以下网友喜欢您的帖子:

  
重要声明:

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

帖子链接:https://www.ad.siemens.com.cn/club/bbs/post.aspx?a_id=1747343&b_id=66&s_id=0&num=19

至圣

经验值: 24344
发帖数: 4846
精华帖: 6
回复:博图随机函数全局库
推荐帖


只看楼主 1楼 2022-02-10 21:52:37

 厉害了我的稻草人朋友,


谨慎低调
以下网友喜欢您的帖子:

  
至圣

经验值: 26304
发帖数: 5838
精华帖: 5
回复:博图随机函数全局库
推荐帖


只看楼主 2楼 2022-02-11 10:09:28

介绍一下用途好吗。


天天学习,天天进步.
以下网友喜欢您的帖子:

  
奇侠

经验值: 8095
发帖数: 1308
精华帖: 6
回复:博图随机函数全局库


只看楼主 3楼 2022-02-11 10:12:49

都是利用系统时间,,,


养活一团春意思,撑起两根穷骨头
以下网友喜欢您的帖子:

  
奇侠

经验值: 7133
发帖数: 1022
精华帖: 2
回复:博图随机函数全局库


只看楼主 4楼 2022-02-11 11:13:33

这个随机数生成感觉实在用处不大啊,不过还是要学习楼主的钻研精神!


心有多远路就有多远
以下网友喜欢您的帖子:

  
侠圣

经验值: 2302
发帖数: 276
精华帖: 2
回复:博图随机函数全局库


只看楼主 5楼 2022-02-14 22:01:06


感谢分享1


 
以下网友喜欢您的帖子:

  
侠客

经验值: 698
发帖数: 104
精华帖: 0
回复:博图随机函数全局库
推荐帖


只看楼主 6楼 2022-02-21 13:36:45


感谢分享+1

测试了一下,好用

//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;

        

    END_IF;

    

    

END_IF;



此后如竟没有炬火,我便是唯一的光
以下网友喜欢您的帖子:

  
奇侠

经验值: 9885
发帖数: 460
精华帖: 2
回复:博图随机函数全局库


只看楼主 7楼 2022-02-22 18:30:56


收藏,谢谢分享


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 4163
发帖数: 72
精华帖: 0
回复:博图随机函数全局库


只看楼主 8楼 2022-02-24 08:37:31


谢谢分享,已收藏,后期试验一下。


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2692
发帖数: 434
精华帖: 0
回复:博图随机函数全局库


只看楼主 9楼 2022-10-26 14:20:16


 很有用,感谢分享!


懒是人类前进的动力
以下网友喜欢您的帖子:

  
游侠

经验值: 482
发帖数: 27
精华帖: 0
回复:博图随机函数全局库


只看楼主 10楼 2022-10-29 20:11:41


好东西!学习学习


 
以下网友喜欢您的帖子:

  
侠客

经验值: 602
发帖数: 54
精华帖: 0
回复:博图随机函数全局库


只看楼主 11楼 2022-10-31 14:35:33

感谢稻草人大佬的分享


 
以下网友喜欢您的帖子:

  
hf1
奇侠

经验值: 8177
发帖数: 1454
精华帖: 3
回复:博图随机函数全局库


只看楼主 12楼 2022-10-31 16:43:55

楼主的意思是以后调用模块实现相应功能。


 
以下网友喜欢您的帖子:

  
新手

经验值: 21
发帖数: 1
精华帖: 0
回复:博图随机函数全局库


只看楼主 13楼 2022-12-15 22:37:11


使用时间不确定性


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2557
发帖数: 203
精华帖: 0
回复:博图随机函数全局库


只看楼主 14楼 2022-12-16 11:05:53


讲的真棒!!


技术无止境!
以下网友喜欢您的帖子:

  
奇侠

经验值: 8295
发帖数: 641
精华帖: 0
回复:博图随机函数全局库


只看楼主 15楼 2022-12-29 10:41:39


学习了,感谢分享


努力向上
以下网友喜欢您的帖子:

  
新手

经验值: 20
发帖数: 2
精华帖: 0
回复:博图随机函数全局库


只看楼主 16楼 2023-01-31 11:04:39

怎么下载不了啊?



 
以下网友喜欢您的帖子:

  
新手

经验值: 20
发帖数: 2
精华帖: 0
回复:博图随机函数全局库


只看楼主 17楼 2023-01-31 11:14:30

有用,但下载不了


 
以下网友喜欢您的帖子:

  
侠圣

经验值: 2321
发帖数: 407
精华帖: 2
回复:博图随机函数全局库


只看楼主 18楼 2023-01-31 14:12:02


感谢分享!


6
以下网友喜欢您的帖子:

  
游民

经验值: 65
发帖数: 9
精华帖: 0
回复:博图随机函数全局库


只看楼主 19楼 2023-05-18 17:07:15

//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的数,在设定的取值范围内按比例生成随机数。不知道符合不符合完全随机要求。



 
以下网友喜欢您的帖子:

  
  • 上一页
  • 1
  • 下一页
收起
博图随机函数全局库
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。