一个数据泵的实现与点火

市场上有许多用于历史化流程数据的工具,通常希望将“一组”或“一组”数据记录在一起,将许多数据点与单个事件关联起来。

通过兰迪·奥托 2022年5月9日
Randy Otto是ECS Solutions的首席执行官,在不同行业拥有超过25年的经验,包括玻璃纤维制造和定制装配机制造。提供:ECS Solutions

市场上有许多用于历史化过程数据的工具。这些工具通常在历史化时单独处理每个数据点,这对于趋势屏幕和仪表报告非常有用。然而,通常希望将一组数据记录在一起,将许多数据点与单个事件关联起来。此用例在批处理操作中特别常见,其中必须保存详细的记录。这可以通过许多不同的方式来实现。下面将介绍一种这样的方法,即所谓的“数据泵”。

解决方案概述

我们应对这一挑战的解决方案之一是在设备上完成每次操作时创建并记录数据的“有效载荷”。例如,考虑将散装材料添加到混合槽中。该操作包含了几条可以被历史化的相关信息,例如:

  • 开始时间
  • 结束时间
  • 单元(例如:混合水箱102)
  • 批处理ID
  • 事件描述:(例如:“蔗糖添加”)
  • 结束条件(自然完成或手动中止)
  • 设定值金额(请求数量)
  • 实际金额(交货数量)
  • 误差%([实际-设定值]/[设定值]x 100)
  • 泵速
  • 等。

为了获取这些信息,可编程逻辑控制器(PLC)逻辑被内置到每个操作中,以收集相关数据。在操作完成后,这些数据被合并到PLC中的单个记录对象中,通常是用户定义的数据类型。然后,将该记录按照“先进先出”的原则放入队列对象中。在控制系统的其他地方(PLC的外部),这个队列监视新记录。当新记录出现时,控制系统从队列前面读取相应的数据,将其记录到SQL数据库表中,并与PLC握手以表明记录已成功处理。

一旦在PLC级别上接收到握手,队列就会被索引以丢弃前一条记录,并将下一条记录向前移动以进行处理。在控制系统确认成功处理该记录之前,不会从队列中删除记录。在这种体系结构中,排队的数据基本上保证被记录。即使处理队列的机制失败,PLC(更重要的是自动化进程)也可以继续正常运行。在这种情况下,队列可能会积累未处理记录的积压,但一旦处理机制恢复在线,就可以快速处理它们。提供足够大的队列对象非常重要,因为它为数据泵提供了缓冲区。这使得控制系统能够经受住PLC和处理记录的机制之间可能发生的任何通信中断。

队列大小

PLC中的队列对象应该足够大,可以积累几个小时的记录,以便在通信问题得到解决和纠正时继续生产。一旦通信恢复,处理机制可以相对较快地处理积压的记录。因为记录是按顺序处理的,并且包含它们自己的时间戳,所以处理中的任何轻微延迟都不会造成什么后果。从PLC到历史数据库的数据可能会稍微延迟,但数据的完整性(和顺序)是保留的。

报警/故障

如果数据收集是关键任务,还应该实现一个警报,在队列备份时触发,累积到某个记录阈值。例如,如果队列大小可以支持500条记录,则可以选择在队列达到50条或100条时发出警报。告警阈值的选择取决于队列的大小、在“正常”操作期间队列的满程度以及控制支持人员的预期响应时间(用于发现和解决数据泵的任何问题)。

在队列完全被记录填满的场景中,任何新记录都不能添加到队列中(因此不会记录到结构化查询语言(SQL)数据库)。因此,还建议PLC逻辑在问题解决之前保持生产(以及任何新记录的生成)。否则,发生的事件将无法被正确地历史化。然而,如果生产吞吐量的优先级高于数据完整性,集成商和最终用户可能会选择不保留他们的流程。在这种情况下,PLC简单地丢弃任何“溢出”数据,不管队列是否已满,进程都将继续运行。

额外的注意事项

实现这种类型的数据泵的一个优点是,您可以“搭载”您的记录处理机制来触发控制系统中的其他操作。例如,使用新的“BatchID”处理的记录可能表明该单元的前一个BatchID已经完成,这意味着可以安全地为前一个Batch生成和分发报告。在另一个例子中,您可以选择标记消耗原材料的事件,以便它们可以通过向客户的ERP系统报告材料使用情况的附加流程运行。

技术的实现

虽然数据泵的PLC部分最好使用FIFO对象和支持逻辑来处理,但处理记录的FIFO机制可以采用多种形式。下面列出了一些选项,大致按照ECS建议的顺序:

  • 在点火感应自动化中,使用SQL桥模块提供的事务组。这些是Ignition中的可配置对象,可以使用触发器、握手标记和到表或存储过程的SQL连接进行设置。
  • 在Ignition中,使用Gateway范围内的“标签更改脚本”,它模拟事务组的行为,但允许以牺牲一些便利性为代价进行更多的定制。下面可以看到这个实现的一些示例屏幕截图。
  • 在罗克韦尔自动化的FactoryTalk View SE中,使用VBA代码定期检查PLC是否有新记录,执行SQL数据库函数来处理数据,并与PLC握手。
  • 通过一个自定义编写的应用程序(通常是。net windows服务或类似的),它既能监视PLC中的标记值,也能执行SQL函数。

样例实现

下面是管理记录FIFO的PLC逻辑的部分示例。注意,第一级处理队列的处理(通过FFU指令),而不是用新记录加载队列(通过FFL指令)。队列的加载将在PLC程序的其他地方处理。第二级在增加“Record_Rqst”触发器标记之前增加了一个短暂的延迟,该标记在外部监视更改。

提供:ECS Solutions

提供:ECS Solutions

这里显示了一个点火网关标签更改脚本,监控“Record_Rqst”标签值在我们的S88Builder控制系统之一。在本例中,触发器是PLC中的整数标记,每当卸载新记录并准备好进行处理时,触发器就会递增。

然后,Ignition执行以下脚本(为了简单起见,这里略去了)。更完整的解决方案将实现错误处理,或者可能在脚本库中实现,而不是直接在Tag Change脚本中实现。

提供:ECS Solutions

提供:ECS Solutions

在线

了解更多ECS的解决方案


作者简介:Randy Otto是ECS Solutions的首席执行官,在不同行业拥有超过25年的经验,包括玻璃纤维制造和定制装配机制造。在加入ECS之前,Randy为Premier System Integrators管理集成系统制造和过程控制系统的组装设备交付10年。在过去12年的大部分时间里,他负责管理ECS的业务开发和销售。Randy毕业于普渡大学,获得电气工程技术学位。他拥有南印第安纳大学的工商管理硕士学位。