求助,SCL编程

已锁定

Sanburs

  • 帖子

    3
  • 精华

    0
  • 被关注

    2

论坛等级:游民

注册时间:2016-12-07

普通 普通 如何晋级?

求助,SCL编程

2971

13

2017-01-14 11:14:28

各位大神好,本人新手一枚,刚接触SCL编程,想编一个程序实现如下功能:

    给M区M0.0-M80.7之间的bool随机赋值。

思路是:

    从读取系统时间,取出后面两个字节(毫秒+星期),将其转为int型,判断其是否大于0,通过一个中间变量b来对M区赋值

程序如下:

FUNCTION FC15: VOID



VAR

   i,j,k:INT;

   bitNo:INT; 

   b:BOOL;

   CurDateTime:DT;  //存系统时间

   Cur_DT_Byte AT CurDateTime  :   STRUCT

        Year    :   BYTE;

        Month   :   BYTE;

        Day     :   BYTE;

        Hour    :   BYTE;

        Minute  :   BYTE;

        Second  :   BYTE;

        rand    :   INT;        //把系统时间最后两个字节当做int

             

    END_STRUCT;


END_VAR

VAR_TEMP

    temp:INT;

   END_VAR


BEGIN

 temp:=READ_CLK(CDT := CurDateTime// OUT: DATE_AND_TIME

             ); // 读取系统时间

  

    FOR bitNo:=1 TO 700 BY 1           //M0.0-M80.7(多取了一些)

    DO

        i:=bitNo DIV  8;    //M区的字节号

        j:=bitNo MOD 8;        //M区的位号

        IF Cur_DT_Byte.rand >0 THEN  //判断其是否大于0对b赋值

            b:=false;

        ELSE

            b:=true;

        END_IF;

        M[i,j]:=b;            //对M区赋值

           FOR k:=0 TO 80 BY 1 DO  

            k:=k+1; // VOID

           END_FOR;

             

     END_FOR;

   


 END_FUNCTION


现在的问题是:我想实现的是M0.0-M80.7的内容是随机的,但实际运行起来发现M0.0-M80.7会一起变化,即一起变为0,1.  开始我以为是bitNo这个循环太快,比读取系统时间快很多,所以导致同0,同1.因此我加了上面程序中的高亮部分,目的是起延时功能。但还是同0,同1.

求高手解释一下

程序运行结果如下图




求助,SCL编程 已锁定
编辑推荐: 关闭

请填写推广理由:

本版热门话题

SIMATIC S7-300/400

共有54711条技术帖

相关推荐

热门标签

相关帖子推荐

guzhang

恭喜,你发布的帖子

评为精华帖!

快扫描右侧二维码晒一晒吧!

再发帖或跟帖交流2条,就能晋升VIP啦!开启更多专属权限!

  • 分享

  • 只看
    楼主

top
X 图片
您收到0封站内信:
×
×
信息提示
很抱歉!您所访问的页面不存在,或网址发生了变化,请稍后再试。