孫曉楠,劉俊培,班 嵐,張 衛,張洪峰
(北京科技大學天津學院智能制造學院,天津 301830)
某大型電力設備制造公司(以下簡稱公司)生產的并網型光伏逆變器以其性價比高、安裝維護簡單、運行故障率低的優點占有相當的市場占有率。自2000 年公司涉足這一業務后,已有20 多年的逆變器相關領域設計與施工安裝經驗;除此之外,公司光伏事業部長期運行自主研發的光伏電站綜合智能管理平臺(以下簡稱運維平臺)。
運維平臺整體架構設計為前端與后臺兩部分。前端主要用于展示接入運維平臺的逆變器的基本信息、發電運行情況以及報警等信息。前端分為網頁展示端、大屏展示端與手機APP端。后臺處理逆變器與運維平臺之間的通信、光伏電站信息管理等業務。運維平臺不僅可以接入本公司生產的逆變器,也可以接入采用標準通信規約的其他廠家逆變器,其他規約如Q/GDW376.8、IEC60870?5?104、MODBUS等[1?2]。
在經歷多年的深耕后,平臺積累了大量光伏電站與逆變器發電信息的真實數據。近年來,隨著新能源推廣政策的進一步落實,傳統以火力發電為基礎的電網如何消納新能源發電的問題日益凸顯。針對這一問題,各研究機構紛紛建立仿真模型和策略來研究,以真實光伏發電數據為基礎的研究項目顯然在可信性與科學性方面更具有說服力。在此背景下,多家研究機構提出購買使用運維平臺歷史數據的要求。其中,某省級電力科學研究院(以下簡稱電科院)希望購買到其所轄地區內所有光伏發電數據的獨家使用權,且其后續的項目合作計劃可操作性強。在進行綜合考慮后,公司管理層決定先與電科院進行先導項目合作,以期為進一步合作打下基礎。
先導項目的主要作用是雙方技術人員進行溝通,以確定歷史數據的數據、格式等情況。由于數據的使用權尚未轉讓,在考慮后續項目仍有不確定性的情況下,雙方商議由公司一方先行提供具有典型特征的歷史數據樣本,以供電科院分析。最終,公司決定提供電科院感興趣的冀北地區以市、縣二級行政區劃為分類的部分歷史數據。
初步的溝通方案是電科院提出某地的數據需求,公司的研發人員經過授權登錄運維平臺的歷史庫服務器,在歷史庫中直接應用SQL 語句查詢,然后將數據導出存成Excel 文檔,再發給電科院。經過幾次溝通后,雙方均發現初步方案有一定的不足。對于電科院來說,一是公司方操作不可控,原始數據是否經過修改不可知;二是公司對需求的響應時間不可控,有時數小時內可給出結果,有時需要等待幾天,嚴重影響電科院后續工作。對于公司來說,也出現幾點意料之外的情況。首先,電科院提出數據需求的時間是隨機的,公司目前在全力施行多個項目,研發人員不足,對電科院的響應需要臨時抽調人員,項目內進度容易被打斷。然后,由于先導項目合同金額相對較少,公司不希望投入過多資源和精力。其次,即使是公司內部研發人員,經過授權后登錄歷史庫服務器,其操作仍具有一定的安全性風險,應盡量避免。
在進一步溝通后,公司決定研發一款功能和應用權限受限的數據查詢軟件(以下簡稱軟件),以滿足電科院要求,同時避免上述不足。軟件的需求詳列如下:
(1)軟件開發周期盡量短,少占用資源。
(2)查詢地區只限于已商定的冀北地區固定的省、市、縣。
(3)軟件界面盡量簡單實用,數據除可以查看外,也能下載到當地工作電腦。
(4)軟件的查詢功能相對簡單,但安全性策略應完整實現,以方便在后續項目中直接移植。
(5)安全性策略包括:軟件只限于電科院內部應用,IP 受限;軟件秘鑰每七天更新一次,由公司傳送至電科院,每次隨機生成多套秘鑰。
查詢軟件的最終部署情況如圖1所示。查詢軟件部署在電科院的內網,通過隔離裝置B 與外網連接。公司的運維平臺及歷史庫服務器部署在公司內網,位于服務器機房集群中。歷史庫服務器并非只有一臺服務器,由于數據量較大,也為多臺服務器構成的集群。同樣,出于數據安全的考慮,公司內網通過隔離裝置A 與外網做安全性隔離處理。圖中的隔離裝置A/B不單指某臺具體型號的數據隔離裝置,而是泛指兩種不同類型的數據隔離裝置。由于信息安全相關部門對公司和電科院的劃分等級不同,故兩類裝置的隔離策略、軟硬件配置等情況均不同[3?5]。

