APP下载

一种面向OPC UA消息通信的多优先级动态调度算法的设计与实现

2021-08-24何雨婷尹震宇李明时柴安颖

小型微型计算机系统 2021年8期
关键词:权值队列客户端

马 跃,何雨婷,尹震宇,李明时,柴安颖

(中国科学院大学,北京 100049)

(中国科学院 沈阳计算技术研究所,沈阳 110168)

1 引 言

随着世界经济的高速发展,基于信息化与产业化高度融合的智能制造先进理念已在工业制造领域引发影响深远的产业变革,也将引领未来全球制造业发展模式的前进与革新.目前德、美、韩、日等工业强国正积极推进以工业物联网为主导的第4次工业革命.OPC UA提供了一种工业数据交换的规范,通过OPC UA协议,工业现场设备不仅能够进行同层设备间的信息交互,同时也能够纵向通信,将设备信息集成至更高层的设备层中,位于工业系统不同层次的设备信息的交换和集成,使设备间的互操作性得到进一步提升[1].

OPC UA各方面研究成为研究热点.赵悦琪[2]设计了一种基于双向身份认证的OPC UA认证方式,对基本安全模型进行了优化,加强了用户信息保密、防止重放攻击、防止冒充等安全性能;黄惠群[3]研究了一种基于OPC UA技术的盾构实时监测系统,其采集层以OPC UA解决方案来完成实时数据采集和存储;魏旻[4]利用OPC UA提供的安全模型,设计了一种基于隐式证书的认证及密钥协商机制,完成安全通道建立,为OPC UA客户端与服务器之间建立安全会话提供保证;闵晓霜[5]基于国产化软硬件平台,设计并实现了一种OPC UA服务器,并在PLC控制系统中进行应用.柴处处[6]提出了基于OPC UA技术的实时数据服务,解决了数据采集平台中信息模型的一致问题,为处于智能制造体系中基础层的数据采集平台提供了一个开放的高效的通信服务.

然而在自动化系统中交互数据频繁,网络带宽资源有限,对网络资源的有效利用已成为重要研究内容.在工业控制系统中,重要的设备状态信息不能够及时传递到系统,会造成服务质量下降甚至产生严重的生产问题,OPC UA服务质量的问题仍等待解决.本文在对OPC UA规范进行研究,分析了多种队列调度算法的特点,提出了一种结合复杂优先级调度算法的OPC UA消息发送队列,并加以验证.

2 OPC UA相关研究

2.1 OPC UA概述

OPC UA是一种独立于平台的标准,通过这种标准,各种系统和设备可以通过各种类型的网络在客户机和服务器之间发送消息进行通信.OPC UA可以映射到各种通信协议中,数据可以以各种方式编码,以权衡可移植性和效率[7].OPC UA协议具有传统OPC不同方面的功能,同时还讲Web服务进行,同时规范复杂地址空间并构建统一数据模型,这也为协议实现、信息建模和服务器模型设计提供技术支撑,如图1所示.

图1 OPC UA体系图

2.2 OPC UA服务

OPC UA规范根据不同的用例定义了多种服务,如表1所示.这些服务由请求和应答消息组成,使用了Web服务的请求和应答机制.客户端需要发送一个请求给服务器,才能在服务器调用所请求的服务.服务器处理完请求后,会给客户端发送一个响应消息返回.由于消息是异步传输的,所有服务的调用都被定义成异步的,接受到的数据根据序列号排序还原[8].

表1 按用例划分的OPC UA服务

OPC UA的数据通信在不同系统间进行的数据交换,客户端和服务器运行在不同的网络节点上或不同的进程中,所以对于错误的探测和处理也很重要.基于这个原因,客户端对每个服务的调用都设置自己的超时时间(timeout).同时,超时时间随请求发送到服务器,用于探测超时不再需要返回的消息.

2.3 通信上下文

OPC UA服务器首先需要建立通信上下文,这使得OPC UA服务是有状态.正是由于这个原因,在OPC UA消息中不仅有传递设备数据的服务还有用于创建、保持以及修改通信上下文的服务,通信上下文层次如图2所示.

图2 通信上下文层次

安全通道以初始连接为基础,用于建立通信和消息交互所需的安全环境;会话是客户端程序与服务器程序相互连接的渠道,在安全通道中创建,位于安全通道的上层;订阅是服务器和客户端之间数据变化和通知的上下文,在一个会话中可以创建多个订阅;客户端需要进行监视数据变化的节点和需要收到通知的事件源绑定于订阅项中,一个订阅中可以创建多个监视项.

