熊木地, 郭俞君, 孫宇航
(大連海事大學 信息科學技術學院,遼寧 大連 116026)
隨著LED顯示技術的不斷成熟與進步, LED顯示屏被廣泛應用于金融、體育館等公眾場所的電子圖文顯示[1-6]。而LED智能玻璃顯示屏技術最早由德國提出,我國于2006年開始了對它的工藝以及控制方法研究,目前依舊處于初級階段。LED智能玻璃顯示屏在結構組成上與傳統LED顯示屏相近,主要由間隔固定的彩色LED點陣組成,通過對輸入LED信號的占空比控制,實現特定亮度以及顏色的顯示[7-8]。LED智能玻璃顯示屏在具有傳統LED顯示屏特性的同時,還可以根據周圍的景觀或是環境的風格設計創意視頻,實現建筑與周圍景觀的完美結合,提升整體效果以及格調,表現出一定的藝術性以及觀賞性的景觀一體特性,使其更受各類應用領域歡迎。
LED智能玻璃顯示屏的控制方式與傳統LED顯示屏的同步控制方式類似,但由于LED智能玻璃顯示屏具有很強的發散性,不同規格LED智能玻璃其內部的LED點陣排列方式不同,所以需要將通過HDMI(High Definition Multimedia Interface)或VGA(Video Graphics Array)等視頻接口輸入至控制單元的視頻數據進行重新排序再發送至后續驅動電路[9-10]。當前針對不同的室外LED智能玻璃需要更改控制器代碼才可以實現顯示,給產品的應用帶來了諸多不便。
本文設計了一種可用于不同規格LED智能玻璃顯示屏,將視頻像素點與LED智能玻璃顯示屏中的LED點陣相映射的上位機軟件。在實際應用中,只需在上位機界面進行可視化的LED智能玻璃的點陣繪制,即可實現LED智能玻璃的顯示,提高施工效率。
LED智能玻璃顯示系統總體設計如圖1所示,主要包括視頻生成系統、坐標映射系統、MCU控制器以及驅動系統。

圖1 LED智能玻璃顯示系統總體設計Fig.1 Overall design of LED smart glass display system
上位機中的視頻生成系統主要生成對應LED智能玻璃的分辨率的視頻,之后通過DVI解碼芯片將RGB視頻數據傳送到現場可編程門陣列(FPGA),并按地址遞增方式存儲在FPGA的外接SSRAM1(Synchronous Static Random Access Memory)中。
上位機中的映射系統主要實現生成LED智能玻璃對應的映射數據,即FPGA的SSRAM1的讀地址表。之后映射數據通過網絡傳輸至ARM的外掛FLASH中進行存儲(以防掉電丟失數據),然后發送至FPGA的外接SSRAM2中按地址遞增暫存,通過按地址遞增方式讀取SSRAM2的數據作為SSRAM1的地址來讀取SSRAM1中的RGB數據,之后對數據進行并轉串處理傳送給驅動系統。驅動系統采用專用的驅動芯片,將數據串行移位和并行輸出,從而實現對LED智能玻璃的顯示。對于大規格的LED智能玻璃采用級聯方式進行拼接顯示。
對于不同LED智能玻璃,只需在映射系統進行可視化繪制即可實現顯示,不需要對硬件控制器進行硬件程序的重新編寫,使整個LED智能玻璃顯示系統在使用上更加靈活。
此設計中上位機的最大顯示分辨率為1 024×768。上位機中的視頻源采用逐行掃描方式存儲到控制器外掛的SSRAM1中,即SSRAM1中的數據存儲是從屏幕左上角的第一行開始逐行進行存儲,直到一幀結束。SSRAM1的一個地址存儲一個像素點RGB數據,則一個1 024×768顯示分辨率需要1 024×768個SSRAM1地址去存儲一幀的RGB數據。上位機部分視頻像素點分布如圖2所示,圖中數字表示上位機的視頻像素點的存儲順序。

圖2 上位機部分視頻像素點分布Fig.2 Video pixel distribution of the upper computer
不同規格的LED智能玻璃其內部的LED點陣排列可以看作是由若干個相同的塊按照不同的方式排列組成。本文中LED智能玻璃分辨率為16×16,其LED點陣如圖3所示,圖中數字表示LED智能玻璃的LED點亮順序。為實現LED智能玻璃視頻顯示,需要將上位機上的每個像素點與LED智能玻璃上的LED相對應。

