趙明煥,沈武義
(1.上海方格自動化系統有限公司,上海 201209;2.華勤通訊技術有限公司,上海 201210)
基于無服務器的多個IPC控制系統數據交換的設計
趙明煥1,沈武義2
(1.上海方格自動化系統有限公司,上海 201209;2.華勤通訊技術有限公司,上海 201210)
本方案提供了工業現場由IPC控制的設備,在沒有配置服務器的情況下將所有設備聯網、達到數據交換與相互共享的目的,而且靈活組合流水線,監督工件的“漏裝、漏檢”等功能。生產證明此方案對有追溯需求、工藝要求靈活、流程控制嚴格的企業非常有益。
無服務器配置;信息共享;生產記錄追溯;工藝靈活
生產的信息化要求越來越高的現代工廠要求生產記錄追溯、生產過程防錯、靈活配置生產流程、嚴格按照生產流程進行,因此就要求生產要有記錄。但引入MES系統是一筆不菲的支出,對于小工廠或者年產量低的單位也會是浪費。如果能將所有的設備都用網絡連接,但不經過服務器,同時也把數據記錄,將會減少大量工作;而且,即使服務器掛掉,也不會導致整個生產停掉。
本方案是在現場有多臺IPC設備的情況下,將相互獨立的設備通過局域網連接起來,在不用單獨的服務器的前提下,達到生產信息共享的目的。每一臺設備既可以做客戶端,又可以做服務器端,通過網絡查詢物料的生產許可、并將所有設備生產記錄都上傳到同一臺設備,方便將數據匯總、查詢、追溯等。此方案有以下優勢:不需要配置單獨的服務器、每臺設備在生產通訊的地位是對等的、對生產條碼進行追溯、防止有問題的產品進入其他設備生產、所有生產信息可以匯總在一臺設備、根據生產需求變更生產信息需要匯集的設備或者屏蔽某臺設備的生產等,方便查詢記錄和靈活配置需要參與生產的設備。

圖1 數據傳輸(深色箭頭:數據交換;淺色箭頭:數據上傳)
根據現場設備的情況和通訊需求,制定相應的協議。本案例設備組由多家公司提供,按功能分為兩類,數據查詢和數據上傳。
1.1數據查詢
客戶端需要向服務器端查詢數據,確認好服務器端的IP后,向服務器端發送需要查詢的內容,服務器端收到后,檢索數據庫并將結果回應給客戶端。例如,如果工件在1#站做過,1#站的數據庫就會有記錄,客戶端就可以查詢到;如果工件在1#站沒有做過就流到2#站,2#站查詢的話就會報錯,HMI就會報警,可以方便把有問題或者漏做的工件挑出來。
1.2數據上傳
將本站(客戶端)的生產過程數據根據生產需要上傳到IP地址指定的站(服務器端,一般默認最后一站,N號設備),接收到數據的站將數據存到本地數據庫中,方便后續使用。根據現場需求,設置查詢條件,將查詢結果轉化為xml構架,并在數據頭和尾添加數據校驗,發送給服務器端,服務器端將接收到xml解碼后存儲到數據庫中。從而,在出貨后或者需要追溯時可以通過條碼檢索產品的生產記錄。
根據通訊協議,編寫客戶端和服務器端代碼,本案例是用VS2013平臺,C#語言編寫。由于每一臺設備都要用到此代碼,所以建議編寫成一個類庫,將IP、端口號等信息作為可配置的參數,方便其他設備的共用,也方便更新,保持同步,同時也減少了開發周期。軟件編寫用微軟的Socket庫編寫TCPIP通訊代碼,方便快捷,數據傳輸延遲也小,可靠性高。
2.1客戶端代碼
其代碼應包含初始化客戶端、解析生產許可查詢服務器發送的內容、將本地數據庫中過程數據內容發送給服務器端等。
怎么將本地數據庫中的工程數據內容發送給服務器端,可能本地數據庫的過程數據有很多,以什么樣的形式可以快速、準確地將數據發出,同時數據庫內容的格式又可以保持不變,在服務器端解碼時比較方便,這些都是需要解決的問題。
XML在支持數據交換和集成應用方面有結構性語義性強、與平臺無關、處理方法靈活、具有可擴展性等優點。近年來,XML逐漸成為Internet上數據表示和數據交換的新標準,它的基本思想是用標記表示數據的意義,而不是像HTML僅僅用來規定數據的顯示方式。XML將內容和形式相分離具有很大的意義,將數據以XML格式編碼的Web服務和應用程序可以迅速地以一種簡單有效的格式提供這些數據信息,通過這些Web服務和應用程序之間也可以很容易地進行交互;XML突破了HTML固定標記集合的約束,用戶可以根據需要定義新的標記來描述文檔中的數據元素。
XML文檔既可以作為標準查詢格式,又可以作為查詢結果的載體。因此本文采用XML作為數據庫之間信息交互的 “中間件 ”,來解決查詢及數據的統一接口問題。一旦傳送問題解決,其他就是字符串處理問題,一切都變得迎刃而解。
2.2服務器端代碼
其代碼應包含:初始化服務器端、監聽客戶端連接、根據條碼查詢本地數據庫并將結果轉化為協議需求的形式發送給客戶端、接收客戶端發送過來的過程數據解析后存入本地數據庫等。
2.2.1初始化服務器

2.2.2監聽客戶端連接