2.4 OPC UA信息

OPC UA规范定义的服务中,用来交换不同类型信息的服务如表2所示,其中有16个服务用来进行生产设备信息数据交互[9].

表2 OPC UA信息服务

3 OPC UA消息通信的多优先级动态调度算法

在本节中,分析了OPC UA通信及服务的特点,提出了一种基于多优先级最早时限优先的多级反馈队列算法(Multi-Layer Feedback Queue based on Earliest Deadline First with Multi Priority,MLFQ-EDF-MP),并根据该算法进行OPC UA消息队列设计,最后提出了适用于该算法的评价方法.

3.1 OPC UA服务分类

OPC UA是建立在TCP基础上的应用层协议,OPC UA栈用来处理OPC UA通信的3种必须任务,即数据编码、安全通信和数据传输.OPC UA二进制编码、UA-SecureConversation安全协议和UA TCP协议完成了客户端与服务器的通信.

通信时客户端与服务器分别建立TCP、安全信道以及应用程序层的连接.建立过程如图3所示.TCP层次的初始连接需要打开socket套接字并通过UA TCP协议发送HEL/ACK报文进行两次握手;安全信道层的连接通过安全信道服务验证双方身份信息;应用层通过会话服务建立并激活会话.以上3层连接的建立构成了OPC UA的通信上下文,基于OPC UA通信上下文的数据通信才能确可扩展性、可靠性和安全性[10].所有OPC UA的信息交互服务都建立于会话上.

图3 通信连接过程

OPC UA消息由服务器调用不同的服务生成,经过通信栈的编码和加密后通过网络连接发送.OPC UA消息结构如图4所示.每个OPC UA消息的消息头(Message Header)中包含了消息的时间戳,超时时间以及消息的服务类型等.

图4 OPC UA消息结构

根据OPC UA的服务类型和应用场景,可以将OPC UA规范定义的消息分为两类:信息消息(Information Message,IM)和通信上下文消息(Communication Context Message,CCM),其中IM消息为工业系统中用于传输设备信息的消息.根据不同的实时性可以分为4类,每种类型的消息如下:

1) CCM:其他信息发送的基础,其中包括建立初始连接(HEL/ACK消息)和返回错误的消息(ERR消息)以及建立通信上下文的消息(OpenSecureChannel,CreateSession,CreateMonitorItems,CreateSubscription)等;

2) PHM:实时性较强、优先级(Priority)较高的消息,如Event Publish消息;

3) PLM:具有较低的优先级和较低的实时性,在OPC UA消息中除了CCM、PHM和TCM外都是此类消息;

4) TCM:具有最低的优先级,为周期性发送的本地状态信息,如DataChange Publish消息.

3.2 基于MLFQ-EDF-MP算法的消息队列设计

本文提出的MLFQ-EDF-MP算法是一种适用于OPC UA通信的动态队列调度算法,为了实现对OPC UA消息队列的差异化管理和调度,本算法将消息时限、消息优先级以及消息应用场景作为参考因素,对消息进行分类和排序.

OPC UA是有状态的服务,通信上下文的改变会影响IM消息的交互.CCM和IM消息需以MLFQ算法进行调度[11,12],这两种消息在产生后分别进入服务保证队列和尽力服务队列.CCM消息的优先性最高,进入消息队列后抢占所有发送资源,只有CCM消息全部处理完成后才能调度IM消息.CCM在调度时采用先进先出(FIFO)的资源调度方式,以保证通信上下文的构建.

一种EDF-MP算法用来对IM消息进行调度.EDF-MP算法根据该权值(Weight)将各个队列进行调整并衡量每个队列的发送能力,消息权值根据消息优先级和消息时限等因素计算得出.不同优先级的队列都有不同的队列管理机制,IM消息进入各自消息队列后有不同的调度方式.由于该算法的变量为时限和优先级,可以避免低时限低优先级消息将高优先级消息无限挤占而造成的超时现象[13,14].

OPC UA消息队列构建时的基本思想就是在OPC UA服务接口和OPC UA栈之间将生成的消息根据服务分成不同的类型,进入不同的队列,对每个消息队列实施不同的管理方式[15].OPC UA通信栈在接收到消息时就根据消息头中的时间戳(timestamp)、服务ID(serviceid)以及超时时间(timeout)对消息进行分类,并按照响应的流量控制策略将消息组包并由OPC UA通信栈出口送至网络中.

