熊木地, 郭俞君, 孙宇航
(大连海事大学 信息科学技术学院,辽宁 大连 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智能玻璃显示的硬件系统具有更强的适应性、灵敏性和通用性,给产品应用带来了方便,提高了施工效率。