趙明煥,沈武義
(1.上海方格自動(dòng)化系統(tǒng)有限公司,上海 201209;2.華勤通訊技術(shù)有限公司,上海 201210)
基于無服務(wù)器的多個(gè)IPC控制系統(tǒng)數(shù)據(jù)交換的設(shè)計(jì)
趙明煥1,沈武義2
(1.上海方格自動(dòng)化系統(tǒng)有限公司,上海 201209;2.華勤通訊技術(shù)有限公司,上海 201210)
本方案提供了工業(yè)現(xiàn)場由IPC控制的設(shè)備,在沒有配置服務(wù)器的情況下將所有設(shè)備聯(lián)網(wǎng)、達(dá)到數(shù)據(jù)交換與相互共享的目的,而且靈活組合流水線,監(jiān)督工件的“漏裝、漏檢”等功能。生產(chǎn)證明此方案對有追溯需求、工藝要求靈活、流程控制嚴(yán)格的企業(yè)非常有益。
無服務(wù)器配置;信息共享;生產(chǎn)記錄追溯;工藝靈活
生產(chǎn)的信息化要求越來越高的現(xiàn)代工廠要求生產(chǎn)記錄追溯、生產(chǎn)過程防錯(cuò)、靈活配置生產(chǎn)流程、嚴(yán)格按照生產(chǎn)流程進(jìn)行,因此就要求生產(chǎn)要有記錄。但引入MES系統(tǒng)是一筆不菲的支出,對于小工廠或者年產(chǎn)量低的單位也會(huì)是浪費(fèi)。如果能將所有的設(shè)備都用網(wǎng)絡(luò)連接,但不經(jīng)過服務(wù)器,同時(shí)也把數(shù)據(jù)記錄,將會(huì)減少大量工作;而且,即使服務(wù)器掛掉,也不會(huì)導(dǎo)致整個(gè)生產(chǎn)停掉。
本方案是在現(xiàn)場有多臺(tái)IPC設(shè)備的情況下,將相互獨(dú)立的設(shè)備通過局域網(wǎng)連接起來,在不用單獨(dú)的服務(wù)器的前提下,達(dá)到生產(chǎn)信息共享的目的。每一臺(tái)設(shè)備既可以做客戶端,又可以做服務(wù)器端,通過網(wǎng)絡(luò)查詢物料的生產(chǎn)許可、并將所有設(shè)備生產(chǎn)記錄都上傳到同一臺(tái)設(shè)備,方便將數(shù)據(jù)匯總、查詢、追溯等。此方案有以下優(yōu)勢:不需要配置單獨(dú)的服務(wù)器、每臺(tái)設(shè)備在生產(chǎn)通訊的地位是對等的、對生產(chǎn)條碼進(jìn)行追溯、防止有問題的產(chǎn)品進(jìn)入其他設(shè)備生產(chǎn)、所有生產(chǎn)信息可以匯總在一臺(tái)設(shè)備、根據(jù)生產(chǎn)需求變更生產(chǎn)信息需要匯集的設(shè)備或者屏蔽某臺(tái)設(shè)備的生產(chǎn)等,方便查詢記錄和靈活配置需要參與生產(chǎn)的設(shè)備。
圖1 數(shù)據(jù)傳輸(深色箭頭:數(shù)據(jù)交換;淺色箭頭:數(shù)據(jù)上傳)
根據(jù)現(xiàn)場設(shè)備的情況和通訊需求,制定相應(yīng)的協(xié)議。本案例設(shè)備組由多家公司提供,按功能分為兩類,數(shù)據(jù)查詢和數(shù)據(jù)上傳。
1.1數(shù)據(jù)查詢
客戶端需要向服務(wù)器端查詢數(shù)據(jù),確認(rèn)好服務(wù)器端的IP后,向服務(wù)器端發(fā)送需要查詢的內(nèi)容,服務(wù)器端收到后,檢索數(shù)據(jù)庫并將結(jié)果回應(yīng)給客戶端。例如,如果工件在1#站做過,1#站的數(shù)據(jù)庫就會(huì)有記錄,客戶端就可以查詢到;如果工件在1#站沒有做過就流到2#站,2#站查詢的話就會(huì)報(bào)錯(cuò),HMI就會(huì)報(bào)警,可以方便把有問題或者漏做的工件挑出來。
1.2數(shù)據(jù)上傳
將本站(客戶端)的生產(chǎn)過程數(shù)據(jù)根據(jù)生產(chǎn)需要上傳到IP地址指定的站(服務(wù)器端,一般默認(rèn)最后一站,N號設(shè)備),接收到數(shù)據(jù)的站將數(shù)據(jù)存到本地?cái)?shù)據(jù)庫中,方便后續(xù)使用。根據(jù)現(xiàn)場需求,設(shè)置查詢條件,將查詢結(jié)果轉(zhuǎn)化為xml構(gòu)架,并在數(shù)據(jù)頭和尾添加數(shù)據(jù)校驗(yàn),發(fā)送給服務(wù)器端,服務(wù)器端將接收到xml解碼后存儲(chǔ)到數(shù)據(jù)庫中。從而,在出貨后或者需要追溯時(shí)可以通過條碼檢索產(chǎn)品的生產(chǎn)記錄。
根據(jù)通訊協(xié)議,編寫客戶端和服務(wù)器端代碼,本案例是用VS2013平臺(tái),C#語言編寫。由于每一臺(tái)設(shè)備都要用到此代碼,所以建議編寫成一個(gè)類庫,將IP、端口號等信息作為可配置的參數(shù),方便其他設(shè)備的共用,也方便更新,保持同步,同時(shí)也減少了開發(fā)周期。軟件編寫用微軟的Socket庫編寫TCPIP通訊代碼,方便快捷,數(shù)據(jù)傳輸延遲也小,可靠性高。
2.1客戶端代碼
其代碼應(yīng)包含初始化客戶端、解析生產(chǎn)許可查詢服務(wù)器發(fā)送的內(nèi)容、將本地?cái)?shù)據(jù)庫中過程數(shù)據(jù)內(nèi)容發(fā)送給服務(wù)器端等。
怎么將本地?cái)?shù)據(jù)庫中的工程數(shù)據(jù)內(nèi)容發(fā)送給服務(wù)器端,可能本地?cái)?shù)據(jù)庫的過程數(shù)據(jù)有很多,以什么樣的形式可以快速、準(zhǔn)確地將數(shù)據(jù)發(fā)出,同時(shí)數(shù)據(jù)庫內(nèi)容的格式又可以保持不變,在服務(wù)器端解碼時(shí)比較方便,這些都是需要解決的問題。
XML在支持?jǐn)?shù)據(jù)交換和集成應(yīng)用方面有結(jié)構(gòu)性語義性強(qiáng)、與平臺(tái)無關(guān)、處理方法靈活、具有可擴(kuò)展性等優(yōu)點(diǎn)。近年來,XML逐漸成為Internet上數(shù)據(jù)表示和數(shù)據(jù)交換的新標(biāo)準(zhǔn),它的基本思想是用標(biāo)記表示數(shù)據(jù)的意義,而不是像HTML僅僅用來規(guī)定數(shù)據(jù)的顯示方式。XML將內(nèi)容和形式相分離具有很大的意義,將數(shù)據(jù)以XML格式編碼的Web服務(wù)和應(yīng)用程序可以迅速地以一種簡單有效的格式提供這些數(shù)據(jù)信息,通過這些Web服務(wù)和應(yīng)用程序之間也可以很容易地進(jìn)行交互;XML突破了HTML固定標(biāo)記集合的約束,用戶可以根據(jù)需要定義新的標(biāo)記來描述文檔中的數(shù)據(jù)元素。
XML文檔既可以作為標(biāo)準(zhǔn)查詢格式,又可以作為查詢結(jié)果的載體。因此本文采用XML作為數(shù)據(jù)庫之間信息交互的 “中間件 ”,來解決查詢及數(shù)據(jù)的統(tǒng)一接口問題。一旦傳送問題解決,其他就是字符串處理問題,一切都變得迎刃而解。
2.2服務(wù)器端代碼
其代碼應(yīng)包含:初始化服務(wù)器端、監(jiān)聽客戶端連接、根據(jù)條碼查詢本地?cái)?shù)據(jù)庫并將結(jié)果轉(zhuǎn)化為協(xié)議需求的形式發(fā)送給客戶端、接收客戶端發(fā)送過來的過程數(shù)據(jù)解析后存入本地?cái)?shù)據(jù)庫等。
2.2.1初始化服務(wù)器
2.2.2監(jiān)聽客戶端連接
上面代碼是處理連接請求的程序,建議開線程處理,實(shí)時(shí)監(jiān)控處理有所有的連接請求;連接后,可以再開線程處理數(shù)據(jù)通訊。如果1號設(shè)備正在與N號設(shè)備已經(jīng)建立好連接、正在通訊,同時(shí)2號設(shè)備也要連接N號設(shè)備,此時(shí),就必須要用到多線程處理通訊;否則,如果1號設(shè)備通訊沒有結(jié)束的話,2號設(shè)備是不能連接的或者數(shù)據(jù)通訊發(fā)生異常。多線程的好處就是可以同時(shí)建立多個(gè)連接,各個(gè)連接的通訊相互獨(dú)立,不受影響。
2.2.3接收客戶端發(fā)送的過程數(shù)據(jù)并存入本地?cái)?shù)據(jù)庫
從上段程序可以看出,客戶端接收的數(shù)據(jù)先寫入了Stream中,DataTable讀取Stream的內(nèi)容,再將DataTable存入到本地?cái)?shù)據(jù)庫。為什么要這樣做?我們可以從最終目標(biāo)往前推論,要將內(nèi)存數(shù)據(jù)存入數(shù)據(jù)庫,最簡單方便的方法是把所有數(shù)據(jù)轉(zhuǎn)化為跟數(shù)據(jù)庫的表構(gòu)架一致的DataTable,然后將數(shù)據(jù)一行行的插入到表中,所以我們的最終目的就是將接收的數(shù)據(jù)存入到DataTable中。在客戶端發(fā)送數(shù)據(jù)時(shí)我們用到了DataTable. WriteXml(Stream stream, System.Data.XmlWriteMode. WriteSchema),將數(shù)據(jù)存入了stream中,因而解析接收的數(shù)據(jù)時(shí),我們?nèi)钥梢杂肈ataTable. ReadXmlSchema(Stream stream)逆向?qū)tream的數(shù)據(jù)放入到DataTable中,接著問題來了,我們怎么把接收的byte數(shù)據(jù)轉(zhuǎn)化為stream呢?
下面就講一講C#關(guān)于stream的操作:
stream分為文件流(FileStream),內(nèi)存流(MemoryStream),壓縮流(GZipStream),加密流(CrypToStream),網(wǎng)絡(luò)流(NetworkStream);這里我們用的是內(nèi)存流即(MemoryStream),其主要用于操作內(nèi)存中的數(shù)據(jù),比如說網(wǎng)絡(luò)中傳輸數(shù)據(jù)時(shí)可以用流的形式,當(dāng)我們收到這些流數(shù)據(jù)時(shí)就可以聲明MemoryStream類來存儲(chǔ)并且處理它們。通過流的寫操作,我們方便的將數(shù)據(jù)存入了流中,接下來就是將流讀到DataTable中,然后存入數(shù)據(jù)庫里。
上面的工作都結(jié)束后,就要配置局域網(wǎng)的信息和每臺(tái)設(shè)備的IP地址。將所有的工控機(jī)都連接在同一個(gè)交換機(jī)上,為每一個(gè)工控機(jī)分配一個(gè)同網(wǎng)段的IP地址,通過“Ping IP”操作確認(rèn)網(wǎng)絡(luò)是否連接成功。
由于通訊錯(cuò)誤不易察覺,添加監(jiān)控界面、或者記錄Log,有助于幫助分析出錯(cuò)的原因、解決問題,當(dāng)程序很復(fù)雜時(shí),非常推薦使用Log記錄的方式。
在測試程序時(shí)發(fā)現(xiàn),多線程的調(diào)試比較復(fù)雜、不易發(fā)現(xiàn)問題,程序可能會(huì)因?yàn)槌鲥e(cuò)突然關(guān)閉,此時(shí),很難抓到是什么原因?qū)е碌?,所以記錄Log就顯得異常重要,在Try…Catch里面記錄Log,通過觀察Log就可以發(fā)現(xiàn)是在什么地方、什么原因?qū)е卤罎⒌摹?/p>
這里簡單介紹一個(gè).net平臺(tái)的類庫Log4Net,它提供一個(gè)記錄日志的框架和向多種目標(biāo)寫入的方法,比如利用log4net可以方便地將日志信息記錄到文件、控制臺(tái)、Windows事件日志和數(shù)據(jù)庫(包括MS SQL Server,Access, Oracle9i,Oracle8i,DB2,SQLite)中,一般來說我們只需要提供一個(gè)描述性的字符串,然后log4net就會(huì)自動(dòng)提供有關(guān)運(yùn)行時(shí)的一些信息(記錄的時(shí)間、信息等級等),而且此類庫還提供了信息記錄等級,可以方便地開啟或者關(guān)閉Log的記錄,它是一款非常實(shí)用、易于操作的、可靠性高的類庫。
本方案對于有IPC控制、但沒有單獨(dú)服務(wù)器、又需要信息共享和交互的設(shè)備群組,有非常重要的意義,同時(shí)也有很大的靈活性和可配置性,通過更改IP就可以將默認(rèn)的“服務(wù)器端”更改、或者排除某臺(tái)設(shè)備但不影響生產(chǎn),非常適用于小型、流程要求嚴(yán)格、需要條碼追溯查詢的工廠。
[1] 謝華芳,任午令,唐任仲.基于XML的異構(gòu)數(shù)據(jù)交換集成技術(shù)及
【】【】其實(shí)現(xiàn)[J].制造業(yè)自動(dòng)化,2004,26(4),1-4.
[2] 賈小珠,宋立智,趙瑋.深入淺出XML[M].北京:人民郵電出版社,2001.
[3] 侯瑩.基于XML異構(gòu)數(shù)據(jù)交換的研究與應(yīng)用[D].大連:大連理工大學(xué),2009.
[4] 陳灝.[C#]Log4net創(chuàng)建日志及簡單擴(kuò)展(轉(zhuǎn))[CP/OL].[2012-08-21]. http://blog.sina.com.cn/s/blog_66be2f320101a02r.html.
[5] 史曄翎,黎建輝.關(guān)系數(shù)據(jù)庫模式到XML Schema的通用映射模型[J].計(jì)算機(jī)工程,2009,35(7):35-51.
[6] 鄭麗麗.基于的異構(gòu)數(shù)據(jù)交換模型的研究[D].濟(jì)南:山東師范大學(xué),2008.
[7] 周月.基于XML的異構(gòu)數(shù)據(jù)交換在校園網(wǎng)中的應(yīng)用[D].北京:首都師范大學(xué),2008.
[8] 翟學(xué)敏.基于XML的信息管理系統(tǒng)的數(shù)據(jù)集成技術(shù)研究[D].無錫:江南大學(xué),2008.
[9] GoodShot.Socket 編程,一個(gè)服務(wù)器,多個(gè)客戶端,互相通信(轉(zhuǎn))[CP/OL].[2012-06-04]. http://blog.csdn.net/goodshot/article/ details/7629401.
[10] 楊元. C#利用委托跨線程更新UI數(shù)據(jù)[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 -),女,河南人,工程師,本科,主要從事工廠自動(dòng)化集成軟件編寫工作。