根据OPC UA服务的特点,设计了如图5所示的OPC UA消息队列模型,共由4种队列组成,即3个尽力服务队列(Q1,Q2,Q3)和一个保证服务队列(Q0),其中CCM消息进入保证服务队列Q0,PHM类消息进入尽力服务队列Q1,PLM类消息进入尽力服务队列Q2,TCM类消息进入尽力服务队列Q3.

图5 OPC UA消息队列结构

OPC UA与其他网络协议类似,有最大消息负载,超过负载的消息会被切块,同一待发送消息的消息块通过消息指针连接成一个消息体.消息队列的公共属性有:队列长度、队列容量和指向消息体的队列头尾指针,尽力服务队列的属性还包含当前最大权值.CCM消息体由待发消息组成,PHM消息体和PLM消息类似,包括待发送消息、TTL和权值.

1) 权值:权值的计算函数为Fn(XTTL,XPri,XOverStack)(n=1,2,3),同类消息积压数量、消息优先级以及生存时限等因素都会影响权值的大小,在设置函数时应该注意一下几个要点:

i.TTL相同且优先级相同时,权值相同;

ii.TTL相同但优先级不同时,WPHM>WPLM>WTCM;

iii.Fn为分段函数.

2) TTL:消息剩余的有效时间.

在同组TCM信息中,能够反映设备当前状态的最新信息最重要,同组消息数和同组消息指针是TCM消息体中特有的属性,用来标记最后进入队列的消息.

3.3 算法描述

基于MLFQ-EDF-MP算法的队列调度流程如图6所示,实现过程分为以下几个步骤:

图6 MLFQ-EDF-MP算法流程

Step1.队列初始化:首先建立并初始化3个尽力服务队列(Q1,Q2,Q3)和一个保证服务队列(Q0)用于存放不同类型的消息;

Step2.消息入队:进入通信栈的消息分类后链入相应的队尾.特别的是,TCM消息体链入该队列同组消息队尾,并更新这组消息本组消息数;

Step3.队列选择:首先判断保证服务队列Q0中是否有未发送的消息体,如果存在未发消息,则选择保证服务队列的第1个消息,进入Step 6;如果保证服务队列Q0为空,则进入Step 4;

Step4.队列更新:更新尽力服务队列中消息体的TTL值,丢弃预发送TTL不大于0的消息体;根据权重更新函数(W= XPri * XOverStack / XTTL)更新队列中消息体的权值并调整队列中消息顺序;

Step5.全局择优:取3个尽力服务队列中权值最大的消息体Elemax发送,重新整理发送队列;

Step6.发送:将获取的OPC UA消息体传组包并发送,发送成功后,回到Step 3重新选择待发送消息.

3.4 评价方法

OPC UA消息队列对服务器服务质量(QoS)的影响因素有消息的丢包率和消息的优先调度性[16].消息的发送在网络时延和带宽固定的情况下会相互制约,即一类消息对网络的占用会对其他消息的发送产生影响,所以该OPC UA消息队列评估环境的网络是相同的.

OPC UA客户端对各类消息的接收情况为该消息队列模型的第一个评估标准.可以通过该评估指标计算各类消息在OPC UA客户端中的接受占比,从而观测出该队列模型对高优先级消息的优先发送特性,同时反映出优先级消息发送的公平性是否兼顾.

第2个评估标准为服务器的服务质量.利用分值奖惩机制对各优先级消息的发送情况进行评估[17],如表3所示.因 CCM、PHM、PLM 和 TCM 各队列的消息价值不同,则对每个队列发送消息的奖励和惩罚额度都要进行区分.CCM类消息为其他消息的交互构建基本通信环境,它的发送奖励和丢弃惩罚分数最高,其他消息依次排序,即A1>B1>C1>D1,A2>B2>C2>D2.

表3 奖惩机制

4 实验结果与分析

4.1 实验环境及数据

在该实验中,实验环境依赖于小型智能产线.根据该小型智能产线进行信息建模,将产线节点集成到OPC UA服务器的地址空间.实际工业系统中的数据往往TCM消息产生的频率高于其他几类消息,这会导致测试的结果随机性较强,不具有普遍性,且观测困难,在进行实验验证时需要固定消息的配比.测试执行过程如下:

1) 使测试OPC UA客户端与服务器建立基础通信上下文,包括初始连接、安全信道和会话;

2) 订阅目标节点的数据变化和事件通知;

3) 通过节点数值变化以及模拟事件触发订阅;

