JZGKCHINA
工控技术分享平台
1
介绍
西门子 TIA(Totally Integrated Automation)平台是一种面向工业自动化的软件平台,可以实现工业控制系统的设计、开发、测试和调试等一系列工作。其中,Array[*]of *是 TIA 平台中的一种数据类型,表示一个可变长度的数组。其中,[*]表示数组的长度可以是任意值,固定表达方式为[1..20]。而*表示数组中的元素类型的可以是任何类型。例如,可以定义一个 Array[*] of INT 类型的数组,表示一个可变长度的整数数组。在程序中,可以通过索引来访问数组中的元素,例如 Array[0]表示数组中的第一个元素,Array[1]表示数组中的第二个元素,以此类推。当然也可以通过索引来给数组中的元素赋值,例如:Array[2]:=1;Array[3]:=33。
也可以使用循环来遍历整个数组:
FOR i:=0 TO 9 DO
IF Array[i]=33 THEN
//执行某些操作 END_IF;END_FOR;
END_IF;
END_FOR;
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平台中的使用提供了更好的灵活性和效率。它可以使您的控制系统更加强大和简洁。