S7-1200 数组间接寻址:从原理到实战的全维度解析
01S7-1200 使用数组实现间接寻在 S7 - 1200 的编程领域,数组间接寻址是一项极具价值的技术。自固件版本 V2.0 起,S7 - 1200允许使用变量作为数组下标,这使得数组成为实现间接寻址的之选。通过灵活改变下标变量的值,我们能够实现多种多样的功能。
02
1. 普通数组变量:探寻Zui值筛选之道
普通数组变量一般在 DB块中直接定义,或者在块接口中定义,常见的静态变量数组就是其中一种。下面我们通过一个实例来讲解如何从数组中找出Zui大值和Zui小值,并将它们剔除后按原顺序存入另一个数组。具体步骤如下:
步骤一:数组定义
我们需要定义两个数组。其中一个数组用于存储原始数据,它就像是一个装满各种物品的仓库,里面的数据未经处理;另一个数组则用于存储筛选后的数据,这个数组将在后续操作中装入我们精心挑选的数据。
步骤二:遍历找Zui值
运用循环结构对原始数据数组进行遍历。这个过程就像是在仓库中逐个检查物品,通过比较,找出其中的Zui大值和Zui小值。这两个值在整个数据集合中具有特殊的地位,我们需要将它们识别出来。
步骤三:剔除Zui值并存储
将找到的Zui大值和Zui小值从原始数据中剔除,把剩余的数据按照原来的顺序存入筛选后的数组。这一步骤就像是把仓库中不需要的 “大件”和 “小件” 拿走,只留下我们需要的物品,并重新整理摆放。
步骤四:完成筛选
完成上述步骤后,筛选后的数组就包含了剔除Zui大值和Zui小值之后的数据。整个过程可以参考图 1 -4。需要注意的是,这里给出的例程仅供参考,读者若要采纳,需自行承担风险。
v 以下例程仅供参考。读者如欲采纳,风险自担。
图 1. 定义 FC块接口

图 2.编写程序

图 3.调用块

图 4.监视结果
032. 字符串字符间接寻址:字符处理的奇妙之旅
步骤一:初始化变量
初始化一个 DWord 变量,这个变量就像是一个空盒子,准备用来存放我们处理后的字符结果。
步骤二:字符遍历
对 String [8] 数组中的每个字符进行遍历,就像逐个检查字符串数组这个 “字符链” 上的每一个环节。
步骤三:条件检查
使用条件语句来检查每个字符是否在 0 - 9 或 A - F(以及 a -f)范围内。这一步就像是在字符的世界里设置了一道筛选门,只有符合条件的字符才能通过。
步骤四:字符添加
如果字符符合条件,就将其添加到之前初始化的 DWord 变量中。这就像是把通过筛选的字符放进我们准备好的 “盒子” 里。
步骤五:完成转换
经过上述步骤,DWord变量Zui终将包含转换后的字符序列。在实际编程过程中,务必确保处理字符串的大小和范围在定义的界限内,避免出现错误。整个过程可以参考图 5- 8。由于 FC 无法定义带长度的字符串参数接口,这里我们使用FB。同样,此例程仅供参考,采纳需谨慎。
以下例程仅供参考。读者如欲采纳,风险自担。

图 5. 定义 FB 块接口

图 6. 编写程序

图 7. 调用块

图 8. 监视结果
注:如果对字符串不处理直接进行 ATH转换,结果如图 9 所示。所有的不合规的字符都转换为 0。

图 9. 监视结果
04I、Q 的数组:新特性带来的便利之法
在 PLC 的变量表中,I 和 Q 在通常情况下不能直接定义为数组。从 CPU V4.0固件版本开始,情况发生了变化。I 和 Q 可以定义为 PLC 数据类型,进而可以在 PLC 数据类型中定义数组。这一变化使得 I 和Q 变量实际上成为了数组数据类型,极大地方便了间接寻址操作,不再需要使用 PEEK 指令。
步骤一:定义 PLC 数据类型
定义一个 PLC 数据类型,在这个数据类型中包含一个数组。这个数组就像是一个专门为模拟量数据打造的“存储容器”,用于存放我们要处理的模拟量数据。
步骤二:直接访问数组
在程序中,可以直接访问这个数组,无需使用 PEEK指令手动访问内存地址。这种方式大大简化了程序的编写和维护工作,提高了代码的可读性和可维护性。

图 10. 编写程序

图 11. 定义 PLC 数据类型

图 12. 定义 PLC 变量

图 13. 定义数据块

图 14. 调用程序