何俊杰,蔣知峰,方江龍
HE Jun-jie1, JIANG Zhi-feng2, FANG Jiang-long2
(1. 上海理工大學(xué) 機械工程學(xué)院,上海 200090;2. 上海開通數(shù)控有限公司,上海 200233)
以太網(wǎng)在信息網(wǎng)絡(luò)中得到了廣泛的應(yīng)用。將以太網(wǎng)應(yīng)用到工控領(lǐng)域,首先要求數(shù)據(jù)傳輸具有更好的實時性,其次還強調(diào)在工業(yè)環(huán)境下數(shù)據(jù)傳輸?shù)恼_性和穩(wěn)定性。目前在工控嵌入式領(lǐng)域,網(wǎng)絡(luò)通信通常采用UDP或TCP協(xié)議。UDP與TCP相比,UDP使用非連接的、不可靠的通信方式,因此網(wǎng)絡(luò)傳輸速度快,實時性相對較好[1]。實際上,在控制現(xiàn)場級的工業(yè)以太網(wǎng)中,只要沒有硬件錯誤,非連接的數(shù)據(jù)通信通常能夠順利完成,并且與TCP 相比具備更好的實時性。當(dāng)UDP不能通信時,TCP 同樣面臨通信中斷[2]。本文采用UDP通信協(xié)議編程,通過對丟包率、出錯率和長時間工作下板卡網(wǎng)絡(luò)的穩(wěn)定性來分析判斷嵌入式網(wǎng)絡(luò)通信質(zhì)量的高低。
選用兩塊相同型號的嵌入式主板作為測試平臺,兩塊主板采用相同的嵌入式操作系統(tǒng),一塊作為服務(wù)器,另一塊作為客戶端;客戶端循環(huán)發(fā)送指定的報文到服務(wù)器,服務(wù)器接收到正確的報文后給客戶端以確認(rèn)報文。通過循環(huán)檢測通信的質(zhì)量判斷網(wǎng)絡(luò)通信質(zhì)量。
實際測試的研華PCM-3343主板是應(yīng)用在機床數(shù)控系統(tǒng)的核心板卡,軟件環(huán)境是嵌入式的Windows CE操作系統(tǒng)并且移植了.NET環(huán)境。具體的測試方法是取同一型號相同軟件環(huán)境的兩塊嵌入式板卡,一塊作為客戶端,一塊作為服務(wù)器。網(wǎng)絡(luò)負(fù)載通過發(fā)送數(shù)據(jù)包的大小來控制,負(fù)載越大通信周期越長。通過測試主機和客戶端在一定的網(wǎng)絡(luò)負(fù)載下,板卡長時間工作下的穩(wěn)定性、丟包率和出錯率的高低來檢測評估被測板卡網(wǎng)絡(luò)通信質(zhì)量的高低。
在具體實際測試中,由于嵌入式Windows CE系統(tǒng)和.NET環(huán)境已經(jīng)移植在被測板卡上,因此可以使用C#中ms級的timer控件來測量通信周期時間的長短,但在實際應(yīng)用中卻無法獲得精確的時間。在實驗測試中,發(fā)送1400字節(jié)大小的數(shù)據(jù)包時,時間通常記錄為0或是1ms,不能獲得精確的時間。查閱了相關(guān)資料,可以采用以下兩個函數(shù)QueryPerformanceCounter() 和QueryPerformanceFrequency() 來獲得高精度計時。QueryPerformanceCounter()這個函數(shù)返回高精確度性能計數(shù)器的值,它可以以微妙為單位計時。但是QueryPerformanceCounter()確切的精確計時的最小單位是與系統(tǒng)有關(guān)的,所以,必須要查詢系統(tǒng)以得到QueryPerformanceCounter()返回的嘀噠聲的頻率。QueryPerformanceFrequency()提供了這個頻率值,返回每秒嘀噠聲的個數(shù)。這樣就能獲得詳細(xì)的時間信息,用時間記錄數(shù)值來反應(yīng)嵌入式板卡的通信質(zhì)量。實際測試中數(shù)值處理以ms為單位,取值保留精確到小數(shù)點后三位,能夠滿足測試的時間精度要求。
采樣時間可通過Timer控件來實現(xiàn)。長時間工作下,ms級的精度完全可以滿足采樣時間間隔的要求。
應(yīng)用在嵌入式環(huán)境中,測試通信時間的部分程序代碼如下:
UDP通信協(xié)議采用三種通信方式:單播、廣播和組播。因為本實驗只有直連的兩塊板卡,因此采用單播——客戶機/服務(wù)器模型。在數(shù)據(jù)交互通信的過程中,如果發(fā)送的數(shù)據(jù)包丟失或是損壞,導(dǎo)致服務(wù)器無法接收到數(shù)據(jù)包,此時客戶機和服務(wù)器均處于等待接收數(shù)據(jù)包狀態(tài),為了防止出現(xiàn)雙方均等待接收的狀態(tài),采用的超時的思想來處理。當(dāng)客戶機發(fā)出數(shù)據(jù)包后超過一定的時間沒有收到返回的數(shù)據(jù)包時,客戶機重新發(fā)送數(shù)據(jù)包,以此來防止出現(xiàn)雙方都等待接收數(shù)據(jù)包的狀態(tài)。在嵌入式的.NET環(huán)境中,所能用的API有限,超時的編程不能通過.NET環(huán)境的類庫來實現(xiàn),因此本實驗通過使用調(diào)用動態(tài)鏈接庫的思想來對底層的超時通信所用的函數(shù)做封裝。底層超時編程具體實現(xiàn)是通過select()函數(shù)和一些宏定義如FD_ISSET、FD_SET等函數(shù)來實現(xiàn)。select()函數(shù)用于確定套接口的狀態(tài),超時則返回0;出錯返回SOCKET_ERROR錯誤,可通過WSAGetLastError獲取相應(yīng)錯誤代碼;依舊是1的位就是準(zhǔn)備好的描述符,可以通過函數(shù)FD_ISSET來檢測。動態(tài)鏈接庫底層的函數(shù)的導(dǎo)出編程如下:
超時處理的關(guān)鍵部分實現(xiàn)程序如下:
用此方法可以達到防止出現(xiàn)服務(wù)器和客戶機都處于接收等待狀態(tài)的目的。在實際應(yīng)用測試中,由于設(shè)置的超時時間遠(yuǎn)遠(yuǎn)比數(shù)據(jù)包傳輸周期要長的多,因此除了監(jiān)控界面,從時間數(shù)據(jù)上也很容易區(qū)分當(dāng)時網(wǎng)絡(luò)的狀態(tài)。
由于已經(jīng)在嵌入式板卡上移植了Windows CE操作系統(tǒng)和.NET類庫,因此監(jiān)控測試界面可以利用C#來編寫。IP地址是通過編程直接顯示的,為了能夠達到靈活測試的目的,界面除了使用Label控件來命名標(biāo)簽外,具體參數(shù)均使用TextBox控件來顯示和修改。底層程序通過讀取上層界面的參數(shù)來配置底層的參數(shù)。這樣做的好處的是編寫好程序后,底層程序不需要修改,只要修改界面參數(shù)就能完成不同參數(shù)環(huán)境的測試。
當(dāng)在通信過程中出現(xiàn)丟包和數(shù)據(jù)包出錯情形,除了在界面中“網(wǎng)絡(luò)狀態(tài)”對應(yīng)的TextBox控件中實時顯示外,均在文檔中記錄發(fā)生的時間、次數(shù)等信息。
每次通信周期的時間值都會實時的顯示在界面右下角最大的TextBox控件中。當(dāng)記錄信息超過二十條時,清空控件重新記錄。當(dāng)?shù)竭_采樣時間時,記錄文檔的同時,并計算采樣時間間隔內(nèi)所有通信周期數(shù)值的平均時間值,同時顯示在界面“周期時間顯示”欄對應(yīng)的TextBox控件中。
編寫的監(jiān)控測試界面在PC機上模擬運行測試中的截圖如圖1所示。
圖1 監(jiān)控測試界面
在實際測試中對不同的參數(shù)環(huán)境下做了測試,以下是其中比較具有代表性的一組測試。采樣時間間隔為1s,傳送的數(shù)據(jù)包大小為6000字節(jié),測試時間長達二十小時左右。這樣,板卡的網(wǎng)絡(luò)負(fù)載遠(yuǎn)遠(yuǎn)大于實際工作時實時傳輸數(shù)據(jù)包的大小,測試的通信周期次數(shù)為八百多萬次,得到八萬多個采樣時間點,能夠從所得數(shù)據(jù)來分析評估板卡的通信質(zhì)量和通信穩(wěn)定性。通過每兩分鐘(約120個采樣數(shù)據(jù)點)取平均數(shù),每小時采取30個平均時間點,做出的二十張曲線圖,以下摘取的是第一小時和最后一小時的兩張圖。
第1小時數(shù)據(jù)記錄分析圖如圖2所示。
圖2 第1小時數(shù)據(jù)分析圖
第20小時左右的數(shù)據(jù)記錄分析圖,如圖3所示。
圖3 第20小時左右數(shù)據(jù)分析圖
通過分析長時間工作下采樣時間值的波動、出錯率和丟包率來判斷網(wǎng)絡(luò)通信質(zhì)量的高低。本次實驗在八百多萬次的測試中,丟包9次,出錯2次,正確的穩(wěn)定傳送率在99.999%以上,通過圖表分析通信周期時間為12.973ms左右,時間波動在0.148ms左右,通信穩(wěn)定性較好,通過測試得到的數(shù)值分析判斷此板卡的通信質(zhì)量較高。
本文嘗試使用UDP網(wǎng)絡(luò)通信協(xié)議,通過軟件編程的方法來檢測在一定的網(wǎng)絡(luò)負(fù)載下,工控嵌入式板卡網(wǎng)絡(luò)通信長時間工作下,通信質(zhì)量的高低。經(jīng)過對研華PCM-3343板卡的實驗驗證分析,此方法能夠達到測試嵌入式板卡通信質(zhì)量的目的。
[1]蕭文龍, 林松儒. TCP/IP最佳入門[M]. 北京: 機械工業(yè)出版社, 2006.
[2]吉順平, 陸宇平. 基于UDP/IP 的工業(yè)以太網(wǎng)絡(luò)通信協(xié)議的設(shè)計[J]. 信息與控制, 2008, 37(5): 562-563.
[3]黃靜, 李銘. C#高級編程(第6版)[M]. 北京: 清華大學(xué)出版社, 2008.
[4]陳健, 宋健建. Linux程序設(shè)計(第4版)[M]. 北京: 人民郵電出版社, 2010.
[5]呂秀鋒, 黃倩. C語言程序設(shè)計現(xiàn)代方法(第2版)[M]. 北京: 人民郵電出版社, 2010.