问题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