探讨如何应用数组嵌套结构实现PLC数据块有序编址

2020-04-17 14:53杨拥军
科学与信息化 2020年3期
关键词:嵌套数组物流

杨拥军

摘 要 文章提出了数据块(DB)中数组(Array)和结构(Struct)等复杂数据类型的嵌套在物流输送线自控西门子PLC程序中的应用方案,该方案在PLC数据块中的用户数据存储地址与实际设备号之间建立了数学模型,实现有序编址。以卷烟物流高架仓库PLC控制程序为实例介绍了具体的实现过程,并详细介绍了西门子Step7中的实现数组与结构的嵌套、利用指针寻址以及数据传递的方法。

关键词 数组;Struct;嵌套;物流;PLC

引言

在卷烟自动化物流控制系统中,信息流是不可或缺,需要同步传递的。PLC控制物流输送时,运行参数、托盘条码、物料品种等信息也同步传递。如何有序地存储这些数据,方法有很多。巧用数组和结构这些复杂数据类型嵌套,是一个可行的方法[1]。

1 数组和结构的定义

数组( Array)数据类型表示一个由固定数目的同一种数据类型元素组成的数据结构。Array有时也被译为“矩阵”。数组中的元素允許使用除了Array之外的所有数据类型。

STEP7中复杂数据类型(Struct)表示一个由确定数目组件构成的数据结构,组件的数据类型可能各不相同。

嵌套的结构就是指一个结构作为另一个结构的组件,结构允许的嵌套深度可达6层。

2 问题提出

这几百台输送机上需要传递的数据包含有多种基本数据类型,任务号、起始地址、目标地址、件烟数量等为整形(INT),托盘条码为双整形(DINT),超长、超宽、超高等外型数据为布尔形(BOOL)。这几千组数据如果直接在数据块中顺序建立和声明,那将是非常大的工作量,程序维护起来非常困难[2]。

3 解决思路

数组( Array)和结构(Struct)的嵌套可以很好地解决这个问题。具体做法是:建立一个Struct数据类型,分配固定长度的存储区域,把需要传递的信息按照一定规则放在这一区域,每台输送机对应一个Struct;

然后再建立一个数据块,声明一维数组Array,数组的上下边界包含设备的所有平面,使数组顺序与设备编号一一对应,可以一个建立数学模型。如设备编号从3001开始,就定义ARRAY[3001..3500]。在Array内嵌套刚建立的Struct数据类型,就能把存放地址排序分配了。需要传递信息时,利用POINTER型指针寻址,将上一个输送机的Struct传送到下一个的Struct,实现信息的批量传递。

4 物流信息有序存储及传递的功能实现

4.1 搭建环境

西门子S7系列PLC都有很强的数据存储能力,为物流控制系统的信息流传递提供了很好的支撑。以西门子S7-300为例,实例说明数组在物流控制程序的应用。

4.2 建立数据块,声明一维数组Array

插入一个数据块,选择复杂数据类型中的Array数组。数组以实际的设备平面号为边界,比如生产线400多台的输送机平面号以3001为基准平面号,就定义数组Array[3001..3500],抽象的数组更贴近实际生产现场,容易理解。

由于数组内的数据类型要求同一种数据类型元素,所以在数组内再嵌套声明一个Struct数据类型。自定义的Struct长度为20个字。在这20个字里再定义任务号、起始地址、目标地址、品牌代码、件烟数量(INT)、托盘条码(DINT),超长、超宽、超高(BOOL)等外型数据。这样就巧妙地将不同数据类型的几千条信息都存放在一个数组Array里。

4.3 数学模型的建立与地址边界计算

每台设备的存放地址分配原则从建立数据块的思路中可以得知,一个Struct表示存储一台设备的信息,每台输送机分配了20个字节。设备的平面号以3001起始,那么就以3001为基准平面号。计算某台设备的存储地址时,以当前设备平面号减去基准平面号3001的差值,再乘以20,就是这台设备的存储起始字节边界。

当设备编号为N,基准平面号M,存储起始字节边界为S,那么

S=(N-M)*20

如设备3013,基准平面号3001,则设备3013的存储起始地址为:

S=(3013-3001)*20=240,

它的物料信息在DB50数据块中的存放地址为DB50.dbw240,以DB50.dbw240为起始字节,向后20个字。

4.4 编写功能块,利用指针POINTER信息传递

(1) 起始地址和目标地址的计算

建立一个FC块,变量#EQU1_NO表示从哪台设备传递;#EQU2_NO要传递给哪台设备;#OFFSET表示基准平面号;

#EQU1_NO与基准平面号#OFFSET的差值再乘以20,再乘以8,就是传递起始设备的起始地址位,地址存放在地址寄存器AR1中。

#EQU2_NO与基准平面号#OFFSET的差值再乘以20,再乘以8,就是传递目标设备的起始地址位。地址存放在地址寄存器AR2中。

(2) 利用POINTER指针进行数据传递

如上图2,变量#DB_INFO表示数据块DB50;变量#INFO_LENGTH表示地址区域长度;地址寄存器AR1和AR2存放着刚才计算出的要传递的起始地址和目标地址的边界。

当逻辑条件具备时,就会把前一台设备存储区域的第一位传递给当前设备的对应位。每传递一个字节,地址寄存器AR1、AR2的POINTER指针者向后偏移1个字节。如此循环20次,将20个字节的数据都传递到下一个Struct。如图3。

(3) 功能的调用

当FC块编写完成后,在程序中可以调用FC块,给变量赋值,当条件具备时,设备3013的信息就传递到设备3014中。

5 物流PLC编程中应用数组嵌套结构的优点

5.1 数据编址逻辑清晰,层次分明。

采用复杂数据类型来存储、可以在存储地址与实际设备之间建立数学关系,实现了物流信息的有序存储。解决了输送生产线大批量设备在PLC中的信息编址的问题,这在卷烟自动化物流仓储控制程序中实用性很强。

5.2 程序结构简单

通过Array与Struct的嵌套,解决了Array里只能有同一种数据类型元素的问题,使数据块的声明长度明显减少。只需要声明一次Struct数据类型就可以把所有设备的数据都涵盖了。

5.3 程序通用性和可扩展性强

数组在建立时的数据终始边界就大于现有的设备数量。当生产线增加或减少设备时,只需在主程序中插入调用语句即可,增强了程序的通用性和可扩展性。

6 结束语

对于自动化物流系统来说,物流与信息流的同步传递是非常重要的。在存储地址与实际设备之间建立数学模型,对于编写大规模生产线PLC程序时非常有用。巧用数组(Array)与结构(Struct)的嵌套,可能很好地解决大量数据信息的编址问题,实现了存储地址与实际设备建立数学对应关系,数据可以有序存储与传递,减少了程序体积,也使程序的通用性的可扩展性增强。

参考文献

[1] 时文飞.数组式编程方法在PLC编程中的应用[J].电气传动,2014, 44(1):85-87.

[2] 李琦.数据结构和指针在PLC编程中的灵活运用[C].中国仪器仪表学会第六次全国会员代表大会暨学术会议.中国仪器仪表学会第六次全国会员代表大会暨学术会议论文集.北京:中国仪器仪表学会,2003:124-126,130.

猜你喜欢
嵌套数组物流
物流线上的毒品追踪
JAVA稀疏矩阵算法
JAVA玩转数学之二维数组排序
更高效用好 Excel的数组公式
嵌套交易如何实现逆市盈利
多参数最大、最小值嵌套问题的研究
巧用嵌套交易实现逆市盈利
表格在网页中的灵活运用
寻找勾股数组的历程
2009年本刊重点关注之物流展会、交流会