近年來,面向對象的程序設計方法(OOP)已成為人們構造程序的事實標準,很多采用OOP方法設計的程序成為程序設計的典范,Windows應用程序就是一例。借鑒Windows應用程序界面設計思想,將面向對象的方法引入控保單元人機界面的設計,使人機交互程序變得清晰簡潔,同時大大提高了在不同功用控保單元上的可移植性。
1 變電站自動化系統控保單元人機界面功能分析
1.1 控保單元
1.1.1 控保單元簡介
變電站綜合自動化系統已經從早期的集中式單CPU發展到今天的分層分布式多CPU系統。目前變電站綜合自動化的發展趨勢是將功能強大的微機監控系統與全數字化的微機保護測控技術、高速網絡通信技術結合起來,取代傳統的RTU,實現無人值班。目前國內變電站綜合自動化發展的趨勢是將傳統上集中在一起的監控 、保護功能分散到各個現場中分布實施。具體來說就是在變電站中按照電氣間隔劃分單元,每一個獨立控保裝置(如進線、出線、變壓器、母聯、電容器等)分別安裝各自獨立的控保單元。這些分散的控保單元再通過通信網絡與監控主機連起來,構成一個有機的整體,從而實現集中管理、分散控制。這種體系結構符合變電站自動化系統的發展趨勢,設計規范,調整擴建簡單,設備布置整齊,運行維護方便。

1.1.2 控保單元人機界面正面示圖
圖1控保單元操作界面圖圖1所示的某種典型控保單元操作界面可分為4個區域:區域A為液晶顯示區;區域B為鍵盤輸入區;區域C為控制命令輸入區;區域D為指示燈及揚聲器輸出區。注意:為了防止誤操作,特意將控制命令鍵同鍵盤輸入區域B分開,單獨列為區域C,并且加密碼保護。
1.2 鍵盤
鍵盤作為控保單元人機交互系統的主要組成部分,擔負著傳遞用戶命令至控保單元的任務。按人機交互系統對其不同的響應過程可將按鍵分為以下5類:
(1) 數字鍵+小數點鍵+回退鍵
這些鍵用做單個或連續數字的輸入,并由交互系統軟件賦予其意義。
(2) 上/下移動選擇鍵
這兩個鍵用做菜單選擇、屏幕翻頁、選項選定等。
(3) 確認鍵
此鍵用做選定操作項,類似于Windows中的[OK]鍵。
(4) 取消鍵
用做取消當前操作項或菜單退回到上級目錄,類似于Windows中的[CANCEL]鍵。
(5) 命令鍵
這些鍵用做合分閘、遠動就地切換、事故復位等重要命令的輸入。
1.3 液晶屏幕
液晶屏幕在控保單元人機交互系統中擔負著傳遞控保單元信息至用戶的任務。為了使操作簡單方便,液晶屏幕信息的顯示采用了分層菜單結構,輔以上/下移動選擇鍵、確認鍵、取消鍵就可完成整個菜單的完全檢索。菜單結構是建立在“頁面”的基礎上的,所謂“頁面”,指的是液晶上顯示的一屏,由兩部分組成:靜態文本和動態數據。靜態文本包括說明性的文字及提示信息等,由漢字和字符組成,在人機交互軟件中是用字符串來表示的;動態數據指實時刷新的數值或可由用戶修改的信息,在人機交互軟件中是用數值變量來表示的,液晶頁面根據其組成的不同可分為以下幾類:
(1) 純文本頁面。如目錄,這類頁面不包括數據,因此顯示時只要刷新一次即可。
(2) 文本+實時數據頁面。如測量電量顯示頁面,這類頁面由于包含實時刷新的數據,顯示時,數據顯示部分須不斷刷新以保持實時有效,但用戶不能通過鍵盤對數據進行修改等操作。
(3) 文本+可修改數據頁面。如定值修改頁面,這類頁面包含的可修改數據可由用戶通過鍵盤的數字鍵進行改動。
(4) 幫助信息頁面。如錯誤操作警告等,這類頁面通常由純文本組成,但與以上3類頁面都不同的是頁面在顯示一段時間后會自動切換到引起該幫助信息的頁面。
2 以頁面為對象的控保單元人機交互設計
2.1 Windows應用程序界面與控保單元界面相似之處
Windows應用程序的設計過程是典型的面向對象的設計方法,同時Windows應用程序“窗口”界面與控保單元人機交互界面有很大相似之處:(1)窗口通過消息響應機制響應鍵盤或鼠標等輸入設備的輸入信息,而在控保單元的某個頁面也是響應鍵盤的輸入;(2)兩者都是在一簡單的while()循環中響應外部輸入的;(3)都用多層嵌套的switchcase語句來決定某一消息對應進行何種操作。由此,自然想到借鑒Windows應用程序的設計思路設計控保單元人機界面。當然,在單片機上設計菜單不同于Windows環境下軟件的開發,因為許多Windows內部的消息響應機制以及由Windows封裝的數據結構、對象和標準處理函數,在單片機系統中統統不存在。盡管如此,設計控保單元人機界面時仍然可以借鑒大量的Windows程序開發思路。
2.2 控保單元頁面
控保單元的頁面與Windows應用程序中的窗口有很多相似之處。首先頁面處理的核心也是一個循環機制,它一直運行并響應外部有效按鍵輸入,直到得到切換窗口的鍵碼。這與Windows窗口消息循環機制有很大相似之處;當然,基于單片機的頁面按鍵響應機制不能借用Windows的消息響應機制,而只能每得到一個按鍵響應就處理一個。一個頁面生命周期流程表示如圖2:

圖2表示的流程實際上也是控保單元人機界面程序的入口程序main()的主體部分,只需在前面加上液晶、通訊模塊的初始化及全局變量的初始化就構成了main()程序。流程圖中的幾個重要模塊說明如下:
初始化并顯示頁面包括以下幾個操作:
(1) 調用一清屏函數ClearPage(),清除上次頁面的遺留物;
(2) 顯示當前頁面內容。如前所說,頁面由靜態文本和動態數據兩部分組成,因此這里也分兩步顯示頁面內容:
a.調用DisplayTxt(unsigned char*)函數顯示當前頁面的靜態文本,靜態文本在屏幕上是逐行分布的,舉例來說,一個256*128點陣的液晶屏幕,顯示一個漢字需16*16,英文字符需8*16,因此,整個屏幕可以分成8行,每行可顯示16個漢字或32個英文字符。調用8次DisplayTxt函數就可完成頁面的靜態文本的顯示 。DisplayTxt函數所帶的行參就是指向某一行文本的指針。
b.顯示當前頁面的動態數據。首先頁面應刷新保存在緩沖區內的當前頁面的動態數據,此步驟調用Refr eshData(STRUCT*),傳遞參數是一個指向頁面結構的指針。該函數負責從控保單元的數據采集CPU得到實時動態數據,并保存在本地緩沖區以備顯示。然后頁面調用DisplayData()顯示動態數據。
鍵盤掃描循環是一無條件的while()循環,它通過鍵盤掃描函數ScanKeyboard()返回鍵碼并進行相應的操作,直到接收到的按鍵會導致頁面切換為止,這時,根據當前頁面的一個指針所指的新頁面,程序結束當前頁面,轉而進入新頁面的生命周期。循環中,除了包含鍵掃描函數ScanKeyboard()外,如果該頁面有動態數據,還應包含刷新數據的函數RefreshData(STRUCT*),以保持數據的實時性。
處理按鍵是用一個兩層嵌套的switch-case語句來實現的。如前面1.2節所述,將按鍵分為5類,而每一類按鍵又根據當前頁面不同類型分別進行處理。
默認處理一般可設為不響應。
3 頁面操作的具體實現
3.1 按鍵處理
按鍵處理函數是整個應用程序的核心,在這里,程序定義某一頁面下對何按鍵作何處理。下面分析一下每種按鍵的處理。
3.1.1 數字鍵+小數點鍵+回退鍵
這些鍵只有在有可修改數據的頁面下才會響應,因此對它們只有一種處理,即將輸入數字鍵翻譯成對應的數值。
3.1.2 上/下移動選擇鍵
不同的頁面下,這兩個鍵的響應處理也不同,分為:
(1) 切換到新的頁面。例如,顯示測量電量時,一屏顯示不下,需多屏顯示時,在顯示其中某一屏時按上/下移動選擇鍵,將顯示相連的屏幕。
(2) 操作條目的移動。菜單的當前操作條目是用反色顯示的方法表示的,上/下移動選擇鍵使反色顯示區移動到用戶選擇的操作條目。
(3) 可選項的選擇。可選項指的是界面提供給用戶通過上/下選擇鍵選定的值,例如界面提供通訊速率的幾種選擇,上/下選擇鍵使用戶在這些可選速率之間切換,直到選中所需通訊速率。
3.1.3 確認鍵
確認鍵的響應有以下幾種可能:
(1) 切換到新的頁面。
(2) 切換當前條目的狀態。在設置參數時,選中條目有修改態和查詢態兩種狀態,用確認鍵使設置值在反色和正常之間切換,來代表修改態和查詢態之間的切換。
(3) 確認當前的輸入。
3.1.4 取消鍵
取消鍵只有一種響應處理:退出當前頁面,進入新的頁面顯示(通常是返回到當前頁面的前一頁面)。
3.2 頁面結構
上述頁面顯示流程的分析以及按鍵處理的分析,給出了一個頁面生命周期內的所有活動以及這些活動所需的頁面屬性。下面我們就根據上述頁面顯示流程的分析以及按鍵處理的分析,定義頁面結構。由上述的分析,頁面活動分顯示和響應按鍵兩大部分,因此頁面結構也分與之相關的兩部分。如下所示:
上面只定義了部分與顯示有關的變量,與按鍵響應有關的變量也只定義了有關取消鍵的變量。這是因為本文的目的只是給出借鑒Windows程序的頁面設計框架思路,具體到頁面結構中各變量的具體定義,只需根據前面流程的分析以及按鍵處理的分析用到了那些頁面的屬性,加入對應的頁面變量即可。而按鍵處理隨實際情況而定,人機界面的設計風格也因人而異,所以具體定義頁面結構變量由讀者需要而定。
4 完成控保單元整個人機界面設計
上一節完成了以頁面為中心的控保單元人機界面主流程,并給出了頁面結構的定義。要完成控保單元整個人機界面設計,還缺少基本的顯示、鍵掃描、通訊接口函數。不同于Windows應用程序可以利用大量現成的Windows API函數,在控保單元人機界面的設計中,這些底層接口函數都需自己設計。另外在接口函數基礎上的一些頁面方法(函數)也需自己設計。由于接口函數隨硬件而異,頁面方法隨用戶需要而定,下面只按功能列出它們:
(1) 有關按鍵處理的功能模塊。應包括按鍵掃描模塊、輸入轉換模塊(將輸入一串數字鍵翻譯成一個浮點數)。
(2) 有關顯示功能模塊。應包括文本顯示模塊、數值顯示模塊等。
(3) 通訊模塊。應包括通訊接口模塊、轉換模塊(將數據打包傳送給通訊接口及將接受到的數據包還原 )。
5 結束語
上文將面向對象的方法應用于控保單元人際界面設計的全過程,尤其借鑒了Windows應用程序的設計思路,雖然基于單片機的人際界面程序不可能實現Windows應用程序的核心——消息響應機制,但是仍然大大提高了界面友好性及程序的可移植性,顯示了面向對象方法設計的優越性。