用双指针实现PLC堆栈设计

本文介绍了一种在PLC中利用双指针实现堆栈的方法,用于缓存MES与ME PLC通讯中的业务数据,如订单、过站记录和在制品队列。该设计减少了对扫描周期的影响,但需注意异常作业可能导致指针混乱,解决方案是定期与MES同步并记录日志。
摘要由CSDN通过智能技术生成
  

关键技术:PLC 堆栈

关键算法:指针

 

某基地在设计MES现场调度模块时,架构了一个部署在车间现场的IT PLC,作为MES与ME PLC通讯的中间介质,用于处理握手信号并缓存业务数据。

此调度模块要实现以下业务数据的缓存:订单缓存、过站记录缓存、在制品队列缓存。其中订单缓存用于上线,过站记录缓存用于物料拉动,在制品队列缓存用于防错。

缓存的意义是为了防止应用系统环境(应用服务器/数据库/OPC/消息队列服务器)对现场(OEM PLC)作业的影响,毕竟PLC层面的交互要稳定及时得多。

 

从IT的层面来说,用数据库做队列和堆栈设计是非常容易的,通常通过一个过滤条件再加一个排序条件就可以从数据库中检索数据并加载到内存。

但是用PLC做缓存堆栈会受到诸多限制,尤其是要考虑扫描周期和掉电保持数据容量的影响。

比较方便实现的一个做法是:建立一个数组,按照先进先出的规则对数据进行处理,每次更新数据时对数组里的数据用FOR循环进行MOVE。但是当数据长度较大时(如缓存120个订单),并且数据类型以字符型为主时,这种操作对扫描周期会造成较大影响。

 

本文描述了另一种建立堆栈的方式:利用双指针构建。

首先我们在DB块里建立如下表所示的堆栈结构:

偏移量

TAG

TAG长度

备注

0

HEAD

2

订单起始位

2

STEP

2

订单数据长度

4

P1

2

首订单指针

6

P2

2

末订单指针

8

QTY

2

有效订单个数

10

ORDER1

80

订单1

90

ORDER2

80

订单2

170

ORDER3

80

订单3

250

ORDER4

80

订单4

 

下表建立了WO1/WO2/W

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值