張志廣,趙學(xué)作,于張紅,王 杰
(1河北科技師范學(xué)院數(shù)學(xué)與信息科技學(xué)院,河北秦皇島,066004;2河北省昌黎縣第三中學(xué))
LED顯示屏作為一種全新的信息媒體,具有使用壽命長(zhǎng)、可視角度大、功耗低、性能穩(wěn)定等突出優(yōu)點(diǎn),在商場(chǎng)、企事業(yè)單位、體育場(chǎng)館等各個(gè)領(lǐng)域得到了廣泛的應(yīng)用。目前的LED顯示屏顯示內(nèi)容更新可以分為以下幾種控制方式[1]:(1)使用手提電腦到設(shè)備現(xiàn)場(chǎng),通過(guò)串口連接電腦和控制卡,用控制軟件進(jìn)行現(xiàn)場(chǎng)更新。缺點(diǎn)在于操作復(fù)雜、運(yùn)作成本高。(2)通過(guò)運(yùn)行LED控制軟件,連接帶有網(wǎng)口的LED屏控制卡,進(jìn)行內(nèi)容更新。目前市場(chǎng)上帶有網(wǎng)口的控制卡多數(shù)只能在局域網(wǎng)范圍內(nèi)使用,無(wú)法進(jìn)行遠(yuǎn)程控制。如果給控制卡一個(gè)靜態(tài)IP,無(wú)疑會(huì)加大運(yùn)行成本。(3)通過(guò)GPRS短信方式更新顯示內(nèi)容,這種控制方式需要控制卡帶有SIM手機(jī)卡,控制卡價(jià)格較貴,運(yùn)行成本高。筆者提出了一種利用站點(diǎn)、mini2440嵌入式設(shè)備,通過(guò)互聯(lián)網(wǎng)進(jìn)行遠(yuǎn)程字屏顯示內(nèi)容更新的新方案,使用普通的帶有RS232串口的控制卡即可,具有內(nèi)容更新操作簡(jiǎn)單,運(yùn)行成本低,遠(yuǎn)程更新的優(yōu)點(diǎn)。
該系統(tǒng)包括用于更新顯示內(nèi)容的站點(diǎn)、mini2440開(kāi)發(fā)板上的Windows CE程序、帶有串口的字屏控制卡、LED顯示屏。
通過(guò)登錄站點(diǎn)進(jìn)行LED屏顯示內(nèi)容發(fā)布,mini2440通過(guò)串口和控制板進(jìn)行通信,利用嵌入式設(shè)備上的wince程序讀取網(wǎng)頁(yè)數(shù)據(jù)后通過(guò)串口向字屏控制卡發(fā)送握手幀和數(shù)據(jù)幀,字屏顯示內(nèi)容得到更新。系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
圖1 遠(yuǎn)程字屏控制系統(tǒng)結(jié)構(gòu)
字屏內(nèi)容更新站點(diǎn)采用ASP.NET術(shù),c#語(yǔ)言,sql server 2005數(shù)據(jù)庫(kù)開(kāi)發(fā)。主要進(jìn)行LED屏內(nèi)容的更新。管理員登錄該站點(diǎn),可以針對(duì)不同的LED屏進(jìn)行顯示內(nèi)容的發(fā)布,設(shè)置內(nèi)容播放時(shí)間,發(fā)布后通知內(nèi)容、發(fā)布時(shí)間、有效播放時(shí)間、屏號(hào)等內(nèi)容通過(guò)Response.write寫(xiě)入特定頁(yè)面,字段間用豎線分割,以利于部署在mini2440開(kāi)發(fā)板上的wince程序讀取解析。wince程序讀取后已讀字段自動(dòng)改為T(mén)RUE,下次將不再進(jìn)行讀取。站點(diǎn)還有刪除已發(fā)通知內(nèi)容、日志記錄等功能,實(shí)例如下所示:
Id號(hào)通知內(nèi)容屏號(hào)播放時(shí)間(分鐘)通知發(fā)布時(shí)間已讀標(biāo)志發(fā)布人174|軟件研發(fā)中心歡迎您!|2|30|2011-6-14 13∶01∶28 True|李明。
在mini2440上用c#開(kāi)發(fā)了字屏遠(yuǎn)程控制客戶端軟件,mini2440[2]采用wince 6.0操作系統(tǒng)??蛻舳塑浖饕ňW(wǎng)頁(yè)內(nèi)容讀取模塊、數(shù)據(jù)幀構(gòu)成模塊、串口操作模塊、定時(shí)器模塊4個(gè)部分。
該模塊從指定頁(yè)面讀取網(wǎng)頁(yè)內(nèi)容,該網(wǎng)頁(yè)內(nèi)容如第2節(jié)所示,然后對(duì)其進(jìn)行分割截取,存入相應(yīng)變量以備構(gòu)建數(shù)據(jù)幀使用。
首先使用WebRequest request=WebRequest.Create(PageUrl),創(chuàng)建一個(gè)對(duì)該網(wǎng)頁(yè)的請(qǐng)求對(duì)象request,然后通過(guò)WebResponse response=request.GetResponse(),創(chuàng)建一個(gè)來(lái)自PageUrl地址的響應(yīng)對(duì)象,通過(guò)System.IO.Stream resStream=response.GetResponseStream(),創(chuàng)建一個(gè)字節(jié)流。用指定的字符編碼為該流創(chuàng)建一個(gè)StreamReader實(shí)例,接下來(lái)就可以用該StreamReader實(shí)例對(duì)網(wǎng)頁(yè)內(nèi)容進(jìn)行讀操作。對(duì)網(wǎng)頁(yè)內(nèi)容進(jìn)行分割后,根據(jù)對(duì)應(yīng)屏號(hào)是否正確和該信息未被讀取標(biāo)志返回TRUE或FALSE。
本系統(tǒng)是在上海仰邦電子科技有限公司的BX-TII控制卡的基礎(chǔ)上進(jìn)行開(kāi)發(fā)的,采用該廠家提供的用戶開(kāi)發(fā)數(shù)據(jù)、通訊協(xié)議來(lái)構(gòu)成數(shù)據(jù)幀。數(shù)據(jù)幀構(gòu)成過(guò)程重點(diǎn)涉及數(shù)據(jù)長(zhǎng)度、接收區(qū)域數(shù)據(jù)、校驗(yàn)值等3個(gè)部分[3]。其他部分根據(jù)通信協(xié)議比較容易構(gòu)成。
3.2.1 數(shù)據(jù)長(zhǎng)度的計(jì)算 本次開(kāi)發(fā)采用的是128*16的單色字屏,首先根據(jù)網(wǎng)頁(yè)內(nèi)容讀取模塊讀取到的顯示內(nèi)容計(jì)算需要顯示的屏數(shù)pingnum,然后根據(jù)通信協(xié)議計(jì)算得出公式datalength=23+pingnum*262;datalength為數(shù)據(jù)長(zhǎng)度。數(shù)據(jù)長(zhǎng)度為4個(gè)字節(jié)。通過(guò)開(kāi)發(fā)的intToByte(int datalength)方法將int類型的數(shù)據(jù)長(zhǎng)度轉(zhuǎn)換為4個(gè)字節(jié)的字節(jié)數(shù)組。然后將該字節(jié)數(shù)組中的4個(gè)字節(jié)按照高字節(jié)在前、低字節(jié)在后的順序放入數(shù)據(jù)幀字節(jié)數(shù)組中。
3.2.2 接收區(qū)域數(shù)據(jù)的構(gòu)成 接收區(qū)域數(shù)據(jù)的構(gòu)成重點(diǎn)在于將從特定網(wǎng)頁(yè)讀取到的顯示內(nèi)容進(jìn)行點(diǎn)陣字庫(kù)的轉(zhuǎn)換,然后將點(diǎn)陣字庫(kù)的字節(jié)放入數(shù)據(jù)幀。中文字符點(diǎn)陣字庫(kù)選用了HZK16字模文件,首先通過(guò)System.Text.Encoding.Default.GetBytes(string s)將漢字s轉(zhuǎn)換為2個(gè)字節(jié)的字節(jié)數(shù)組,通過(guò)處理該字節(jié)數(shù)組可得到該漢字的區(qū)碼和位碼,然后根據(jù)該區(qū)碼和位碼可計(jì)算出該漢字在字模文件中的偏移量,接下來(lái)對(duì)HZK16字模文件進(jìn)行定位、讀操作,讀取游標(biāo)定位后的32個(gè)字節(jié)即為該漢字的字模[4]。
英文、數(shù)字、標(biāo)點(diǎn)符號(hào)的點(diǎn)陣字庫(kù)選用了ASC16字模文件,通過(guò)英文、數(shù)字或標(biāo)點(diǎn)的ASCII值定位該字符在字模文件中的偏移量,然后從ASC16文件中偏移量處讀取16個(gè)字節(jié),可以得到該字符的字模信息[5]。由于字屏顯示采用16*16的點(diǎn)陣顯示1個(gè)字符,1個(gè)字符需要32個(gè)字節(jié)的數(shù)據(jù),所以需要對(duì)英文、標(biāo)點(diǎn)符號(hào)的顯示進(jìn)行處理。開(kāi)發(fā)用的字屏使用低效,即一個(gè)LED燈對(duì)應(yīng)的數(shù)據(jù)位為0點(diǎn)亮,1不亮,所以處理方法為添加16個(gè)字節(jié)的0xFF,既可以在16*16的點(diǎn)陣中顯示一個(gè)英文或標(biāo)點(diǎn)。但是這樣顯示出的效果極不美觀,英文間的間隔太大。開(kāi)發(fā)中又進(jìn)一步進(jìn)行了處理,如果是兩個(gè)連續(xù)的英文、數(shù)字、標(biāo)點(diǎn)需要顯示,則將兩個(gè)從ASC16文件中讀到的16個(gè)字節(jié)的字模進(jìn)行合并,得到1個(gè)32個(gè)字節(jié)的字模,這樣縮短了相鄰英文、數(shù)字間的顯示距離,使顯示效果得到改善。
3.2.3 校驗(yàn)值的計(jì)算 校驗(yàn)方法為計(jì)算要發(fā)送的數(shù)據(jù)的校驗(yàn)和,取校驗(yàn)和值的低4個(gè)字節(jié),高字節(jié)在前、低字節(jié)在后。在接收區(qū)域部分構(gòu)成之后,可以通過(guò)for循環(huán)計(jì)算校驗(yàn)和。將計(jì)算出的校驗(yàn)和取低4個(gè)字節(jié)轉(zhuǎn)換為字節(jié)數(shù)組,放入數(shù)據(jù)幀字節(jié)數(shù)組中。
開(kāi)發(fā)采用的BX-TII控制卡使用RS232串口和上位機(jī)進(jìn)行通信[6]。由于上位機(jī)為mini2440嵌入式設(shè)備,和字屏控制卡屬于同一種通信設(shè)備,所以串口線采用交叉線。
串口操作包括串口的初始化、串口的打開(kāi)和串口的關(guān)閉等子模塊。在串口初始化操作中首先通過(guò)串口名稱、波特率、奇偶校驗(yàn)位、數(shù)據(jù)位和停止位初始化System.IO.Ports.SerialPort的實(shí)例,然后定義串口接收到數(shù)據(jù)后調(diào)用的處理方法。通過(guò)SeriaPort.open()打開(kāi)串口,通過(guò)SeriaPort.close()關(guān)閉串口[7]。
開(kāi)發(fā)中定義了2個(gè)計(jì)時(shí)器[1]。1個(gè)為System.Windows.Forms類型的窗體計(jì)時(shí)器Timer1,該計(jì)時(shí)器每1分鐘讀取指定網(wǎng)頁(yè)數(shù)據(jù),判斷是否有新內(nèi)容需要顯示;另1個(gè)計(jì)時(shí)器采用System.Threading.Timer類型的線程計(jì)時(shí)器Timer2。當(dāng)有新內(nèi)容需要顯示時(shí),根據(jù)管理員發(fā)布的播放時(shí)間開(kāi)啟該計(jì)時(shí)器,到時(shí)向控制板發(fā)送由指定內(nèi)容的字符串形成的數(shù)據(jù)幀,形成常規(guī)內(nèi)容顯示。各個(gè)模塊協(xié)同工作的程序流程如圖2所示。
圖2 定時(shí)器各模塊協(xié)同工作的程序流程
系統(tǒng)為L(zhǎng)ED屏的遠(yuǎn)程控制提供了一種全新的模式,通過(guò)網(wǎng)頁(yè)發(fā)布更新內(nèi)容,避免了繁瑣的控制軟件的使用,方便了管理員對(duì)字屏顯示內(nèi)容的更新。采用普通的帶有串口的控制卡,Mini2440開(kāi)發(fā)板經(jīng)過(guò)硬件裁剪后去掉觸摸屏和多余的接口,可以節(jié)省運(yùn)行成本。該系統(tǒng)可以控制不同地點(diǎn)的LED屏,實(shí)現(xiàn)不同內(nèi)容的顯示,尤其對(duì)于高處懸掛的LED屏幕顯示內(nèi)容的更新更具有實(shí)用意義。本系統(tǒng)已經(jīng)過(guò)實(shí)際運(yùn)行測(cè)試,效果良好。
[1] 陳富軍,趙恒銳.基于GPRS遠(yuǎn)程控制的多LED顯示屏設(shè)計(jì)[J].天中學(xué)刊,2009,24(2):40-41.
[2] MINI2440用戶手冊(cè)[M].廣東:廣州友善之臂科技有限公司,2009.
[3] 翁健紅.基于c#的ASP.NET程序設(shè)計(jì)[M].北京:機(jī)械工業(yè)出版社,2008.
[4] 劉楚湘,王丹琪,尤雙楓.帶串行口通信漢字點(diǎn)陣屏的研究與實(shí)現(xiàn)[J].新疆師范大學(xué)學(xué)報(bào):自然科學(xué)版,2008,27(2):61-68.
[5] 陽(yáng)進(jìn).基于單片機(jī)的LED顯示屏的漢字顯示[J].科技論壇,2005(12):112-113.
[6] 楊興.LED顯示屏系統(tǒng)原理及工程技術(shù)[M].北京:電子工業(yè)出版社,2004.
[7] 劉瑞新.C#網(wǎng)絡(luò)編程及應(yīng)用[M].北京:機(jī)械工業(yè)出版社,2007.