楊立新
【摘要】 數(shù)據(jù)傳輸能力是直接影響在線檢測系統(tǒng)實時性的一個重要因素,印刷圖像在線檢測系統(tǒng)必須滿足對高速大量的圖像數(shù)據(jù)的實時處理要求和系統(tǒng)管理功能。
【關(guān)鍵詞】 圖像數(shù)據(jù) 數(shù)據(jù)傳輸 TCP/IP
在印刷圖像在線檢測系統(tǒng)中,為了提高系統(tǒng)圖像處理運算能力,同時實現(xiàn)對系統(tǒng)的有效管理,通常采用將運算處理單元同系統(tǒng)管理與顯示單元分開的方法,即采用服務(wù)器客戶端的分布式系統(tǒng)結(jié)構(gòu),服務(wù)器與客戶端之間通過網(wǎng)絡(luò)連接,按照一定的網(wǎng)絡(luò)協(xié)議實現(xiàn)數(shù)據(jù)通訊與圖像數(shù)據(jù)傳輸功能。
一、 基于 TCP/IP 協(xié)議的數(shù)據(jù)通訊與圖像數(shù)據(jù)傳輸方法
作為目前廣泛采用的一組完整的網(wǎng)絡(luò)協(xié)議,TCP/IP 協(xié)議的傳輸層協(xié)議為用戶提供了用于虛電路服務(wù)及數(shù)據(jù)傳輸可靠性檢查的傳送控制協(xié)議(TCP)和用于數(shù)據(jù)傳送的數(shù)據(jù)報協(xié)議(UDP)。同時,Socket 的出現(xiàn),為用戶提供了基于 TCP/ IP 網(wǎng)絡(luò)應(yīng)用編程接口。
在利用 Socket 進行通信時,有兩種主要方式:一種叫做流方式(Stream Socket),也稱面向連接方式,在這種方式下兩個通信的應(yīng)用程序之間先要建立一種虛擬的連接,只有連接建立以后才能開始傳輸數(shù)據(jù),這種方式對應(yīng)的是 TCP 協(xié)議。
第二種叫數(shù)據(jù)報文方式(Datagram Socket),又稱無連接方式,在這種方式下,數(shù)據(jù)在傳送過程中有可能會丟失,而且,后發(fā)出的數(shù)據(jù)也有可能先收到。由于本系統(tǒng)的客戶端與服務(wù)器端間的通訊對實時性、快速性和可靠性的要求非常高,傳輸效率將會影響到檢測過程所消耗的時間,過多的時間消耗會導(dǎo)致系統(tǒng)檢測精度的降低,同時會對圖像的后續(xù)處理產(chǎn)生影響;錯誤的或者順序顛倒的數(shù)據(jù)信息可能會帶來很嚴(yán)重的后果。
因此,采用 TCP 協(xié)議可以在連接虛電路建立后消除隱含在建立客戶機/服務(wù)器間通訊時的非對稱性,保證通訊兩端的對等數(shù)據(jù)通信和圖像數(shù)據(jù)的準(zhǔn)確傳輸。
二、基于 TCP 協(xié)議和 Csocket 類的網(wǎng)絡(luò)通信實現(xiàn)
在基于 TCP 協(xié)議的網(wǎng)絡(luò)通信的實現(xiàn)過程中,采用Microsoft Visual C++ 的MFC 類庫中提供的 CSocket 類,采取面向連接的流方式實現(xiàn)了客戶端與服務(wù)器端之間的實時通訊。其服務(wù)器與客戶端的進程。系統(tǒng)通信的工作過程如下: 在印刷圖像在線檢測系統(tǒng)中,上位機作為服務(wù)器,調(diào)用Listen () 函數(shù)進行監(jiān)聽,等待下位機的連接;下位機作為客戶機,當(dāng)某一客戶機要聯(lián)通上位機時,調(diào)用Connect() 函 數(shù)主 動 進 行連接。
客戶端在連通服務(wù)器之前先發(fā)送連通請求,并把包括站名、IP 地址、端口地址等客戶機信息發(fā)送到服務(wù)器。服務(wù)器端對進行連接請求的身份確認,若身份不符則主動中斷連接;若身份得到確認則允許連接并發(fā)送確認信息到客戶端,開始接收由客戶端上傳的數(shù)據(jù)。
三、網(wǎng)絡(luò)連接狀態(tài)的在線診斷
在印刷圖像在線檢測系統(tǒng)的實際檢測過程中,會出現(xiàn)這樣一種情況:服務(wù)器端不能實時獲得檢測對象的缺陷數(shù)據(jù),而此時系統(tǒng)軟件亦沒有捕捉到任何異常,從而導(dǎo)致整個系統(tǒng)缺陷檢測與缺陷分類功能的失效。因此,為了保證網(wǎng)絡(luò)的正常工作,需要對網(wǎng)絡(luò)進行在線化檢測,從而能夠網(wǎng)絡(luò)及時進行修復(fù)。
引起該檢測失效故障的可能原因很多,最可能的一種原因是:應(yīng)用程序的其他部件都處于正常運行狀態(tài),客戶端已經(jīng)檢測到產(chǎn)品缺陷,而服務(wù)器端顯示的卻是之前檢測到的缺陷數(shù)據(jù),即檢測系統(tǒng)的網(wǎng)絡(luò)通訊功能 失 效 , Client Socket和CSever Socket 之間丟失有效連接,導(dǎo)致客戶端采集到的缺陷數(shù)據(jù)不能實時地上傳到服務(wù)器端,或者由于某種原因延遲一段時間,同客戶端機之后所檢測到缺陷數(shù)據(jù)一起上傳至服務(wù)器端,導(dǎo)致缺陷的誤報與漏報。為了診斷服務(wù)器端 Csever Socket 與客戶端 Client Socket 之間是否建立有連接,有兩種可能的方法:
(1) 在服務(wù)器端設(shè)置定時器,定時向每個客戶端發(fā)送測試信息,若客戶端能夠及時返回確認信息,則證明服務(wù)器與客戶端之間建立有連接;否則服務(wù)器端會繼續(xù)向客戶端發(fā)送測試信息,若服務(wù)器端在第 n 次(n 值由用戶設(shè)置)發(fā)測試信息之前收到客戶端的確認信息,仍然認為服務(wù)器與客戶端之間建立有連接;若超過 n 次,則認為二者之間已經(jīng)斷開連接。
(2) 在每個客戶機端都設(shè)置定時器,定時向服務(wù)器端發(fā)送測試信息,若服務(wù)器端能夠及時返回確認信息,則證明服務(wù)器與客戶端之間建立有連接;否則客戶機會繼續(xù)向服務(wù)器端發(fā)送測試信息,若客戶端在第 n 次發(fā)測試信息之前收到服務(wù)器端的確認信息,仍然認為服務(wù)器與客戶端之間建立有連接;若超過 n 次,則認為二者之間已經(jīng)斷開連接。
由于socket的通訊機制只能是服務(wù)器端處于監(jiān)聽狀態(tài),由客戶端發(fā)送連接請求,來實現(xiàn)網(wǎng)絡(luò)連接狀態(tài)診斷,當(dāng)檢測到與服務(wù)器端斷開連接,即可向服務(wù)器端進行Socket重連。
另外,因為系統(tǒng)中客戶端向服務(wù)器傳送的信息并不是由相機所采集到的整幅圖像,而是經(jīng)過處理后的圖像數(shù)據(jù),使得傳輸數(shù)據(jù)量大大減少,所以本通信方案沒有采用擁塞控制。倘若由于傳輸?shù)臄?shù)據(jù)量增加而不能實現(xiàn)實時穩(wěn)定的數(shù)據(jù)通信,甚至發(fā)生數(shù)據(jù)碰撞和數(shù)據(jù)擁塞,則應(yīng)考慮適當(dāng)?shù)膿砣刂撇呗詠頊p弱由此帶來的數(shù)據(jù)延遲。