段青娜,王文才,翟 洁,程 倩
(红云红河烟草(集团)有限责任公司,昆明 650231)
在企业信息化飞速发展的今天,计算机技术、网络通信技术、信息安全技术的不断成熟,让更多企业在新的时期以新的运营模式获利;人们也越来越认识到信息化技术在传统企业向信息化现代企业转型过程中所起的重要作用。在现代企业管理中,信息系统是不可或缺的一部分。信息系统实现了企业重要数据的高效、精确的管理,让数据可以安全存储、合理使用、范围共享,进而改善了企业的管理方式,增强了管理流程的合理性,提高了效率。高效的企业管理能让一个企业在市场竞争中具有强大的竞争力。要建设企业的信息化,就必须使用信息系统来管理企业。采用数据分析、流程控制等模型,用数据为企业的决策提供依据,使企业的设计、生产、销售、管理更加合理有效,在市场竞争的洪流中赢得一席之地,让企业走的更高更远[1-2]。
根据业务需求,对涉及的业务、数据、数据流向进行分类归纳,并基于RPC框架,制定了一套与上下游系统对接的通信架构,从而提高共享业务数据的准确性、完整性、时效性。通信框架的信息交换主要是在上位机、电气设备、上游系统之间进行的,开发一套高效的数据交换机制,可保证生产监控、调度的时效性[3]。
在工业软件中,为了保证在监控、调度方面的时效性,常使用C/S结构来开发信息系统。而RPC(Remote Procedure Call,远程过程调用)框架是采用了C/S结构的软件中常用的一种通讯框架[4],它的结构原理图如图1所示。
图1 RPC框架结构原理示意图
RPC是基于Socket,并对Socket底层进行一次封装的框架。它允许程序调用另一个地址空间(通常位于共享网络中的另一台机器上)的过程或函数,而不用软件开发者显示这个远程调用的编码细节。即软件开发者无论是调用本地的还是非本地的命令,从根本上来说,所调用执行的代码是完全一致的。
在传统软件的开发过程中,程序是在开发者的本地环境下编译生成的,并且只能运行在本地环境,计算机与程序形成一种本地调用关系。但在网络技术飞速发展的今天,这种传统的软件结构是无法满足当前的实际需求的。
传统的本地调用模式无法充分利用同节点的其他主机的计算性能和资源,比如CPU、GPU、内存等,也无法让代码在不同的环境中进行共享,这使得主机资源不能得到充分使用。
针对该情况,运用RPC模式,就可以让同局域网内的不同服务器之间共享处理环境和内存,随之将应用程序分布在多台服务器上。程序就像运行在一台单一的服务器上一样,可以通过方便的代码实现远程调用代码来实现代码共享,提高硬件设备的资源利用率,也可以将大量的计算处理放在性能较强的服务器上运行,从而降低前端对硬件设备的要求程度。
RPC作为普遍的C/S开发方法,具有高效、可靠等特点。但RPC方法的基本原则是忽略通讯的集体形式,转而通过最简单的方式来调用程序模块,让开发者能够专心实现业务逻辑,而不用去关心通讯过程。这就意味着RPC的传输数据包无法具有通用性。与Socket通讯方式相比,在传输相同的有效数据的情况下,RPC占用的网络带宽更大。
RPC模式从本质上来说也是一种C/S结构的通讯模式,比Socket通讯要高级一层。当RPC的通讯服务建立完成之后,客户端通过TCP/IP协议传输调用参数,并传输RPC的程序号到相应的服务器上,客户端将持续等待服务端的应答,或直至超时。服务端接收到客户端的调用请求后,会根据客户端传输过来的RPC服务号来决定具体调用那一段函数,并执行相应的代码,将执行结果返回给客户端。当服务端的RPC调用结束后,会发送相应的信号给客户端,客户端才会继续运行。这样一次完整的RPC调用就算结束了。在整个RPC调用过程中,通过程序号来确定具体调用的函数段,通过设备号来确定具体的执行设备,通过版本号来确定调用不同版本的代码段。
(1)传输协议(Protocol)
传输协议中各层都为上一层提供业务功能。为了实现数据在不同层次间进行传递,要对数据进行打包。通过向数据中加入包头和包尾的方式,来将一段数据打包成一个规范的数据流,这个过程就叫做数据封装。用户的所有数据都要经过多次封装,才能在网络上进行传输。传输协议的语法构成如下:
其中,各变量的类型及含义如表1所示。
表1 传输协议变量说明
客户端根据需要,调用服务端中的函数或过程,客户端将数据打包,服务端接收到数据包后拆包,根据两个标志位来判断客户端调用的函数,并根据数据包内容来读取客户端所传变量或数据。
(2)数据序列化层(Serialize)
序列化是将数据结构或对象转换成二进制串的过程,也就是编码的过程。为了数据在网络中方便传输,将数据包序列化为二进制数据,能够有效减少丢包和重包的发生。实现数据序列化的语句如下:
序列化数据封装的语句如下:
现今序列化的方案越来越多,各个方案都有其优点和缺点,它们在设计之初也都各有自己独特的应用场景。从RPC的角度来看,最感兴趣的有以下三点:
通用性:比如是否能支持Map等复杂的数据结构[5-6];
性能:包括时间复杂度和空间复杂度,由于RPC框架将会被企业内几乎所有服务使用,如果序列化上能节约一点时间,对整个企业的收益都将非常可观,同理如果在序列化上能节约一点内存,网络带宽也能节省许多;
可扩展性:对互联网公司而言,业务变化很快,如果序列化协议具有良好的可扩展性,支持自动增加新的业务字段,删除老的字段,而不影响老的服务,将会大大有利于系统的健壮性。
(3)传输层(Transport)
消息数据结构被序列化为二进制串后,下一步就要进行网络通信,Client和Server之间通过Socket长连接传输数据,并为每个客户端开启线程,实现NIO传输。数据传输语句如下:
(4)链接层(Linking)
链接层负责建立服务端与数据库以及UA服务器之间的链接。链接数据库的语句如下:
链接UAServer的语句如下:
(5)远程调用层
远程调用层主要是处理和响应客户端发送的请求,以及对数据的整合与处理。
系统结构及连接情况如图2所示。
图2 系统结构图
由图可知,客户端Client与服务端Server之间通过Socket长连接进行通讯,并伴有心跳检测,客户端下线后,服务端会自动断开与客户端的链接。
服务端与数据库之间使用SqlConnection进行连接。服务端向数据库发送Sql语句,数据库执行完毕后返回SqlDataReader给服务端。其具体通讯过程原理如图3所示。
图3 Server-DataBase之间通讯示意图
系统中的Server与OPC_Server之间的通讯是指服务端需要与下位机的电气设备通过PLC进行通讯,所以服务端需要通过OPC服务器进行数据中转。服务端与OPC服务器之间采用OpcUA方式连接[7]。配置完成的UAServer如图4所示。
图4 配置好的UAServer
RPC_Server与 UAServer之间通过 Profinet协议传输数据,由于PLC内存地址有限,就要求接口通讯内容要精简高效。
与编程语言类似,PLC中的数据类型也有String,bool,int,byte 之分,便于数据交互兼容。需要注意的是,PLC中的变量要设好读写权限,避免同一变量有双重“写权限”,不允许上位机与电气设备对同一个变量写入数据,这样能有效避免脏数据。PLC变量读写方式如图5所示。
图5 PLC变量读写方式
一般情况下企业都会同时拥有多个信息系统,如上游MES系统下达任务,辅料配盘信息系统接收到任务后负责执行。对于信息系统间的数据交互,可以搭建数据交互平台,以中间数据库的形式做数据交互。各个业务系统需要从其它业务系统抽取数据,一般都是经过汇总的数据。为统一管理,要求各业务系统把能够给其它系统提供的数据统一上传至中间库,由各业务子系统从中间库下载所需的数据[8]。
中间数据库的作用是为数据提供临时存储功能。在数据进行交互或采集的过程中,可将数据存储至中间数据库临时存储,并且能在转存过程中提供数据一致性检验功能,进而保证了数据的准确性。中间数据库还能实现全局数据共享,对不同的数据库链接,以及复杂的数据进行查询、检索和管理。
辅卷烟辅料在配盘过程中,物料与信息的同步至关重要,为实现数据的完整性与时效性,对基于RPC框架的辅料配盘信息管理系统做了介绍和设计。根据业务需求,基于RPC框架制定了一套与上下游系统对接的通信架构,实现了数据在不同系统间与电气设备进行数据交互。该设计可满足各业务的信息共享需求,有助于消除信息孤岛。
参考文献:
[1]徐建明,吕汉泰,张贵军,等.基于Web的工业机器人3D虚拟动态监控系统[J].高技术通讯,2017,27(3):254-260.XU Jianming,LV Hantai,ZHANG Guijun,et al.3D virtual dynamic monitoring system for industrial robot based on Web[J].Chinese High Technology Letters,2017,27(3):254-260.
[2]梁明炯.基于Thrift框架的数据交换方案[J].科技创新与应用,2015(13):66-67.LIANG Mingjiong.Data exchange scheme based on Thrift framework[J].Technology Innovation and Application,2015(13):66-67.
[3]胡波,谭良.HBase架构中RPC客户端的通信性能优化[J].计算机科学,2016,43(4):97-101.HUBo,TANLiang.Communication performance optimization of RPC client in HBase architecture[J].Computer Science,2016,43(4):97-101.
[4]查骏.基于NIO的远程调用框架的设计与实现[D].上海:复旦大学,2012.ZHA Jun.Design and implementation of remote call framework based on NIO[D].Shanghai:Fudan University,2012.
[5]蔡明章.基于OPC DA的OPC UA服务器研究[D].昆明:云南大学,2014.CAI Mingzhang.Research on OPC UA server based on OPC DA[D].Kunming:Yunnan University,2014.
[6]张艳军,王剑,叶晓平,等.基于Netty框架的高性能RPC通信系统的设计与实现[J].工业控制计算机,2016,29(5):11-12.ZHANG Yanjun,WANG Jian,YE Xiaoping,et al.Design and implementation of high performance RPC communication system based on Netty framework[J].Industrial Control Computer,2016,29(5):11-12.
[7]叶文全,高卫斌.基于AMF-RPC框架的.NET for flash网络应用程序[J].无线互联科技,2012(7):23-24.YE Wenquan,GAO Weibin..NET for flash network applications based on AMF-RPC framework[J].Wireless Internet Technology,2012(7):23-24.
[8]李胜军.基于Web的数据库技术探究[J].电子测试,2017(22).LI Shengjun.Research on database technology based on Web[J].Electronic Test,2017(22).