SCL编程问题请教大侠

问题1:
var_output
,y0y1,y2,y3...yn:BOOL;
end_var

var
status:array[0..n] of bool;
end_var

有没有什么好的办法可以快速吧status赋值分布到y0到yn这些输出接口上,不使用sfc20,同意的问题出现在输入,输入都是bool,怎么把输入状态全部放到stat区的bool数组里用于计算。

问题2:
var
cyc:array[1..20]of real;
end_var

begin
for index:=0 to 20 by 1 do
   cyc[index]:= 0.0 ; 
end_for
为什么我程序里都没定义cyc[0],但是程序却不报错呢?cpu也不会寻址错误。这个深层次的原理是什么?

问题补充:
@youhm :也许是我没表达清楚,我的意思是我定义的cyc下标是从1开始的,而不是从0开始的。如果从1开始,那么并不存在实际的cyc[0], 另外不想使用sfc20的原因是太麻烦,还要定义any和struct,
VAR_TEMP
    anys:STRUCT
        a:BYTE;
        b:BYTE;
        c:WORD;
        d:WORD;
        e:WORD;
        f:WORD;
        END_STRUCT;
    data AT anys :ANY;
 END_VAR  

    data:= MV1;
    anys.b:=B#16#08;  //data type REAL 
    anys.c:=MAX_TIMER; //Repetition factor

RET:= BLKMOV(SRCBLK := data 
       ,DSTBLK := scale  
       );  在STL反而对这类问题很容易 L P##y0, LAR1,L #status ,T D[ar1,p#0.0] ,我已经用stl写了一个类似小功能块来解决这个问题了。

最佳答案

用SFC20就是好办法啊
没注意你定义的下标,下标使用变量编译器不会报错
因为你这个数组定义在静态变量里,编译器编译后,当下标等于0,相当于下标1的前一个变量,你这里数组类型是4字节浮点数,下标0的字节序号地址就是下标1的地址减去4,如果这个地址存在,cpu运行不会报错。

提问者对于答案的评价:
是啊,可惜编译器发现不了这个错误。

最佳答案作者回复:
从这个问题的现象看,在FB里可以用循环把位数组赋值给连续的输出变量,即第一个变量AT一个只包含一个变量的数组,假如数组的下标定义为0,那么通过变量下标寻址下标1就可以访问第二个变量了,或许这就是你想实现的。

原创文章,作者:more0621,如若转载,请注明出处:https://www.zhaoplc.com/plc205766.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2017年11月4日 上午12:53
下一篇 2017年11月4日 上午12:54

相关推荐