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