圖1 軟件部署情況示意圖
隔離裝置B 的配置權限在電科院一方,不屬于查詢軟件設計范圍。隔離裝置A 的權限在公司一方,與查詢軟件相關的安全性策略采用四種。在歷史庫服務器中,部署有秘鑰驗證算法的安全進程小程序;電科院側的秘鑰驗證算法集成到查詢軟件中。詳列如下:
一是IP 地址驗證,雙方商定查詢軟件只能應用在電科院內部,即使經過兩次內外網地址映射后,電科院的網段仍可控制在一定范圍內。IP 驗證通過兩種方式進行:一方面,查詢雙方交互報文的TCP/IP 協議通訊協議的地址,具體編程實現調用Socket 相關函數;另一方面,在查詢軟件每次運行的登錄啟動幀中,對消息體內的IP地址進行二次核對。
二是用戶口令的設置,分為兩層口令設置。外層口令是查詢軟件的登錄用戶及口令,內層口令是歷史庫查詢的用戶及口令。
三是查詢軟件秘鑰的發放。在通過隔離裝置A 的數據流中,采用一定時間內隨機查詢數據流中秘鑰字節的方式。秘鑰內容通過隔離裝置A 中的特定算法給出,每七天生成多套秘鑰,由公司發放至電科院,并配置到查詢軟件中。每套秘鑰分為AB 兩部分,其中A 部分部署在公司的歷史庫服務器,B 部分配置在查詢軟件中。秘鑰的核查分為兩個步驟,即對側驗證解密流程與匹配算法。對側驗證解密流程如下:在秘鑰查詢通信報文中,當請求秘鑰一方收到應答報文后,先用驗證算法對報文進行計算,如果符合規范則進行解密流程,解密出的秘鑰交由下一步匹配算法處理。匹配是指每套秘鑰的AB兩部分,需要經過算法計算是否匹配。在考慮公司內網或電科院內網有可能被非法侵入,為保證在一方被破解的情況下不至于危及另一方,對側驗證解密算法對于秘鑰AB 部分采取不同的計算方式,且只部署對側的算法。即,公司內網側的程序只部署驗證解密秘鑰B 部分,電科院側查詢軟件只部署驗證解密秘鑰A部分。
上述三種安全性策略,由部署在歷史庫服務器中的安全進程與查詢軟件二者共同實現。安全進程設置為守護進程,以避免其退出后造成對側查詢軟件不能應用的情況。
軟件流程設計相對較簡單,如圖2所示。

圖2 流程設計
軟件啟動后,通過初始化階段讀入相關的用戶口令、秘鑰等配置文件;同時讀取本地時間,存入日志。在連接測試階段,主要進行2.1節中安全性相關測試,如果測試未通過,查詢軟件將給出提示信息,由用戶檢查口令、IP、秘鑰的正確性。查詢子流程設計成受限的情況查詢,用戶只能查詢冀北地區市、縣二級行政區劃中部分地區的數據。具體查詢語句的設計用SQL 語言實現,詳見2.3 節。查詢出的數據在軟件界面進行展示,以供人工粗略判斷數據的正確性。在保存數據階段,將查到的數據以CSV格式文件存儲到本地計算機。
數據查詢主要實現在冀北地區選取限定的區域,將SQL 查詢語句集成到軟件中以供用戶使用。在設計具體SQL語句前,圖3中展示的是歷史庫相關數據庫和數據表的結構。由于接入公司的光伏逆變器數量較大,且每日數據存儲仍在增長,故采用參數庫與電量數據庫分別設計的方式。參數庫PVHisPara 相對數據量較少,且變動不頻繁,部署在一臺服務器上。電量數據庫PVHisData相對數據量較大,每日更新大量新存入的數據,分別部署在多臺服務器上。兩類數據庫均管理多個數據表格,具體如圖3所示。

圖3 數據庫的表結構
參數庫中,需要用編程語句查詢的是電站參數表(substpara)和逆變器參數表(invpara)。某光伏電站中,可安裝一臺或多臺光伏逆變器。電站參數表(substpara)中的主鍵是substid,即電站編號;逆變器參數表(invpara)的主鍵是sub?stid和invid,即通過電站編號和逆變器編號能夠定位到某臺具體逆變器信息。圖3中參數庫中另外列出的4 張數據表countypara/citypara/provin?cepara/countrypara 分別是保存縣、地級市、省、國家信息的表,每張表的主鍵是id,即縣編號、地級市編號、省編號、國家編號;另外的desc字段保存相應的地區描述。比如countrypara 中,“id=1 desc=中國” 表示國家參數表中,id 等于1的國家是中國。由于查詢軟件相對邏輯簡單,故人工查詢出所需的冀北地區行政區劃編號。即,“province = 4” 指河北省,“city=(2,3,7,8,10)” 指冀北地區的唐山、承德、張家口、廊坊、秦皇島五個地級市,“county = 11” 指張家口尚義縣。
電量數據庫中涉及到的主要是分鐘數據表,每15 分鐘逆變器上傳運維平臺一次電量數據;為方便存儲及管理,數據庫中按天為單位將所有逆變器的數據存成一張表格。分鐘數據表中的主鍵除逆變器參數表中提到的substid 和invid外,同時設置hm 字段。hm 字段表示記錄電量值的時間,以整型數據格式(int)存儲。存儲的信息是每15分鐘上報的電量數據,故hm的起始值時間是00:00 時刻,hm 設定為0;每次上報數據累加15,每日的24:00時刻,hm設定為1440。
總的來說,數據的查詢分為參數查詢和數據查詢兩類。具體來說,參數查詢可以分為某市、縣電站裝機容量查詢,電站號、逆變器號查詢,電站信息查詢等;數據查詢分為某日、某短時間內的發電信息匯總數據查詢與分鐘發電數據查詢。下文以幾個具體查詢語句為例進行詳細闡述。礙于篇幅原因,只舉出有特定代表性的例子,不對查詢軟件所有功能贅述。
對于冀北地區五市,以縣區為區分標準的匯總裝機容量的查詢語句如下,由于每市所轄的區縣數量各異,故以區縣的編號作為區分標準。對于區縣內的總裝機容量采用統計求和函數SUM 直接計算單站容量(capacity)字段。篩選條件中,useflag =1 表示電站正在使用中。如果電站廢棄,或者正處于建設、維修、待報廢階段,則不在統計范圍內。查詢的結果見表1中展示的唐山地區部分信息。

