段青娜,王文才,翟 潔,程 倩
(紅云紅河煙草(集團(tuán))有限責(zé)任公司,昆明 650231)
在企業(yè)信息化飛速發(fā)展的今天,計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)通信技術(shù)、信息安全技術(shù)的不斷成熟,讓更多企業(yè)在新的時(shí)期以新的運(yùn)營(yíng)模式獲利;人們也越來越認(rèn)識(shí)到信息化技術(shù)在傳統(tǒng)企業(yè)向信息化現(xiàn)代企業(yè)轉(zhuǎn)型過程中所起的重要作用。在現(xiàn)代企業(yè)管理中,信息系統(tǒng)是不可或缺的一部分。信息系統(tǒng)實(shí)現(xiàn)了企業(yè)重要數(shù)據(jù)的高效、精確的管理,讓數(shù)據(jù)可以安全存儲(chǔ)、合理使用、范圍共享,進(jìn)而改善了企業(yè)的管理方式,增強(qiáng)了管理流程的合理性,提高了效率。高效的企業(yè)管理能讓一個(gè)企業(yè)在市場(chǎng)競(jìng)爭(zhēng)中具有強(qiáng)大的競(jìng)爭(zhēng)力。要建設(shè)企業(yè)的信息化,就必須使用信息系統(tǒng)來管理企業(yè)。采用數(shù)據(jù)分析、流程控制等模型,用數(shù)據(jù)為企業(yè)的決策提供依據(jù),使企業(yè)的設(shè)計(jì)、生產(chǎn)、銷售、管理更加合理有效,在市場(chǎng)競(jìng)爭(zhēng)的洪流中贏得一席之地,讓企業(yè)走的更高更遠(yuǎn)[1-2]。
根據(jù)業(yè)務(wù)需求,對(duì)涉及的業(yè)務(wù)、數(shù)據(jù)、數(shù)據(jù)流向進(jìn)行分類歸納,并基于RPC框架,制定了一套與上下游系統(tǒng)對(duì)接的通信架構(gòu),從而提高共享業(yè)務(wù)數(shù)據(jù)的準(zhǔn)確性、完整性、時(shí)效性。通信框架的信息交換主要是在上位機(jī)、電氣設(shè)備、上游系統(tǒng)之間進(jìn)行的,開發(fā)一套高效的數(shù)據(jù)交換機(jī)制,可保證生產(chǎn)監(jiān)控、調(diào)度的時(shí)效性[3]。
在工業(yè)軟件中,為了保證在監(jiān)控、調(diào)度方面的時(shí)效性,常使用C/S結(jié)構(gòu)來開發(fā)信息系統(tǒng)。而RPC(Remote Procedure Call,遠(yuǎn)程過程調(diào)用)框架是采用了C/S結(jié)構(gòu)的軟件中常用的一種通訊框架[4],它的結(jié)構(gòu)原理圖如圖1所示。
圖1 RPC框架結(jié)構(gòu)原理示意圖
RPC是基于Socket,并對(duì)Socket底層進(jìn)行一次封裝的框架。它允許程序調(diào)用另一個(gè)地址空間(通常位于共享網(wǎng)絡(luò)中的另一臺(tái)機(jī)器上)的過程或函數(shù),而不用軟件開發(fā)者顯示這個(gè)遠(yuǎn)程調(diào)用的編碼細(xì)節(jié)。即軟件開發(fā)者無論是調(diào)用本地的還是非本地的命令,從根本上來說,所調(diào)用執(zhí)行的代碼是完全一致的。
在傳統(tǒng)軟件的開發(fā)過程中,程序是在開發(fā)者的本地環(huán)境下編譯生成的,并且只能運(yùn)行在本地環(huán)境,計(jì)算機(jī)與程序形成一種本地調(diào)用關(guān)系。但在網(wǎng)絡(luò)技術(shù)飛速發(fā)展的今天,這種傳統(tǒng)的軟件結(jié)構(gòu)是無法滿足當(dāng)前的實(shí)際需求的。
傳統(tǒng)的本地調(diào)用模式無法充分利用同節(jié)點(diǎn)的其他主機(jī)的計(jì)算性能和資源,比如CPU、GPU、內(nèi)存等,也無法讓代碼在不同的環(huán)境中進(jìn)行共享,這使得主機(jī)資源不能得到充分使用。
針對(duì)該情況,運(yùn)用RPC模式,就可以讓同局域網(wǎng)內(nèi)的不同服務(wù)器之間共享處理環(huán)境和內(nèi)存,隨之將應(yīng)用程序分布在多臺(tái)服務(wù)器上。程序就像運(yùn)行在一臺(tái)單一的服務(wù)器上一樣,可以通過方便的代碼實(shí)現(xiàn)遠(yuǎn)程調(diào)用代碼來實(shí)現(xiàn)代碼共享,提高硬件設(shè)備的資源利用率,也可以將大量的計(jì)算處理放在性能較強(qiáng)的服務(wù)器上運(yùn)行,從而降低前端對(duì)硬件設(shè)備的要求程度。
RPC作為普遍的C/S開發(fā)方法,具有高效、可靠等特點(diǎn)。但RPC方法的基本原則是忽略通訊的集體形式,轉(zhuǎn)而通過最簡(jiǎn)單的方式來調(diào)用程序模塊,讓開發(fā)者能夠?qū)P膶?shí)現(xiàn)業(yè)務(wù)邏輯,而不用去關(guān)心通訊過程。這就意味著RPC的傳輸數(shù)據(jù)包無法具有通用性。與Socket通訊方式相比,在傳輸相同的有效數(shù)據(jù)的情況下,RPC占用的網(wǎng)絡(luò)帶寬更大。
RPC模式從本質(zhì)上來說也是一種C/S結(jié)構(gòu)的通訊模式,比Socket通訊要高級(jí)一層。當(dāng)RPC的通訊服務(wù)建立完成之后,客戶端通過TCP/IP協(xié)議傳輸調(diào)用參數(shù),并傳輸RPC的程序號(hào)到相應(yīng)的服務(wù)器上,客戶端將持續(xù)等待服務(wù)端的應(yīng)答,或直至超時(shí)。服務(wù)端接收到客戶端的調(diào)用請(qǐng)求后,會(huì)根據(jù)客戶端傳輸過來的RPC服務(wù)號(hào)來決定具體調(diào)用那一段函數(shù),并執(zhí)行相應(yīng)的代碼,將執(zhí)行結(jié)果返回給客戶端。當(dāng)服務(wù)端的RPC調(diào)用結(jié)束后,會(huì)發(fā)送相應(yīng)的信號(hào)給客戶端,客戶端才會(huì)繼續(xù)運(yùn)行。這樣一次完整的RPC調(diào)用就算結(jié)束了。在整個(gè)RPC調(diào)用過程中,通過程序號(hào)來確定具體調(diào)用的函數(shù)段,通過設(shè)備號(hào)來確定具體的執(zhí)行設(shè)備,通過版本號(hào)來確定調(diào)用不同版本的代碼段。
(1)傳輸協(xié)議(Protocol)
傳輸協(xié)議中各層都為上一層提供業(yè)務(wù)功能。為了實(shí)現(xiàn)數(shù)據(jù)在不同層次間進(jìn)行傳遞,要對(duì)數(shù)據(jù)進(jìn)行打包。通過向數(shù)據(jù)中加入包頭和包尾的方式,來將一段數(shù)據(jù)打包成一個(gè)規(guī)范的數(shù)據(jù)流,這個(gè)過程就叫做數(shù)據(jù)封裝。用戶的所有數(shù)據(jù)都要經(jīng)過多次封裝,才能在網(wǎng)絡(luò)上進(jìn)行傳輸。傳輸協(xié)議的語法構(gòu)成如下:
其中,各變量的類型及含義如表1所示。
表1 傳輸協(xié)議變量說明
客戶端根據(jù)需要,調(diào)用服務(wù)端中的函數(shù)或過程,客戶端將數(shù)據(jù)打包,服務(wù)端接收到數(shù)據(jù)包后拆包,根據(jù)兩個(gè)標(biāo)志位來判斷客戶端調(diào)用的函數(shù),并根據(jù)數(shù)據(jù)包內(nèi)容來讀取客戶端所傳變量或數(shù)據(jù)。
(2)數(shù)據(jù)序列化層(Serialize)
序列化是將數(shù)據(jù)結(jié)構(gòu)或?qū)ο筠D(zhuǎn)換成二進(jìn)制串的過程,也就是編碼的過程。為了數(shù)據(jù)在網(wǎng)絡(luò)中方便傳輸,將數(shù)據(jù)包序列化為二進(jìn)制數(shù)據(jù),能夠有效減少丟包和重包的發(fā)生。實(shí)現(xiàn)數(shù)據(jù)序列化的語句如下:
序列化數(shù)據(jù)封裝的語句如下:
現(xiàn)今序列化的方案越來越多,各個(gè)方案都有其優(yōu)點(diǎn)和缺點(diǎn),它們?cè)谠O(shè)計(jì)之初也都各有自己獨(dú)特的應(yīng)用場(chǎng)景。從RPC的角度來看,最感興趣的有以下三點(diǎn):
通用性:比如是否能支持Map等復(fù)雜的數(shù)據(jù)結(jié)構(gòu)[5-6];
性能:包括時(shí)間復(fù)雜度和空間復(fù)雜度,由于RPC框架將會(huì)被企業(yè)內(nèi)幾乎所有服務(wù)使用,如果序列化上能節(jié)約一點(diǎn)時(shí)間,對(duì)整個(gè)企業(yè)的收益都將非??捎^,同理如果在序列化上能節(jié)約一點(diǎn)內(nèi)存,網(wǎng)絡(luò)帶寬也能節(jié)省許多;
可擴(kuò)展性:對(duì)互聯(lián)網(wǎng)公司而言,業(yè)務(wù)變化很快,如果序列化協(xié)議具有良好的可擴(kuò)展性,支持自動(dòng)增加新的業(yè)務(wù)字段,刪除老的字段,而不影響老的服務(wù),將會(huì)大大有利于系統(tǒng)的健壯性。
(3)傳輸層(Transport)
消息數(shù)據(jù)結(jié)構(gòu)被序列化為二進(jìn)制串后,下一步就要進(jìn)行網(wǎng)絡(luò)通信,Client和Server之間通過Socket長(zhǎng)連接傳輸數(shù)據(jù),并為每個(gè)客戶端開啟線程,實(shí)現(xiàn)NIO傳輸。數(shù)據(jù)傳輸語句如下:
(4)鏈接層(Linking)
鏈接層負(fù)責(zé)建立服務(wù)端與數(shù)據(jù)庫以及UA服務(wù)器之間的鏈接。鏈接數(shù)據(jù)庫的語句如下:
鏈接UAServer的語句如下:
(5)遠(yuǎn)程調(diào)用層
遠(yuǎn)程調(diào)用層主要是處理和響應(yīng)客戶端發(fā)送的請(qǐng)求,以及對(duì)數(shù)據(jù)的整合與處理。
系統(tǒng)結(jié)構(gòu)及連接情況如圖2所示。
圖2 系統(tǒng)結(jié)構(gòu)圖
由圖可知,客戶端Client與服務(wù)端Server之間通過Socket長(zhǎng)連接進(jìn)行通訊,并伴有心跳檢測(cè),客戶端下線后,服務(wù)端會(huì)自動(dòng)斷開與客戶端的鏈接。
服務(wù)端與數(shù)據(jù)庫之間使用SqlConnection進(jìn)行連接。服務(wù)端向數(shù)據(jù)庫發(fā)送Sql語句,數(shù)據(jù)庫執(zhí)行完畢后返回SqlDataReader給服務(wù)端。其具體通訊過程原理如圖3所示。
圖3 Server-DataBase之間通訊示意圖
系統(tǒng)中的Server與OPC_Server之間的通訊是指服務(wù)端需要與下位機(jī)的電氣設(shè)備通過PLC進(jìn)行通訊,所以服務(wù)端需要通過OPC服務(wù)器進(jìn)行數(shù)據(jù)中轉(zhuǎn)。服務(wù)端與OPC服務(wù)器之間采用OpcUA方式連接[7]。配置完成的UAServer如圖4所示。
圖4 配置好的UAServer
RPC_Server與 UAServer之間通過 Profinet協(xié)議傳輸數(shù)據(jù),由于PLC內(nèi)存地址有限,就要求接口通訊內(nèi)容要精簡(jiǎn)高效。
與編程語言類似,PLC中的數(shù)據(jù)類型也有String,bool,int,byte 之分,便于數(shù)據(jù)交互兼容。需要注意的是,PLC中的變量要設(shè)好讀寫權(quán)限,避免同一變量有雙重“寫權(quán)限”,不允許上位機(jī)與電氣設(shè)備對(duì)同一個(gè)變量寫入數(shù)據(jù),這樣能有效避免臟數(shù)據(jù)。PLC變量讀寫方式如圖5所示。
圖5 PLC變量讀寫方式
一般情況下企業(yè)都會(huì)同時(shí)擁有多個(gè)信息系統(tǒng),如上游MES系統(tǒng)下達(dá)任務(wù),輔料配盤信息系統(tǒng)接收到任務(wù)后負(fù)責(zé)執(zhí)行。對(duì)于信息系統(tǒng)間的數(shù)據(jù)交互,可以搭建數(shù)據(jù)交互平臺(tái),以中間數(shù)據(jù)庫的形式做數(shù)據(jù)交互。各個(gè)業(yè)務(wù)系統(tǒng)需要從其它業(yè)務(wù)系統(tǒng)抽取數(shù)據(jù),一般都是經(jīng)過匯總的數(shù)據(jù)。為統(tǒng)一管理,要求各業(yè)務(wù)系統(tǒng)把能夠給其它系統(tǒng)提供的數(shù)據(jù)統(tǒng)一上傳至中間庫,由各業(yè)務(wù)子系統(tǒng)從中間庫下載所需的數(shù)據(jù)[8]。
中間數(shù)據(jù)庫的作用是為數(shù)據(jù)提供臨時(shí)存儲(chǔ)功能。在數(shù)據(jù)進(jìn)行交互或采集的過程中,可將數(shù)據(jù)存儲(chǔ)至中間數(shù)據(jù)庫臨時(shí)存儲(chǔ),并且能在轉(zhuǎn)存過程中提供數(shù)據(jù)一致性檢驗(yàn)功能,進(jìn)而保證了數(shù)據(jù)的準(zhǔn)確性。中間數(shù)據(jù)庫還能實(shí)現(xiàn)全局?jǐn)?shù)據(jù)共享,對(duì)不同的數(shù)據(jù)庫鏈接,以及復(fù)雜的數(shù)據(jù)進(jìn)行查詢、檢索和管理。
輔卷煙輔料在配盤過程中,物料與信息的同步至關(guān)重要,為實(shí)現(xiàn)數(shù)據(jù)的完整性與時(shí)效性,對(duì)基于RPC框架的輔料配盤信息管理系統(tǒng)做了介紹和設(shè)計(jì)。根據(jù)業(yè)務(wù)需求,基于RPC框架制定了一套與上下游系統(tǒng)對(duì)接的通信架構(gòu),實(shí)現(xiàn)了數(shù)據(jù)在不同系統(tǒng)間與電氣設(shè)備進(jìn)行數(shù)據(jù)交互。該設(shè)計(jì)可滿足各業(yè)務(wù)的信息共享需求,有助于消除信息孤島。
參考文獻(xiàn):
[1]徐建明,呂漢泰,張貴軍,等.基于Web的工業(yè)機(jī)器人3D虛擬動(dòng)態(tài)監(jiān)控系統(tǒng)[J].高技術(shù)通訊,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框架的數(shù)據(jù)交換方案[J].科技創(chuàng)新與應(yīng)用,2015(13):66-67.LIANG Mingjiong.Data exchange scheme based on Thrift framework[J].Technology Innovation and Application,2015(13):66-67.
[3]胡波,譚良.HBase架構(gòu)中RPC客戶端的通信性能優(yōu)化[J].計(jì)算機(jī)科學(xué),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的遠(yuǎn)程調(diào)用框架的設(shè)計(jì)與實(shí)現(xiàn)[D].上海:復(fù)旦大學(xué),2012.ZHA Jun.Design and implementation of remote call framework based on NIO[D].Shanghai:Fudan University,2012.
[5]蔡明章.基于OPC DA的OPC UA服務(wù)器研究[D].昆明:云南大學(xué),2014.CAI Mingzhang.Research on OPC UA server based on OPC DA[D].Kunming:Yunnan University,2014.
[6]張艷軍,王劍,葉曉平,等.基于Netty框架的高性能RPC通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].工業(yè)控制計(jì)算機(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]葉文全,高衛(wèi)斌.基于AMF-RPC框架的.NET for flash網(wǎng)絡(luò)應(yīng)用程序[J].無線互聯(lián)科技,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的數(shù)據(jù)庫技術(shù)探究[J].電子測(cè)試,2017(22).LI Shengjun.Research on database technology based on Web[J].Electronic Test,2017(22).