『7x24小时有问必答』

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. 定义两个数组,一个用于存储原始数据,另一个用于存储筛选后的数据。

2. 使用循环结构遍历原始数据数组,找出最大值和最小值。              

3. 剔除最大值和最小值,并将剩余值按原顺序存入筛选后的数组。              

4. 完成以上步骤后,筛选后的数组即包含剔除最大值和最小值后的数据。整个过程如图 1、2、3、4 所示。
以下例程仅供参考。读者如欲采纳,风险自担。
图  1.  定义  FC  块接口
图  2.  编写程序
图  3.  调用块
图  4.  监视结果
2.  字符串字符间接寻址

默认情况下,字符串类型 String 和 WString 都预设为包含 254 个字符。而 WString 类型最多可以扩展到 16382 个字符。这些字符可以通过索引进行访问,类似于数组中的变址寻址。
请注意,字符的索引是从 1 开始的。
举例来说,如果我们想要移除 String[8]  数组中除了  0-9 和 A-F(以及 a-f)之外的所有字符,并将处理后的结果转换为一个 DWord 变量,我们可以按照以下步骤进行:
1. 初始化一个 DWord 变量来存储结果。

2. 遍历 String[8]  数组中的每个字符。

3. 使用条件语句检查每个字符是否在  0-9 或 A-F(以及 a-f)范围内。   

4. 如果是,将该字符添加到 DWord 变量中。

5. 最后,DWord 变量将包含转换后的字符序列。

请记住,实际编程时需要确保处理字符串的大小和范围,以避免超出定义的界限。整个过程如图 5、6、7、8 所示。
因为 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 指令。

举例来说,如果我们需要对从 IW100  开始的 16 个模拟量进行标定,我们可以定义一个 PLC 数据类型,其中包含一个数组来存储这些模拟量数据。然后,在程序中直接访问该数组,而无需使用 PEEK 指令来手动访问内存地址。

这种方式简化了程序的编写和维护,提高了代码的可读性和可维护性。值得注意的是,在实际应用中,需要确保数组的大小和数据类型与处理的数据一致,以免发生错误。整个过程如图 10、11、12、13、14 所示。
以下例程仅供参考。读者如欲采纳,风险自担。
图  10.  编写程序
图  11.  定义  PLC  数据类型
图  12.  定义  PLC  变量
图  13.  定义数据块
图  14.  调用程序
章来源:技成培训网原创,作者:胡志豪;未经授权禁止转载,违者必究!
扫描下方二维码↓↓↓
免费获取【西门子全套】
点击阅读原文,下载《西门子全套》

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

上一主题上一主题         下一主题下一主题
QQ手机版小黑屋粤ICP备17165530号

关于我们·投诉举报· 用户帮助· 联系我们 · 本站服务 · 版权声明· 隐私政策 · 投搞指南

法律保护:PLC技术网,plcjs.com,plcjs.net等字样
Copyright 2010-2030. All rights reserved. 


微信公众号二维码 抖音二维码 百家号二维码 今日头条二维码哔哩哔哩二维码