徐艷艷,孫運(yùn)乾,姜艷娟
(許繼電氣股份有限公司, 河南 許昌 461000)
可視化邏輯設(shè)計(jì)技術(shù)以圖形化和模塊化邏輯組態(tài)方式代替?zhèn)鹘y(tǒng)手工編寫源代碼的程序開發(fā)方式,為嵌入式裝置提供了快速開發(fā)手段,保證了裝置的可靠性和穩(wěn)定性,為智能電網(wǎng)領(lǐng)域強(qiáng)大的智能設(shè)備開發(fā)能力提供了支撐,在智能變電站中得到了廣泛的應(yīng)用[1-4]。但是,在裝置開發(fā)過程中,當(dāng)邏輯設(shè)計(jì)工具自動(dòng)生成的目標(biāo)代碼下載到嵌入式裝置后,如果出現(xiàn)邏輯運(yùn)行異常,開發(fā)人員對裝置很難快速定位問題出現(xiàn)的具體原因。因此迫切需要一種對裝置內(nèi)部邏輯進(jìn)行在線監(jiān)視的工具,方便開發(fā)人員和調(diào)試人員快速定位問題原因。
為此,本文提出一種嵌入式裝置的邏輯仿真系統(tǒng)的開發(fā)思路,對用戶邏輯圖采用XML數(shù)據(jù)建模方式,利用數(shù)據(jù)透視技術(shù),實(shí)現(xiàn)嵌入式裝置內(nèi)部邏輯的實(shí)時(shí)圖形化展示。
采用模塊化的設(shè)計(jì)思想,將系統(tǒng)大致分為邏輯設(shè)計(jì)工具、邏輯仿真工具以及運(yùn)行在嵌入式裝置中的遠(yuǎn)程過程調(diào)用(remoteprocess communication,RPC)服務(wù)程序三個(gè)模塊。
邏輯仿真系統(tǒng)的總體結(jié)構(gòu)組成如圖1所示。
圖1 系統(tǒng)總體結(jié)構(gòu)
邏輯設(shè)計(jì)工具輸出邏輯圖描述文件、內(nèi)存映射文件和目標(biāo)程序三個(gè)文件。
嵌入式裝置運(yùn)行邏輯設(shè)計(jì)工具生成目標(biāo)程序,同時(shí),建立RPC服務(wù)進(jìn)程,為邏輯仿真工具提供內(nèi)存讀寫服務(wù)。
邏輯仿真工具打開邏輯圖描述文件和內(nèi)存映射文件,通過解析兩個(gè)文件,可得到邏輯圖各節(jié)點(diǎn)的圖形信息和內(nèi)存地址。和嵌入式裝置建立RPC服務(wù)連接后,最終可實(shí)現(xiàn)裝置內(nèi)部邏輯的實(shí)時(shí)圖形化展示功能[5-6]。
邏輯設(shè)計(jì)工具的主要功能為用戶提供邏輯組態(tài)界面,支持用戶進(jìn)行邏輯圖進(jìn)行修改參數(shù)、添加節(jié)點(diǎn)和刪除節(jié)點(diǎn)等操作,最后,生成邏輯圖描述文件。邏輯圖描述文件采用可移植、易擴(kuò)展的可擴(kuò)展標(biāo)識(shí)語言(extensible markup language,XML)建模方式[7],存儲(chǔ)各個(gè)節(jié)點(diǎn)的圖形信息包括類型、ID號(hào)、頁面信息、位置信息、邏輯操作、參數(shù)信息、輸入連線和輸出連線等。以“TV斷線”節(jié)點(diǎn)為例,該節(jié)點(diǎn)的XML數(shù)據(jù)建模內(nèi)容如圖2所示。
圖2 XML的數(shù)據(jù)建模
在建模信息中, TYPE 是邏輯節(jié)點(diǎn)的類型,p_id是節(jié)點(diǎn)所在的頁面號(hào),r_id是節(jié)點(diǎn)的注冊ID號(hào),r_name是節(jié)點(diǎn)的名稱,r_logic是節(jié)點(diǎn)的邏輯操作類型,r_left、r_top、r_top、r_bottom是節(jié)點(diǎn)的坐標(biāo)位置,input.0、output.0是節(jié)點(diǎn)的輸入、輸出參數(shù)。該建模信息被邏輯仿真工具用于圖形化展示。
邏輯設(shè)計(jì)工具的另一重要功能,是在用戶完成邏輯圖形的組態(tài)設(shè)計(jì)后,編譯生成目標(biāo)程序和內(nèi)存映射文件。邏輯設(shè)計(jì)工具按照如下流程進(jìn)行編譯。
(1) 對邏輯節(jié)點(diǎn)進(jìn)行分類、排序和編號(hào)。
(2) 生成邏輯圖對應(yīng)的C代碼。
(3) 調(diào)用編譯器編譯C代碼,生成目標(biāo)程序和map文件。
(4) 解析map文件中的映射符號(hào)表,得到邏輯節(jié)點(diǎn)狀態(tài)存儲(chǔ)的首地址。
(5) 根據(jù)邏輯節(jié)點(diǎn)狀態(tài)存儲(chǔ)的首地址和節(jié)點(diǎn)編號(hào),得到各個(gè)節(jié)點(diǎn)在裝置的內(nèi)存地址。
(6) 將節(jié)點(diǎn)編號(hào)和內(nèi)存地址的映射關(guān)系,生成到內(nèi)存映射文件。
邏輯仿真工具的數(shù)據(jù)透視功能通過RPC服務(wù)實(shí)現(xiàn)[8-9]。RPC 作為一個(gè)客戶/服務(wù)器模型,在本文所述的邏輯仿真系統(tǒng)中,其服務(wù)端程序在嵌入式裝置中運(yùn)行,其客戶端在邏輯仿真工具中運(yùn)行。
邏輯仿真工具發(fā)起內(nèi)存讀取請求,將內(nèi)存地址通過報(bào)文形式發(fā)送給嵌入式裝置;嵌入式裝置收到報(bào)文后,觸發(fā)RPC服務(wù)讀取裝置內(nèi)存,將內(nèi)存讀取結(jié)果以報(bào)文形式回復(fù)給邏輯仿真工具;最后,邏輯仿真工具將內(nèi)存數(shù)據(jù)以圖形化方式顯示在用戶界面。
邏輯仿真工具的工作流程如圖3所示。
(1) 加載并解析由邏輯設(shè)計(jì)工具生成的邏輯圖描述文件,繪制用戶界面。
(2) 加載內(nèi)存映射文件,得到各個(gè)邏輯節(jié)點(diǎn)的相對地址。
(3) 通過RPC服務(wù)與裝置建立連接,得到裝置的重定位信息。
(4) 將邏輯節(jié)點(diǎn)的相對地址轉(zhuǎn)換為絕對地址,發(fā)出RPC請求。
(5) 得到RPC的回復(fù)報(bào)文,更新圖形界面上邏輯節(jié)點(diǎn)的狀態(tài)。
圖3 仿真工具工作流程
(6) 任務(wù)休眠500 ms后,流程回到第(4)步,重復(fù)讀取內(nèi)存、刷新界面和任務(wù)休眠操作,直到用戶關(guān)閉軟件。
經(jīng)過上述流程,可視化邏輯仿真工具實(shí)現(xiàn)了邏輯圖內(nèi)節(jié)點(diǎn)狀態(tài)的實(shí)時(shí)刷新功能。
在工程應(yīng)用中,需要對邏輯仿真工具的RPC訪問效率進(jìn)行優(yōu)化。一方面,只對當(dāng)前用戶可見的節(jié)點(diǎn)狀態(tài)進(jìn)行刷新;另一方面,對節(jié)點(diǎn)的內(nèi)存地址進(jìn)行升序排序,地址連續(xù)的節(jié)點(diǎn)地址整合為一個(gè)內(nèi)存塊,以內(nèi)存塊為單位發(fā)送RPC請求,避免頻繁地單字節(jié)讀取內(nèi)存[10-11]。
邏輯仿真工具的顯示界面如圖4所示。圖中的實(shí)線表示邏輯結(jié)果為“真”,虛線表示結(jié)果為“假”。通過邏輯圖形化展示的方式,使用戶能夠快速定位問題的原因。
圖4 邏輯仿真工具界面
根據(jù)工具的設(shè)計(jì)與實(shí)現(xiàn),采用某型號(hào)的嵌入式繼電保護(hù)裝置,測試工具的可靠性和時(shí)效性。
首先,測試邏輯仿真工具顯示的邏輯節(jié)點(diǎn)的狀態(tài)和嵌入式裝置的該邏輯節(jié)點(diǎn)的運(yùn)行狀態(tài)的一致性。
在繼電保護(hù)裝置的邏輯圖中選擇一個(gè)邏輯節(jié)點(diǎn),了解該節(jié)點(diǎn)的變位邏輯,通過測試儀加量的方式,觸發(fā)選中節(jié)點(diǎn)的狀態(tài)在“真”和“假”之間反復(fù)變位[12]。查看工具顯示的邏輯節(jié)點(diǎn)的狀態(tài)是否能夠同步刷新,測試結(jié)果如表1所示。
表1 可靠性測試結(jié)果
主要驗(yàn)證工具的邏輯圖顯示的節(jié)點(diǎn)狀態(tài)和裝置實(shí)際運(yùn)行的節(jié)點(diǎn)狀態(tài)的同步時(shí)間。
邏輯仿真工具界面刷新的定時(shí)器周期設(shè)定為500 ms,分別打開3個(gè)不同的邏輯圖描述文件,所包含的邏輯節(jié)點(diǎn)的個(gè)數(shù)分別為500個(gè)、1 000個(gè)和2 000個(gè)。在嵌入式裝置上進(jìn)行單個(gè)或多個(gè)節(jié)點(diǎn)的狀態(tài)變位,查看工具界面上邏輯節(jié)點(diǎn)的狀態(tài)同步時(shí)間。測試結(jié)果如表2所示。
表2 時(shí)效性測試結(jié)果
隨著邏輯圖描述文件內(nèi)節(jié)點(diǎn)個(gè)數(shù)的指數(shù)級(jí)增加,邏輯仿真工具的響應(yīng)時(shí)間沒有明顯延時(shí),這說明對邏輯仿真工具的顯示優(yōu)化處理是有效果的。
本文設(shè)計(jì)的嵌入式裝置邏輯仿真系統(tǒng),通過在線的讀取和分析裝置內(nèi)存中邏輯節(jié)點(diǎn)的當(dāng)前狀態(tài),實(shí)時(shí)圖形化展示裝置的邏輯運(yùn)行結(jié)果,從而快速定位邏輯運(yùn)行異常的問題原因。該系統(tǒng)采用模塊化的設(shè)計(jì)思想,可適應(yīng)于不同操作系統(tǒng)的嵌入式裝置,為嵌入式裝置的開發(fā)和維護(hù)提供了有力的支撐,已經(jīng)在國內(nèi)外的智能變電站中廣泛應(yīng)用。