熊木地, 郭俞君, 孫宇航
(大連海事大學(xué) 信息科學(xué)技術(shù)學(xué)院,遼寧 大連 116026)
隨著LED顯示技術(shù)的不斷成熟與進(jìn)步, LED顯示屏被廣泛應(yīng)用于金融、體育館等公眾場(chǎng)所的電子圖文顯示[1-6]。而LED智能玻璃顯示屏技術(shù)最早由德國(guó)提出,我國(guó)于2006年開(kāi)始了對(duì)它的工藝以及控制方法研究,目前依舊處于初級(jí)階段。LED智能玻璃顯示屏在結(jié)構(gòu)組成上與傳統(tǒng)LED顯示屏相近,主要由間隔固定的彩色LED點(diǎn)陣組成,通過(guò)對(duì)輸入LED信號(hào)的占空比控制,實(shí)現(xiàn)特定亮度以及顏色的顯示[7-8]。LED智能玻璃顯示屏在具有傳統(tǒng)LED顯示屏特性的同時(shí),還可以根據(jù)周?chē)木坝^或是環(huán)境的風(fēng)格設(shè)計(jì)創(chuàng)意視頻,實(shí)現(xiàn)建筑與周?chē)坝^的完美結(jié)合,提升整體效果以及格調(diào),表現(xiàn)出一定的藝術(shù)性以及觀賞性的景觀一體特性,使其更受各類(lèi)應(yīng)用領(lǐng)域歡迎。
LED智能玻璃顯示屏的控制方式與傳統(tǒng)LED顯示屏的同步控制方式類(lèi)似,但由于LED智能玻璃顯示屏具有很強(qiáng)的發(fā)散性,不同規(guī)格LED智能玻璃其內(nèi)部的LED點(diǎn)陣排列方式不同,所以需要將通過(guò)HDMI(High Definition Multimedia Interface)或VGA(Video Graphics Array)等視頻接口輸入至控制單元的視頻數(shù)據(jù)進(jìn)行重新排序再發(fā)送至后續(xù)驅(qū)動(dòng)電路[9-10]。當(dāng)前針對(duì)不同的室外LED智能玻璃需要更改控制器代碼才可以實(shí)現(xiàn)顯示,給產(chǎn)品的應(yīng)用帶來(lái)了諸多不便。
本文設(shè)計(jì)了一種可用于不同規(guī)格LED智能玻璃顯示屏,將視頻像素點(diǎn)與LED智能玻璃顯示屏中的LED點(diǎn)陣相映射的上位機(jī)軟件。在實(shí)際應(yīng)用中,只需在上位機(jī)界面進(jìn)行可視化的LED智能玻璃的點(diǎn)陣?yán)L制,即可實(shí)現(xiàn)LED智能玻璃的顯示,提高施工效率。
LED智能玻璃顯示系統(tǒng)總體設(shè)計(jì)如圖1所示,主要包括視頻生成系統(tǒng)、坐標(biāo)映射系統(tǒng)、MCU控制器以及驅(qū)動(dòng)系統(tǒng)。
圖1 LED智能玻璃顯示系統(tǒng)總體設(shè)計(jì)Fig.1 Overall design of LED smart glass display system
上位機(jī)中的視頻生成系統(tǒng)主要生成對(duì)應(yīng)LED智能玻璃的分辨率的視頻,之后通過(guò)DVI解碼芯片將RGB視頻數(shù)據(jù)傳送到現(xiàn)場(chǎng)可編程門(mén)陣列(FPGA),并按地址遞增方式存儲(chǔ)在FPGA的外接SSRAM1(Synchronous Static Random Access Memory)中。
上位機(jī)中的映射系統(tǒng)主要實(shí)現(xiàn)生成LED智能玻璃對(duì)應(yīng)的映射數(shù)據(jù),即FPGA的SSRAM1的讀地址表。之后映射數(shù)據(jù)通過(guò)網(wǎng)絡(luò)傳輸至ARM的外掛FLASH中進(jìn)行存儲(chǔ)(以防掉電丟失數(shù)據(jù)),然后發(fā)送至FPGA的外接SSRAM2中按地址遞增暫存,通過(guò)按地址遞增方式讀取SSRAM2的數(shù)據(jù)作為SSRAM1的地址來(lái)讀取SSRAM1中的RGB數(shù)據(jù),之后對(duì)數(shù)據(jù)進(jìn)行并轉(zhuǎn)串處理傳送給驅(qū)動(dòng)系統(tǒng)。驅(qū)動(dòng)系統(tǒng)采用專(zhuān)用的驅(qū)動(dòng)芯片,將數(shù)據(jù)串行移位和并行輸出,從而實(shí)現(xiàn)對(duì)LED智能玻璃的顯示。對(duì)于大規(guī)格的LED智能玻璃采用級(jí)聯(lián)方式進(jìn)行拼接顯示。
對(duì)于不同LED智能玻璃,只需在映射系統(tǒng)進(jìn)行可視化繪制即可實(shí)現(xiàn)顯示,不需要對(duì)硬件控制器進(jìn)行硬件程序的重新編寫(xiě),使整個(gè)LED智能玻璃顯示系統(tǒng)在使用上更加靈活。
此設(shè)計(jì)中上位機(jī)的最大顯示分辨率為1 024×768。上位機(jī)中的視頻源采用逐行掃描方式存儲(chǔ)到控制器外掛的SSRAM1中,即SSRAM1中的數(shù)據(jù)存儲(chǔ)是從屏幕左上角的第一行開(kāi)始逐行進(jìn)行存儲(chǔ),直到一幀結(jié)束。SSRAM1的一個(gè)地址存儲(chǔ)一個(gè)像素點(diǎn)RGB數(shù)據(jù),則一個(gè)1 024×768顯示分辨率需要1 024×768個(gè)SSRAM1地址去存儲(chǔ)一幀的RGB數(shù)據(jù)。上位機(jī)部分視頻像素點(diǎn)分布如圖2所示,圖中數(shù)字表示上位機(jī)的視頻像素點(diǎn)的存儲(chǔ)順序。
圖2 上位機(jī)部分視頻像素點(diǎn)分布Fig.2 Video pixel distribution of the upper computer
不同規(guī)格的LED智能玻璃其內(nèi)部的LED點(diǎn)陣排列可以看作是由若干個(gè)相同的塊按照不同的方式排列組成。本文中LED智能玻璃分辨率為16×16,其LED點(diǎn)陣如圖3所示,圖中數(shù)字表示LED智能玻璃的LED點(diǎn)亮順序。為實(shí)現(xiàn)LED智能玻璃視頻顯示,需要將上位機(jī)上的每個(gè)像素點(diǎn)與LED智能玻璃上的LED相對(duì)應(yīng)。
圖3 16×16規(guī)格的LED智能玻璃的LED點(diǎn)陣分布Fig.3 LED dot matrix distribution of 16×16 LED display
LED智能玻璃映射系統(tǒng)設(shè)計(jì),主要是先建立一個(gè)二維坐標(biāo)畫(huà)布,然后在此畫(huà)布上繪制端口與端口內(nèi)部LED點(diǎn)陣排列位置,生成LED智能玻璃的映射圖,再通過(guò)網(wǎng)絡(luò)傳輸?shù)娇刂破髦小.?dāng)LED智能玻璃分辨率發(fā)生變化,或是LED智能玻璃的某一區(qū)域顯示要進(jìn)行改動(dòng)時(shí),只需重新繪制映射圖,便可更新LED智能玻璃顯示。
LED智能玻璃映射系統(tǒng)支持最大映射分辨率1 024×768,級(jí)聯(lián)的小模塊支持8×8、16×16、24×24。對(duì)于16×16尺寸的LED智能玻璃在映射界面上可將其繪制為4個(gè)8×8或一個(gè)16×16模塊(按照實(shí)際LED智能玻璃布線方式選取),本文以4個(gè)8×8為例,使用兩個(gè)端口進(jìn)行LED智能玻璃的級(jí)聯(lián)顯示。16×16 LED智能玻璃分割如圖4所示,將LED智能玻璃分割為2大行2大列,圖中一個(gè)8×8大小的模塊為一個(gè)塊,每個(gè)帶有數(shù)字的方框?yàn)橐粋€(gè)LED塊,數(shù)字標(biāo)號(hào)代表在一個(gè)塊中的LED的點(diǎn)亮順序。
圖4 16×16 LED智能玻璃分割Fig.4 Segmentation of 16×16 LED display
映射系統(tǒng)設(shè)計(jì)是利用.Net平臺(tái)進(jìn)行應(yīng)用開(kāi)發(fā),使用Visual C# 語(yǔ)言進(jìn)行編寫(xiě)開(kāi)發(fā)。C#是一種簡(jiǎn)單、現(xiàn)代、面向?qū)ο蟮暮皖?lèi)型安全的編程語(yǔ)言,與C++相比,其增強(qiáng)了抽象描述能力,屏蔽底層實(shí)現(xiàn)細(xì)節(jié),提高了軟件生產(chǎn)率過(guò)程[11-12]。本系統(tǒng)采用桌面應(yīng)用程序Winform開(kāi)發(fā)[13]。用戶(hù)通過(guò)控件與應(yīng)用程序進(jìn)行交互。
繪制映射圖界面設(shè)計(jì)主要在一個(gè)空白畫(huà)布中進(jìn)行順序塊繪制以及在各塊中進(jìn)行順序LED塊繪制,每個(gè)LED塊可以有局部坐標(biāo)顯示,且整個(gè)畫(huà)布可以進(jìn)行放大縮小、塊可平移等操作。
本系統(tǒng)中主要使用Elegant Ribbon .NET WinForms控件作為父窗體,使用Piccolo相關(guān)程序集實(shí)現(xiàn)界面的縮放和動(dòng)畫(huà)功能,所有的Piccolo接口需要放在PCanvas以便用戶(hù)可以查看視圖并與之交互,所以本系統(tǒng)添加PCanvas控件并將其作為系統(tǒng)中繪制映射圖的空畫(huà)布[14]。
Piccolo是一個(gè)構(gòu)建可用于縮放用戶(hù)界面的框架[5],可實(shí)現(xiàn)元素的縮放、移動(dòng)等功能。Piccolo類(lèi)層次結(jié)構(gòu)如圖5所示,PNode 節(jié)點(diǎn)是Piccolo的核心設(shè)計(jì)概念,在畫(huà)布上進(jìn)行繪制的節(jié)點(diǎn)都需要繼承此節(jié)點(diǎn)。繪制在屏幕上的節(jié)點(diǎn)可以添加其他的“子”節(jié)點(diǎn),本系統(tǒng)中映射圖的繪制是通過(guò)建立節(jié)點(diǎn)、將各節(jié)點(diǎn)集合進(jìn)行分組以及添加“子”節(jié)點(diǎn)方式來(lái)實(shí)現(xiàn)各塊以及塊中LED塊的繪制。本系統(tǒng)軟件編程中創(chuàng)建了一個(gè)繼承PNode類(lèi)的BlockNode類(lèi),作為塊類(lèi),在BlockNode節(jié)點(diǎn)下又添加LEDBlock“子”節(jié)點(diǎn)作為一個(gè)塊中映射的各個(gè)LED。PCamera攝像機(jī)節(jié)點(diǎn),包含需要視圖轉(zhuǎn)換的節(jié)點(diǎn)和層節(jié)點(diǎn),Piccolo具有事件偵聽(tīng)器,當(dāng)用戶(hù)有縮放或移動(dòng)交互時(shí),事件偵聽(tīng)器通過(guò)操作攝像機(jī)節(jié)點(diǎn)的視圖轉(zhuǎn)換來(lái)創(chuàng)建縮放移動(dòng)效果。Piccolo中的節(jié)點(diǎn)轉(zhuǎn)換,本質(zhì)是一個(gè)坐標(biāo)系的轉(zhuǎn)換,每個(gè)節(jié)點(diǎn)都有其局部坐標(biāo)和全局坐標(biāo),可相互轉(zhuǎn)換。對(duì)于PLayer層節(jié)點(diǎn),新節(jié)點(diǎn)通常添加到畫(huà)布的層節(jié)點(diǎn),在層節(jié)點(diǎn)中的節(jié)點(diǎn)可以被攝像機(jī)捕捉,進(jìn)而實(shí)現(xiàn)視圖轉(zhuǎn)換。本系統(tǒng)中利用層節(jié)點(diǎn)建立了一個(gè)網(wǎng)格圖層,畫(huà)布左上角坐標(biāo)為(0,0),橫縱坐標(biāo)的間隔都是1像素,便于查看各個(gè)LED的局部坐標(biāo)。PRoot充當(dāng)Piccolo運(yùn)行時(shí)結(jié)構(gòu)中的最頂層節(jié)點(diǎn),所有繪制的節(jié)點(diǎn)都是它的直接子節(jié)點(diǎn)或其子節(jié)點(diǎn)的后代,可與PCanvas進(jìn)行通信,以管理屏幕上節(jié)點(diǎn)繪制的更新以及分配各子節(jié)點(diǎn)對(duì)事件進(jìn)行處理。
圖5 Piccolo類(lèi)層次結(jié)構(gòu)Fig.5 Class hierarchy of Piccolo
Piccolo運(yùn)行時(shí)結(jié)構(gòu)如圖6所示。PRoot位于頂部,每個(gè)PCamera節(jié)點(diǎn)通常至少與一個(gè)Player層節(jié)點(diǎn)相關(guān)聯(lián)進(jìn)行查看視圖轉(zhuǎn)換,本系統(tǒng)中將PLayer層節(jié)點(diǎn)與PCanvas相關(guān)聯(lián),所以當(dāng)畫(huà)布上有新的事件輸入時(shí),Camera會(huì)進(jìn)行捕捉并做出相關(guān)事件的處理,圖中的PImage、PText、PPath都是Piccolo默認(rèn)定義的節(jié)點(diǎn)。
圖6 Piccolo運(yùn)行時(shí)結(jié)構(gòu)Fig.6 Runtime structure of Piccolo
繪制的每個(gè)塊都有端口號(hào)和端口號(hào)中的塊順序編號(hào)屬性。繪制的每個(gè)LED塊都有id、x、y的屬性值,id是用來(lái)表示LED智能玻璃上LED的點(diǎn)亮順序,x、y表示LEDBlock在畫(huà)布上的坐標(biāo),通過(guò)“x+1 024y”的公式可以計(jì)算出所繪制的LED對(duì)應(yīng)的實(shí)際屏幕像素點(diǎn)的位置即SSRAM1的讀地址,即要將此數(shù)據(jù)發(fā)送到控制器中。映射數(shù)據(jù)的發(fā)送順序是先發(fā)送端口1中的Block0中的LEDBlock id0、LEDBlock id1…,直到Block0中的LEDBlock 都發(fā)送完成,再發(fā)送端口1的Block1中的所有LEDBlock。當(dāng)端口1的所有Block都發(fā)送完成,再發(fā)送端口2的所有Block…,依次循環(huán),直到畫(huà)布上的所有繪制的端口的數(shù)據(jù)全部發(fā)送完成才結(jié)束。在發(fā)送數(shù)據(jù)的過(guò)程中還會(huì)向控制器發(fā)送通信標(biāo)志,當(dāng)有的端口沒(méi)有被繪制,或者有的端口中有的Block沒(méi)有被繪制都會(huì)跳過(guò),不進(jìn)行任何數(shù)據(jù)的發(fā)送,不會(huì)造成端口映射數(shù)據(jù)錯(cuò)誤。此系統(tǒng)中設(shè)定的一個(gè)Block中的LEDBlock的id最大為256,一個(gè)端口中的LEDBlock總個(gè)數(shù)最多為2 048。
.Net擁有C/S、B/S兩種交互模式[15],此映射系統(tǒng)網(wǎng)絡(luò)編程采用的是C/S模式,編寫(xiě)的是服務(wù)器端向客戶(hù)端發(fā)送映射數(shù)據(jù)信息的一個(gè)Windows桌面窗體應(yīng)用程序。
TCP/IP網(wǎng)絡(luò)的應(yīng)用程序使用Socket網(wǎng)絡(luò)編程。Socket在網(wǎng)絡(luò)通信中被稱(chēng)作“套接字”[16],用來(lái)描述服務(wù)器端、客戶(hù)端的IP 地址和端口號(hào),在程序中作為通信鏈的句柄,主要用來(lái)進(jìn)行網(wǎng)絡(luò)請(qǐng)求的應(yīng)答和發(fā)出網(wǎng)絡(luò)請(qǐng)求。Socket網(wǎng)絡(luò)編程中TCP的3次握手建立連接如圖7所示:
圖7 Socket網(wǎng)絡(luò)編程中TCP的3次握手建立連接Fig.7 Three-way handshake establishment of TCP in Socket network programming
(1)服務(wù)器端監(jiān)聽(tīng)端口(負(fù)責(zé)監(jiān)聽(tīng)客戶(hù)端是否有連接的信息);
(2)客戶(hù)端連接服務(wù)器端的指定端口(負(fù)責(zé)接收和發(fā)送服務(wù)端信息);
(3)服務(wù)器端監(jiān)聽(tīng)到客戶(hù)端的連接,創(chuàng)建負(fù)責(zé)通信的Socket。
數(shù)據(jù)網(wǎng)絡(luò)傳輸程序設(shè)計(jì)主要包括讀取本機(jī)IP和端口號(hào)、設(shè)定監(jiān)聽(tīng)隊(duì)列、等待客戶(hù)端的連接,當(dāng)有客戶(hù)端連接時(shí)可進(jìn)行數(shù)據(jù)發(fā)送等流程,數(shù)據(jù)網(wǎng)絡(luò)傳輸程序設(shè)計(jì)流程如圖8所示。
圖8 數(shù)據(jù)網(wǎng)絡(luò)發(fā)送程序設(shè)計(jì)流程圖Fig.8 Design flow chart of data network transmission program
LED智能玻璃視頻生成系統(tǒng)如圖9所示,使用LEDVISION軟件生成LED智能玻璃對(duì)應(yīng)分辨率的視頻,其中視頻起點(diǎn)位置(1,0),分辨率為16×16。
圖9 LED智能玻璃視頻生成系統(tǒng)Fig.9 LED smart glass video generation system
LED智能玻璃映射系統(tǒng)設(shè)計(jì)具體實(shí)現(xiàn)如圖10所示,在畫(huà)布中畫(huà)了4個(gè)8×8的塊,將鼠標(biāo)放在塊上會(huì)顯示其對(duì)應(yīng)的端口號(hào)和塊編號(hào)。圖中1×1方框中的數(shù)字編號(hào)是LEDBlock編號(hào),8×8方框的數(shù)字編號(hào)為一個(gè)端口中的Block編號(hào)。
圖10 LED智能玻璃映射系統(tǒng)設(shè)計(jì)具體實(shí)現(xiàn)Fig.10 Design specific implementation of LED display mapping system
控制器接收到的LED智能玻璃映射數(shù)據(jù)如圖11所示,wrclk、arm_up、ARM_CLK、ARM_EN為控制信號(hào),din為ARM向FPGA傳送的映射數(shù)據(jù),wraddr為暫存映射數(shù)據(jù)SSRAM2的寫(xiě)地址,圖中可看出第一個(gè)映射數(shù)據(jù)為3C0D十進(jìn)制為15 373=13+15×1 024,對(duì)應(yīng)上位機(jī)映射圖中x=13,y=15的像素點(diǎn),與LED智能玻璃內(nèi)部的LED點(diǎn)陣的第一個(gè)顯示像素點(diǎn)對(duì)應(yīng)。
圖11 LED智能玻璃映射數(shù)據(jù)發(fā)送到控制器Fig.11 LED smart glass mapping data received by the controller
LED智能玻璃顯示如圖12所示,通過(guò)軟件可視化繪制實(shí)現(xiàn)玻璃級(jí)聯(lián)顯示。
圖12 LED智能玻璃顯示Fig.12 Display of LED smart glass
LED智能玻璃映射系統(tǒng)設(shè)計(jì)是利用Piccolo框架建立節(jié)點(diǎn)、將各節(jié)點(diǎn)集合進(jìn)行分組以及添加“子”節(jié)點(diǎn)方式來(lái)實(shí)現(xiàn)各塊以及塊中LED塊的繪制來(lái)完成LED智能玻璃映射圖的繪制,利用Socket網(wǎng)絡(luò)編程來(lái)實(shí)現(xiàn)數(shù)據(jù)的網(wǎng)絡(luò)遠(yuǎn)程傳輸。此系統(tǒng)的設(shè)計(jì)使得驅(qū)動(dòng)LED智能玻璃顯示的硬件系統(tǒng)具有更強(qiáng)的適應(yīng)性、靈敏性和通用性,給產(chǎn)品應(yīng)用帶來(lái)了方便,提高了施工效率。