梁建才
(杭州电子科技大学,杭州 310018)
随着工业技术的发展以及物质水平的提高,产品复杂化使得工业生产面临越来越多的挑战。与此同时,为了满足不断变化的市场对定制化产品的要求,以传统的工业生产方式,当前的工业自动化生产力将很快饱和。因此,日益迫切的市场需求,需要一种更加灵活化与智能化的技术来代理传统的工业生产,以更具竞争力的方式来支持其生产。
“工业4.0”驱动了新一轮工业革命,被称之为第四次工业革命。其本质是通过数据流动构建自动化技术,将原本工业生产中的规模经济转向更具特色的范围经济。同时,推动产业改革,以之前同质化、规模化的成本来构建创新的异质化、定制化的智能产业。其中,提倡信息技术与物理设备共存,以网络进行互联的信息物理融合系统成为“工业4.0”这一工业革命的核心内容。2015年,中国也提出了自己的智能制造计划“中国制造2025”,其核心目的就是推进信息化与工业化的深度融合,推动智能制造的发展。
信息物理融合系统(Cyber-Physical System,CPS),基于网络的互联特性,连接了信息世界与物理世界,尤其是其中更加典型的工业信息物理融合系统,其本质就是现代互联网技术与传统工业控制系统的结合。与传统的工业控制系统相比,基于传感器设计的感知设备、基于运动控制的控制设备以及执行设备数量都有了剧烈的增长,与此同时大量设备端接入带来的高并发量和数据量,对服务器的性能有了更加高的要求。工业智能制造的核心是以运动控制为核心技术的智能化的机械控制技术,其中典型的代表就是可编程逻辑控制器和基于PLCopen标准的运动控制功能块。
基于上述讨论,本文提出了面向运动控制的信息物理融合系统的方案设计。根据主流的三层CPS体系结构[1],主要实现了在CPS的信息层,即计算单元、服务器,中消息的整个处理机制,包括基于Reactor模型与负载预测的响应机制以及为了满足CPS实现时特点[2],提高消息响应而实现的消息优先队列与时间周期管理机制。在物理层中,基于多代理智能系统(Multi Agent System,MAS)提出结合局部感知单元、控制单元与执行单元的CPSA(Cyber-Physical System Agent)用于实现核心功能需求[3],CPSA满足了CPS的实行性、多余性和自治性等性质,其核心特点是用于原子服务,即不可分割任务。同时,多CPSA通过多个原子服务的并行组合可以有效实现组合服务[4]。在验证阶段引入形式化技术,利用时间自动机建立运动系统的形式化描述[5],再通过Uppaal来验证运动系统的安全性与可靠性。
信息物理融合系统是集计算单元、网络通信以及物理设备于一体的混成系统。物理设备中的连续过程通常由计算单元中的离散信息控制,在信息采集与反馈控制基础上,引入计算单元与物理设备的深度融合,通过提高自治性的方式,有效控制物理设备,最终提供可靠的服务[6]。
目前主流的CPS体系结构是将CPS构建成三层层次架构,由物理层、网络层和信息层组成。物理层处于系统的最底端,主要工作是与客观物理世界的交互,核心构成是传感器与执行器,传感器负责客观物理世界的感知与信息采样,执行器只能具备特定的机械动作,接受控制指令执行相应操作。网络层负责信息的传输,工业控制系统中,系统层与设备层的通信方式多种多样,如Modbus协议、EtherCAT工业自动化现场总线以及TCP/IP网络通信。相对抽象的网络层却是CPS的核心纽带,用于连接整个系统,其中包括了各种通信协议与通信设备。信息层负责数据信息相关的工作,其作用包括对物理层中传感单元采集的信息进行处理、根据任务需求和资源的调度对执行单元生成控制指令以及系统整体的管理与状态监测,其构成包括终端、数据库以及服务器等一系列信息组件。
随着智能制造的发展,可编程逻辑控制器的作用日益凸显,而其中PLCopen组织所制定的该领域的编程标准与规范对推动行业发展与确保系统的可靠性起到了至关重要的作用。组织通过标准化的编程接口,用于统一各厂家在PLC开发平台中编程规范。其中,通过将PLC中运动控制与IEC61131标准中定义的编程语言相结合,封装了传统数控系统的控制算法,提供了利用图表示的运动控制功能块,降低研发运动控制系统的门槛[7]。
PLCopen标准中的运动控制功能块主要分为管理模块和运动模块,管理模块负责运动过程中各种实时运动信息的读取,运动模块用于具体运动的控制,包括单轴运动、多轴运动。通过建立轴状态机,可以将轴的运动以离散状态来表现,并通过形式化的方式进行验证。根据PLCopen标准中规定,运动控制中的基本状态包括使能态(Disable,DS)、回零态(Homing,HM)、保持态(StandStill,SS)、停止态(Stopping,SP)、错误停止态(ErrorStop,ES)、离散运动态(Discrete Motion,DM)、连续运动态(Continue Motion,CM)以及同步运动态(Synchronized Motion,SM)等8种[8]。
为了保证软件的可靠性,在软件开发过程中,开发人员通常会采用单元测试的方式,而后期也会有专门的测试人员对软件的可靠性进行进一步测试,但是这两种方式都属于后验方式,验证过程和开发过程处于交织过程,通过不断迭代来确保软件的可靠性。而模型验证则是利用系统的状态模型,通过遍历状态的方式检测系统是否能达到预期的功能,以此确保系统的可行性与安全性。
由Uppsal大学和Aalborg大学联合开发的Uppaal就是一种可以验证实时系统的模型验证工具,支持时间自动机的验证。有限状态自动机可以用于表述系统内部状态的转变,但是对于实时系统的描述却有些不足,时间自动机在有限状态机的基础上引入时间约束,因此时间自动机的本质也是一个包括有限节点和边的图,主要通过在边上引入表示时间的变量,用于约束和限制自动机的行为。
目前高性能服务器主要应用于两个大方向,一是服务客户终端的商业应用服务器,其特点是利用集群、分布式、微服务等方式实现系统性能提升,另一个是以共享单车为代表的物联网服务器,用于服务物理设备。参考这两种服务器开发,并结合CPS系统特点和业务需求,将信息层分成了5个主要部分,包括授权与验证、业务接受与分发、消息处理机制、异常处理与日志记录,数据持久化与缓存。授权与验证模块、异常处理与日志记录这两者的功能有所差异,但是目的都是为了确保系统的可靠性与安全性,授权与验证的目的属于在消息进入服务器核心功能区域之前的防护,通过验证设备的固有设备号以及IP等方式,进行过滤验证,确保设备的合法性。异常处理与日志记录部分,除了需要监测服务器自身的状态信息,对设备单元出现的问题也需要根据实际情况进行处理、记录,包括重传、重启甚至提示人工干预等方式。数据持久化是利用MySQL等数据库进行业务数据与设备信息的持久化存储,而缓存机制则是利用Redis等非关系型数据库进行特定信息的短时存储,作用是服务异常处理、消息处理等模块。业务接受与分发模块主要作用是区分当前业务服务对象,主要包括设备单元和客户终端。而消息处理机制则是为了实现CPS而对传统工业服务器核心功能进行的优化设计[9],同时也是本文介绍的核心内容,CPS系统架构如图1所示。
图1 CPS系统架构
通信协议是用于消息发送端和消息接收端共同遵守的规范。消息在传输过程中,表现为无意义、无明确含义的二进制序列,因此在消息传送之前,首先需要确定一个消息“模板”。模板的作用是规定消息的具体格式,在消息发送之前,需要根据模板的要求进行设计,将消息具体内容,如控制指令、状态指令等,按具体格式进行切割、分配。同时,消息的接受端在接受到无意义的二进制序列后,也是根据协议模板的要求,解析相应消息的内容。
传统的工业系统,主要目的是用于生成同质化的产品,其获利方式是其规模化的产品数量,因此系统设计之初,就会将物理设备、服务器架构进行固定设计,这也要求通信采用现有的协议,如Modbus协议、MQTT协议甚至Http协议等。CPS出现的目的是解决市场对定制化产品的大量需求,物理系统是多设备、多组合的,因而系统中必然出现多种协议方式。在服务器中采用动态配置的方式,用于运行时加载相应设备中协议的编码、解码代码,并通过引入责任链模式,分别对不同的协议进行解析,而消息处理过程中,核心内容部分必然需要一个协议,用于不同协议解析后的统一性。
根据业务需求,本文设计了一种较轻量级的通信协议,用于满足系统的通信要求。自定义的私有协议,除了能够满足了消息处理机制的功能需求外,同时也考虑未来设备扩展和业务变更的要求[10]。如图2所示,消息由消息首部和消息内容组成,首部的长度固定,由唯一性ID、设备号、优先级、消息类型、序列号组成,消息内容采用键值对的方式进行存储,首部各组成部分作用如下:
图2 消息协议的基本结构
1)唯一性ID
利用用户信息与订单信息生成唯一性ID,即ID=F(UserInfo+OrderInfo)。在信息物理融合中,产品和用户存在一对一关系,唯一性ID保证了系统对该用户及订单信息持续性追踪。在关系性数据库MySQL中,利用该ID可以有效地进行数据的存储与读取。同时,在Redis中进行消息指令缓存,确保消息的可靠性。
2)设备号
工业生产系统,尤其是小型生产设备系统,往往采用单服务器+单控制器的方式,如用于订单信息管理的服务器与用于设备控制的PLC进行组合。工业设备的控制全部由PLC进行执行,IO模块负责传感器等相关信号的输入、输出,基于EtherCAT协议传输驱动器设备控制信号。信息物理融合系统,通常采用多服务器+多设备单元的方式,多服务器用于保证系统的可靠性与支持高负载,多设备单元用于支持定制化需求,因此在通信协议中引入设备号用于标记发送端的设备单元。
3)优先级
不同的设备之间,根据任务的重要程度不同,对设备的权重进行安排,从而引入优先级的概念,因此相应设备发出的消息也具有了优先级。优先级可以确定消息在消息处理机制中的处理顺序,使紧急的、要求立刻响应的消息得到及时响应,以使设备单元能迅速执行。
4)消息类型
在服务器与设备单元之间,不同的设备单元所负责的任务不同,如生产线中负责抓取的机械臂、负责喷码的喷码设备以及负责监控的HMI设备。而根据任务的不同,需要建立不同的连接方式,当设备单元需要不断轮询服务器,即消息发送间隔较短,通过建立长连接可以减少服务器线程压力,而消息发送间隔长的抓取设备,采用短连接就不会一直占用服务器资源,即时释放连接,有效保障了多设备单元的连接。因此,在协议中规定了消息类型用于确定连接方式,进而可以采取相应的业务处理逻辑。
5)序列号
在常规的消息协议中,为了确保数据在传送过程中正确无误,往往采用校验码的方式,用于检验是否出现误码。由于协议本身是在TCP协议之上的应用层协议,因此可靠性得到TCP自身特性的保证,通过在系统中引入序列化机制中的序列号功能,利用序列号的方式来减少校验过程的性能消耗,阻止系统处理来自恶意设备的消息,在保证系统可靠的同时,提高系统的性能。
2.3.1 基于Reactor模型与负载预测的响应机制
Reactor模型,尤其是较多使用的主从Reactor多线程模型,的特点是将TCP/IP中通信的连接与处理部分用多线程的方式分割开来。传统的工业服务器,由于服务的对象往往只有数量较少的生产设备,因此大多通过线程池的方式,将每个连接分发了相对独立的线程处理,而由于业务处理的复杂性以及I/O操作的阻塞特性,限制了服务器性能,消息响应较慢,因此这种通信机制不能满足CPS高设备请求并发量的业务需求。通过引入主从Reactor多线程模型,将服务器对端口的轮询监听服务和业务数据处理分割开来,提高服务器性能。主线程负责监听端口,只负责对新接入的连接进行响应,从线程负责业务处理。
线程的创建与销毁,对系统的性能有一定的影响,在高并发服务器中这个性能影响尤其严重,所以引入线程池的方式,可以有限减少线程的创建造成的系统负担,而线程池中闲置线程的数量可以通过负载预测的方式进行数量控制。通过定义采样周期T,使用Δw表示两次观测线程池变化量,闲置线程池的线程量用m表示,消息处理的负载能力用Lt表示,因此任务所需的线程增量Δk则可以表示为:
线程的增量表示下一阶段消息处理需要增加的线程数量,引入这种动态负载预测方式可以有效控制闲置线程的数量,减少系统资源的占用。
2.3.2 消息优先队列与时间周期管理机制
传统的应用程序常采用消息队列作为处理消息的方式,这种消息处理机制通过轮询的方式不断读取队列中的消息,消耗并处理队列头部消息,而新到消息不断添加到队列尾部。
信息物理融合系统和传统工业系统不同,不同的设备单元、多样的消息内容导致传统的消息机制不能保证消息处理的时间周期,某一条消息的过长响应时间对设备单元的影响,会导致其他设备单元出现执行问题。同时,设备单元的重要性和不同消息的复杂度,要求信息物理融合系统对不同的消息需要提供更加合理的响应时间,因此本文设计并实现了一种新的消息机制以便解决消息响应实时性和优先级问题。消息处理机制的设计如图3所示。
图3 CPS信息层中的消息处理机制
将传统的消息队列改为有优先级的优先队列,根据消息的权重,将消息保存在大顶堆中。权重较大、优先级较高的消息保存在堆的顶端,而新接收到的外部消息首先插入堆的尾端,再根据优先级进行动态调整,由此构成基本的消息处理模块。同时,为了控制消息处理的时间周期,以此保证设备单元响应的实时性,在消息处理机制中引入时间周期管理模块。时间周期管理模块负责分配处理消息的时间片周期,保证单个消息在其相应的时间周期中得到处理。若消息的处理时间超过设置的周期范围,可以根据具体情况采用重试、重传等方式进行处理,保证系统的可靠性。对于某设备单元的消息处理,如果出现多次、较长处理时间等问题,可利用时间周期管理模块进行日志记录。而消息处理机制中的处理模块则根据单个消息中的解析内容以及系统的设备状态量,生成相应的响应消息,即设备单元的控制信息。
工业生产系统往往采用单主控的方式,如基于可编程逻辑控制器PLC设计的控制系统。PLC系统的本质是循环运行的系统,利用信息输入改变内部的运行状态,利用输出信息控制相应的执行机构。感知单元由各种传感器组成,包括限位传感器、温度传感器、红外传感器等,PLC在执行过程中不断轮询各个感知单元相应的状态位信号,变更不同的控制路线,因此协调不同执行机构进行工作,物理系统结构,如图4所示。在CPS系统中,设备单元数量的增多,这因此导致PLC对复杂的环境变化和不可预测的物理交互往往不能全部兼顾,而且循环控制逻辑和基于事件响应的常规思维方式又有所差异,这两个原因导致面向PLC编程变得更加复杂[12]。
图4 基于PLC的传统构建模式
通过引入多代理智能系统的概念,将生产系统中的任务进行最低限度的划分,如通过两个基本的限位传感器、单轴模块、驱动器以及PLC构成一个基本的设备单元CPSA,其核心作用就是实现负载的推拉动作,将这一工作称为一个原子服务,这样我们同样可以基于PLC、传感器和机械臂构成一个CPSA,其作用就是机械臂的末端从一点运行到另一点,实现抓取功能,如图5所示。CPSA内部的功能代码可以根据不同需求与方式进行开发,但是同类型的CPSA其外在表现功能应属于同一类别。通过这种设计方式,同时基于PLCopen标准的运动控制模块,CPSA内部可以用一个时间自动机来表示运动过程的状态转换[11],但是对外只表现出请求态、执行态、停止态等少量状态,这避免了传统PLC开发的复杂度,也避免了信息物理融合系统在多设备单元情况下容易出现的状态空间爆炸问题。
图5 基于CPSA的构建模式
为了研究面向运动控制的信息物理融合系统方案,实验室搭建了一套可定制化生产饮品的生产线设备。项目前期采用的是传统控制方案,流水线设备采用PLC进行整体的控制,所以服务器的核心作用是进行订单管理,PLC每生产完一批饮品,则通过网络请求订单数据,根据这种特点,服务器采用了普通的BIO方式用于处理网络请求。在CPS系统中,采用了本文的模型用于提高系统性能,因此在实验中通过分析系统的资源消耗、响应时间等方面对两种服务器的性能进行对比。
由于并发量的提高,服务器的线程数量激增,对系统资源影响,尤其是CPU占用率的影响会比较明显。利用Java中CountDownLatch同步辅助类实现一个可以提供高并量的模拟程序,用于模拟大量物理设备同时访问服务器的实验。如图6所示,普通IO在并发量增高时,CPU占用率持续上升。而采用本文模型,事先设定了主从Reactor中所需的线程数,虽然最初使CPU占用比普通IO方式略高,但是占用率上升比较平缓且不高,负载预测机制保证了服务器在应对稳定增长并发量时,逐渐增加工作线程,确保了系统的稳定性。
图6 服务器资源消耗对比
图7 服务器响应时间对比