[西门子] 博途TIA中实现随机数生成的一种实践

[复制链接]
查看73378 | 回复0 | 2024-4-15 09:49:34 | 显示全部楼层 |阅读模式
【写在前面】

      随机数可以用于模拟显示或者在某种特定情况下的需求,一般来说人机界面或者上位机都可以通过相关的脚本来实现。

【程序设计思路】

   程序思维来自西门子论坛。

  建立一个FC功能,采用SCL编辑:

IF #Change_p=1 THEN

    IF #Change_index<100THEN

        #Change_index := #Change_index + 1;

    END_IF;

    IF #Change_index >= 100THEN

        #Change_index := 1;

          END_IF;

  END_IF;

#TEMP1:= NORM_X(MIN := 0, VALUE := #Change_index, MAX := 255);

#Random_OUT:= SCALE_X(MIN := #Range_MIN, VALUE := #TEMP1, MAX := #Range_MAX);



通过修改功能里面的数据可以调整相关产生随机数不同。

测试:



change_p采用的是时钟的秒钟,我们可以调整这个脉冲,从而控制变化频率。

修改功能

"R_TRIG_DB11"(CLK:="Clock_1Hz",

              Q=>#P1);

IF #P1 THEN

    #RT_SEC := #RT_SEC + 1;

END_IF;

IF #RT_SEC>#Change_RTsetsec THEN

    IF #Change_index < 100 THEN

        #Change_index := #Change_index + 1;

    END_IF;

    IF #Change_index >= 100 THEN

        #Change_index := 1;

    END_IF;

END_IF;

IF #RT_SEC>#Change_RTsetsec THEN

    #RT_SEC := 0;

END_IF;

#TEMP1:= NORM_X(MIN := 0, VALUE := #Change_index, MAX := 255);

#Random_OUT:= SCALE_X(MIN := #Range_MIN, VALUE := #TEMP1, MAX := #Range_MAX);

测试:



通过设置采样时间秒,当达到采样间隔后,随机数才会产生。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
您需要登录后才可以回帖 登录 | 注册哦

本版积分规则