圖3 16×16規格的LED智能玻璃的LED點陣分布Fig.3 LED dot matrix distribution of 16×16 LED display
LED智能玻璃映射系統設計,主要是先建立一個二維坐標畫布,然后在此畫布上繪制端口與端口內部LED點陣排列位置,生成LED智能玻璃的映射圖,再通過網絡傳輸到控制器中。當LED智能玻璃分辨率發生變化,或是LED智能玻璃的某一區域顯示要進行改動時,只需重新繪制映射圖,便可更新LED智能玻璃顯示。
LED智能玻璃映射系統支持最大映射分辨率1 024×768,級聯的小模塊支持8×8、16×16、24×24。對于16×16尺寸的LED智能玻璃在映射界面上可將其繪制為4個8×8或一個16×16模塊(按照實際LED智能玻璃布線方式選取),本文以4個8×8為例,使用兩個端口進行LED智能玻璃的級聯顯示。16×16 LED智能玻璃分割如圖4所示,將LED智能玻璃分割為2大行2大列,圖中一個8×8大小的模塊為一個塊,每個帶有數字的方框為一個LED塊,數字標號代表在一個塊中的LED的點亮順序。

圖4 16×16 LED智能玻璃分割Fig.4 Segmentation of 16×16 LED display
映射系統設計是利用.Net平臺進行應用開發,使用Visual C# 語言進行編寫開發。C#是一種簡單、現代、面向對象的和類型安全的編程語言,與C++相比,其增強了抽象描述能力,屏蔽底層實現細節,提高了軟件生產率過程[11-12]。本系統采用桌面應用程序Winform開發[13]。用戶通過控件與應用程序進行交互。
繪制映射圖界面設計主要在一個空白畫布中進行順序塊繪制以及在各塊中進行順序LED塊繪制,每個LED塊可以有局部坐標顯示,且整個畫布可以進行放大縮小、塊可平移等操作。
本系統中主要使用Elegant Ribbon .NET WinForms控件作為父窗體,使用Piccolo相關程序集實現界面的縮放和動畫功能,所有的Piccolo接口需要放在PCanvas以便用戶可以查看視圖并與之交互,所以本系統添加PCanvas控件并將其作為系統中繪制映射圖的空畫布[14]。
Piccolo是一個構建可用于縮放用戶界面的框架[5],可實現元素的縮放、移動等功能。Piccolo類層次結構如圖5所示,PNode 節點是Piccolo的核心設計概念,在畫布上進行繪制的節點都需要繼承此節點。繪制在屏幕上的節點可以添加其他的“子”節點,本系統中映射圖的繪制是通過建立節點、將各節點集合進行分組以及添加“子”節點方式來實現各塊以及塊中LED塊的繪制。本系統軟件編程中創建了一個繼承PNode類的BlockNode類,作為塊類,在BlockNode節點下又添加LEDBlock“子”節點作為一個塊中映射的各個LED。PCamera攝像機節點,包含需要視圖轉換的節點和層節點,Piccolo具有事件偵聽器,當用戶有縮放或移動交互時,事件偵聽器通過操作攝像機節點的視圖轉換來創建縮放移動效果。Piccolo中的節點轉換,本質是一個坐標系的轉換,每個節點都有其局部坐標和全局坐標,可相互轉換。對于PLayer層節點,新節點通常添加到畫布的層節點,在層節點中的節點可以被攝像機捕捉,進而實現視圖轉換。本系統中利用層節點建立了一個網格圖層,畫布左上角坐標為(0,0),橫縱坐標的間隔都是1像素,便于查看各個LED的局部坐標。PRoot充當Piccolo運行時結構中的最頂層節點,所有繪制的節點都是它的直接子節點或其子節點的后代,可與PCanvas進行通信,以管理屏幕上節點繪制的更新以及分配各子節點對事件進行處理。

圖5 Piccolo類層次結構Fig.5 Class hierarchy of Piccolo
Piccolo運行時結構如圖6所示。PRoot位于頂部,每個PCamera節點通常至少與一個Player層節點相關聯進行查看視圖轉換,本系統中將PLayer層節點與PCanvas相關聯,所以當畫布上有新的事件輸入時,Camera會進行捕捉并做出相關事件的處理,圖中的PImage、PText、PPath都是Piccolo默認定義的節點。

