劉 晉, 步亞男, 金禹含, 蘇 臣
(遼寧師范大學(xué) 計算機(jī)信息與技術(shù)學(xué)院, 遼寧 大連 116000)
WPF在驅(qū)動板卡檢測系統(tǒng)中的應(yīng)用
劉 晉, 步亞男, 金禹含, 蘇 臣
(遼寧師范大學(xué) 計算機(jī)信息與技術(shù)學(xué)院, 遼寧 大連 116000)
在嵌入式領(lǐng)域中,經(jīng)常需要一些上位機(jī)的控制系統(tǒng),而WPF是專門用來編寫表示層的技術(shù)和工具。為了真實(shí)地感受WPF技術(shù)與其他界面開發(fā)工具的不同和優(yōu)點(diǎn),設(shè)計了一款板卡檢測系統(tǒng),并詳細(xì)地介紹了此控制系統(tǒng)的實(shí)現(xiàn)過程。經(jīng)過實(shí)際應(yīng)用證明,WPF技術(shù)與傳統(tǒng)的界面開發(fā)工具相比開發(fā)較簡單,程序更加簡潔清晰,更重要的是其開發(fā)理念更符合自然哲學(xué)的思想。
UDP通信;嵌入式系統(tǒng);WPF;檢測系統(tǒng)
GUI程序開發(fā)工具歷經(jīng)了Win32 API、MFC、Windows Forms等的變遷,每一次變遷都使開發(fā)效率和質(zhì)量產(chǎn)生飛躍。2007年微軟推出了新一代GUI開發(fā)工具Windows Presentation Foundation(WPF),并且把它定為未來10年Windows平臺GUI開發(fā)的主要技術(shù)。WPF基于DirecX底層接口,帶來優(yōu)秀的圖形向量渲染引擎。它可以輕松地實(shí)現(xiàn)半透明、平移、縮放等絢麗效果[1]。WPF引入了Bingding機(jī)制,在開發(fā)理念上進(jìn)行了一次升級,由“事件驅(qū)動”變?yōu)椤皵?shù)據(jù)驅(qū)動”。WPF中,數(shù)據(jù)與空間的關(guān)系就是哲學(xué)中內(nèi)容與形式的關(guān)系,內(nèi)容決定形式,以數(shù)據(jù)驅(qū)動頁面,這非常符合哲學(xué)原理[2]。
1.1 XAML
XAML就是WPF技術(shù)中專門用于設(shè)計UI的語言。XAML作為界面描述語言最終會被編譯成.Net后臺代碼。因此,它能夠同后臺進(jìn)行邏輯處理的.Net語言如C#、C++等協(xié)同工作。XAML的產(chǎn)生使得界面描述代碼和程序代碼得以分開,從而提高了開發(fā)率,有利于團(tuán)隊(duì)開發(fā)。
1.2 Data Binding機(jī)制
WPF出現(xiàn)之前,Windows Forms等技術(shù)都是采用“事件驅(qū)動”理念。盡管可以使用MVC、MVP等設(shè)計模式,但界面邏輯和業(yè)務(wù)邏輯非常容易糾纏在一起,造成代碼復(fù)雜難懂。而Bingding機(jī)制可以實(shí)現(xiàn)“數(shù)據(jù)驅(qū)動”,當(dāng)數(shù)據(jù)發(fā)生變化時,會主動通知界面控件、推動控件顯示最新的數(shù)據(jù)。WPF的核心理念就是變傳統(tǒng)的UI驅(qū)動程序?yàn)閿?shù)據(jù)驅(qū)動UI。
1.3 依賴屬性
依賴屬性是WPF技術(shù)中新提出的概念。簡而言之,依賴屬性可以自己沒有值,并通過使用Binding從數(shù)據(jù)源獲得值的屬性。擁有依賴屬性的對象被稱為依賴對象。與傳統(tǒng)的CLR屬性和面向?qū)ο笏枷胂啾?,依賴屬性有很多新穎之處:首先它可以節(jié)省實(shí)例對內(nèi)存的開銷;其次屬性值可以通過Binding依賴在其他對象上。
2.1 驅(qū)動板卡簡介
日本精工電子集團(tuán)在生產(chǎn)集裝壓電式噴頭方面已經(jīng)具備相當(dāng)雄厚的實(shí)力與基礎(chǔ),穩(wěn)定性方面就如其生產(chǎn)的精工表一樣品質(zhì)超眾[3]。這里的驅(qū)動板卡用于控制大型噴墨打印機(jī)的噴頭。當(dāng)一個板卡生產(chǎn)出來時,為了檢測其性能,需要通過一個噴頭板卡檢測軟件進(jìn)行檢測。此噴頭板卡檢測軟件即為本文討論的重點(diǎn)。板卡檢測軟件與板卡通過雙絞線連接,并使用UDP協(xié)議進(jìn)行通信。
2.2 驅(qū)動板卡通信協(xié)議
(1)驅(qū)動板卡檢測系統(tǒng)與板卡之間采用雙絞線連接,使用UDP通信協(xié)議進(jìn)行通信。一次完整的通信包括上位機(jī)發(fā)送命令、下位機(jī)應(yīng)答兩部分。其中命令具有事先約定好的格式,第一個字節(jié)BYTE0為命令I(lǐng)D,后面跟有若干個字節(jié)的參數(shù)。下位機(jī)接到命令后根據(jù)命令I(lǐng)D進(jìn)行相應(yīng)的操作并作應(yīng)答,返回通信結(jié)果。
(2)驅(qū)動板卡配置數(shù)據(jù)下載命令。板卡生產(chǎn)出來后,需要將一系列信息寫入板卡中。此命令的命令I(lǐng)D約定為0x55,后面跟有42 B的參數(shù)內(nèi)容,其中包括IP地址、端口號、板卡版本號、數(shù)據(jù)寫入時間、服務(wù)期限、噴頭標(biāo)識碼等參數(shù)。應(yīng)答命令BYTE0為應(yīng)答ID,為0x55。如果下載成功BYTE1為0x01,下載失敗則為0x00。
(3)驅(qū)動板卡配置數(shù)據(jù)讀取命令。此命令的命令I(lǐng)D為0xAA。應(yīng)答中,BYTE0為應(yīng)答ID,BYTE1~BYTE42為以上提到的參數(shù)內(nèi)容。
2.3 驅(qū)動板卡檢測系統(tǒng)設(shè)計與實(shí)現(xiàn)
圖1為驅(qū)動板卡檢測系統(tǒng)的界面截圖。從圖中可以看出其主要功能,它實(shí)現(xiàn)了數(shù)據(jù)的下載、讀取以及應(yīng)答的接收。
圖1 驅(qū)動板卡檢測系統(tǒng)界面
(1).Net庫中的UdpClient類對基礎(chǔ)Socket進(jìn)行了封裝,發(fā)送和接收數(shù)據(jù)時不必考慮底層套接字在收發(fā)時必須要處理的細(xì)節(jié)問題,大大降低了UDP編程的難度,提高了編程效率[4]。首先定義一個UdpClient對象,然后調(diào)用其Connect成員函數(shù)與遠(yuǎn)程主機(jī)進(jìn)行連接,參數(shù)為遠(yuǎn)程主機(jī)的IP地址和端口號。再調(diào)用其Send成員函數(shù)進(jìn)行發(fā)送,函數(shù)參數(shù)為要發(fā)送的數(shù)據(jù)及其數(shù)據(jù)的長度。最后關(guān)閉UDP連接。至此完成了一次UDP通信。
(2)數(shù)據(jù)的寫入。此功能將獲得各個文本框中的數(shù)據(jù)。數(shù)據(jù)在文本框中的格式為字符串,但是本系統(tǒng)需要以字節(jié)的形式通過UDP通信發(fā)送至板卡,故獲得數(shù)據(jù)后需要對數(shù)據(jù)進(jìn)一步處理再發(fā)送。
(3)IP地址的檢測。每個驅(qū)動板卡需要一個唯一的IP地址,因此每當(dāng)驅(qū)動板卡檢測系統(tǒng)寫入一個IP地址,就要將其記錄下來,并在每次寫入前檢測將要寫入的IP是否可用。本系統(tǒng)將每次寫入的IP地址存到了SQLite數(shù)據(jù)庫中。SQLite是一款輕型的數(shù)據(jù)庫,它的設(shè)計目標(biāo)是嵌入式的,占用資源非常低,同時,它能夠與很多程序語言相結(jié)合。因
此本系統(tǒng)選擇了用SQLite來實(shí)現(xiàn)IP地址的存儲。首先打開數(shù)據(jù)庫、建立鏈接。然后執(zhí)行SELETCT查詢語句查看當(dāng)前IP地址是否已經(jīng)使用。如已使用則提示“當(dāng)前IP地址已經(jīng)使用,請選用其他IP地址”,否則將當(dāng)前IP地址寫入驅(qū)動板卡,并存入數(shù)據(jù)庫的IP表。
(4)讀取當(dāng)前配置。此項(xiàng)功能實(shí)現(xiàn)較為簡單,只需要將命令I(lǐng)D 0xAA通過UDP協(xié)議發(fā)送至下位機(jī)驅(qū)動板卡即可,剩下的工作由下位機(jī)驅(qū)動板卡來實(shí)現(xiàn)。驅(qū)動板卡收到命令后,再將由42 B組成的配置信息發(fā)送至驅(qū)動板卡檢測系統(tǒng)。因此,上位機(jī)驅(qū)動板卡檢測系統(tǒng)需要實(shí)現(xiàn)UDP的接收功能。下位機(jī)隨時可能發(fā)送數(shù)據(jù)至上位機(jī)。WPF應(yīng)用程序在運(yùn)行過程中,UI線程接收輸入,處理事件,繪制屏幕以及運(yùn)行應(yīng)用程序代碼。如果運(yùn)行時間過長,會造成內(nèi)存使用率不斷上升,CPU占用率提高,導(dǎo)致系統(tǒng)總體性能降低[5]。因此,UDP接收過程必須獨(dú)立使用一個線程。
(5)多線程的應(yīng)用。多線程技術(shù)能很好地解決并發(fā)多任務(wù)問題,提高資源的利用率和系統(tǒng)的性能,因此計算機(jī)的各個領(lǐng)域都對其進(jìn)行了研究,從不同角度實(shí)現(xiàn)或增強(qiáng)了對多線程的支持[6]。同時多線程技術(shù)也能提高程序的穩(wěn)定性,因此在實(shí)際開發(fā)中有著重要的作用。
經(jīng)過測試,該系統(tǒng)不僅可以實(shí)現(xiàn)IP地址的寫入、讀取當(dāng)前配置等基本功能,而且系統(tǒng)界面與傳統(tǒng)的MFC、WinForm等相比更加生動、形象,更重要的是,由于WPF框架的應(yīng)用,提高了開發(fā)效率,在預(yù)定時間內(nèi)完成了系統(tǒng)的開發(fā)。
[1] 王鵬, 崔靜. 新一代界面技術(shù)WPF的架構(gòu)及應(yīng)用[J]. 成都紡織高等專科學(xué)校學(xué)報, 2011,28(1): 18-20.
[2] 劉鐵猛. 深入淺出WPF[M]. 北京:中國水利水電出版社,2010.
[3] 王麗坤. 常見噴墨打印頭的分類和性能[J]. 數(shù)字化技術(shù), 2015(7): 39-41.
[4] 何波,付由甲.C#網(wǎng)絡(luò)程序開發(fā)[M]. 北京:清華大學(xué)出版社,2014.
[5] 蔣勇銘, 張仲貴, 呂剛. 基于WPF的LED顯示系統(tǒng)的設(shè)計與實(shí)現(xiàn)[J]. 電腦知識與技術(shù), 2012, 8(5): 3068-3070.
[6] 賈廣雷, 劉培玉, 耿長欣. 多線程技術(shù)及其在串口通信中的應(yīng)用[J]. 計算機(jī)工程, 2003, 29(1): 247-249.
步亞男(1989-),通信作者,男,碩士研究生,主要研究方向:嵌入式系統(tǒng)。E-mial: 1065889785@qq.com。
金禹含(1991-),女,碩士研究生,主要研究方向:嵌入式系統(tǒng)。
Application of WPF in the control system of the host computer
Liu Jin, Bu Yanan, Jin Yuhan, Su Chen
(College of Computer and Information Technology, Liaoning Normal University, Dalian 116000, China)
In the embedded field, the control system of the upper computer is often required. WPF is a technique and tool that is specifically designed to be written in the presentation layer. In order to truly feel the differences and advantages of WPF technology and other interface development tools, this paper tries to do two upper computer control software. This paper will give a detailed introduction to the implementation of the two control systems. Verified by the practical application, the WPF technology and the traditional interface development tools are simple, the procedure is more simple and clear. More important is the idea of the development is more in line with the idea of natural philosophy.
UDP communication; embedded system; WPF; detection system
TP3
A
1674-7720(2016)02-0073-02
劉晉,步亞男,金禹含,等. WPF在驅(qū)動板卡檢測系統(tǒng)中的應(yīng)用[J].微型機(jī)與應(yīng)用,2016,35(2):73-74.
2015-09-20)
劉晉(1964-),男,碩士,教授,主要研究方向:嵌入式系統(tǒng)。