优秀的编程知识分享平台

网站首页 > 技术文章 正文

[西门子PLC] S7-1200数组ARRAY类型使用详解

nanyue 2025-03-07 22:30:05 技术文章 1 ℃

使用数组数据类型注意事项


ARRAY 类型呀,就是由数量固定并且数据类型相同的元素组成的一种数据结构。使用 ARRAY 类型的时候,有这么几个地方得注意:

  1. ARRAY 类型能在 DB、OB/FC/FB 接口区还有 PLC 数据类型那里定义,但是不能在 PLC 变量表中定义。
  2. 数组的定义是这样:Array[维度 1 下限..维度 1 上限,维度 2 下限..维度 2 上限,…]of <数据类型>,最多能有 6 个维度。
  3. 数组元素的数据类型包含除了数组类型、Variant 类型之外的所有类型。
  4. 数组下标的数据类型是整数,下限值得小于或者等于上限值。在 S7-1200 V3.0 及其以前,上下限的范围是 Int 型(-32768 ~+32767),在 S7-1200 V4.0 及其以后,就变成 DInt 范围(-2147483648 ~+21474836487)。可以用局部常量或者全局常量来确定上下限值,而且数组的元素数量会受到 DB 块剩余空间大小和单个元素大小的限制。
  5. 从 S7-1200 V2.0 开始,下标不只是常数、常量,还可以是变量,也能混合着用(多维数组)。要是编程语言是 SCL 的话,下标甚至可以是表达式。用数组的变量下标,在程序里能很轻松地实现间接寻址。要注意哈,下标变量必须是符号名,不能是像 DB1.DBW0 这种没有对应符号名的绝对地址。
  6. 从 S7-1200 V4.2 开始,FC 的 Input/Output/InOut 以及 FB 的 InOut 能定义像 Array 这样的变长数组,得是优化的 FC/FB 块才行。在调用 FC/FB 的实参里能填任意数据类型相同的数组变量,当然,也能是多维变长的数组,比如 Array[,]of Int。
  7. 数组能使用单个的数组元素,比如”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]这种。
  8. S7-1200 V4.2 开始,多重背景支持数组形式,就是 Array of FB,这样在 FB 里用循环指令写程序能更方便。不过不支持 Arrayof FB。
  9. 在 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 展示的那种指令,去计算数组元素的上下限,这样就能得出元素的个数啦:


  • 图12 指令位置
  • 二). 定义变量,如图13所示。赋初始值,计算上下限,如图14所示:

  • 图13 定义形参

  • 三)、计算上下限的程序,就像图 14 显示的那样:

    (1)要输入 Array 类型的变量;

    (2)得明确所求上下限的维数;

    (3)这个维数下的下限或者上限,是 DINT 类型。



  • 图14 计算上下限

  • 四.) 求和的程序,就如图 15 展示的那样:


  • 图15 求和的程序
  • 五). SCL的版本,如图16所示:

  • 图16 SCL版本程序
  • 六). OB1中调用实参为不同数组元素个数的数组,如图17所示:

  • 图17 OB1调用程序
  • Array of FB的使用实例


    要实现下面这个功能:FB3 多次调用 FB4,在 FB3 里面循环调用,这样能减少程序量。FB4 有两个 Input:Start 和 Stop,还有一个 InOut:Run,建立 Array[0..7] of FB4。同时也要建立变量 Array[0..7] of Struct,把它当作对应 FB4 的输入和输出,就像图 18 显示的那样:



  • 图18 程序详情
  • 一文教你玩转西门子 S7-1200 数组 PLC论坛-全力打造可编程控制器专业技术论坛 -

    一文教你玩转西门子 S7-1200 数组

    http://bbs.plcjs.com/forum.php?mod=viewthread&tid=505069&fromuid=42656

    (出处: PLC论坛-全力打造可编程控制器专业技术论坛)

    #非标自动化#

    #西门子PLC#

    最近发表
    标签列表