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