一種APF系統(tǒng)信息的顯示方案
基于拓普微智能顯示模塊
一、引言
科技的進(jìn)步影響了所有產(chǎn)業(yè)的發(fā)展,其中電力發(fā)展速度是前所未有的,基本所有行業(yè)都需要電力支持。目前用電安全、節(jié)能、環(huán)保、經(jīng)濟(jì)等關(guān)鍵詞不斷被重申,這使得APF有源濾波器的應(yīng)用更加普遍。
與此同時,隨著APF應(yīng)用廣泛,市場拓展,需要面對的使用場景也更復(fù)雜。其中用戶對機(jī)器的界面交互體驗(yàn)尤為重視。迫使我們對APF產(chǎn)品的交互設(shè)計有新的要求。目前接觸了拓普微的智能顯示模塊HMT070ETD-1D,是一款高分辨率,高性能組態(tài)設(shè)計的串口屏。我們將通過該屏幕優(yōu)化APF系統(tǒng)信息交互,提升用戶體驗(yàn)。
二、目標(biāo)
基于HMT070ETD-1D的APF系統(tǒng)的界面開發(fā),我們將優(yōu)化所有參數(shù)的顯示,讓數(shù)據(jù)更迅速、直觀且準(zhǔn)確的呈現(xiàn)在用戶面前。不同于傳統(tǒng)項(xiàng)目開發(fā),此次設(shè)計僅針對界面交互進(jìn)行優(yōu)化,因此我們需要縮短常規(guī)開發(fā)周期,加快開發(fā)速度,并且有利于后續(xù)升級管理。主要實(shí)現(xiàn)以下目標(biāo):
1、實(shí)時顯示APF各項(xiàng)參數(shù)的數(shù)據(jù)
在有源濾波器運(yùn)行過程中,系統(tǒng)的運(yùn)行狀態(tài)以及各項(xiàng)參數(shù)信息需要進(jìn)行實(shí)時上報供用戶查閱。屏幕可以根據(jù)信息類別、重要程度,優(yōu)先等級等,調(diào)整顯示格式。
2、便捷交互,方便控制、切換、修改參數(shù)
用戶可以通過屏幕控制切換顯示APF中不同種類的參數(shù)信息,并且可以對某些參數(shù)進(jìn)行設(shè)置,例如開關(guān)切換、長按賦值、滑動切換、滑動賦值、鍵盤輸入修改等操作。
3、部分?jǐn)?shù)據(jù)信息需要有圖形化顯示,
為了給用戶更直觀的顯示效果,屏幕可以支持將數(shù)據(jù)以柱狀圖、趨勢曲線圖、餅狀圖、表盤的形式顯示出來。
4、支持遠(yuǎn)程數(shù)據(jù)查詢,遠(yuǎn)程顯示工程更新
APF系統(tǒng)上屏幕顯示的數(shù)據(jù)信息,可以支持遠(yuǎn)程查詢,或者遠(yuǎn)程控制。同時屏幕中顯示工程也可以通過遠(yuǎn)程進(jìn)行更新升級。
三、功能需求分析
此次設(shè)計將通過智能顯示模塊HMT070ETD-1D和官方提供的上位機(jī)軟件SGTools。開發(fā)設(shè)計APF系統(tǒng)信息的顯示部分。將所有界面信息顯示,交互操作都集中在屏幕中實(shí)現(xiàn)。為了實(shí)現(xiàn)以上目標(biāo)功能,APF系統(tǒng)信息顯示部分有如下功能需求:
1、變量數(shù)據(jù)刷新與數(shù)據(jù)格式化顯示
通過上位機(jī)開發(fā)工具SGTools,可以預(yù)先定義APF中各項(xiàng)參數(shù)的數(shù)字變量地址,添加數(shù)字控件到頁面中進(jìn)行顯示。數(shù)字控件通過關(guān)聯(lián)數(shù)字變量后,底層通過協(xié)議指令,將數(shù)據(jù)發(fā)送到屏幕顯示。同時數(shù)字控件支持設(shè)置顯示的字體類型,顯示字體的大小,顯示字體的顏色,格式化顯示如小數(shù)點(diǎn)、浮點(diǎn)數(shù)等進(jìn)行顯示。示意圖如下:

