引言
在LED 顯示屏工程應(yīng)用中,,有單塊顯示屏項(xiàng)目,,但更多的是多塊顯示屏項(xiàng)目。對(duì)于單塊顯示屏,,直接使用廠商配置的控制軟件就滿足要求了,;但對(duì)于多塊顯示屏,尤其是系統(tǒng)集成項(xiàng)目,,廠商配置的控制軟件就很難滿足要求,。這是因?yàn)椋紫?,廠商配置的控制軟件一般只實(shí)現(xiàn)通用的功能,,對(duì)個(gè)性化的功能很難滿足要求,例如集成項(xiàng)目需要與后臺(tái)數(shù)據(jù)庫(kù)進(jìn)行連接,,實(shí)現(xiàn)實(shí)時(shí)信息發(fā)布,,一般控制軟件很難提供此項(xiàng)功能;其次,,對(duì)于集成項(xiàng)目而言,顯示屏信息發(fā)布僅是其中一個(gè)組成部分,,需要統(tǒng)一的控制和界面風(fēng)格,;再次,在一個(gè)大的集成項(xiàng)目中,,可能有多家廠商中標(biāo),,或工程實(shí)現(xiàn)多年后更換或添加其它廠商的產(chǎn)品,而不同廠商的實(shí)現(xiàn)技術(shù)可能有所差異,。
因此,,為了滿足LED 顯示屏在工程中的應(yīng)用,廠商一般都要提供二次開(kāi)發(fā)接口,,供系統(tǒng)集成商進(jìn)行二次開(kāi)發(fā),,完成系統(tǒng)集成,。經(jīng)過(guò)市場(chǎng)調(diào)研,現(xiàn)在LED 顯示屏二次開(kāi)發(fā)接口良莠不齊,,沒(méi)有統(tǒng)一的標(biāo)準(zhǔn),,有的太簡(jiǎn)單,很難滿足工程應(yīng)用,,而有的又太復(fù)雜,,造成系統(tǒng)集成周期長(zhǎng)、代價(jià)大,。因此,,經(jīng)過(guò)研究,本文提出一種新的LED 二次開(kāi)發(fā)接口的設(shè)計(jì)方法,,讓用戶簡(jiǎn)單,、快速地實(shí)現(xiàn)系統(tǒng)集成,同時(shí)減少二次開(kāi)發(fā)時(shí)間和代價(jià),。
1 主要功能需求分析和模型構(gòu)建
在工程應(yīng)用中,,LED 顯示屏主要用來(lái)發(fā)布信息,尤其是根據(jù)后臺(tái)數(shù)據(jù)庫(kù)的變化,,實(shí)時(shí)更新信息,。
典型的應(yīng)用是火車站,實(shí)時(shí)更新車次,、軟/ 硬座票,、臥鋪票、發(fā)車時(shí)間等票務(wù)信息,,以及到站車次,、晚點(diǎn)車次等到站信息,除此之外,,還有臨時(shí)通知,、車次變更、廣告,、候車室位置等等,。
在火車站綜合信息管理系統(tǒng)中,相對(duì)于整個(gè)系統(tǒng)而言,,LED 顯示屏信息發(fā)布只是其中一部分,,但LED 顯示屏種類、通信類型,、分布位置卻可能很復(fù)雜,,如圖1 所示。按照顯示屏的大小、掛放的位置,、顯示的內(nèi)容和作用,,可以將顯示屏分為總引導(dǎo)信息屏、候車信息屏,、分區(qū)屏,、檢票屏、通道顯示屏,、站臺(tái)屏和出站口信息屏等,。在通信方面,根據(jù)硬件條件,、位置等,,一般使用串口、網(wǎng)絡(luò)等,。串口又分為RS485 和RS232,其中一個(gè)RS485 連接多個(gè)顯示屏,,一個(gè)RS232 連接一個(gè)顯示屏;網(wǎng)絡(luò)又分有線網(wǎng)絡(luò),、無(wú)線網(wǎng)絡(luò)和GPRS 等,。
圖1 LED顯示屏典型系統(tǒng)集成圖
經(jīng)過(guò)綜合分析,系統(tǒng)涉及顯示屏的功能有:
(1)發(fā)布信息,、更新信息,、廣告和導(dǎo)向信息;(2)控制顯示屏,,如重啟,、定時(shí)開(kāi)關(guān)屏,設(shè)置參數(shù)等,;(3)監(jiān)控顯示屏,,顯示連接狀態(tài)、更新時(shí)間等,。
其工作過(guò)程是:
(1)連接顯示屏,;(2)發(fā)布信息、下載節(jié)目到顯示屏顯示,;(3)控制和監(jiān)控顯示屏,;(4)結(jié)束操作后斷開(kāi)連接。
其實(shí),,系統(tǒng)調(diào)用顯示屏功能并不復(fù)雜,,主要難點(diǎn)在于:
(1)如何實(shí)現(xiàn)多種硬件連接方式統(tǒng)一,,包括串口,、網(wǎng)絡(luò);(2)如何組織多種信息顯示對(duì)象,包括文字,、圖片,、動(dòng)畫、時(shí)鐘等,;(3)如何根據(jù)LED 顯示屏的控制要求,,提供基本的控制命令,適應(yīng)多種系統(tǒng)集成方式,,包括C/S,、B/S 以及分布式、分層控制等,。
為了解決這些難點(diǎn),,并達(dá)到通用、簡(jiǎn)單,、容易集成的目的,,經(jīng)過(guò)研究,本文構(gòu)建的LED 二次開(kāi)發(fā)接口的模型如圖2 所示,,主要功能和流程如下:
(1)調(diào)用通信控制接口,,根據(jù)不同的通信方式分別創(chuàng)建其通信通道,完成LED 顯示屏連接,;(2)調(diào)用節(jié)目制作接口,,創(chuàng)建節(jié)目、添加節(jié)目對(duì)象,,生成節(jié)目數(shù)據(jù),,然后使用命令接口發(fā)送節(jié)目到顯示屏,完成信息發(fā)布,;(3)調(diào)用命令接口,,進(jìn)行顯示屏重啟、開(kāi)/ 關(guān)屏,、設(shè)置亮度,、更新時(shí)間、讀取顯示屏?xí)r間等操作,,完成顯示屏的控制,、監(jiān)控工作;(4)退出系統(tǒng)時(shí),,關(guān)閉通信通道,,釋放資源,結(jié)束二次開(kāi)發(fā)接口的調(diào)用操作,。
2 關(guān)鍵功能的設(shè)計(jì)和實(shí)現(xiàn)
2.1 通信協(xié)議設(shè)計(jì)
LED 顯示屏二次開(kāi)發(fā)接口設(shè)計(jì)的首要工作是定義控制端與LED 顯示屏之間的通信協(xié)議,。為了實(shí)現(xiàn)簡(jiǎn)便并對(duì)用戶透明,,這里所有通信方式皆采用同一協(xié)議,每一個(gè)命令都成對(duì)出現(xiàn),,對(duì)應(yīng)命令和返回命令,,如表1 和表2 所示。
表1 命令格式
表2 返回命令格式
各參數(shù)說(shuō)明:
(1)命令類型:標(biāo)注命令類型ID,如通信握手命令,、文件傳輸以及其它控制指令等,;
(2)命令號(hào):如果某一類型命令有多個(gè),不同的命令號(hào)表示該類不同的命令,;
(3)目標(biāo)ID:指顯示屏ID,默認(rèn)值為0x01;
(4)源ID:指控制端ID,默認(rèn)為0x00;
(5)長(zhǎng)度:指具體命令實(shí)際數(shù)據(jù)長(zhǎng)度,;
(6)數(shù)據(jù):具體命令的數(shù)據(jù)或返回結(jié)果;
(7)校驗(yàn)和:除校驗(yàn)和外所有該協(xié)議數(shù)據(jù)的校驗(yàn)和數(shù)據(jù),,一般使用算術(shù)和即可,。
命令傳輸邏輯如下:
(1)發(fā)送方在發(fā)送具體的命令之前,先發(fā)送一個(gè)通信握手命令:
控制源端- - - - - - - - - - 發(fā)送通信握手命令- - - - - - - - - - 》 顯示屏控制源端《- - - - - - - - - - 返回通信握手命令- - - - - - - - - - 顯示屏
控制源端收到結(jié)果正確,,則表示顯示屏已經(jīng)做好接收數(shù)據(jù)準(zhǔn)備,,可以開(kāi)始發(fā)送具體命令。如果收不到顯示屏的任何返回,,需要檢查物理鏈路是否正常,,串口的波特率設(shè)置是否正常等。
(2) 發(fā)送方把具體命令數(shù)據(jù)按前面的格式進(jìn)行打包發(fā)送到顯示屏,,顯示屏在收到數(shù)據(jù)包后會(huì)對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)檢查,。如果校驗(yàn)失敗,則請(qǐng)求重發(fā),。
(3)發(fā)送方的命令成功發(fā)送到顯示屏后,,顯示屏按協(xié)議包格式把控制卡執(zhí)行的結(jié)果反饋到發(fā)送方。如果校驗(yàn)失敗,,請(qǐng)求顯示屏重發(fā)執(zhí)行結(jié)果數(shù)據(jù),;否則發(fā)送結(jié)束結(jié)果給顯示屏,結(jié)束命令過(guò)程,。
(4) 如果(2)中指令是文件傳輸指令,,則重復(fù)(2)、(3),,直到文件傳輸結(jié)束,。
在通信過(guò)程中,發(fā)送方要強(qiáng)制結(jié)束發(fā)送過(guò)程,,可以發(fā)送通信握手命令或強(qiáng)制中止通信進(jìn)行強(qiáng)制終止,。
2.2 通信通道接口
在對(duì)LED 顯示屏進(jìn)行通信之前,必須先建立通信通道,,而退出系統(tǒng)時(shí),,則釋放通信通道資源,。通信通道接口包括:
(1)打開(kāi)通信通道
函數(shù)格式:DWORD COMM_Open (constPDeviceParam pDevParam, DWORD dwNotify,DWORD dwWindws , DWORD dwMsg);
參數(shù)說(shuō)明:
① pDevParam:表示指定設(shè)備的參數(shù),,例如串口的波特率、串口號(hào),,以及網(wǎng)絡(luò)本地IP 地址,、端口號(hào)等參數(shù);② dwNotify:表示當(dāng)LED 顯示屏有返回值時(shí)是否通知,,0 代表不通知,,1 表示通知;③ dwWindws :表示消息通知的窗體句柄,;④ dwMsg:用戶定義的消息號(hào),。
返回值:
① 0:表示創(chuàng)建失敗,;② 其它值:表示設(shè)備通道值,。
功能描述:
該函數(shù)用來(lái)建立一個(gè)通信通道,函數(shù)運(yùn)行一次即建立一個(gè)通道,,建立成功就返回一個(gè)DWORD值,,代表一個(gè)設(shè)備的句柄,用于區(qū)分不同的通道,。該值供其它接口函數(shù)使用,,以便對(duì)不同的顯示屏進(jìn)行控制。
物理上支持串口通道,、網(wǎng)絡(luò)通道,,對(duì)于串口,設(shè)置串口號(hào),、波特率,、接收/ 發(fā)送緩沖區(qū),然后打開(kāi)串口,;對(duì)于網(wǎng)絡(luò),,設(shè)置本地IP、端口號(hào),、接收/ 發(fā)送緩沖區(qū),,然后打開(kāi)網(wǎng)口。這里需要特別強(qiáng)調(diào)的是,,網(wǎng)絡(luò)采用UDP 方式,,這主要是為了:
① 在協(xié)議實(shí)現(xiàn)上與串口統(tǒng)一;② 只需一次創(chuàng)建,;③ 提高網(wǎng)絡(luò)通信握手連接,。
因篇幅原因,,以下函數(shù)將只列出函數(shù)格式和功能說(shuō)明。
(2)關(guān)閉通信通道
函數(shù)格式:DWORD COMM_Close (DWORDdwDev/* 通信設(shè)備通道*/),;
該函數(shù)關(guān)閉已打開(kāi)的通信通道(dwDev),,釋放通信通道資源,一般在退出系統(tǒng)前使用,。
(3)強(qiáng)制中止通信
函數(shù)格式:DWORD COMM_Break (DWORDdwDev),;
該函數(shù)中止當(dāng)前通信通道(dwDev)的通信。
(4)通信握手
函數(shù)格式:DWORD COMM_Link (DWORD dwDev/* 通信設(shè)備通道*/,
BYte byDstNo/* 目標(biāo)顯示屏ID*/,
char *chHost/* 網(wǎng)絡(luò)地址,,串口時(shí)無(wú)效*/,
WORD wPort/* 網(wǎng)絡(luò)端口號(hào),,串口時(shí)無(wú)效*/
);
該函數(shù)查詢顯示屏是否能夠通信,,可在通信之前或監(jiān)控LED 顯示屏?xí)r使用,。
2.3 節(jié)目接口
LED 顯示屏顯示的信息其實(shí)是一個(gè)個(gè)的節(jié)目文件,一般先在上位機(jī)控制系統(tǒng)中生成,,然后發(fā)送到顯示屏上顯示,。在設(shè)計(jì)節(jié)目接口時(shí),可能因節(jié)目結(jié)構(gòu)不同,,細(xì)節(jié)上有些差別,,本文根據(jù)如圖3 所示的樹(shù)形節(jié)目結(jié)構(gòu)設(shè)計(jì)一種節(jié)目接口。
(1)節(jié)目初始化,。
函數(shù)格式:
DWORD Program_Init (DWORD dwProgramType/* 節(jié)目類型*/,
DWORD dwScreenType/* 顯示屏類型*/,
DWORD dwWidth/* 節(jié)目寬度*/,
DWORD dwHeight/* 節(jié)目高度*/
),;
該函數(shù)用于在計(jì)算機(jī)內(nèi)存開(kāi)辟一塊內(nèi)存空間,或釋放上一次節(jié)目占用的資源,,為節(jié)目生成做準(zhǔn)備,。
(2)添加區(qū)域
函數(shù)格式:
DWORD Program_AddArea (DWORD dwAreaType/* 區(qū)域類型*/,
LPRECT rect/* 顯示區(qū)域*/,
DWORD &dwAreaNO/* 區(qū)域號(hào)*/
);
在顯示屏頁(yè)面上,,根據(jù)節(jié)目的要求,,需要?jiǎng)澐植煌膮^(qū)域,設(shè)置其起點(diǎn)和寬高,??墒褂迷摵瘮?shù)在當(dāng)前顯示頁(yè)面上創(chuàng)建一個(gè)個(gè)的區(qū)域,以放置具體的顯示對(duì)象,,例如內(nèi)碼文字,、時(shí)鐘等。
(3)添加各種對(duì)象,。
在頁(yè)面的區(qū)域上,,可添加單行文字、多行文字,、內(nèi)碼文字,、圖片,、視頻動(dòng)畫、WORD 文檔,、Flash 動(dòng)畫,、表格、數(shù)字時(shí)鐘,、模擬時(shí)鐘,、倒計(jì)時(shí)等各種顯示對(duì)象,在實(shí)現(xiàn)時(shí),,每一種對(duì)象對(duì)應(yīng)一個(gè)函數(shù)。這里列出常用的添加圖片的函數(shù):
函數(shù)格式:
DWORD Program_AddPicture(DWORD dwAreaNO/* 區(qū)域號(hào)*/,
HDC dc/* 圖形dc*/,
DWORD dwWidth/* 圖片寬*/,
DWORD dwHeight/* 圖片高*/,
LPRECT rect/* 顯示區(qū)域*/,
DWORD dwAction/* 特效號(hào)*/,
DWORD dwExitAction/* 退出特效號(hào)*/,
DWORD dwSpeed/* 顯示速度*/,
DWORD dwTimecount/* 顯示時(shí)間*/,
DWORD dwTransparent/* 透明與否*/),;
該函數(shù)在指定區(qū)域上添加一個(gè)圖片,,顯示內(nèi)容來(lái)自于dc.
(4)節(jié)目數(shù)據(jù)生成。
函數(shù)格式:DWORD Program_MakeData(),。
該函數(shù)生成節(jié)目數(shù)據(jù),, 以便使用LEDControl_SendToScreen 函數(shù)發(fā)送到不同的顯示屏。
2.4 命令接口
命令接口主要為控制,、監(jiān)控和發(fā)送節(jié)目數(shù)據(jù)而設(shè)計(jì),,例如,火車站或街頭的廣告屏,,在夜間人少時(shí),,廣告效果不明顯,同時(shí)也為了省電,,可在指定夜間時(shí)間點(diǎn)關(guān)閉顯示屏,,然后到早晨指定時(shí)間點(diǎn)自動(dòng)打開(kāi)顯示屏。經(jīng)過(guò)總結(jié),,命令接口的命令包括:
(1)重啟命令,。
函數(shù)格式:DWORD LEDControl_Reboot(DWORD dwDev, BYTE byDstNo, char *chHost,WORD wPort);
該函數(shù)用來(lái)重啟指定的LED 顯示屏,。
(2)電源控制,。
函數(shù)格式:DWORD LEDControl_SetPower(DWORD dwDev, BYTE byDstNo, char chHost,WORD wPort, DWORD dwPower/* 開(kāi)或關(guān)標(biāo)識(shí)*/);
該函數(shù)打開(kāi)或關(guān)閉顯示屏,。
(3)顯示屏亮度調(diào)節(jié),。
函數(shù)格式:DWORD LEDControl_SetBrightness(DWORD dwDev, BYTE byDstNo, char *chHost,WORD wPort, BYTE byBrightness/* 亮度*/);
該函數(shù)用于調(diào)節(jié)顯示屏亮度,。
(4)校時(shí),。
函數(shù)格式:DWORD LEDControl_AdjustTime(DWORD dwDev, BYTE byDstNo, char *chHost,WORD wPort);
該函數(shù)用于計(jì)算機(jī)時(shí)鐘校正顯示屏?xí)r鐘,。
(5)節(jié)目發(fā)送接口,。
函數(shù)格式:DWORD LEDControl_SendToScreen(DWORD dwDev, BYTE byDstNo, char *chHost,WORD wPort),;
該函數(shù)將Program_MakeData 生成的節(jié)目數(shù)據(jù)發(fā)送到顯示屏,最后返回狀態(tài)值,,表示成功,、失敗及其它狀態(tài),用戶根據(jù)狀態(tài)再進(jìn)行相應(yīng)的處理,。
(6)局部更新節(jié)目接口,。
函數(shù)格式:DWORDLEDControl_UpdateCodeText (DWORD dwDev,BYTE byDstNo, char *chHost, WORD wPort,char *chCodeText/* 字符串緩沖區(qū)*/, int iLen/*字符串長(zhǎng)度*/);
該函數(shù)用來(lái)更新顯示屏局部?jī)?nèi)容,。對(duì)于一些信息發(fā)布,,一般只需要更新局部的內(nèi)容,例如車站大廳信息發(fā)布,,顯示屏劃分很多的區(qū)域,,有數(shù)字時(shí)鐘、模擬時(shí)鐘,、圖片,、動(dòng)畫和文字等不同的區(qū)域,一般往往只更新文字部分內(nèi)容,,即可達(dá)到信息發(fā)布的目的,,同時(shí)不用生成節(jié)目,節(jié)省了時(shí)間和提高了效率,。
3 二次開(kāi)發(fā)接口的應(yīng)用
二次開(kāi)發(fā)接口一般都是以動(dòng)態(tài)鏈接庫(kù)的形式提供給用戶,,并提供主流開(kāi)發(fā)語(yǔ)言的接口和例程,例如VC,、C#,、DELphi 和VB 等。一般的調(diào)用流程是:
(1)載入動(dòng)態(tài)鏈接庫(kù),;(2)建立通信通道,;(3)進(jìn)行顯示屏控制、監(jiān)控操作,;(4)進(jìn)行節(jié)目制做,、發(fā)送和更新;(5)關(guān)閉通信通道,;(6)釋放動(dòng)態(tài)鏈接庫(kù),,完成二次開(kāi)發(fā)接口的調(diào)用。
4 結(jié)論
本文針對(duì)LED 顯示屏工程應(yīng)用中對(duì)二次開(kāi)發(fā)接口的需求,,提出了一種LED 顯示屏二次開(kāi)發(fā)接口的方法,,將二次開(kāi)發(fā)接口總結(jié)為通信通道、節(jié)目和命令三種接口,并在網(wǎng)絡(luò)先鋒控制卡系列產(chǎn)品中應(yīng)用,。實(shí)踐證明,,該方法可讓用戶在系統(tǒng)集成中,簡(jiǎn)單,、快速地實(shí)現(xiàn)其二次開(kāi)發(fā)功能,,同時(shí)降低系統(tǒng)集成的周期和代價(jià)。