各位大神好,本人新手一枚,刚接触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.
求高手解释一下
程序运行结果如下图
