基于OPC UA的自动化立体仓库监控系统设计
2021-06-28赵增辉
赵增辉,冯 旭
(中国电子科技集团公司第二研究所,山西 太原 030024)
随着我国智能制造及物流仓储的快速发展,设备之间的互联互通、软件平台的系统集成,成为了制造业发展的一项关键问题[1]。自动化立体仓库中的WCS、WMS、监控系统和信息采集系统之间的无缝对接,以上几大系统与外部上游ERP、SAP等系统的数据和指令交互,在智能仓储物流领域有着非常重要的意义。
监控系统承载着自动化立体仓库的众多可视化功能,是用户针对设备参数进行实时观测的重要门户。基于OPC UA协议的监控系统具有更好的实时性、安全性和平台兼容性,依托于其体系架构中的TCP/IP Socket传输,较传统方式更为稳定和高效。
1 OPC UA特点
OPC UA基于OPC基金会提供的新一代技术,提供安全、可靠和独立于厂商的,实现原始数据和预处理的信息从制造层级到生产计划或ERP层级的传输。使用OPC UA技术,所有需要的信息可随时随地到达每个授权应用和每个授权人员。OPC UA是目前已经使用的OPC工业标准的补充,提供重要的一些特性,包括如平台独立性,扩展性,高可靠性和连接互联网的能力[2]。OPC UA不再依靠DCOM,而是基于面向服务的架构(SOA),它具备以下优势:
1)通过一个通用接口集成之前所有OPC的特性和信息。
2)更加开放,具有平台无关性,WINDOWS、Linux平台都能兼容。
3)扩展了对象类型,支持更复杂的数据类型,例如变量,方法和事件。
4)在协议和应用层集成了安全功能,更加安全。
5)易于配置和使用。
2 通讯架构设计
本系统的通讯架构分为四层进行搭建,自下而上分别为:数据源、OPC服务、数据感知服务及WCS服务,如图1所示。
图1 通讯架构图
◆数据源:为PLC中的、被上位系统所需读取或写入的状态点,PLC应支持OPC UA协议。
◆OPC服务:一般采用设备厂商所提供的OPC UA服务,如果个性化需求较多,也可以进行自主搭建或采用第三方OPC UA服务。OPC UA服务是旨在访问实时数据,并提供来自不同供应商的其他功能,如事件处理,日志记录等。它充当OPC客户端和本地通信的数据源之间的翻译器,具有读取和写入PLC的功能。
◆数据感知服务:既作为OPC服务的客户端,也同时作为WCS功能流程的驱动器,在监测PLC状态点信息变化的同时,调取相应的WCS服务和具体功能。在遵循OPC UA订阅机制的基础上,实现程序变量的异步更新。该服务针对上位系统关注的每个PLC状态点建立信息模型(Item),包括:变量地址、变量类型、变量值、变量句柄、变量值触发事件以及变量备注。其中,通过自定义变量值触发事件可以避免使用定时器对PLC循环访问和读取,减少资源占用,提高响应速度。
◆WCS服务:提供上位系统功能流程服务,数据库记录监测等内容,其中的功能服务可与自定义Item中的变量值触发事件相绑定。利用SQL Server的SQL Dependency机制,可实现数据库内容变化与相应功能的异步触发,大大减少客户端不断轮询访问数据库所导致的卡顿。
通过四层架构的搭建,在开发时将软件系统划分的更为清晰明了,为标准化开发提供帮助;可以使团队成员各司其职,分工于各层的代码编写中,专注开发系统架构中的每一层;降低软件系统中各结构层之间的耦合度,增加各模块的可重用性,降低开发成本和后期维护成本。
3 可视化功能实现
自动化立体仓库监控系统包括以下核心可视化功能,实现案例如图2所示。
◆设备侧视动态图:堆垛机实时位置、提升机实时位置、货叉上托盘或料箱状态。
◆设备俯视动态图:各堆垛机实时位置、各提升机实时位置、传输线上托盘或料箱状态。
◆行走机构实时参数:堆垛机当前速度、加速度、功耗、累计运行时间、电流值等。
◆升降机构实时参数:提升机当前速度、加速度、功耗、累计运行时间、电流值等。
◆挂取机构实时参数:货叉当前速度、加速度、功耗、累计运行时间、电流值等。
◆当前任务列表:显示当前任务队列情况,包括作业号、取货口、设备号、托盘或料箱号、源货位、目标货位、作业类型、生成时间、执行时间、作业状态、优先级等。
◆统计图表:设备报警频次统计、出入库次数统计、料箱使用频率统计等。
图2 监控系统案例界面
4 OPC UA服务通讯实例
下面以数据订阅和自定义信息模型为例,来说明OPC UA异步通讯方式的应用。
1)订阅包含一组由客户端分配的监控项,监控项可以生成通知,并由订阅发送给客户端。订阅以回应发布请求的方式向客户端发送通知消息。发布请求通常以接收顺序存储到Session中,当有通知需要发送时,在每次发布循环时,会从队列中取出相应的请求,并发送通知到客户端,如果没有待发送通知,请求则不会从队列中被删除。关键代码如下:
PLCNodesFactory.AddClientItems();
if (mySubscription == null){mySubscription = myClientHelperAPI.Subscribe(200);}
int itemCount = 0;
for (int i = 1; i < ClientItem.Count; i++){
itemCount++;
string monitoredItemName = itemCount.ToString();
myMonitoredItem=myClientHelperAPI.AddMonitoredItem(mySubscription,((PLCItem)ClientItem[i])ServerAddress.ToString(), monitoredItemName, 1);
myClientHelperAPI.AddMonitoredItem(new NodeId(ItemIDs[i],m_NameSpaceIndex),i, ClientApi_ValueChanged, 100, out monitoredItemServerHandle);}
myClientHelperAPI.ItemChangedNotification+=newMonitoredItemNotificationEventHandler(Notification_MonitoredItem);
2)针对OPC UA订阅机制建立的自定义信息模型,可以在已订阅的PLC变量值发生变化时,触发相应的绑定事件,进行异步动作。下面以父类为例给出关键代码:
public delegate void ChangeHandler(object sender, object v);
public class PLCItem : INotifyPropertyChanged{
public event PropertyChangedEventHandler PropertyChanged;
public Type TypeOfItem;
public string Comment;
public int ServerHandle { get; set; }
public virtual void OnPropertyChanged(string propertyName){
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null){handler(this, new PropertyChangedEventArgs(propertyName));}}
protected virtual void OnChanged(object sender, object v, object old, ChangeHandler handler){
if (!v.Equals(old) && handler != null){handler(sender, v);}}}
5 结束语
本文介绍了OPC UA的概念与特点,探讨了基于OPC UA的自动化立体仓库监控系统的通讯架构和核心功能,给出了订阅模式中软件系统与OPC UA服务通讯的实例,设计了一种具有异步反馈功能的自定义信息模型。文中阐述的设计思路已经通过了多个项目的实际验证,具有一定的借鉴意义。