圖3-1 變量數(shù)據(jù)刷新與數(shù)據(jù)格式化顯示示意圖
?
2、屏幕便捷控制與控制數(shù)據(jù)下發(fā)
智能顯示模塊HMT070ETD-1D自帶電容觸摸屏,在開發(fā)工具SGTools中,有不同功能的觸摸鍵控件,通過添加這些控件可以在屏幕中實(shí)現(xiàn)相應(yīng)的功能,例如切換頁面、開關(guān)切換、長按賦值、滑動切換、滑動賦值、鍵盤輸入等。觸摸鍵進(jìn)行的變量賦值,數(shù)據(jù)操作,彈出鍵盤(菜單)的數(shù)據(jù)輸入會實(shí)時下發(fā)到串口中,供APF底層MCU判斷執(zhí)行對應(yīng)任務(wù)。示意圖如下:

圖3-2 屏幕便捷控制與控制數(shù)據(jù)下發(fā)示意圖
?
3、屏幕對數(shù)據(jù)的圖形化顯示
SGTools開發(fā)工具中,有進(jìn)度條,曲線,表盤這三個我比較常用的控件。三類控件都可以在屬性欄中進(jìn)行顯示模式的配置,進(jìn)度條支持顏色模式,圖標(biāo)模式,圖標(biāo)填充模式;曲線控件支持顯示點(diǎn)、線、頂部、底部、區(qū)域填充模式;表盤控件支持環(huán)形變色、混色、變盤指針、表盤旋轉(zhuǎn)等模式。以上控件可以更直觀的體現(xiàn)APF中的相關(guān)數(shù)據(jù)。實(shí)現(xiàn)方式與變量數(shù)據(jù)刷新一致。

圖3-3 屏幕對數(shù)據(jù)的圖形化顯示
?
4、遠(yuǎn)程屏幕的數(shù)據(jù)控制與訪問,工程更新升級
智能顯示模塊HMT070ETD-1D支持網(wǎng)絡(luò)TCP/IP通信,在開發(fā)工具中可以定義屏幕的IP地址信息,TCP端口,TFTP端口號等信息。下載到屏幕中后IP信息會自動生效,然后可以在局域網(wǎng)內(nèi)連接相應(yīng)的IP進(jìn)行APF遠(yuǎn)程協(xié)議的數(shù)據(jù)交互。并且可以通過IP信息對遠(yuǎn)程屏幕進(jìn)行TFTP文件上載,從而實(shí)現(xiàn)遠(yuǎn)程APF系統(tǒng)界面升級。