圖6 Piccolo運行時結構Fig.6 Runtime structure of Piccolo
繪制的每個塊都有端口號和端口號中的塊順序編號屬性。繪制的每個LED塊都有id、x、y的屬性值,id是用來表示LED智能玻璃上LED的點亮順序,x、y表示LEDBlock在畫布上的坐標,通過“x+1 024y”的公式可以計算出所繪制的LED對應的實際屏幕像素點的位置即SSRAM1的讀地址,即要將此數據發送到控制器中。映射數據的發送順序是先發送端口1中的Block0中的LEDBlock id0、LEDBlock id1…,直到Block0中的LEDBlock 都發送完成,再發送端口1的Block1中的所有LEDBlock。當端口1的所有Block都發送完成,再發送端口2的所有Block…,依次循環,直到畫布上的所有繪制的端口的數據全部發送完成才結束。在發送數據的過程中還會向控制器發送通信標志,當有的端口沒有被繪制,或者有的端口中有的Block沒有被繪制都會跳過,不進行任何數據的發送,不會造成端口映射數據錯誤。此系統中設定的一個Block中的LEDBlock的id最大為256,一個端口中的LEDBlock總個數最多為2 048。
.Net擁有C/S、B/S兩種交互模式[15],此映射系統網絡編程采用的是C/S模式,編寫的是服務器端向客戶端發送映射數據信息的一個Windows桌面窗體應用程序。
TCP/IP網絡的應用程序使用Socket網絡編程。Socket在網絡通信中被稱作“套接字”[16],用來描述服務器端、客戶端的IP 地址和端口號,在程序中作為通信鏈的句柄,主要用來進行網絡請求的應答和發出網絡請求。Socket網絡編程中TCP的3次握手建立連接如圖7所示:

圖7 Socket網絡編程中TCP的3次握手建立連接Fig.7 Three-way handshake establishment of TCP in Socket network programming
(1)服務器端監聽端口(負責監聽客戶端是否有連接的信息);
(2)客戶端連接服務器端的指定端口(負責接收和發送服務端信息);
(3)服務器端監聽到客戶端的連接,創建負責通信的Socket。
數據網絡傳輸程序設計主要包括讀取本機IP和端口號、設定監聽隊列、等待客戶端的連接,當有客戶端連接時可進行數據發送等流程,數據網絡傳輸程序設計流程如圖8所示。

圖8 數據網絡發送程序設計流程圖Fig.8 Design flow chart of data network transmission program
LED智能玻璃視頻生成系統如圖9所示,使用LEDVISION軟件生成LED智能玻璃對應分辨率的視頻,其中視頻起點位置(1,0),分辨率為16×16。

圖9 LED智能玻璃視頻生成系統Fig.9 LED smart glass video generation system
LED智能玻璃映射系統設計具體實現如圖10所示,在畫布中畫了4個8×8的塊,將鼠標放在塊上會顯示其對應的端口號和塊編號。圖中1×1方框中的數字編號是LEDBlock編號,8×8方框的數字編號為一個端口中的Block編號。

圖10 LED智能玻璃映射系統設計具體實現Fig.10 Design specific implementation of LED display mapping system
控制器接收到的LED智能玻璃映射數據如圖11所示,wrclk、arm_up、ARM_CLK、ARM_EN為控制信號,din為ARM向FPGA傳送的映射數據,wraddr為暫存映射數據SSRAM2的寫地址,圖中可看出第一個映射數據為3C0D十進制為15 373=13+15×1 024,對應上位機映射圖中x=13,y=15的像素點,與LED智能玻璃內部的LED點陣的第一個顯示像素點對應。

圖11 LED智能玻璃映射數據發送到控制器Fig.11 LED smart glass mapping data received by the controller
LED智能玻璃顯示如圖12所示,通過軟件可視化繪制實現玻璃級聯顯示。

圖12 LED智能玻璃顯示Fig.12 Display of LED smart glass
LED智能玻璃映射系統設計是利用Piccolo框架建立節點、將各節點集合進行分組以及添加“子”節點方式來實現各塊以及塊中LED塊的繪制來完成LED智能玻璃映射圖的繪制,利用Socket網絡編程來實現數據的網絡遠程傳輸。此系統的設計使得驅動LED智能玻璃顯示的硬件系統具有更強的適應性、靈敏性和通用性,給產品應用帶來了方便,提高了施工效率。