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