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



>Goal

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

问题

有一个功能SIZE(Source,Dimtovary,Size)它完全可以满足我的需要,尽管仅适用于SINT[]INT[]DINT[]REAL[]structureSTRING。不幸的是,我需要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中循环它们。

相关内容

  • 没有找到相关文章

最新更新