劉佳誕,周 琦
(無錫供電公司,江蘇無錫 214061)
在實際運行維護中,遇到變電站遠程錄音終端(嵌入式系統)死機,經常采用的方法是通過遠程桌面或遠程TELNET、或者遠程多電腦切換器(KVM)等方式進行服務重啟。但在操作系統宕機情況下,遠程登陸和遠程KVM 方式就無法進行,此時常用的解決方法就是人員趕往現場進行設備的斷電重啟,費時費力;或者通過采用安裝智能電源分配單元(PDU)的技術解決方案,實現遠程設備的斷電重啟。但是,PDU的方案也存在一些不足,一是價格昂貴,一般在3 千元至五千元;二是擴展性不夠,功能較單一,無法根據客戶的需求進行功能擴展。
Raspberry Pi(樹莓派)是一款迷你電腦,預裝Linux 系統,體積僅信用卡大小,搭載ARM 架構處理器,運算性能和智能手機相仿。它最大的特點就是成本低廉,僅35 美元,接口較豐富。除具備HDMI,USB,ETHERNET 接口外,同時具備8 路GPIO(通用輸入輸出口)接口,非常適合進行一些簡單的自動化設備控制,也方便進行功能的擴展。樹莓派官方在軟件編程方面推薦使用Python 語言,其提供了GPIO 庫,可以幫助用戶非常方便的完成相關IO 口的操作。同時,Python 作為腳本語言[1],在web 編程方面具有天然的優勢,其包含的webpy 庫能夠幫助用戶以很少量的代碼輕松的完成輕量級的web 框架的搭建。因此,基于樹莓派的上述優勢,考慮采用它來控制遠程錄音終端的電源并通過遠程訪問實現斷電重啟。
解決方案如圖1 所示。首先在樹莓派上搭建web服務器,采用webpy 搭建Python Web 框架,并根據控制終端的請求實現GPIO 控制。控制終端首先通過web 方式遠程訪問樹莓派web 主文件(在本網站配置中定義為index.py),經過用戶名密碼認證后,進入設備斷電重啟網頁對遠端錄音終端進行重啟操作。樹莓派web 主文件根據重啟請求,調用GPIO 操作函數,控制GPIO的輸出電平,從而控制繼電器觸點動作,實現錄音終端斷電重啟。

圖1 方案原理圖
樹莓派GPIO 針腳定義如表1 所示。

表1 樹莓派GPIO 針腳定義
根據表1的針腳定義,選用GIPO 0 作為輸出。因此使用2,6,11 號針腳與繼電器(驅動電壓為直流5 V)連接。其中2 號針腳提供5 V 電壓輸出,與繼電器Vcc 針腳相連;6 號針腳為信號地,與繼電器GND 針腳相連,7 號針腳為GPIO 0 輸出,與繼電器IN 針腳相連,如圖2 所示。

圖2 GPIO 連接示意圖
選用nginx+webpy+fastcgi+flup的組合。
2.1.1 安裝上述應用程序
使用如下命令行:
Sudo apt-get install python-webpy nginx spawn-fcgi python-flup[1]
2.1.2 修改Nginx 配置文件
Nginx(1.2.1 版本)的配置文件nginx.conf(在/etc/nginx/ 目錄下)包含了default文件(在/etc/nginx/sites-available/ 目錄下),關于server,location等配置都在default 文件中,這與以往的版本不同。對default 文件進行如下修改:

2.1.3 修改web 主文件屬性
在啟動spawn-fcgi 前將index.py 改為可執行,使用以下命令行:
Sudo chmod+x index.py
2.1.4 啟動spawn-fcgi
在樹莓派9002 端口啟動webpy 應用,webpy 主文件路徑為/home/pi/www/index.py,webpy的程序主目錄為/home/pi/www/,總共啟動10個spawn 進程.起用如下命令行:
spawn-fcgi -F 10 -d/home/pi/www -f/home/pi/www/index.py-a 127.0.0.1-p 9002
2.1.5 啟動nginx
命令行:Sudo nginx
2.1.6 增加自啟動功能
為了能讓樹莓派在系統啟動后自動加載fcgi,首先對/etc 目錄下rc.local 文件增加可執行權限。
命令行:sudo chmod+x rc.local[2]
編輯rc.local,在exit 0 行的前面增加2.1.4 中的命令行。
GPIO 控制程序為control.py,作為模塊導入web主文件中。其具備初始化GPIO 和斷電重啟功能。
2.2.1 初始化GPIO
通過initGPIO()函數,選用GPIO 0,設置GPI0的使用方式為BOARD(該方式參考Raspberry Pi 主板上P1 接線柱的針腳編號。使用該方式的優點是無需考慮主板的修訂版本,硬件始終都是可用的狀態,無需從新連接線路和更改代碼),設置GIPO 0為輸出通道,并輸出低電平(因為選用的繼電器模式在高電平下為釋放,低電平下吸合),使繼電器觸點處于常閉狀態,錄音設備保持有電狀態。
2.2.2 斷電重啟
通過調用powerreboot()函數,將GPIO 0 通道輸出設置為高電平,釋放繼電器觸點,斷開設備電源斷開設備電源,保持斷電3 s,將GPIO 0 通道輸出設置為低電平,接通設備電源,進行設備重啟。
其中pwoerreboot()函數中主要調用了GPIO 模塊的以下幾個主要函數:
(1)調用GPIO.setup(0,GPIO.OUT),將GPIO 0通道設置為輸出模式。
(2)調用GPIO.output(0,true),將GPIO 0 通道輸出設置為高電平,斷開設備電源。
(3)調用time.sleep(3),讓斷電保持3 s。
(4)調用GPIO.output(0,false),將GPIO 0 通道輸出設置為低電平,接通設備電源。
編寫web 主文件index.py,將改文件放置于web服務器根目錄下(即在2.1.2 配置文件設置的web 根目錄)。
2.3.1 功能
Index.py 文件實現以下幾項主要功能:
(1)導入模塊control.py;(2)用戶登錄校驗;(3)根據用戶GET 請求,控制GPIO 電平輸出,進行斷電重啟操作。
2.3.2 處理流程
Inder.py 處理流程如圖3 所示。用戶通過訪問web主文件index.py 進入登陸界面,通過密碼認證后,樹莓派開始對GPIO 0 端口進行初始化,并向用戶返回電源重啟操作網頁。當index.py 接收到用戶斷電重啟請求后,調用powerreboot()函數,控制GPIO 端口的輸出電瓶,完成對控制設備的斷電重啟操作。
在生產實際運行維護過程中,已多次通過使用樹莓派,對遠程出現死機故障的主機進行斷電重啟,避免了人員趕往變電站現場人工復位的問題,節約了故障處理時間和人力資源。與采用智能PDU的技術方案相比,成本約為前者的1/20,價格優勢明顯。缺點是與設備電源接線稍顯麻煩,且沒有進行工業化封裝,布線和設備美觀性上明顯不足。
樹莓派功能強大,設備運行穩定,后續可進一步進行開發。比如外接攝像頭,實現對站內設備的圖像監控;外接溫濕度傳感器實現溫濕度采集;通過串口對其他運行設備進行運行工況監測和維護等。合理應用樹莓派,能給電力通信信息運行維護工作帶來很大便利。

圖3 index.py 處理流程
[1]MAGNUS L H.Python 基礎教程[M].北京:人民郵電出版社,2010:1-3.
[2]SARWAR S M.UNIX 教程[M].北京:機械工業出版社,2003:179-180.