国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于C#的USB3.0接口程序設(shè)計(jì)

2016-12-22 21:49:02樊高有王勇楊振國(guó)
軟件導(dǎo)刊 2016年11期
關(guān)鍵詞:傳輸數(shù)據(jù)控件線程

樊高有++王勇++楊振國(guó)

摘 要:USB3.0接口速度快、簡(jiǎn)單、占用資源少,在實(shí)際設(shè)計(jì)工作中應(yīng)用廣泛。設(shè)計(jì)一種基于USB3.0接口的上位機(jī)軟件,在C#.NET平臺(tái)下實(shí)現(xiàn)USB3.0設(shè)備的讀寫、數(shù)據(jù)接收和發(fā)送、數(shù)據(jù)傳輸動(dòng)態(tài)顯示以及數(shù)據(jù)存儲(chǔ)。實(shí)驗(yàn)結(jié)果表明,采用該程序可以提高程序開發(fā)效率,各方面功能都能得到很好的實(shí)現(xiàn)。

關(guān)鍵詞關(guān)鍵詞:C#;USB3.0;上位機(jī);數(shù)據(jù)傳輸

DOIDOI:10.11907/rjdk.162031

中圖分類號(hào):TP319

文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào)文章編號(hào):16727800(2016)011011103

0 引言

USB(Universal Serial Bus)是一種新型的計(jì)算機(jī)總線接口技術(shù)。目前,在電子消費(fèi)產(chǎn)品以及智能測(cè)控等領(lǐng)域應(yīng)用越來越廣泛,在設(shè)計(jì)工作中也被越來越多采用。新的USB3.0總線技術(shù)提供了5.0Gb/s的傳輸速率,并向下兼容低速1.5Mb/s、全速12Mb/s和高速480Mb/s傳輸速率。Cypress公司提供的Cypress Suite USB開發(fā)包包含.NET平臺(tái)的動(dòng)態(tài)鏈接庫(kù)CyUSB.dll[1]。本文探討如何在Windows平臺(tái)的.NET開發(fā)環(huán)境中,采用C#開發(fā)了USB3.0對(duì)接的上位機(jī)軟件設(shè)備。

1 軟件總體設(shè)計(jì)

(1)從程序架構(gòu)角度考慮,數(shù)據(jù)傳輸功能、顯示功能以及數(shù)據(jù)存儲(chǔ)功能分為獨(dú)立的3個(gè)部分,分別由相應(yīng)的類實(shí)現(xiàn)。

(2)使用事件傳遞內(nèi)容,減小數(shù)據(jù)傳輸部分、顯示部分以及數(shù)據(jù)存儲(chǔ)部分的耦合度。

(3)程序功能相對(duì)復(fù)雜,分步實(shí)現(xiàn):先完成USB設(shè)備檢測(cè),實(shí)現(xiàn)設(shè)備連接功能;然后傳輸數(shù)據(jù),數(shù)據(jù)接收,實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)功能;最后實(shí)現(xiàn)界面數(shù)據(jù)實(shí)時(shí)更新[2]。

上位機(jī)窗體界面主要有3個(gè)部分組成,即設(shè)置、運(yùn)行狀態(tài)以及接收與發(fā)送數(shù)據(jù)緩沖區(qū),如圖1所示。程序總體工作流程如圖2所示。

2 程序功能實(shí)現(xiàn)

2.1 設(shè)備自動(dòng)檢測(cè)

當(dāng)USB設(shè)備連接到計(jì)算機(jī)時(shí),能夠自動(dòng)獲取USB設(shè)備列表、傳輸端點(diǎn);當(dāng)USB設(shè)備被移除后,能夠自動(dòng)識(shí)別USB設(shè)備已被斷開,重新設(shè)置和獲取USB設(shè)備。其部分程序如下:

2.2 數(shù)據(jù)傳輸

數(shù)據(jù)傳輸分為兩類,一是PC( personal computer )向USB設(shè)備寫數(shù)據(jù),二是PC從USB設(shè)備讀取數(shù)據(jù)。主要使用BeginDataXfer函數(shù)通過端點(diǎn)進(jìn)行異步數(shù)據(jù)傳輸,使用FinishDataXfer函數(shù)執(zhí)行異步I/O數(shù)據(jù)傳輸,獲取并保存?zhèn)鬏數(shù)臄?shù)據(jù)以及傳輸結(jié)果。本文主要探討PC從USB設(shè)備讀取數(shù)據(jù),并把數(shù)據(jù)保存到指定文件。由于USB3.0的傳輸速度非???,最大速度可以達(dá)到5.0Gb/s,為實(shí)現(xiàn)更快的接收速率,本文在程序設(shè)計(jì)中開起兩個(gè)線程[3]。其中,一個(gè)線程用于接收USB設(shè)備傳來的數(shù)據(jù),稱為讀線程;另一個(gè)線程用于把接收到的數(shù)據(jù)存盤,稱為寫線程,而且考慮到傳輸數(shù)據(jù)的完整性和一致性,還需要建立一個(gè)線程安全隊(duì)列。此外,考慮錯(cuò)誤處理、程序異常等情況,本文程序開啟了一個(gè)監(jiān)視隊(duì)列線程,用于監(jiān)視隊(duì)列中元素的變化,保證讀線程和寫線程能夠更好地同步執(zhí)行,如圖3所示。

程序中,借助AutoResetEvent類從一個(gè)線程向另一個(gè)線程發(fā)送通知[4]。

Static AutoResetEvent m_Write = new AutoResetEvent(false);//從監(jiān)視隊(duì)列線程向?qū)懢€程發(fā)信號(hào)

static AutoResetEvent m_WriteMonitor = new AutoResetEvent(false);//從寫線程向監(jiān)視隊(duì)列線程發(fā)送信號(hào)

