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