上面代碼是處理連接請求的程序,建議開線程處理,實時監控處理有所有的連接請求;連接后,可以再開線程處理數據通訊。如果1號設備正在與N號設備已經建立好連接、正在通訊,同時2號設備也要連接N號設備,此時,就必須要用到多線程處理通訊;否則,如果1號設備通訊沒有結束的話,2號設備是不能連接的或者數據通訊發生異常。多線程的好處就是可以同時建立多個連接,各個連接的通訊相互獨立,不受影響。
2.2.3接收客戶端發送的過程數據并存入本地數據庫

從上段程序可以看出,客戶端接收的數據先寫入了Stream中,DataTable讀取Stream的內容,再將DataTable存入到本地數據庫。為什么要這樣做?我們可以從最終目標往前推論,要將內存數據存入數據庫,最簡單方便的方法是把所有數據轉化為跟數據庫的表構架一致的DataTable,然后將數據一行行的插入到表中,所以我們的最終目的就是將接收的數據存入到DataTable中。在客戶端發送數據時我們用到了DataTable. WriteXml(Stream stream, System.Data.XmlWriteMode. WriteSchema),將數據存入了stream中,因而解析接收的數據時,我們仍可以用DataTable. ReadXmlSchema(Stream stream)逆向將stream的數據放入到DataTable中,接著問題來了,我們怎么把接收的byte數據轉化為stream呢?
下面就講一講C#關于stream的操作:
stream分為文件流(FileStream),內存流(MemoryStream),壓縮流(GZipStream),加密流(CrypToStream),網絡流(NetworkStream);這里我們用的是內存流即(MemoryStream),其主要用于操作內存中的數據,比如說網絡中傳輸數據時可以用流的形式,當我們收到這些流數據時就可以聲明MemoryStream類來存儲并且處理它們。通過流的寫操作,我們方便的將數據存入了流中,接下來就是將流讀到DataTable中,然后存入數據庫里。
上面的工作都結束后,就要配置局域網的信息和每臺設備的IP地址。將所有的工控機都連接在同一個交換機上,為每一個工控機分配一個同網段的IP地址,通過“Ping IP”操作確認網絡是否連接成功。
由于通訊錯誤不易察覺,添加監控界面、或者記錄Log,有助于幫助分析出錯的原因、解決問題,當程序很復雜時,非常推薦使用Log記錄的方式。
在測試程序時發現,多線程的調試比較復雜、不易發現問題,程序可能會因為出錯突然關閉,此時,很難抓到是什么原因導致的,所以記錄Log就顯得異常重要,在Try…Catch里面記錄Log,通過觀察Log就可以發現是在什么地方、什么原因導致崩潰的。
這里簡單介紹一個.net平臺的類庫Log4Net,它提供一個記錄日志的框架和向多種目標寫入的方法,比如利用log4net可以方便地將日志信息記錄到文件、控制臺、Windows事件日志和數據庫(包括MS SQL Server,Access, Oracle9i,Oracle8i,DB2,SQLite)中,一般來說我們只需要提供一個描述性的字符串,然后log4net就會自動提供有關運行時的一些信息(記錄的時間、信息等級等),而且此類庫還提供了信息記錄等級,可以方便地開啟或者關閉Log的記錄,它是一款非常實用、易于操作的、可靠性高的類庫。
本方案對于有IPC控制、但沒有單獨服務器、又需要信息共享和交互的設備群組,有非常重要的意義,同時也有很大的靈活性和可配置性,通過更改IP就可以將默認的“服務器端”更改、或者排除某臺設備但不影響生產,非常適用于小型、流程要求嚴格、需要條碼追溯查詢的工廠。
[1] 謝華芳,任午令,唐任仲.基于XML的異構數據交換集成技術及
【】【】其實現[J].制造業自動化,2004,26(4),1-4.
[2] 賈小珠,宋立智,趙瑋.深入淺出XML[M].北京:人民郵電出版社,2001.
[3] 侯瑩.基于XML異構數據交換的研究與應用[D].大連:大連理工大學,2009.
[4] 陳灝.[C#]Log4net創建日志及簡單擴展(轉)[CP/OL].[2012-08-21]. http://blog.sina.com.cn/s/blog_66be2f320101a02r.html.
[5] 史曄翎,黎建輝.關系數據庫模式到XML Schema的通用映射模型[J].計算機工程,2009,35(7):35-51.
[6] 鄭麗麗.基于的異構數據交換模型的研究[D].濟南:山東師范大學,2008.
[7] 周月.基于XML的異構數據交換在校園網中的應用[D].北京:首都師范大學,2008.
[8] 翟學敏.基于XML的信息管理系統的數據集成技術研究[D].無錫:江南大學,2008.
[9] GoodShot.Socket 編程,一個服務器,多個客戶端,互相通信(轉)[CP/OL].[2012-06-04]. http://blog.csdn.net/goodshot/article/ details/7629401.
[10] 楊元. C#利用委托跨線程更新UI數據[CP/OL].[2012-06-18]. http://blog.csdn.net/yangyuankp/article/details/7672370.
Design of data exchange of multiple IPC control system based on no sever
ZHAO Ming-huan1,SHEN Wu-yi2
TP29
A
1009-0134(2016)09-0109-03
2016-06-02
趙明煥(1988 -),女,河南人,工程師,本科,主要從事工廠自動化集成軟件編寫工作。