【摘 要】本文通過對某企業(yè)集控反饋服務程序所存在的數(shù)據(jù)交互丟失問題的研究,探究了基于C#編寫的集控反饋服務程序中數(shù)據(jù)交互的細節(jié)實現(xiàn),優(yōu)化了集控反饋服務程序代碼,解決了數(shù)據(jù)交互丟失問題。
【關鍵詞】集控系統(tǒng);數(shù)據(jù)交互;Web Service
一、前言
我廠一區(qū)制絲中控系統(tǒng)與我廠上層信息系統(tǒng)通過XML Web Service方式進行數(shù)據(jù)的交互。上層信息系統(tǒng)包括基礎數(shù)據(jù)平臺和MES系統(tǒng)。一區(qū)制絲中控系統(tǒng)一方面從基礎數(shù)據(jù)平臺獲得基礎數(shù)據(jù),另一方面從MES獲得生產(chǎn)任務數(shù)據(jù),并在生產(chǎn)任務執(zhí)行后將實際執(zhí)行數(shù)據(jù)反饋回企業(yè)MES系統(tǒng)。本文主要分析了中控系統(tǒng)在反饋數(shù)據(jù)時的偶發(fā)性數(shù)據(jù)丟失問題的原因,通過優(yōu)化代碼解決問題,提高了反饋服務程序數(shù)據(jù)交互的可靠性。
二、問題現(xiàn)狀
在MES系統(tǒng)的煙絲實際出絲率跟蹤表里查詢所得的葉片任務煙包重量數(shù)據(jù)存在偶發(fā)性丟失現(xiàn)象,具體表現(xiàn)為在同一個任務內(nèi)只顯示了煙包排序靠前的重量數(shù)據(jù),排序靠后的重量數(shù)據(jù)不顯示。該問題所涉及的數(shù)據(jù)流如下:1.任務運行過程中,該任務的所有煙包重量數(shù)據(jù)由電子靜態(tài)秤采集后,通訊并暫存于切片機PLC的數(shù)據(jù)塊中。2.該任務生產(chǎn)結(jié)束時,操作人員通過點擊IFIX生產(chǎn)任務管理界面上的“任務完成”按鈕,由IFIX的VBA腳本抓取暫存于PLC數(shù)據(jù)塊里的煙包重量信息,通過SQL語句寫入Oracle的本地煙包重量數(shù)據(jù)表里。3.通過安裝在車間接口服務器上的集控數(shù)據(jù)反饋服務程序,周期性輪詢Oracle里的數(shù)據(jù)表,將Oracle表中上傳標志為“未上傳”的數(shù)據(jù)按照接口協(xié)議生成XML文檔。4.集控數(shù)據(jù)反饋服務程序通過企業(yè)MB平臺,將XML文檔轉(zhuǎn)發(fā)到企業(yè)MES系統(tǒng)。5.企業(yè)MES系統(tǒng)根據(jù)接收的XML文檔在網(wǎng)頁端進行展示。
三、原因分析
(1)PLC采集數(shù)據(jù)過程時丟失。通過Step7實時監(jiān)控跟蹤PLC煙包數(shù)據(jù)塊,該過程數(shù)據(jù)采集未發(fā)現(xiàn)明顯異常,排除。
(2)寫入Oracle表時丟失。通過PL/SQL查看Oracle表里問題任務的數(shù)據(jù)記錄,表里數(shù)據(jù)完整,與所查任務要求的數(shù)據(jù)數(shù)目一致,未發(fā)現(xiàn)明顯異常,排除。
(3)生成XML文檔時丟失。通過對比Oracle表里的數(shù)據(jù)與所生成的XML文檔內(nèi)容,發(fā)現(xiàn)XML多次存在數(shù)據(jù)不完整的情況,確定其為造成最終所展示數(shù)據(jù)丟失的根本原因。
(4)轉(zhuǎn)發(fā)XML文檔時丟失。對比問題任務的發(fā)送方與接收方的XML文檔,未發(fā)現(xiàn)兩者之間的內(nèi)容差異,排除。
(5)解析XML文檔時丟失。對比問題任務的XML文檔與網(wǎng)頁所展示內(nèi)容,未發(fā)現(xiàn)兩者之間有內(nèi)容差異,排除。
最終確認,數(shù)據(jù)丟失發(fā)生于集控反饋服務程序生成XML文檔的環(huán)節(jié)。
通過分析煙包重量數(shù)據(jù)上報所涉及的C#源碼,當程序在周期掃描時掃描到某一任務存在未上傳的數(shù)據(jù),在將未上傳的數(shù)據(jù)打包生成XML文檔后,調(diào)用負責置數(shù)據(jù)上傳標志位的函數(shù)將任務里每粒煙包數(shù)據(jù)狀態(tài)置為已上傳。當任務完成時IFIX批量向Oracle里寫入數(shù)據(jù)過程中,反饋程序掃描周期到,觸發(fā)了新的掃描,由于掃描發(fā)生在寫入數(shù)據(jù)的過程中,程序只抓取了掃描到的前半部分煙包數(shù)據(jù)生成XML文檔,后半部分寫入的煙包數(shù)據(jù)還未被上傳就被置數(shù)據(jù)上傳標志位的函數(shù)一并把狀態(tài)置為了已上傳,實際上后半部分煙包數(shù)據(jù)并未生成XML文檔上傳,造成了數(shù)據(jù)的丟失。
四、改進措施
修改置數(shù)據(jù)上傳標志位函數(shù)邏輯,使其被調(diào)用時只對已上傳的煙包數(shù)據(jù)進行置位。具體為,修改函數(shù)的形參,由只傳遞當前任務的第一粒煙包對象改為傳遞本次掃描打包的煙包對象數(shù)組,并只對數(shù)組對象進行置狀態(tài)位。
五、結(jié)語
本文針對車間煙包數(shù)據(jù)在由中控系統(tǒng)上傳至Mes系統(tǒng)過程中發(fā)生數(shù)據(jù)丟失問題的研究,理清了現(xiàn)場底層數(shù)據(jù)采集傳遞到上層系統(tǒng)的流程,優(yōu)化了集控反饋服務程序的代碼邏輯,解決了煙包數(shù)據(jù)丟失的問題,提高了系統(tǒng)數(shù)據(jù)交互的可靠性。
參考文獻
[1]KrisJamsa.C/C++/C#程序員實用大全:C/C++/C#最佳編程指南[M].中國水利水電出版社,2002.
作者簡介:
邱振洲(1991-),男,福建龍巖人,廈門煙草工業(yè)有限責任公司,助理工程師,研究方向:自動控制系統(tǒng),集控系統(tǒng)。