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ō)明:
?。?)命令類型:標(biāo)注命令類型ID,如通信握手命令、文件傳輸以及其它控制指令等;
?。?)命令號(hào):如果某一類型命令有多個(gè),不同的命令號(hào)表示該類不同的命令;
(3)目標(biāo)ID:指顯示屏ID,默認(rèn)值為0x01;
?。?)源ID:指控制端ID,默認(rèn)為0x00;
?。?)長(zhǎng)度:指具體命令實(shí)際數(shù)據(jù)長(zhǎng)度;
?。?)數(shù)據(jù):具體命令的數(shù)據(jù)或返回結(jié)果;
?。?)校驗(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è)置是否正常等。
?。?) 發(fā)送方把具體命令數(shù)據(jù)按前面的格式進(jìn)行打包發(fā)送到顯示屏,顯示屏在收到數(shù)據(jù)包后會(huì)對(duì)數(shù)據(jù)進(jìn)行校驗(yàn)檢查。如果校驗(yàn)失敗,則請(qǐng)求重發(fā)。
?。?)發(fā)送方的命令成功發(fā)送到顯示屏后,顯示屏按協(xié)議包格式把控制卡執(zhí)行的結(jié)果反饋到發(fā)送方。如果校驗(yàn)失敗,請(qǐng)求顯示屏重發(fā)執(zhí)行結(jié)果數(shù)據(jù);否則發(fā)送結(jié)束結(jié)果給顯示屏,結(jié)束命令過(guò)程。
?。?) 如果(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í),則釋放通信通道資源。通信通道接口包括:
?。?)打開(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ō)明。
?。?)關(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)的通信。
?。?)通信握手
函數(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é)目接口。
?。?)節(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)備。
?。?)添加區(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í)鐘等。
評(píng)論