S7-1200 使用数组实现间接寻址 S7-1200 自固件版本 V2.0 起便允许使用变量作为数组下标,因此数组成了实现间接寻址的最便捷手段。通过变动下标变量的值,可以完成多种功能。 数组间接寻址通常有这么几种 DB 中数组、或者块接口、Static、Temp 的数组 字符串字符间接寻址 I、Q 的数组、FB 多重背景的数组、DB_ANY 的数组 下面就这几种情况分别介绍。 在编程中,数组间接寻址通常与 SCL(Structured Control Language)一起使用,尤其是在需要循环结构如 FOR 循环的情况下。然而,这并不意味着 LAD(Ladder Diagram)无法实现数组间接寻址。正如在之前的数组说明中所提及的,LAD 同样可以支持变址操作。 1. 普通数组变量 普通数组变量通常是在 DB 块中直接定义的数组,或者在块接口中定义的,比如常见的静态变量数组。下面举例说明如何从数组中找出最大值和最小值,然后将它们剔除并按原顺序放入另一个数组。整个过程可以参考下面的步骤。 1. 定义两个数组,一个用于存储原始数据,另一个用于存储筛选后的数据。 以下例程仅供参考。读者如欲采纳,风险自担。 图 1. 定义 FC 块接口 图 2. 编写程序 图 3. 调用块 图 4. 监视结果 2. 字符串字符间接寻址 默认情况下,字符串类型 String 和 WString 都预设为包含 254 个字符。而 WString 类型最多可以扩展到 16382 个字符。这些字符可以通过索引进行访问,类似于数组中的变址寻址。 请注意,字符的索引是从 1 开始的。 举例来说,如果我们想要移除 String[8] 数组中除了 0-9 和 A-F(以及 a-f)之外的所有字符,并将处理后的结果转换为一个 DWord 变量,我们可以按照以下步骤进行: 1. 初始化一个 DWord 变量来存储结果。 因为 FC 无法定义带长度的字符串参数接口,所以使用 FB。 以下例程仅供参考。读者如欲采纳,风险自担。 图 5. 定义 FB 块接口 图 6. 编写程序 图 7. 调用块 图 8. 监视结果 注:如果对字符串不处理直接进行 ATH 转换,结果如图 9 所示。所有的不合规的字符都转换为 0。 图 9. 监视结果 3. I、Q 的数组 在 PLC 的变量表中,I 和 Q 通常不能直接定义为数组。然而,从 CPU V4.0 固件版本开始,I 和 Q 可以定义为 PLC 数据类型,从而可以在 PLC 数据类型中定义数组。这使得实际上 I 和 Q 变量成为了数组数据类型,方便了间接寻址操作,无需再使用 PEEK 指令。
以下例程仅供参考。读者如欲采纳,风险自担。 图 10. 编写程序 图 11. 定义 PLC 数据类型 图 12. 定义 PLC 变量 图 13. 定义数据块 图 14. 调用程序 文章来源: 文章来源:技成培训网原创,作者:胡志豪;未经授权禁止转载,违者必究! |
|