网站首页 > 技术文章 正文
使用数组数据类型注意事项
ARRAY 类型呀,就是由数量固定并且数据类型相同的元素组成的一种数据结构。使用 ARRAY 类型的时候,有这么几个地方得注意:
- ARRAY 类型能在 DB、OB/FC/FB 接口区还有 PLC 数据类型那里定义,但是不能在 PLC 变量表中定义。
- 数组的定义是这样:Array[维度 1 下限..维度 1 上限,维度 2 下限..维度 2 上限,…]of <数据类型>,最多能有 6 个维度。
- 数组元素的数据类型包含除了数组类型、Variant 类型之外的所有类型。
- 数组下标的数据类型是整数,下限值得小于或者等于上限值。在 S7-1200 V3.0 及其以前,上下限的范围是 Int 型(-32768 ~+32767),在 S7-1200 V4.0 及其以后,就变成 DInt 范围(-2147483648 ~+21474836487)。可以用局部常量或者全局常量来确定上下限值,而且数组的元素数量会受到 DB 块剩余空间大小和单个元素大小的限制。
- 从 S7-1200 V2.0 开始,下标不只是常数、常量,还可以是变量,也能混合着用(多维数组)。要是编程语言是 SCL 的话,下标甚至可以是表达式。用数组的变量下标,在程序里能很轻松地实现间接寻址。要注意哈,下标变量必须是符号名,不能是像 DB1.DBW0 这种没有对应符号名的绝对地址。
- 从 S7-1200 V4.2 开始,FC 的 Input/Output/InOut 以及 FB 的 InOut 能定义像 Array 这样的变长数组,得是优化的 FC/FB 块才行。在调用 FC/FB 的实参里能填任意数据类型相同的数组变量,当然,也能是多维变长的数组,比如 Array[,]of Int。
- 数组能使用单个的数组元素,比如”DB1”.Static_1[1],也能使用整个数组,比如”DB1”.Static_1。多维数组能降维使用,像三维数组:3D[0..2,0..3,0..4]of Int 是一个 3×4×5 大小的 Int 数组,3D[0]是一个 4×5 大小的二维 Int 数组,3D[0,1]是一个 5 个元素的一维 Int 数组。当然啦,多维数组的下标也能换成变量,像 3D[Tag_1,1]这种。
- S7-1200 V4.2 开始,多重背景支持数组形式,就是 Array of FB,这样在 FB 里用循环指令写程序能更方便。不过不支持 Arrayof FB。
- 在 TIA 博途 V10.5 SP2,S7-1200 V1.0 的时候,曾经引入了 FieldRead 和 FieldWrite 。
数组的基本使用方法
一. DB中创建,如图1所示:
图1 Array在DB中的创建
二. FC的InOut中创建,如图2所示:
图2 Array在FC形参中的创建
三. 数组作为实参,如图3所示:
图3 Array作为FC的实参
四. FC程序中使用数组元素,使用形参,如图4所示:
图4 FC程序中使用形参
五. FC程序中使用数组元素
下标采用的是变址寻址方式,会用到形参。要是想实现下面这种功能,就是把 0 到 7 这 8 个数,送进数组下标是 0 到 7 的 8 个元素里,就像图 5 - 7 展示的那样:
(1)FC形参设置,如图5所示:
图5 FC形参设置
(2)程序编制,如图6所示:
图6 程序详情
(3)SCL的版本,如图7所示:
图7 SCL版本的程序
六. 在程序中直接使用数组元素,如图8所示:
图8 程序中直接使用数组元素
七. 在程序中直接使用数组元素,
下标是变址寻址哦。要是想实现下面这个功能,把 0 到 7 这 8 个数,放进数组下标是 0 到 7 的 8 个元素里,就像图 9 - 11 呈现的那样。
(1)数据块定义,如图9所示:
图9 DB1的定义
(2)程序编制,如图10所示:
图10 程序详情
(3)SCL的版本,如图11所示:
图11 SCL版本程序
八,Array【*】使用实例
要实现下面这个功能:使用 FC 的 Input 来定义数组“Array of Int”,求变长数组元素的总和,可以按照下面这些步骤去做。
一),使用 Array 的时候,一定得使用像图 12 展示的那种指令,去计算数组元素的上下限,这样就能得出元素的个数啦:
二). 定义变量,如图13所示。赋初始值,计算上下限,如图14所示:
三)、计算上下限的程序,就像图 14 显示的那样:
(1)要输入 Array 类型的变量;
(2)得明确所求上下限的维数;
(3)这个维数下的下限或者上限,是 DINT 类型。
四.) 求和的程序,就如图 15 展示的那样:
五). SCL的版本,如图16所示:
六). OB1中调用实参为不同数组元素个数的数组,如图17所示:
Array of FB的使用实例
要实现下面这个功能:FB3 多次调用 FB4,在 FB3 里面循环调用,这样能减少程序量。FB4 有两个 Input:Start 和 Stop,还有一个 InOut:Run,建立 Array[0..7] of FB4。同时也要建立变量 Array[0..7] of Struct,把它当作对应 FB4 的输入和输出,就像图 18 显示的那样:
一文教你玩转西门子 S7-1200 数组 PLC论坛-全力打造可编程控制器专业技术论坛 -
一文教你玩转西门子 S7-1200 数组
http://bbs.plcjs.com/forum.php?mod=viewthread&tid=505069&fromuid=42656
(出处: PLC论坛-全力打造可编程控制器专业技术论坛)
猜你喜欢
- 2025-03-07 Python教程-数组
- 2025-03-07 Is系列判断函数都不掌握,那就真的Out了
- 2025-03-07 Excel函数水平高低的分水岭——数组,掌握它你就是大神
- 2025-03-07 excel中什么是数组,数组的作用是什么,这篇文章就带你入门
- 2025-03-07 JavaScript 中 some 与 every 方法的区别是什么?
- 2025-03-07 什么是数组及应用(VBA学习方案系列讲座之29讲)
- 2025-03-07 看一段js是否存在流氓行为或漏洞?反混淆出场,建议收藏
- 2025-03-07 JS数组中 forEach() 和 map() 的区别
- 2025-03-07 MongoDB关于内嵌数组文档的整理
- 2025-03-07 【JS 随机数组】生成唯一随机数组
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)