“Array[*] of *”灵活的可变数组:满足可变需求的完美选择

1  

介绍

西门子 TIA(Totally Integrated Automation)平台是一种面向工业自动化的软件平台,可以实现工业控制系统的设计、开发、测试和调试等一系列工作。其中,Array[*]of *是 TIA 平台中的一种数据类型,表示一个可变长度的数组。其中,[*]表示数组的长度可以是任意值,固定表达方式为[1..20]。而*表示数组中的元素类型的可以是任何类型。例如,可以定义一个 Array[*] of INT 类型的数组,表示一个可变长度的整数数组。在程序中,可以通过索引来访问数组中的元素,例如 Array[0]表示数组中的第一个元素,Array[1]表示数组中的第二个元素,以此类推。当然也可以通过索引来给数组中的元素赋值,例如:Array[2]:=1;Array[3]:=33。

也可以使用循环来遍历整个数组:   

2 

优点

可变数组是一个非常强大的数据类型,使用它可以让程序更加灵活。

1.结构清晰:使用 Array[*] of 数据类型可以使程序结构简洁清晰,例如我们要定义一百个工位的编号,我们就可以将数组写成Array[1..100] of int。

2.提高效率:使用 Array[*] of 可以提高程序的效率,因为它允许我们使用for循环进行遍历操作。

3.易于使用:Array[*] of 使用的方法很简单,因此即使是初学者也可以很容易地使用。

3   

案例

下面我们将使用一个案例来讲解可变数组的具体使用方法,案例中会有几个知识点,拿起小本本,大家做好笔记。

3.1 问题描述

我们来设计一个跑马灯的程序,灯的数量可根据不同的情况变化。当启动时,灯按顺序以一定的时间间隔启动,同一时间只能有一盏灯亮。有一个最简单的方式是使用PLC内置的位移指令SHL,但是缺点是不够灵活,数量不能够随意定义。

3.2 程序设计

首先我们要有启停按钮,启动按钮用于程序启动,灯开始依次亮起来;停止按钮用于程序停止,灯全部熄灭。

我们要有时间脉冲信号,以这个时间当作灯切换的时间暂定为1秒。这里我们先使用PLC内部时钟寄存器 (Clock_1Hz)。

我们还要有一个可变数组用于存放灯的输出定义为:Array[*] of Bool。

3.3 程序编写

我们来使用西门子 TIA 平台的 SCL 语言来编写,SCL(Structured Control Language)是一种基于 Pascal 的结构化编程语言。

首先我们先创建一个功能块如下图,名字为 跑马灯,语言选择 SCL,FB 函数,然后确定,如下图:

图片

输入输出定义,如下图:

图片

首先我们要获取数组的上下限(知识点 1:获取可变数组上下限的方法),方便我们后续的操作,如下图:

图片

然后我们编写启动停止的程序,我们使用一个标志位 enable 来判断程序启停的状态,如下图:

图片

当程序启动时 enable 为 1;当程序停止时,enable 为 0。

在程序停止的时候,我们需要将数组中的数据清零,在此我们使用 for 循环(知识点2:通过for循环来遍历整个数组)来实现。

 

接下来我们来编写程序控制逻辑部分(知识点3:上升沿获取,使用SCL编写方式)(知识点4:BoolArray[#i]:=False,给数组中特定的位赋值),如下图:

图片

3.4 程序运行

我们将编写好的功能块 ‘跑马灯’ 在主程序 OB1 当中调用,如下图:

图片

图片

3.5 问题拓展

1.在我们测试后发现,当我们停止后再启动,数组的输出并不是从第一位开始,而是从上一次输出的位置开始,如果不想这样,我们可以在停止时将#n清零,清零后程序在停止后就可以从第一位开始输出了。

2.如果我们想改变灯切换的间隔要怎么做呢,最简单的方式是使用TIA平台内置的时钟,在我们激活启用时钟储存字节后就可以使用了,如下图:

图片

如果这里面没有我们想要的时间间隔,我们也可以自己写一个脉冲发生器来实现。将两个功能块结合起来就变成了可变切换时间的跑马灯程序了。

4   

总结

Array[*] of的数组长度和类型是可变的,可以根据实际需求来定义数组的大小。这使得数组可以适应多种应用场景。

Array[*] of使得对数组的元素进行遍历和访问更加方便。您可以使用循环结构来处理数组中的每个元素,无需手动进行索引管理。

总之,数组Array[*] of在西门子博图TIA平台中的使用提供了更好的灵活性和效率。它可以使您的控制系统更加强大和简洁。

2023年7月