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