表1 唐山市區域內電站裝機容量匯總數據
SELECT county, SUM(capacity) FROM PVHisPara.substpara WHERE state = 1 AND country = 1 AND prov?ince = 4 AND city IN(2,3,7,8,10)AND useflag =1 GROUP BY county
如要查詢發電量數據,需先得到電站編號與逆變器編號。比如,如果查詢張家口尚義縣的電站編號,采用如下的SQL 語句。在其中隨機抽取電站編號5329、5738、5834、5835 進行后續數據查詢。
SELECT substid, invid FROM PVHisPara. substpara WHERE state = 1 AND country = 1 AND province = 4 AND city = 7 AND county = 6
查詢某縣的日發電量匯總需要用到子查詢的方式,下例查詢的是唐山遷安縣電站日發電量的分電站匯總信息。data22 字段存儲的日發電量數據。內層子查詢給出電站編號信息,外層查詢2019年X月X日數據表的數據信息。
SELECT substid, sum(data22) FROM PVHisData.data_mininverter2019XXXX WHERE substid IN(SELECT substid FROM PVHisPara. substpara WHERE state = 1 AND country = 1 AND province = 4 AND city = 2 AND county = 11)AND hm = 1440 GROUP BY substid
單日電站數據的查詢只需要查詢具體日期的數據表即可。如要查詢多日期的數據,采用聯合查詢的方式。單條語句查詢張家口尚義縣的電站語句:
SELECT substid,hm,data13,data22 FROM PVHisData.data_mininverter2019XXXX WHERE substid IN (5329,5738, 5834, 5835)
多數據表聯合查詢語句:
SELECTsubstid, inverterid, hm, data13, data22, FROM PVHisData. data_mininverter2019XXXX WHERE substid IN(5329, 5738, 5834, 5835)
UNION ALL
SELECT substid, inverterid, hm, data13, data22,FROM PVHisData. data_mininverter2019XXXX WHERE substid IN(5329, 5738, 5834, 5835)
UNION ALL
SELECT substid, inverterid, hm, data13, data22,FROM PVHisData. data_mininverter2019XXXX WHERE substid IN(5329, 5738, 5834, 5835)
UNION ALL
……
由于合同條款的限制,查詢軟件的界面在文中不做展示,本節只展示查詢到的部分數據;由于數據的敏感性,因而表1和表2中的數據是在真實數據的基礎上做出一定偏移后的結果。在表1中,某些縣(如樂亭縣、遵化縣)的電站數量較少,是因為接入某公司運維平臺的電站數量較少,而非其縣內只建有表中所示數量的光伏電站。

表2 張家口尚義縣某電站日數據
除表1 中所示的某地區匯總數據外,查詢軟件也可以給出尚義縣具體電站的單日電量數據,如表2 所示。表2 中展示了電站ID 是5329的電站中1 號光伏逆變器的15 分鐘間隔的電量數據:在時間一列中,初始時間是0,指代每日的00:00:00 時刻;1440 是每日的結束時間,即24:00:00 時刻;表中1170 時刻后,日發電量保持不變,通過計算后此時刻對應當日的19:30:00時刻,即日落前后,與實際情況相符合。
查詢軟件經過開發測試,在五個工作日后交由電科院進行部署應用。應用過程中,在保證電科院查詢到部分歷史數據的情況下,完整地驗證了三種安全性策略。在雙方進一步溝通后,公司與電科院簽訂了包含公司全部歷史數據使用權限的一系列合同。后續的項目開發中,新軟件的設計思路是一方面將原安全性策略移植到新項目中,另一方面擴展甲方數據查詢的范圍和權限。由于有查詢軟件的基礎,后續工程的開發難度降低、工作量減少。綜上,查詢軟件作為驗證性、先導性項目,較好地實現了預期目的,達到最初設計要求。