【发布时间】:2018-09-27 22:52:46
【问题描述】:
目标
我正在为 SCL 中的 Allen-Bradley / Rockwell CompactLogix PLC 进行编程。我想在运行时确定Arrays 的大小。可以在编译之前将Array 长度作为constants 输入到代码中。但是如果数组的长度可以自动确定,那么复用性会大大提高。
问题
SIZE(Source,Dimtovary,Size) 的功能正是我所需要的,尽管仅适用于 SINT[] INT[] DINT[] REAL[] structure 和 STRING。不幸的是,我需要BOOL[] 的长度。
"SIZE 指令求出 Source 数组或字符串操作数的指定维度中的元素个数(大小),并将结果放入 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(结构化文本)
- 参考: Programming reference manual
问题
有没有办法确定布尔数组的长度,例如BOOL[64]?
此外,SIZE(Source,Dimtovary,Size); 不适用于布尔数组是否有根本原因?
【问题讨论】:
-
我远不是这个主题的专家(更多的是相反的),但稍微搜索一下告诉我 BOOL 数组非常有限,因此人们倾向于避免使用它们。通常,解决方法涉及使用 DINT 数组并适当地处理位操作。