2 關鍵功能的設計和實現
2.1 通信協議設計
LED 顯示屏二次開發接口設計的首要工作是定義控制端與LED 顯示屏之間的通信協議。為了實現簡便并對用戶透明,這里所有通信方式皆采用同一協議,每一個命令都成對出現,對應命令和返回命令,如表1 和表2 所示。
表1 命令格式
表2 返回命令格式
各參數說明:
(1)命令類型:標注命令類型ID,如通信握手命令、文件傳輸以及其它控制指令等;
(2)命令號:如果某一類型命令有多個,不同的命令號表示該類不同的命令;
(3)目標ID:指顯示屏ID,默認值為0x01;
?。?)源ID:指控制端ID,默認為0x00;
?。?)長度:指具體命令實際數據長度;
?。?)數據:具體命令的數據或返回結果;
?。?)校驗和:除校驗和外所有該協議數據的校驗和數據,一般使用算術和即可。
命令傳輸邏輯如下:
?。?)發送方在發送具體的命令之前,先發送一個通信握手命令:
控制源端- - - - - - - - - - 發送通信握手命令- - - - - - - - - - 》 顯示屏控制源端《- - - - - - - - - - 返回通信握手命令- - - - - - - - - - 顯示屏
控制源端收到結果正確,則表示顯示屏已經做好接收數據準備,可以開始發送具體命令。如果收不到顯示屏的任何返回,需要檢查物理鏈路是否正常,串口的波特率設置是否正常等。
(2) 發送方把具體命令數據按前面的格式進行打包發送到顯示屏,顯示屏在收到數據包后會對數據進行校驗檢查。如果校驗失敗,則請求重發。
?。?)發送方的命令成功發送到顯示屏后,顯示屏按協議包格式把控制卡執行的結果反饋到發送方。如果校驗失敗,請求顯示屏重發執行結果數據;否則發送結束結果給顯示屏,結束命令過程。
?。?) 如果(2)中指令是文件傳輸指令,則重復(2)、(3),直到文件傳輸結束。
在通信過程中,發送方要強制結束發送過程,可以發送通信握手命令或強制中止通信進行強制終止。
2.2 通信通道接口
在對LED 顯示屏進行通信之前,必須先建立通信通道,而退出系統時,則釋放通信通道資源。通信通道接口包括:
?。?)打開通信通道
函數格式:DWORD COMM_Open (constPDeviceParam pDevParam, DWORD dwNotify,DWORD dwWindws , DWORD dwMsg);
參數說明:
① pDevParam:表示指定設備的參數,例如串口的波特率、串口號,以及網絡本地IP 地址、端口號等參數;② dwNotify:表示當LED 顯示屏有返回值時是否通知,0 代表不通知,1 表示通知;③ dwWindws :表示消息通知的窗體句柄;④ dwMsg:用戶定義的消息號。
返回值:
?、?0:表示創建失??;② 其它值:表示設備通道值。
功能描述:
該函數用來建立一個通信通道,函數運行一次即建立一個通道,建立成功就返回一個DWORD值,代表一個設備的句柄,用于區分不同的通道。該值供其它接口函數使用,以便對不同的顯示屏進行控制。
物理上支持串口通道、網絡通道,對于串口,設置串口號、波特率、接收/ 發送緩沖區,然后打開串口;對于網絡,設置本地IP、端口號、接收/ 發送緩沖區,然后打開網口。這里需要特別強調的是,網絡采用UDP 方式,這主要是為了:
① 在協議實現上與串口統一;② 只需一次創建;③ 提高網絡通信握手連接。
因篇幅原因,以下函數將只列出函數格式和功能說明。
?。?)關閉通信通道
函數格式:DWORD COMM_Close (DWORDdwDev/* 通信設備通道*/);
該函數關閉已打開的通信通道(dwDev),釋放通信通道資源,一般在退出系統前使用。
?。?)強制中止通信
函數格式:DWORD COMM_Break (DWORDdwDev);
該函數中止當前通信通道(dwDev)的通信。
?。?)通信握手
函數格式:DWORD COMM_Link (DWORD dwDev/* 通信設備通道*/,
BYte byDstNo/* 目標顯示屏ID*/,
char *chHost/* 網絡地址,串口時無效*/,
WORD wPort/* 網絡端口號,串口時無效*/
);
該函數查詢顯示屏是否能夠通信,可在通信之前或監控LED 顯示屏時使用。
2.3 節目接口
LED 顯示屏顯示的信息其實是一個個的節目文件,一般先在上位機控制系統中生成,然后發送到顯示屏上顯示。在設計節目接口時,可能因節目結構不同,細節上有些差別,本文根據如圖3 所示的樹形節目結構設計一種節目接口。
?。?)節目初始化。
函數格式:
DWORD Program_Init (DWORD dwProgramType/* 節目類型*/,
DWORD dwScreenType/* 顯示屏類型*/,
DWORD dwWidth/* 節目寬度*/,
DWORD dwHeight/* 節目高度*/
?。?/p>
該函數用于在計算機內存開辟一塊內存空間,或釋放上一次節目占用的資源,為節目生成做準備。
?。?)添加區域
函數格式:
DWORD Program_AddArea (DWORD dwAreaType/* 區域類型*/,
LPRECT rect/* 顯示區域*/,
DWORD &dwAreaNO/* 區域號*/
?。?;
在顯示屏頁面上,根據節目的要求,需要劃分不同的區域,設置其起點和寬高??墒褂迷摵瘮翟诋斍帮@示頁面上創建一個個的區域,以放置具體的顯示對象,例如內碼文字、時鐘等。
評論