4) 读写与浏览地服务器地址空间中的节点信息;

5) 对客户端接收到的消息进行分析并得出结论.

4.2 实验参数设计

以泊松分布在发送能力150%的压力下对改进后的OPC UA服务器进行测试,观测客户端对每种类型消息的接受情况,根据评价指标计算OPC UA服务器的服务质量.

在实验中,将3种消息(PHM、PLM、TCM)的生成比例设置为1∶1∶2;服务质量评估分数A1、A2均设置为2,B1、B2设置为0.5,C1、C2设置为0.1,D1、D2设置为0.02;OPC UA消息队列算法生成函数如公式(1)所示:

(1)

4.3 通信和上下文连接测试

通过捕获的客户端服务器通信消息记录,观察建立连接和通信上下文情况,如图7所示.可以观察到,首先OPC UA初始连接通过HEL和ACK消息建立,在此基础上建立安全信道(OpenSecureChannel)、创建会话(CreateSession)、打开会话(ActivateSession)以及创建订阅(CreateMonitoredItems),通信上下文构建完成,证明了该算法对CCM类信息的最优抢占调度性.

图7 上下文连接信息记录

4.4 信息消息调度测试

对各类消息的发送情况进行统计,并与采用OPC UA规范标准服务器通信时的客户端接受消息情况进行对比.未改进的OPC UA服务器对消息处理的原则为先到先处理,即先进先出(FIFO).

实验参数设置的消息生成符合泊松流,消息发送配比为1∶1∶2,可知原OPC UA客户端接受到的各种类型消息分布比例为1∶1∶2.

图8为客户端接收信息中PHM消息所占比例,客户端接受到的PHM消息占比为58.6%.此时网络压力为正常通信时的150%,OPC UA消息队列中积压的PHM消息得到了优先调度导致该类消息发送占比升高.通过此结果可知,该算法对PHM消息的优先调度性,使得PHM消息具有最小的响应时间.

图8 PHM消息接收情况

图9为客户端接收信息中PLM消息所占比例,客户端接受到的PLM消息占比为28.91%.在设置算法生成函数时,PLM消息的优先级低于PHM消息,导致消息调度的优先性PLM低于PHM,因此客户端对PLM消息的接收量相比于PHM消息的接收量低.

图9 PLM消息接收情况

图10为客户端接收信息中TCM消息所占比例,客户端接收到的TCM消息占比为12.49%.由于TCM消息的优先级最低,且只发送相同订阅项同组消息中当前最新生成的消息,导致TCM类消息占比最低.

图10 TCM消息接收情况

4.5 服务质量测试

根据分值奖惩机制对该OPC UA消息队列的丢包和发送情况进行评估,客户端接收消息量为6000时的得分结果如表4所示.证明服务器的服务质量有明显提升,高优先级消息的丢包率和发送率有较大程度改善.但该消息队列的时间复杂度有所上升,队列的处理时间增加.

表4 奖惩机制

5 总 结

本文分析了OPC UA通信架构及OPC UA规范定义的标准服务,根据服务的应用和实时性需求等特征进行分析,将OPC UA消息归纳为4种不同的类型,并提出一种面向OPC UA消息通信的多优先级动态调度算法——MLFQ-EDF-MP算法.并基于该算法设计了OPC UA消息队列模型,差异性管理消息发送队列.提出了两种对该算法的评价方法.根据已有小型智能产线设备节点情况进行信息建模,将该智能产线节点集成到OPC UA服务器的地址空间,生成实施生产信息进行实验验证.实验证明,该算法能够适用于OPC UA通信,在OPC UA通信栈中应用的基于该算法的消息队列对差异化服务消息的调度起到了较好的调节作用.在构建了OPC UA通信上下文环境后,高实时性消息得到了优先处理,实时性消息也能够避免被无差别挤占无法发送的现象,这使得OPC UA服务器的服务质量得到了进一步提升.然而,该算法的时间空间复杂度高于优化前,对该算法的时空复杂度研究还有待研究.

猜你喜欢

权值队列客户端
你的手机安装了多少个客户端
“人民网+客户端”推出数据新闻
——稳就业、惠民生,“数”读十年成绩单
基于车车通讯的队列自动跟驰横向耦合模型
队列队形体育教案
虚拟专用网络访问保护机制研究
青春的头屑
财务风险跟踪评价方法初探
基于洪泛查询的最短路径算法在智能交通系统中的应用
新华社推出新版客户端 打造移动互联新闻旗舰
队列操练