如何使用 RSLogix 5000 获取 SCL 中 BOOL[] 的长度

How to get the length of BOOL[] in SCL with RSLogix 5000

目标

我正在 SCL 中对 Allen-Bradley / Rockwell CompactLogix PLC 进行编程。我想在运行时确定 Arrays 的大小。可以在编译前将 Array 长度作为 constants 输入到代码中。但是,如果可以自动确定数组的长度,将大大提高可重用性。

问题

有一个函数 SIZE(Source,Dimtovary,Size) 可以满足我的需求,尽管它只适用于 SINT[] INT[] DINT[] REAL[] structureSTRING。不幸的是,我需要 BOOL[].

的长度

"The SIZE instruction finds the number of elements (size) in the designated dimension of the Source array or string operand and places the result in the Size operand. The instruction finds the size of one dimension of an array."

伪代码

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

环境

问题

有没有办法确定布尔数组的长度,例如 BOOL[64]

此外,是否存在 SIZE(Source,Dimtovary,Size); 不适用于布尔数组的根本原因?

答案是否定的;无法获得 BOOL[] 数组的大小。

正如@DanMašek 正确建议的那样,BOOL[] 数组非常有限。甚至建议使用 UDTs 代替 BOOL 类型的成员。

不幸的是,我仍然没有办法以某种方式排列多个 BITs 的长度并在 for loop 中循环遍历它们。