0 引言
目前,絕大多數(shù)混凝土攪拌機(jī)控制系統(tǒng)為單機(jī)版軟件。該軟件由機(jī)樓操作工使用和維護(hù),且功能單一,數(shù)據(jù)封閉,不能與外部ERP等管理系統(tǒng)實(shí)現(xiàn)信息交換。工程部、實(shí)驗(yàn)室和調(diào)度中心的工作人員分別將生產(chǎn)任務(wù)單(澆筑令)、實(shí)驗(yàn)配比單和車輛排單輸入到ERP系統(tǒng)中,機(jī)樓操作員再將這些單據(jù)轉(zhuǎn)錄到機(jī)樓控制系統(tǒng)中,這樣不但增加了機(jī)樓人員的工作量,而且容易出錯,給生產(chǎn)帶來不必要的麻煩。此外,站場管理人員很難及時掌握進(jìn)料、庫存和實(shí)際耗量等信息。
為了實(shí)現(xiàn)機(jī)樓控制系統(tǒng)和外部ERP系統(tǒng)之間數(shù)據(jù)的無縫對接,一些攪拌機(jī)控制軟件公司和第三方開發(fā)商針對特定客戶的需求定制了簡單的對接程序,因此,沒有充分地考慮程序本身的通用性和開放性。通過分析了大量現(xiàn)有混凝土攪拌站實(shí)際需求,本文提出了一套較為完整的攪拌機(jī)控制系統(tǒng)與外部ERP之間數(shù)據(jù)對接的解決方案。不同系統(tǒng)之間通過Windows Socket通信方式進(jìn)行數(shù)據(jù)交換,每個攪拌機(jī)控制系統(tǒng)作為一個獨(dú)立的客戶端,Socket的服務(wù)端程序部署在ERP管理系統(tǒng)中,采用多線程機(jī)制,所設(shè)計的接口與運(yùn)行平臺、開發(fā)語言以及軟件廠商無關(guān),便于擴(kuò)展和實(shí)現(xiàn)。
1 數(shù)據(jù)對接方式
常見的系統(tǒng)之間數(shù)據(jù)通訊方式有Socket、WebService、基于網(wǎng)絡(luò)協(xié)議的直接數(shù)據(jù)庫訪問以及其它通訊方式,下文分別介紹這幾種通訊方式的特點(diǎn)。
(1)Socket通訊
Socket套接字通訊實(shí)質(zhì)上就是建立在應(yīng)用程序端與遠(yuǎn)程服務(wù)器端之間的雙向數(shù)據(jù)通道。按照通信方式的不同,Socket通訊可分為同步方式和異步方式兩種。其中同步方式的操作直到其執(zhí)行完成才將控制交給到主調(diào)程序,而異步方式則在執(zhí)行操作調(diào)用后立即返回。以同步通訊為例,首先服務(wù)端ServerSocket綁定監(jiān)聽端口,等待客戶端請求連接;當(dāng)客戶端ClientSocket發(fā)出請求申請后,ServerSocket響應(yīng)該請求,并創(chuàng)建新的Socket線程,這樣通信雙方就可以進(jìn)行數(shù)據(jù)交換;而后,ServerSocket繼續(xù)處于監(jiān)聽狀態(tài),等待下一個客戶端的連接請求。具體通信過程如圖1所示。
圖1 Socket通信模型
(2)Web Service訪問
Web Service是一種自包含、自描述和模塊化的Web應(yīng)用分支。由于它與平臺和實(shí)現(xiàn)語言無關(guān)和易于開發(fā)部署的優(yōu)點(diǎn)而備受關(guān)注。Web Service整個使用流程包括描述、發(fā)布、查找和調(diào)用四個環(huán)節(jié)。面向服務(wù)(SOA)的應(yīng)用系統(tǒng)中,其用的主要技術(shù)包括XML、HTYP、SOAP、WSDL和UDDI等。實(shí)質(zhì)上,Web服務(wù)的交互是在HTTP協(xié)議上傳遞由SOAP封裝了的XML結(jié)構(gòu)化的數(shù)據(jù)。
(3)直接數(shù)據(jù)庫訪問
直接數(shù)據(jù)庫訪問的方法是將管理軟件的數(shù)據(jù)庫表結(jié)構(gòu)暴露給外部接口程序,通過遠(yuǎn)程數(shù)據(jù)庫訪問組件技術(shù)進(jìn)行數(shù)據(jù)交換,這種方式不需要設(shè)計特殊的數(shù)據(jù)通信協(xié)議,但是它對數(shù)據(jù)庫進(jìn)行直接讀寫操作存在潛在的安全威脅。
此外,通過RS-232或RS-485等串口通訊方式實(shí)現(xiàn)數(shù)據(jù)交換。
以上幾種方式各有優(yōu)缺點(diǎn),在本次接口設(shè)計中,本文選擇了Socket通信方式進(jìn)行各種數(shù)據(jù)交互。
2 協(xié)議格式設(shè)計
在雙方正式通訊之前,必須協(xié)商好消息的格式。按功能類型的不同,協(xié)議幀可分為數(shù)據(jù)幀、控制幀和空閑幀三種格式,各種幀的尺寸不盡相同。
數(shù)據(jù)幀包括ERP向攪拌機(jī)控制系統(tǒng)發(fā)送的生產(chǎn)任務(wù)、實(shí)驗(yàn)配比和車輛排單消息,以及控制系統(tǒng)反饋到ERP的生產(chǎn)記錄消息幀。表1—4分別給出不同數(shù)據(jù)幀格式,括號中的數(shù)字表示每個字段域的尺寸。
表1生產(chǎn)任務(wù)消息幀格式
表2 實(shí)驗(yàn)配比消息幀格式
表3 車間調(diào)度消息幀格式
表4生產(chǎn)記錄消息幀格式
控制幀包括各種發(fā)送控制命令字和驗(yàn)證確認(rèn)信息幀等。其中控制命令字包括向攪拌機(jī)發(fā)送的啟停指令、刪除生產(chǎn)任務(wù)等消息以及其他反饋信息指令。表5—6分別是驗(yàn)證確認(rèn)消息和刪除指令幀格式。
表5驗(yàn)證幀協(xié)議格式
表6刪除指令幀協(xié)議格式
值得注意的是,表6中類別和ID可以唯一確定所要刪除的記錄,如類別=3,ID=201021表示要刪除編號為201021的實(shí)驗(yàn)配比單;狀態(tài)值=0,表示刪除成功,而狀態(tài)值=1,表示刪除失敗。
空閑幀主要用于通信雙方無數(shù)據(jù)傳輸時維持連接。表7為空閑幀格式,空閑幀的類別為0,計數(shù)器的作用是周期性的記錄空閑時間的大小,一旦遇到正式數(shù)據(jù)傳輸或計數(shù)溢出,計數(shù)器立即清空。
表7 空閑幀協(xié)議格式
3 接口實(shí)現(xiàn)
接口程序是由一個服務(wù)器端ServerSockethnpl和多個客戶端ClientSocketImpl組成。ClientSocketImpl為桌面軟件,安裝在攪拌機(jī)控制系統(tǒng)的機(jī)器上。ServerSocketImpl可以集成到ERP中,服務(wù)于B/S或C/S架構(gòu)的應(yīng)用系統(tǒng)。下文分別描述了服務(wù)器端和客戶端接口程序的實(shí)現(xiàn)流程。
(1)服務(wù)器端接口程序ServerSocketImpl實(shí)現(xiàn)步驟
①初始化服務(wù)器端Socket配置。
②主線程等待連接。
③一旦捕獲到連接請求,創(chuàng)建新的客戶端套接字newSocket,主線程返回到等待狀態(tài)。
④如果newSoeket驗(yàn)證通過,并將此加入到全局Socket隊(duì)列,否則丟棄。
⑤啟動newSocket連接的網(wǎng)絡(luò)狀態(tài)監(jiān)控子線程,定期(比如每隔10s)檢查連接是否正常。
⑥如果斷開連接,則將newSocket從當(dāng)前存活的Socket隊(duì)列中踢出。
⑦如果當(dāng)前的newSocket存活,則執(zhí)行以下步驟。
⑧啟動newSocket所關(guān)聯(lián)的生產(chǎn)記錄監(jiān)聽子線程,當(dāng)該端口接收到新的生產(chǎn)記錄時,立即保存到ERP系統(tǒng)的數(shù)據(jù)庫中,并將保存成功與否的狀態(tài)通知相應(yīng)的客戶端。
⑨ERP系統(tǒng)按照前面設(shè)計的協(xié)議格式封裝數(shù)據(jù),調(diào)用相應(yīng)的函數(shù),向攪拌機(jī)控制系統(tǒng)的數(shù)據(jù)庫中寫人生產(chǎn)任務(wù)單、實(shí)驗(yàn)配比單、車輛排單和迸料單等信息。
⑩結(jié)束。
(2)客戶端接口程序ClientSocketImpl實(shí)現(xiàn)步驟
①初始化客戶端Socket配置。
②主線程請求連接。
③如果請求連接失敗,則不斷向服務(wù)器端發(fā)出連接請求,否則執(zhí)行以下步驟。
④如果驗(yàn)證通過,則建立Socket套接字。
⑤啟動網(wǎng)絡(luò)狀態(tài)監(jiān)控子線程,定期檢查網(wǎng)絡(luò)連接是否正常。
⑥如果連接斷開,延時后繼續(xù)請求連接。
⑦如果連接正常,定時檢查是否有新的生產(chǎn)記錄需要發(fā)送到ServerSocket中或者ServerSocket端是否有數(shù)據(jù)到來。
⑧結(jié)束。
服務(wù)器端接口程序一旦啟動就阻塞等待客戶端的請求連接,當(dāng)雙方連接確認(rèn)后,就可以進(jìn)行數(shù)據(jù)交換。為了能夠支持多個客戶端并發(fā)連接,本方案采用了多線程機(jī)制。在每個客戶端與服務(wù)器端成功建立連接后,它們之間建立了獨(dú)立的子線程,從而隔離了不同Socket之間的相互干擾,即使其中一個Socket連接崩潰也不會影響到其他Socket和服務(wù)器之間的數(shù)據(jù)交互?蛻舳私涌诔绦蛟跀(shù)據(jù)對接中起著重要作用,它擁有對攪拌機(jī)控制系統(tǒng)中相關(guān)數(shù)據(jù)庫表的讀寫操作權(quán)限?蛻舳硕〞r檢查連接狀態(tài),并且主動維護(hù)與服務(wù)器端之間的連接。
4 結(jié)束語
本文提出了一種基于多線程Socket通訊方式實(shí)現(xiàn)攪拌機(jī)控制系統(tǒng)與外部ERP之間的數(shù)據(jù)交互。ClientSocket接口程序與攪拌機(jī)控制系統(tǒng)同時啟動或終止,ServerSocket接口由服務(wù)器端實(shí)現(xiàn),可支持B/S或C/S架構(gòu)的應(yīng)用系統(tǒng)。目前,采用此設(shè)計思想實(shí)現(xiàn)的接口程序已經(jīng)成功地應(yīng)用到某商品混凝土ERP管理系統(tǒng)中,并得到了預(yù)期的目標(biāo)。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://www.guhuozai8.cn/
本文標(biāo)題:混凝土攪拌機(jī)控制系統(tǒng)與ERP數(shù)據(jù)接口設(shè)計
本文網(wǎng)址:http://www.guhuozai8.cn/html/consultation/10820212590.html