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