ConcurrentQueue提供線程安全的先進(jìn)先出集合,這意味著元素出隊(duì)列的順序和加入隊(duì)列的順序是一致的,能保證在同一時(shí)間只有一個(gè)線程能訪問,實(shí)現(xiàn)線程的安全和串行化[4]。在程序中,本文使用ConcurrentQueue集合實(shí)例創(chuàng)建了一個(gè)任務(wù)隊(duì)列。

Private static ConcurrentQueue _ConcurrenProducts = new ConcurrentQueue();

首先,定義一個(gè)被操作對(duì)象的類CustomTask,用于保存操作結(jié)果。在這個(gè)類中,由一個(gè)字段和類構(gòu)造函數(shù)。讀線程把接收到的數(shù)據(jù)添加到隊(duì)列,而寫線程將隊(duì)列中的數(shù)據(jù)寫入到文件中。

2.3 界面動(dòng)態(tài)顯示

在C#的應(yīng)用程序開發(fā)中,經(jīng)常要把UI線程和工作線程分開,防止界面停止響應(yīng),同時(shí)需要在工作線程中更新UI界面上的控件。由于.NET禁止跨線程調(diào)用控件,使用delegate和invoke從其它線程中調(diào)用控件,使用定時(shí)器,每隔1s更新一次界面[56]。

首先在System.Timers.Timer類中創(chuàng)建一個(gè)time定時(shí)器,其輕量、計(jì)時(shí)精確,對(duì)應(yīng)用程序、消息沒有特別的要求。

然后,把需要更新的控件都加入updataUI事件中,在程序開始接收數(shù)據(jù)或者發(fā)送數(shù)據(jù)時(shí),設(shè)置time.Enabled 為true,啟動(dòng)定時(shí)器,同時(shí)開始計(jì)時(shí) t1=DateTime.Now。下面以更新接收數(shù)據(jù)的時(shí)間和傳輸數(shù)據(jù)的速率為例說明。

2.4 軟件測(cè)試

在PC上安裝好USB3.0設(shè)備的驅(qū)動(dòng)程序,然后測(cè)試上位機(jī)在不同發(fā)送速率和不同發(fā)送數(shù)據(jù)大小下數(shù)據(jù)接收一致性和完整性,同時(shí)要求保證界面運(yùn)行良好。圖4截取了接收數(shù)據(jù)的一部分。經(jīng)測(cè)試,上位機(jī)程序均滿足要求。

3 結(jié)語(yǔ)

在.NET平臺(tái)下,利用C#開發(fā)了USB3.0接口的上位機(jī)軟件,為USB3.0設(shè)備測(cè)試提供了良好的人機(jī)交互界面。該程序運(yùn)行穩(wěn)定,界面操作直觀簡(jiǎn)單,方便了操作人員測(cè)試,提高了USB3.0設(shè)備的測(cè)試效率。測(cè)試結(jié)果表明,本軟件滿足USB3.0的高速傳輸數(shù)據(jù)的要求。

參考文獻(xiàn):

[1] 鄭杰.USB3.0編程寶典[M].北京:電子工業(yè)出版社,2013:3035.

[2] 黃承安.C#網(wǎng)絡(luò)應(yīng)用案例導(dǎo)航[M].北京:中國(guó)鐵道出版社,2003:7882.

[3] 卞美琴.基于USB3.0接口的高速數(shù)據(jù)傳輸技術(shù)研究[D].南京:南京理工大學(xué),2014.

[4] Eugene Agafonov著.C#多線程編程實(shí)戰(zhàn)[M].北京:機(jī)械工業(yè)出版社,2015:3540.

[5] 李江全.Visual C#.NET串口通信及測(cè)控應(yīng)用典型實(shí)例[M]北京:電子工業(yè)出版社,2012:138145.

[6] 王晶.USB3.0高速信號(hào)完整性分析及其應(yīng)用[D].西安: 西安電子科技大學(xué),2012.

(責(zé)任編輯:陳福時(shí))

猜你喜歡
傳輸數(shù)據(jù)控件線程
基于單片機(jī)的物聯(lián)網(wǎng)傳輸數(shù)據(jù)高并發(fā)讀寫系統(tǒng)設(shè)計(jì)
基于深度強(qiáng)化學(xué)習(xí)的物聯(lián)網(wǎng)傳輸數(shù)據(jù)實(shí)時(shí)調(diào)度方法
蘋果專利可采用光纖輸出燈光并傳輸數(shù)據(jù)將光纖隱藏于車輛部件內(nèi)
關(guān)于.net控件數(shù)組的探討
軟件(2018年7期)2018-08-13 09:44:42
淺談linux多線程協(xié)作
Linux線程實(shí)現(xiàn)技術(shù)研究
就這樣玩會(huì)VBA中常見的自定義控件
電腦迷(2012年24期)2012-04-29 00:44:03
么移動(dòng)中間件線程池并發(fā)機(jī)制優(yōu)化改進(jìn)
在PowerBuUder中利用WinSock控件制作簡(jiǎn)單的Web服務(wù)器
VB.NET中ListBox控件實(shí)現(xiàn)流程跟蹤
平顺县| 广宗县| 罗平县| 通辽市| 肃北| 大同县| 穆棱市| 巴林右旗| 山西省| 杂多县| 同江市| 平顶山市| 余干县| 昌黎县| 永定县| 奉化市| 大丰市| 崇阳县| 郧西县| 新昌县| 鞍山市| 保德县| 林西县| 洛南县| 沈丘县| 五莲县| 福建省| 弥勒县| 肇州县| 巴塘县| 宣城市| 尼玛县| 九江市| 会泽县| 云龙县| 广德县| 东光县| 普兰店市| 崇明县| 沧州市| 钦州市|