工廠(chǎng)地址:深圳市寶安區福永街道鳳凰興業(yè)一路華倫科技園21棟2樓
楊 總:13828709518
雷 總:13923457816
郵箱:yangdekai@hctlcd.com
QQ:417594796
2022-04-01 10:50:11
一. HMI與通訊協(xié)議
隨著(zhù)工業(yè)技術(shù)的發(fā)展,HMI(人機界面)的應用領(lǐng)域愈加廣泛。通過(guò)勛瑞光電的智能液晶顯示模塊實(shí)現的自定義通信協(xié)議能在一定程度上維護企業(yè)的數據隱秘性,提升產(chǎn)品功能的多樣性,并且能夠解決企業(yè)通信協(xié)議不兼容問(wèn)題。
HMI的串口通信規則,除了標準Modbus協(xié)議產(chǎn)品,大多都是根據原廠(chǎng)制定的協(xié)議規則進(jìn)行。然而許多企業(yè)也有其各自的通信規則及報文格式,在配套使用HMI開(kāi)發(fā)應用時(shí),企業(yè)希望保留或使用自己的功能特性和數據交互規則,用以匹配自己協(xié)議的應用開(kāi)發(fā)。
基于此,勛瑞光電的HMI串口屏有一套較為成熟的設計方案。本文將介紹智能顯示模塊 HMT050DTA-D 如何基于LUA腳本設計實(shí)現,在原廠(chǎng)提供的庫函數中,有開(kāi)放串口控制類(lèi)的API,通過(guò)這些API函數能夠實(shí)現企業(yè)的自定義通信協(xié)議設計。
二. 自定義通訊協(xié)議
此次設計將通過(guò)勛瑞光電的智能液晶屏HMI的串口,配合LUA程序,應用串口控制類(lèi)API,實(shí)現目標協(xié)議通信功能。
HMI串口通信協(xié)議,常見(jiàn)的報文格式一般由“幀頭”、“長(cháng)度碼”、“功能碼”、“參數數據信息”、“幀尾”、“校驗碼”幾個(gè)部分組成。通信過(guò)程中,系統將實(shí)時(shí)查詢(xún)串口的數據接收,獲取符合協(xié)議的報文數據,執行規定的指令功能。
如下“表2-1:自定義協(xié)議通信報文格式”,定義了一種常見(jiàn)的通信報文格式。(硬件串口參數說(shuō)明:波特率“115200”;數據位“8”;停止位“1”;校驗如下表)
*1. 指令長(cháng)度碼,計算“命令碼”到“校驗碼”中所有數據的字節總數。
*2. 指令地址、數據、參數信息,是多字節數據,數據都是高位在前,低位在后。
*3. 指令校驗碼,計算“幀頭”到“幀尾”中所有的數據的ModbusCRC-16校驗。
三. 功能需求分析
1. HMI原通信協(xié)議屏蔽
目前使用的型號HMT050DTA-D默認是TOPWAY協(xié)議通信的,存在指令錯誤碼回復機制。因此在自定義協(xié)議通信過(guò)程中,如果沒(méi)有屏蔽原協(xié)議,可能會(huì )存在串口占用,回復數據混亂的情況。所以在設計自己協(xié)議通信時(shí)首先要把原廠(chǎng)的協(xié)議屏蔽,避免數據沖突。
2. 接收指令數據處理與解析回復
獲取串口數據后,需要提取符合自定義協(xié)議規則的指令以便后續對指令進(jìn)行解析并執行指令功能。因此需要定義接收指令數組,用以存儲串口中符合協(xié)議規則的指令數據。
協(xié)議通信中,也存在指令回復功能,比如讀取/訪(fǎng)問(wèn)地址數據的指令。在解析完接收到的指令后,我們要對部分指令進(jìn)行響應,所以需要定義回復指令數組,對讀取/訪(fǎng)問(wèn)操作的指令進(jìn)行回復。
3. 協(xié)議通信指令功能要求
在LUA程序設計中,需要實(shí)現的功能板塊有:①從串口接收區中獲取符合規定自定義規則的指令,存儲在接收指令數組;②調用接收到的指令數據,對指令數據進(jìn)行解析;③調用相應的功能處理函數,執行指令功能。對于讀取/訪(fǎng)問(wèn)信息類(lèi)的指令,還需要操作串口發(fā)送數據進(jìn)行回復。
解析的指令目前主要實(shí)現4功能板塊。①功能碼“0x01”:訪(fǎng)問(wèn)/讀取變量數據;②功能碼“0x02”:改寫(xiě)變量數據;③功能碼“0x03”:工程顯示跳頁(yè);④功能碼“0x04”:屏幕背光亮度控制。主要板塊功能關(guān)系如圖3-1所示。
四. Lua實(shí)現自定義協(xié)議
1. 屏蔽原廠(chǎng)通信協(xié)議
在勛瑞光電提供的LUA庫函數中存在TOPWAY協(xié)議禁用函數,可以在程序初始化時(shí)調用該函數對原廠(chǎng)的通信協(xié)議進(jìn)行屏蔽。如圖4-1
調用函數:hmt.bypass(is)
輸入:參數“is”使能開(kāi)關(guān)。
使用說(shuō)明:當“is=1”時(shí)屏蔽原TOPWAY協(xié)議,“is=0”時(shí)使用TOPWAY協(xié)議。
2. 自定義協(xié)議的數據結構
2.1 接收指令數組
定義數組:CustProt_recvcmd = {}
類(lèi)型:全局數組,初始化時(shí)定義。
說(shuō)明:存儲串口接收區中符合協(xié)議規則的指令數據。接收指令數據過(guò)程中,如過(guò)不符合定義的規則,需清空接收數組。
2.2 回復指令數組
定義數組:CustProt_sendcmd = {}
類(lèi)型:全局數組,初始化時(shí)定義。
說(shuō)明:根據協(xié)議規則,存儲需要通過(guò)串口進(jìn)行回復的指令數據。發(fā)送完成后清空數組。
3. 自定義協(xié)議設計實(shí)現
LUA程序設計,主要實(shí)現函數功能見(jiàn)流程圖4-2。
3.1 檢查串口接收區數據
調用函數:hmt.uartisempty()
輸出:返回“1”時(shí)表示串口接收buf為空;返回“0”時(shí)表示串口接收區存在數據。
使用說(shuō)明:使用該函數判斷串口接收區是否存在數據。等于0時(shí)再去執行指令獲取函數。
3.2 獲取符合自定義協(xié)議的指令數據
構造函數:get_CustProtrecvcmd()
輸出:接收指令數組 CustProt_recvcmd。
說(shuō)明:將符合自定義協(xié)議的指令存儲在全局的接收指令數組;期間會(huì )對指令中幀頭、幀尾、長(cháng)度碼3種類(lèi)型的數據格式進(jìn)行判斷。不符合自定義協(xié)議時(shí)將清空指令數組。
調用函數:hmt.getchar()
輸出:串口接收隊列的第一個(gè)字節數據。
使用說(shuō)明:在函數get_CustProtrecvcmd()中,獲取符合自定義協(xié)議指令時(shí)會(huì )頻繁調用該函數,對串口接收區的數據進(jìn)行篩選。
3.3 自定義協(xié)議的數據檢查及校驗
構造函數:CmdCheck(CustProt_recvcmd)
輸入:接收指令數組 CustProt_recvcmd。
說(shuō)明:函數會(huì )對接收指令數組中的數據碼和校驗碼2個(gè)類(lèi)型的數據格式進(jìn)行判斷。不符合自定義協(xié)議時(shí)將清空指令數組,回復錯誤碼,并重新開(kāi)始獲取指令。
3.4 指令數據解析
構造函數:CmdHandle(CustProt_recvcmd)
輸入:接收指令數組 CustProt_recvcmd。
說(shuō)明:函數根據指令中的功能碼,分類(lèi)處理指令數據,如數字數據和字符串數據。
3.5 執行指令功能
3.5.1 讀變量數據功能
構造函數:_ReadvariableReturnCmd (Addr)
調用函數:hmt.readvp16(Addr)\hmt.readvp32(Addr)\hmt.readvpstr(Addr)等。
輸入:自定義協(xié)議中指令的地址數據。
說(shuō)明:當功能碼為“0x01”時(shí)使用該函數處理,函數將根據指令中的地址類(lèi)型,分類(lèi)調用hmt讀變量函數,讀回數據并存儲在回復指令數組,最后通過(guò)串口發(fā)送返回。
調用函數:hmt.putchar(byte)
輸入:指令字節數據。
說(shuō)明:讀取后回復指令時(shí),會(huì )頻繁調用該函數,將回復指令數組中的數據通過(guò)串口發(fā)送。
3.5.2 寫(xiě)變量數據功能
構造函數:_Writevariable(addr, value)
_Writevariable1(addr, strvalue)
調用函數:hmt.writevp16(Addr, value)\hmt.writevp32(Addr, value)\hmt.writevpstr(Addr, strvalue)等。
輸入:“Addr”自定義協(xié)議中指令的地址數據,“value/strvalue”自定義協(xié)議中需要寫(xiě)入變量的數字數據或字符串數據。
說(shuō)明:當功能碼為“0x02”時(shí)使用該函數處理,函數將根據指令中的地址類(lèi)型,分類(lèi)調用hmt寫(xiě)變量函數,將數字數據或字符串數據寫(xiě)入相應的變量。
調用函數:string.char(byte)
輸入:接收自定義指令中的字節。
輸出:字符數據。
使用說(shuō)明:寫(xiě)入字符串變量時(shí),需要通過(guò)該函數將數字指令數據轉成字符數據寫(xiě)入變量??梢耘浜献址B接符“..”轉成字符串數據。
3.5.3 工程跳頁(yè)功能
調用函數:hmt.changepage(pageid)
輸入:“pageid”自定義協(xié)議中指令的頁(yè)面ID信息。
使用說(shuō)明:當功能碼為“0x03”時(shí)使用該函數處理,CmdHandle中會(huì )處理自定義指令中雙字節的ID信息為數字數據,然后將數字數據傳入該函數,跳轉到指定頁(yè)面。
3.5.4 設置屏幕背光功能
定義數組:setBLcmd = {0x5F, 0x00}
類(lèi)型:局部數組,在函數CmdHandle中定義。
說(shuō)明:函數CmdHandle會(huì )將自定義指令中亮度值傳入數組setBLcmd的第二個(gè)字節;配合hmt庫函數hmt.runcmd(cmdtable, len)使用,用以執行內部調光指令。
調用函數:hmt.runcmd(cmdtable, len)
輸入:“cmdtable”內部指令數組,“l(fā)en”調用數組長(cháng)度。
使用說(shuō)明:當功能碼為“0x04”時(shí)使用該函數處理,調用局部數組setBLcmd,執行自定義協(xié)議的調節背光功能。
五. 結語(yǔ)
本文所介紹的使用勛瑞光電智能液晶顯示模塊測試通信協(xié)議,旨在引出通信協(xié)議實(shí)現的一種思路,因為工業(yè)控制、物聯(lián)網(wǎng)智能家居、環(huán)境監控、數據安全等領(lǐng)域,應用層的功能設計很大程度會(huì )影響甚至決定協(xié)議層的數據傳輸格式。
智能顯示模塊HMI的串口自定義協(xié)議通信的實(shí)現,用戶(hù)可以按照自己的需求靈活設計協(xié)議規則,控制產(chǎn)品實(shí)現期望功能,在一定程度上為應用的功能設計提供了新的解決方案。
Contact Us
工廠(chǎng)地址:深圳市寶安區福永街道鳳凰興業(yè)一路華倫科技園21棟2樓
楊 總:13828709518
雷 總:13923457816
郵箱:yangdekai@hctlcd.com
QQ:417594796
Latest News