圖3-4 遠(yuǎn)程屏幕的數(shù)據(jù)控制與訪問以及工程更新升級
?
四、設(shè)計實(shí)現(xiàn)
1、變量數(shù)據(jù)刷新與數(shù)據(jù)格式化顯示
APF的系統(tǒng)參數(shù)信息在我們底層有相應(yīng)的寄存器的進(jìn)行存儲,因此刷新到屏幕中的數(shù)據(jù)可以直接通過底層調(diào)用獲取。定義數(shù)據(jù)指針“Buf”。
構(gòu)建底層數(shù)據(jù)刷新函數(shù)“topway_value()”;
說明:函數(shù)可以根據(jù)傳入的APF變量地址(Address)、參數(shù)類型(Type)、數(shù)據(jù)長度(Length)、寄存器數(shù)據(jù)指針(Buf),將信息實(shí)時通過串口刷新至屏幕對應(yīng)位置進(jìn)行顯示。
/******************************************************************************* * Function Name ?: topway_value * Description ???: 刷新變量數(shù)據(jù) * Input ??????????: Address 變量地址?Type?變量類型?Length?數(shù)據(jù)長度?Buf?數(shù)據(jù)指針 * Output ??????? ?: None? * Return ?????? ??: None *******************************************************************************/ void topway_value(uint16_t Address,uint8_t Type,uint8_t Length,uint16_t *Buf) {? uint16_t len; if(Type == TOPWAY_VALUE_ADRESS)//16位數(shù)據(jù)地址 { ??topway_buf[0] = TOPWAY_DATA_START;// AA頭數(shù)據(jù)幀 ??topway_buf[1] = TOPWAY_VALUE_FNCCODE;// 82 功能碼 ??topway_buf[2] = TOPWAY_PARAMETER_ID1;// 00 地址ID高8位 ??topway_buf[3] = TOPWAY_PARAMETER_ID0;// 08 地址ID低8位 ??topway_buf[4] = (Address & 0xff00) >> 8;//地址高8位 ??topway_buf[5] = Address & 0xff; ????????//地址低8位 ??topway_buf[6] = Length;//數(shù)據(jù)長度 ? for(len=0;len ? { ?topway_buf[len + 7] = (*Buf & 0xff00) >> 8;//數(shù)據(jù)高8位 ?topway_buf[len + 8] = (*Buf & 0xff);//數(shù)據(jù)低8位 ????? ??? Buf++; ??? ? } ??topway_buf[7+Length*2] = TOPWAY_DATA_END_1;//尾數(shù)據(jù)幀1:0xCC ??topway_buf[8+Length*2] = TOPWAY_DATA_END_2;//尾數(shù)據(jù)幀2:0x33 ??topway_buf[9+Length*2] = TOPWAY_DATA_END_3;//尾數(shù)據(jù)幀3:0xC3 ??topway_buf[10+Length*2] = TOPWAY_DATA_END_4;//尾數(shù)據(jù)幀4:0x3C ??BufPut(&topway,topway_buf,11+Length*2); ?? ?}? ????else if(Type == TOPWAY_VALUE_POINT)//圖標(biāo)地址 { ? for(len=0;len ? { uint16_t Write_value = *Buf + len; topway_buf[0] = TOPWAY_DATA_START;// AA頭數(shù)據(jù)幀 ?????topway_buf[1] = TOPWAY_VALUE_FNCCODE_1;// 3D 功能碼 ?????topway_buf[2] = TOPWAY_PARAMETER_ID1;// 00 地址ID高8位 ?????topway_buf[3] = TOPWAY_PARAMETER_ID0;// 08 地址ID低8位 ?????topway_buf[4] = (Address & 0xff00) >> 8;//地址高8位 ?????topway_buf[5] = Address & 0xff; ????????//地址低8位 topway_buf[6] = (Write_value & 0xff00) >> 8;//數(shù)據(jù)高8位 ?????topway_buf[7] = (Write_value & 0xff);//數(shù)據(jù)低8位 topway_buf[8] = TOPWAY_DATA_END_1;//尾數(shù)據(jù)幀1:0xCC ?????topway_buf[9] = TOPWAY_DATA_END_2;//尾數(shù)據(jù)幀2:0x33 ?????topway_buf[10] = TOPWAY_DATA_END_3;//尾數(shù)據(jù)幀3:0xC3 ?????topway_buf[11] = TOPWAY_DATA_END_4;//尾數(shù)據(jù)幀4:0x3C ?Address+=0x2;//取下一個地址 ?BufPut(&topway,topway_buf,12); } } else if(Type == TOPWAY_VALUE_32BIT)?//32位數(shù)據(jù)地址 {??topway_buf[0] = TOPWAY_DATA_START;// AA頭數(shù)據(jù)幀 ??topway_buf[1] = TOPWAY_VALUE_FNCCODE;// 82 功能碼 ??topway_buf[2] = TOPWAY_PARAMETER_ID1;// 00 地址ID高8位 ??topway_buf[3] = TOPWAY_PARAMETER_ID0;// 08 地址ID低8位 ??topway_buf[4] = (Address & 0xff00) >> 8;//地址高8位 ??topway_buf[5] = Address & 0xff; ????????//地址低8位 ??topway_buf[6] = Length/2;//數(shù)據(jù)長度 ? for(len=0;len { ?topway_buf[len+7] = (*Buf & 0xff);//數(shù)據(jù)低8位 ????? ??? Buf++; ??? ?? } ??topway_buf[7+Length] = TOPWAY_DATA_END_1;//?尾數(shù)據(jù)幀1:0xCC ??topway_buf[8+Length] = TOPWAY_DATA_END_2;// 尾數(shù)據(jù)幀2:0x33 ??topway_buf[9+Length] = TOPWAY_DATA_END_3;// 尾數(shù)據(jù)幀3:0xC3 ??topway_buf[10+Length] = TOPWAY_DATA_END_4;//尾數(shù)據(jù)幀4:0x3C ??BufPut(&topway,topway_buf,11+Length);? } } |
測試屏幕數(shù)據(jù)刷新如下顯示,其中有對部分參數(shù)進(jìn)行格式化顯示,控制字符間距。

2、屏幕便捷控制與控制數(shù)據(jù)下發(fā)
APF系統(tǒng)的屏幕通過觸摸鍵進(jìn)行的VP控制操作,按鍵信息返回操作都會下發(fā)數(shù)據(jù)到串口,因此我們需要對屏幕發(fā)出的串口數(shù)據(jù)進(jìn)行甄別,獲取目標(biāo)數(shù)據(jù)實(shí)現(xiàn)APF的控制。
構(gòu)建串口的協(xié)議解析函數(shù)“queue_find_cmd()”
說明:函數(shù)用于監(jiān)視串口的數(shù)據(jù)接收,并將接收的信息篩選獲取符合協(xié)議的指令,返回有效指令數(shù)組(buffer),供控制程序進(jìn)行判斷處理,執(zhí)行相應(yīng)功能。?
/****************************************************************************** * 函數(shù)名稱: ?queue_find_cmd * 函數(shù)功能: ?獲取串口接收隊列中一個完整的幀 * 輸入?yún)?shù): ?緩存地址和大小 * 輸出參數(shù): ?無 * 返 回 值: ?無 *******************************************************************************/ INT16U queue_find_cmd(INT8U *buffer,INT16U buf_len) { ????INT16U cmd_size = 0; ????INT8U _data = 0; ????while(queue_size()>0)??//判斷隊列是否為空 ????{ ????????queue_pop(&_data);??//非空則提取數(shù)據(jù) ????????if(cmd_index==0&&_data!=CMD_HEAD)??//幀頭出錯,跳過 ????????{ ????????????continue; ????????} ????????if(cmd_index ????????{ ????????????buffer[cmd_index++] = _data; ????????}? ????????if(_data==CMD_TAIL_CC)?//判斷是否為0xCC ????????{ ????????????//如果檢查0xCC成功,則下一步檢查0x33 ??//否則重新檢查? ????????????if(cmd_state==CMD_CHECK_TAIL_CC) ????????????{ ????????????????cmd_state=CMD_CHECK_TAIL_33; ????????????} ????????????else?{?cmd_state=CMD_CHECK_TAIL_CC;?} ????????} ????????else if(_data==CMD_TAIL_33) ????????{ ????????????//如果檢查0x33成功,則下一步檢查0xc3 ?//否則重新檢查 ????????????if(cmd_state==CMD_CHECK_TAIL_33) ????????????{ ????????????????cmd_state=CMD_CHECK_TAIL_C3; ????????????} ??????????? else?{?cmd_state=CMD_CHECK_TAIL_CC;} ????????} ????????else if(_data==CMD_TAIL_C3) ????????{ ????????????//如果檢查0xC3成功,則下一步檢查0x3C ?//否則重新檢查 ????????????if(cmd_state==CMD_CHECK_TAIL_C3) ????????????{ ????????????????cmd_state=CMD_CHECK_TAIL_3C; ????????????} ????????????else?{?cmd_state=CMD_CHECK_TAIL_CC;} ????????} ????????else if(_data==CMD_TAIL_3C) ????????{ ????????????//如果檢查0x3C成功,則幀尾正確,否則重新檢查 ????????????if(cmd_state==CMD_CHECK_TAIL_3C) ????????????{ ????????????????cmd_state=CMD_CHECK_TAIL_OK; ????????????} ????????????else?{?cmd_state=CMD_CHECK_TAIL_CC;} ????????} ????????else ????????{ ????????????cmd_state = CMD_CHECK_TAIL_CC; ????????} ????????//得到正確的一幀指令 ????????if(cmd_state==CMD_CHECK_TAIL_OK) ????????{??//重置標(biāo)志位,返回數(shù)據(jù)長度 ????????????cmd_size = cmd_index; ????????????cmd_state = CMD_CHECK_TAIL_CC; ????????????cmd_index = 0; ????????????que._head = 0; ????????????que._tail = 0; ????????????return cmd_size; ????????} ????} ????return 0; } |
?
3、屏幕對數(shù)據(jù)的圖形化顯示
屏幕對數(shù)據(jù)的圖形化顯示與數(shù)據(jù)顯示實(shí)現(xiàn)的方式一致,主要通過底層實(shí)時刷新數(shù)據(jù),屏幕接收變量數(shù)據(jù)后將會依據(jù)控件的屬性設(shè)置顯示對應(yīng)效果的圖形。
底層的數(shù)據(jù)刷新類似第1點(diǎn)。這里不作設(shè)計解析。圖形化顯示效果如圖:

圖4-2 曲線顯示

圖4-3 功率狀態(tài)顯示
?
4、遠(yuǎn)程屏幕的數(shù)據(jù)控制與訪問,工程更新升級
屏幕的網(wǎng)絡(luò)IP、TCP端口、TFTP端口、網(wǎng)關(guān)設(shè)置如圖:
?
圖4-4 網(wǎng)絡(luò)設(shè)置
①屏幕支持RJ45網(wǎng)口,可以通過該接口實(shí)現(xiàn)TCP/IP協(xié)議通信,網(wǎng)絡(luò)的通信設(shè)計類似第1點(diǎn)的串口設(shè)計。以下不作詳細(xì)解析,根據(jù)屏幕的IP信息,網(wǎng)絡(luò)端口做以下設(shè)置。測試如圖:

圖4-5 TCP/IP協(xié)議通信測試
②遠(yuǎn)程文件更新測試,首先遠(yuǎn)程通過TCP/IP協(xié)議發(fā)送屏幕復(fù)位指令,讓屏幕進(jìn)入遠(yuǎn)程更新模式。然后通過命令行“cmd”執(zhí)行tftp應(yīng)用的相關(guān)上載命令,進(jìn)行顯示工程升級,我的測試結(jié)果如圖4-6。期間工程文件傳輸都成功完成,在網(wǎng)絡(luò)連接正常的情況下沒有出現(xiàn)錯誤。

圖4-6 遠(yuǎn)程TFTP文件傳輸測試1
另外也可以通過拓普微官方提供的“遠(yuǎn)程升級工具”進(jìn)行TFTP文件上載。測試如圖:

圖4-7 遠(yuǎn)程TFTP文件傳輸測試2
?
五、總結(jié)
智能顯示模塊HMT070ETD-1D顯示方案綜合測試下來比較順利,期間進(jìn)行的測試都能通過。圖像數(shù)據(jù)顯示流暢,按鍵反饋迅速,功能測試正常。在官方提供的上位機(jī)軟件SGTools中,可以很方便的設(shè)計出數(shù)據(jù)相關(guān)的UI顯示效果。上位機(jī)軟件也很直觀,資源欄、屬性欄、控件區(qū)、工具欄、輸出欄視圖排布接近主流軟件使用習(xí)慣,個人比較容易上手。
此次基于拓普微平臺的智能模塊開發(fā)還算比較成功,滿足了我們開發(fā)的設(shè)計需求。并且官方提供的技術(shù)支持也非常及時,加速了我們整個項(xiàng)目組的開發(fā)進(jìn)程。
審核編輯:湯梓紅
評論