陳雄姿,龍 辛,黃 波,朱方鎮(zhèn),戴建利
(1.湘潭大學(xué) 智能計(jì)算與信息處理教育部重點(diǎn)實(shí)驗(yàn)室,湖南 湘潭 411105;2.湘電風(fēng)能有限公司,湖南湘潭 411101;3.長沙優(yōu)利泰克信息技術(shù)有限公司,湖南 長沙 410000)
軟PLC基于計(jì)算機(jī)網(wǎng)絡(luò)技術(shù),具有極強(qiáng)的網(wǎng)絡(luò)通信能力和通用性能,它可以支持多種遠(yuǎn)程終端,這就需要一種通用的協(xié)議來實(shí)現(xiàn)分布式不同遠(yuǎn)程終端間的網(wǎng)絡(luò)通信。RPC(remote procedure call,遠(yuǎn)程過程調(diào)用)是一種不需要了解底層網(wǎng)絡(luò)技術(shù),只需通過網(wǎng)絡(luò)從遠(yuǎn)程計(jì)算機(jī)程序上請求服務(wù)的建立在TCP或者UDP之上的應(yīng)用層協(xié)議,用戶只需按照協(xié)議規(guī)定對數(shù)據(jù)包進(jìn)行打包、解包即可實(shí)現(xiàn)通信。本文針對軟PLC與不同平臺進(jìn)行通信的需求,采用SUN公司的ONC/RPC協(xié)議來實(shí)現(xiàn)PLC控制系統(tǒng)中RPC庫的開發(fā),通過RPC庫提供遠(yuǎn)程數(shù)據(jù)訪問接口,集成身份驗(yàn)證,搭配遠(yuǎn)程管理終端實(shí)現(xiàn)跨平臺通信。
采用3S公司的CoDeSys軟件為開發(fā)環(huán)境,以結(jié)合了PowerPC處理器的VxWorks實(shí)時操作系統(tǒng)為運(yùn)行環(huán)境,構(gòu)成嵌入式軟PLC系統(tǒng)中RPC的應(yīng)用平臺?,F(xiàn)有的遠(yuǎn)程管理終端是HMI監(jiān)控系統(tǒng)和上位機(jī)軟件,使用ONC/RPC協(xié)議與VxWorks操作系統(tǒng)進(jìn)行通訊。整個嵌入式軟PLC系統(tǒng)的結(jié)構(gòu)如圖1所示。
RPC是一種典型的C/S模式,服務(wù)端分布在PLC各模塊上,客戶端分布在遠(yuǎn)程管理終端。客戶端請求服務(wù),服務(wù)端響應(yīng)請求。首先,由客戶端進(jìn)程對包含本地過程調(diào)用的相關(guān)信息進(jìn)行打包,通過網(wǎng)絡(luò)調(diào)用程序發(fā)送給服務(wù)端,請求一次過程調(diào)用服務(wù),然后客戶端進(jìn)程阻塞,進(jìn)入響應(yīng)等待過程。而服務(wù)端進(jìn)程處于阻塞狀態(tài),直到接收到一個遠(yuǎn)程過程調(diào)用請求。服務(wù)端對數(shù)據(jù)包進(jìn)行解析,獲得服務(wù)請求參數(shù)的同時進(jìn)行相關(guān)處理,將得到的運(yùn)算結(jié)果進(jìn)行打包返回給客戶端,然后服務(wù)端程序進(jìn)入一個休眠狀態(tài),等待下個服務(wù)請求的到來。客戶端進(jìn)程根據(jù)得到返回結(jié)果繼續(xù)執(zhí)行程序。圖2對一次遠(yuǎn)程過程調(diào)用進(jìn)行了詳細(xì)的說明。
圖1 嵌入式軟PLC系統(tǒng)的結(jié)構(gòu)
PLC控制器中的RPC服務(wù)系統(tǒng)結(jié)構(gòu)見圖3,分為底層PLC服務(wù)模塊和上位機(jī)客戶模塊。底層PLC服務(wù)模塊根據(jù)標(biāo)準(zhǔn) ONC/RPC編寫,已實(shí)現(xiàn)Login、MIO、HMI子RPC模塊,根據(jù)以后的需求,可繼續(xù)添加其他功能的RPC模塊。RPC模塊通過VxWorks集成的ONC/RPC組件,可提供相應(yīng)的RPC調(diào)用功能,同時VxWorks還具有高效任務(wù)管理、快速中斷響應(yīng)等優(yōu)點(diǎn),保證了RPC調(diào)用過程中的實(shí)時性。上位機(jī)與PLC間通過TCP/IP或者UDP協(xié)議進(jìn)行通信。
圖2 ONC/RPC標(biāo)準(zhǔn)流程
圖3 RPC服務(wù)系統(tǒng)結(jié)構(gòu)
登錄模塊的設(shè)計(jì)應(yīng)滿足RPC的服務(wù)器端和客戶端安全共享資源的需求,為RPC的應(yīng)用提供安全保障。它包含初始化讀取用戶名密碼配置信息和身份驗(yàn)證主調(diào)函數(shù)等,為了降低登錄模塊數(shù)據(jù)存儲和驗(yàn)證的時間消耗,保證整個系統(tǒng)的實(shí)時性,采用了uthash這種最高效、最簡單的哈希實(shí)現(xiàn)結(jié)構(gòu),其處理流程如圖4所示。
用戶身份信息HASH表結(jié)構(gòu)定義如下:
會話信息HASH表結(jié)構(gòu)定義如下:
安全登錄模塊服務(wù)器端主程序如下:
安全登錄模塊客戶端主程序如下:
圖4 登錄模塊初始化以及調(diào)用流程
MIO模塊是供遠(yuǎn)程RPC調(diào)用的封裝層,它基于底層MIO_LIB庫而設(shè)計(jì),MIO_LIB庫主要為PLC控制系統(tǒng)提供統(tǒng)一的硬件模塊操作接口,包括數(shù)據(jù)的傳輸、狀態(tài)檢測、配置信息的讀取更換等,用于支持上位機(jī)對硬件模塊的控制、管理、監(jiān)控,實(shí)現(xiàn)IO通道值讀寫、重啟PLC模塊、讀取和設(shè)置PLC時間、獲取通道狀態(tài)等功能。該模塊集成登錄模塊身份驗(yàn)證功能,實(shí)現(xiàn)了簡單的身份有效性校驗(yàn)。最上層是標(biāo)準(zhǔn)ONC/RPC調(diào)用接口,在身份驗(yàn)證獲許通過后,根據(jù)RPC客戶端傳入的參數(shù)去尋找并執(zhí)行mio函數(shù),并將執(zhí)行結(jié)果通過RPC返回給客戶端。其調(diào)用實(shí)現(xiàn)流程見圖5。
圖5 MIO RPC庫調(diào)用實(shí)現(xiàn)流程
其中,mio封裝函數(shù)有:mio_getvalue封裝函數(shù)、mio_reboot封裝函數(shù)、mio_reboot封裝函數(shù)、mio_geterror封裝函數(shù)等。
MIO模塊服務(wù)器端程序完成的工作主要是在調(diào)用mio封裝庫之前先做一次有效性判斷,即是否登錄,再根據(jù)傳入的參數(shù)來調(diào)用不同的mio封裝函數(shù)。
MIO模塊客戶端程序完成的工作主要是在安全登錄之后構(gòu)建MIO庫請求包,并填充登錄句柄、底層MIO函數(shù)名、參數(shù)數(shù)據(jù)格式、卡號、通道號等。請求包如下:
然后將 mio_input作為參數(shù)傳入 mio_client.rpc_mio_funcall_1(mio_input)中,獲取 mio數(shù)據(jù),并保存。
HMI模塊是為HMI觸摸屏程序開發(fā)的底層數(shù)據(jù)采集模塊,且HMI觸摸屏是安裝在風(fēng)機(jī)里面,在安全系數(shù)上已經(jīng)得到足夠的保證,可以不集成身份驗(yàn)證功能。RPC取值調(diào)用入口函數(shù)和RPC寫值調(diào)用入口函數(shù)是RPC自動生成的接口函數(shù),組成了RPC服務(wù)調(diào)用的最上層進(jìn)口。根據(jù)RPC客戶端傳入的參數(shù)去調(diào)用本地HMI讀寫函數(shù),獲取底層IEC變量或者寫入IEC變量,并將執(zhí)行結(jié)果通過RPC返回給客戶端。該模塊程序調(diào)用流程如圖6所示。
圖6 HMI RPC模塊調(diào)用流程
HMI服務(wù)端主程序主要完成的工作是根據(jù)傳入的IEC變量名去調(diào)用該變量的讀取函數(shù),如果調(diào)用成功則返回變量值。
HMI客戶端主程序如下:
用Eclipse框架開發(fā)的上位機(jī)軟件通過調(diào)用RPC庫來獲取PLC控制系統(tǒng)上AIO模塊數(shù)據(jù)的實(shí)驗(yàn)過程如下:首先進(jìn)入上位機(jī)軟件的登錄界面,輸入客戶端的用戶名和密碼,如圖7所示;通過身份驗(yàn)證之后,進(jìn)入模塊選擇界面,選擇AIO模塊,如圖8所示;AIO的數(shù)據(jù)實(shí)時地上傳到上位機(jī)并顯示,如圖9所示。嵌入式軟PLC控制系統(tǒng)實(shí)物見圖10。
圖7 登錄界面
圖8 模塊選擇界面
圖9 數(shù)據(jù)顯示界面
圖10 PLC控制系統(tǒng)實(shí)物照片
本文設(shè)計(jì)與實(shí)現(xiàn)的RPC服務(wù)系統(tǒng)能很好地滿足嵌入式軟PLC控制系統(tǒng)中跨平臺通信的需求,憑借其在通信方面的實(shí)時可靠,目前已經(jīng)在風(fēng)力發(fā)電控制系統(tǒng)中發(fā)揮了很好的作用,并且具有良好的開放性與可擴(kuò)展性,可根據(jù)實(shí)際需求添加其他功能的RPC模塊,為嵌入式軟PLC工程實(shí)踐中的遠(yuǎn)程多平臺通信奠定了基礎(chǔ)。
[1] Andrew S Tanenbaum.分布式操作系統(tǒng)[M].楊劍峰,常曉波,李敏,譯.北京:電子工業(yè)出版社,2008.
[2] 許瓊,蔡文皓.一種嵌入式RPC的設(shè)計(jì)與實(shí)現(xiàn)[J].電子設(shè)計(jì)工程,2011,19(5):127-129,133.
[3] 劉巍巍,軟PLC技術(shù)及開發(fā)系統(tǒng)研究[J],科技信息,2010(10):32-32.
[4] Dissanaike S,Wijkman P,Wijkman M.Utilizing XML-RPC or SOAP on an embedded system[G]//Proc of Distributed Computing Systems Workshop.[s.l.]:[s.n.],2004:438-440.
[5] 劉家芬.安全協(xié)議形式化分析中認(rèn)證測試方法研究[D].成都:電子科技大學(xué),2008:5-10.