劉佳誕,周 琦
(無錫供電公司,江蘇無錫 214061)
在實際運行維護中,遇到變電站遠程錄音終端(嵌入式系統(tǒng))死機,經(jīng)常采用的方法是通過遠程桌面或遠程TELNET、或者遠程多電腦切換器(KVM)等方式進行服務(wù)重啟。但在操作系統(tǒng)宕機情況下,遠程登陸和遠程KVM 方式就無法進行,此時常用的解決方法就是人員趕往現(xiàn)場進行設(shè)備的斷電重啟,費時費力;或者通過采用安裝智能電源分配單元(PDU)的技術(shù)解決方案,實現(xiàn)遠程設(shè)備的斷電重啟。但是,PDU的方案也存在一些不足,一是價格昂貴,一般在3 千元至五千元;二是擴展性不夠,功能較單一,無法根據(jù)客戶的需求進行功能擴展。
Raspberry Pi(樹莓派)是一款迷你電腦,預(yù)裝Linux 系統(tǒng),體積僅信用卡大小,搭載ARM 架構(gòu)處理器,運算性能和智能手機相仿。它最大的特點就是成本低廉,僅35 美元,接口較豐富。除具備HDMI,USB,ETHERNET 接口外,同時具備8 路GPIO(通用輸入輸出口)接口,非常適合進行一些簡單的自動化設(shè)備控制,也方便進行功能的擴展。樹莓派官方在軟件編程方面推薦使用Python 語言,其提供了GPIO 庫,可以幫助用戶非常方便的完成相關(guān)IO 口的操作。同時,Python 作為腳本語言[1],在web 編程方面具有天然的優(yōu)勢,其包含的webpy 庫能夠幫助用戶以很少量的代碼輕松的完成輕量級的web 框架的搭建。因此,基于樹莓派的上述優(yōu)勢,考慮采用它來控制遠程錄音終端的電源并通過遠程訪問實現(xiàn)斷電重啟。
解決方案如圖1 所示。首先在樹莓派上搭建web服務(wù)器,采用webpy 搭建Python Web 框架,并根據(jù)控制終端的請求實現(xiàn)GPIO 控制??刂平K端首先通過web 方式遠程訪問樹莓派web 主文件(在本網(wǎng)站配置中定義為index.py),經(jīng)過用戶名密碼認證后,進入設(shè)備斷電重啟網(wǎng)頁對遠端錄音終端進行重啟操作。樹莓派web 主文件根據(jù)重啟請求,調(diào)用GPIO 操作函數(shù),控制GPIO的輸出電平,從而控制繼電器觸點動作,實現(xiàn)錄音終端斷電重啟。
圖1 方案原理圖
樹莓派GPIO 針腳定義如表1 所示。
表1 樹莓派GPIO 針腳定義
根據(jù)表1的針腳定義,選用GIPO 0 作為輸出。因此使用2,6,11 號針腳與繼電器(驅(qū)動電壓為直流5 V)連接。其中2 號針腳提供5 V 電壓輸出,與繼電器Vcc 針腳相連;6 號針腳為信號地,與繼電器GND 針腳相連,7 號針腳為GPIO 0 輸出,與繼電器IN 針腳相連,如圖2 所示。
圖2 GPIO 連接示意圖
選用nginx+webpy+fastcgi+flup的組合。
2.1.1 安裝上述應(yīng)用程序
使用如下命令行:
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/ 目錄下),關(guān)于server,location等配置都在default 文件中,這與以往的版本不同。對default 文件進行如下修改:
2.1.3 修改web 主文件屬性
在啟動spawn-fcgi 前將index.py 改為可執(zhí)行,使用以下命令行:
Sudo chmod+x index.py
2.1.4 啟動spawn-fcgi
在樹莓派9002 端口啟動webpy 應(yīng)用,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 增加自啟動功能
為了能讓樹莓派在系統(tǒng)啟動后自動加載fcgi,首先對/etc 目錄下rc.local 文件增加可執(zhí)行權(quán)限。
命令行:sudo chmod+x rc.local[2]
編輯rc.local,在exit 0 行的前面增加2.1.4 中的命令行。
GPIO 控制程序為control.py,作為模塊導(dǎo)入web主文件中。其具備初始化GPIO 和斷電重啟功能。
2.2.1 初始化GPIO
通過initGPIO()函數(shù),選用GPIO 0,設(shè)置GPI0的使用方式為BOARD(該方式參考Raspberry Pi 主板上P1 接線柱的針腳編號。使用該方式的優(yōu)點是無需考慮主板的修訂版本,硬件始終都是可用的狀態(tài),無需從新連接線路和更改代碼),設(shè)置GIPO 0為輸出通道,并輸出低電平(因為選用的繼電器模式在高電平下為釋放,低電平下吸合),使繼電器觸點處于常閉狀態(tài),錄音設(shè)備保持有電狀態(tài)。
2.2.2 斷電重啟
通過調(diào)用powerreboot()函數(shù),將GPIO 0 通道輸出設(shè)置為高電平,釋放繼電器觸點,斷開設(shè)備電源斷開設(shè)備電源,保持斷電3 s,將GPIO 0 通道輸出設(shè)置為低電平,接通設(shè)備電源,進行設(shè)備重啟。
其中pwoerreboot()函數(shù)中主要調(diào)用了GPIO 模塊的以下幾個主要函數(shù):
(1)調(diào)用GPIO.setup(0,GPIO.OUT),將GPIO 0通道設(shè)置為輸出模式。
(2)調(diào)用GPIO.output(0,true),將GPIO 0 通道輸出設(shè)置為高電平,斷開設(shè)備電源。
(3)調(diào)用time.sleep(3),讓斷電保持3 s。
(4)調(diào)用GPIO.output(0,false),將GPIO 0 通道輸出設(shè)置為低電平,接通設(shè)備電源。
編寫web 主文件index.py,將改文件放置于web服務(wù)器根目錄下(即在2.1.2 配置文件設(shè)置的web 根目錄)。
2.3.1 功能
Index.py 文件實現(xiàn)以下幾項主要功能:
(1)導(dǎo)入模塊control.py;(2)用戶登錄校驗;(3)根據(jù)用戶GET 請求,控制GPIO 電平輸出,進行斷電重啟操作。
2.3.2 處理流程
Inder.py 處理流程如圖3 所示。用戶通過訪問web主文件index.py 進入登陸界面,通過密碼認證后,樹莓派開始對GPIO 0 端口進行初始化,并向用戶返回電源重啟操作網(wǎng)頁。當index.py 接收到用戶斷電重啟請求后,調(diào)用powerreboot()函數(shù),控制GPIO 端口的輸出電瓶,完成對控制設(shè)備的斷電重啟操作。
在生產(chǎn)實際運行維護過程中,已多次通過使用樹莓派,對遠程出現(xiàn)死機故障的主機進行斷電重啟,避免了人員趕往變電站現(xiàn)場人工復(fù)位的問題,節(jié)約了故障處理時間和人力資源。與采用智能PDU的技術(shù)方案相比,成本約為前者的1/20,價格優(yōu)勢明顯。缺點是與設(shè)備電源接線稍顯麻煩,且沒有進行工業(yè)化封裝,布線和設(shè)備美觀性上明顯不足。
樹莓派功能強大,設(shè)備運行穩(wěn)定,后續(xù)可進一步進行開發(fā)。比如外接攝像頭,實現(xiàn)對站內(nèi)設(shè)備的圖像監(jiān)控;外接溫濕度傳感器實現(xiàn)溫濕度采集;通過串口對其他運行設(shè)備進行運行工況監(jiān)測和維護等。合理應(yīng)用樹莓派,能給電力通信信息運行維護工作帶來很大便利。
圖3 index.py 處理流程
[1]MAGNUS L H.Python 基礎(chǔ)教程[M].北京:人民郵電出版社,2010:1-3.
[2]SARWAR S M.UNIX 教程[M].北京:機械工業(yè)出版社,2003:179-180.