>Goal
我正在SCL
年编写Allen-Bradley/Rockwell CompactLogixPLC
。我想在运行时确定Arrays
的大小。可以在编译之前将Array
长度作为constants
输入到代码中。但是,如果可以自动确定数组的长度,则可重用性将大大提高。
问题
有一个功能SIZE(Source,Dimtovary,Size)
它完全可以满足我的需要,尽管仅适用于SINT[]
INT[]
DINT[]
REAL[]
structure
和STRING
。不幸的是,我需要BOOL[]
的长度.
"SIZE 指令在源数组或字符串操作数的指定维度中查找元素(大小)的数量,并将结果放在 Size 操作数中。该指令查找数组一维的大小。
伪代码
Int_array := INT[16];
Bool_array := BOOL[64];
SIZE(Int_array[0],0,Int_array_len);
// Works, Int_array_len contains 16
SIZE(Bool_array[0],0,Bool_array_len);
// Isn't compilable becaus size(); isn't defined for boolean arrays
环境
- IDE:Rockwell Studio 5000/RSLogix 5000
- PLC:1769-L36ERMS
- 语言:SCL(结构化文本) 参考
- :编程参考手册
问题
有没有办法确定布尔数组的长度,例如BOOL[64]
?
此外,SIZE(Source,Dimtovary,Size);
不适用于布尔数组是否有根本原因?
答案是否定的;不可能获得BOOL[]
数组的大小。
正如@DanMašek正确建议的那样,BOOL[]
数组非常有限。甚至建议改用包含BOOL
类型成员的UDTs
。
不幸的是,我仍然没有解决方案以某种方式排列多个BITs
的长度并在for loop
中循环它们。