綜合能源負(fù)荷數(shù)據(jù)管理與可視化分析系統(tǒng)實(shí)踐)
1. 項(xiàng)目背景園區(qū)綜合能源的“數(shù)據(jù)洪流”為什么難管這幾年分布式光伏、分散式風(fēng)電、儲(chǔ)能、充電樁扎堆往園區(qū)里進(jìn)加上原本就有的空調(diào)、注塑機(jī)、冷水機(jī)組這些大負(fù)荷整個(gè)園區(qū)的能源結(jié)構(gòu)已經(jīng)跟五年前完全不是一個(gè)量級(jí)。我手頭這個(gè)項(xiàng)目來(lái)自某產(chǎn)業(yè)園區(qū)園區(qū)里有十棟廠房、一個(gè)數(shù)據(jù)中心、一片屋頂光伏、兩臺(tái)風(fēng)機(jī)、一套磷酸鐵鋰儲(chǔ)能和幾十個(gè)充電樁。前期最大的痛點(diǎn)不是缺設(shè)備而是數(shù)據(jù)根本對(duì)不上賬。光伏逆變器走的是Modbus TCPPCS儲(chǔ)能變流器又是另一套協(xié)議充電樁走M(jìn)QTT云平臺(tái)配電房里的電表用的是國(guó)網(wǎng)規(guī)約數(shù)據(jù)格式、采集頻率、時(shí)間戳口徑全都不一樣。運(yùn)營(yíng)人員每天要在四五個(gè)系統(tǒng)里來(lái)回切換手動(dòng)拉Excel做日?qǐng)?bào)經(jīng)常出現(xiàn)光伏發(fā)了三千度電儲(chǔ)能那塊卻顯示“未接入”的情況。領(lǐng)導(dǎo)要的是園區(qū)綜合新能源負(fù)荷的整體面貌不是一堆互相矛盾的散點(diǎn)數(shù)據(jù)。這個(gè)項(xiàng)目最終落地的形態(tài)是一套基于Python的園區(qū)綜合新能源負(fù)荷數(shù)據(jù)管理及可視化分析系統(tǒng)。核心解決三件事把多源異構(gòu)數(shù)據(jù)收上來(lái)、統(tǒng)一清洗入庫(kù)建指標(biāo)、用圖表和模型把數(shù)據(jù)變成決策依據(jù)。適合手里有類似園區(qū)能源管理、微電網(wǎng)監(jiān)控、工廠能耗管理需求的開(kāi)發(fā)者或者運(yùn)維團(tuán)隊(duì)參考尤其是剛準(zhǔn)備從Excel表格切換成正規(guī)管理系統(tǒng)的階段。下面我把完整的設(shè)計(jì)思路、關(guān)鍵實(shí)現(xiàn)和踩坑經(jīng)歷展開(kāi)說(shuō)。2. 整體設(shè)計(jì)思路從“數(shù)據(jù)孤島”到“一個(gè)口徑”2.1 數(shù)據(jù)源全景哪些設(shè)備在產(chǎn)生數(shù)據(jù)動(dòng)手之前先不急著寫代碼。我花了兩周時(shí)間把所有需要接入的設(shè)備過(guò)了三遍列出一張數(shù)據(jù)源清單這是整個(gè)項(xiàng)目的地基。光伏系統(tǒng)這一塊逆變器分散在不同廠房的屋頂每臺(tái)設(shè)備能提供的有功功率、日發(fā)電量、直流側(cè)電壓電流、組件溫度、輻照度采集頻率一般是5秒到1分鐘走的是Modbus TCP規(guī)約基本是廠家私有地址表需要在文檔里逐個(gè)對(duì)照。風(fēng)機(jī)那邊是兩臺(tái)小型風(fēng)力發(fā)電機(jī)控制器提供風(fēng)速、轉(zhuǎn)速、有功功率、累計(jì)發(fā)電量采集頻率是秒級(jí)協(xié)議同樣繞不開(kāi)Modbus。儲(chǔ)能系統(tǒng)要看BMS和PCS兩類數(shù)據(jù)BMS給SOC、SOH、單體電池電壓、溫度、充放電電流PCS給三相有功無(wú)功、功率因數(shù)、運(yùn)行狀態(tài)。BMS數(shù)據(jù)類型雜有的字段是浮點(diǎn)有的是短整型縮放系數(shù)還不一樣解析時(shí)得特別小心。配電房電表是數(shù)據(jù)管理里最基礎(chǔ)也最核心的一塊要按15分鐘間隔采集尖峰平谷各時(shí)段的正向有功電度量、三相電壓電流、總功率、功率因數(shù)走的是IEC 60870-5-104規(guī)約需要跟電力公司協(xié)商遙測(cè)點(diǎn)表。充電樁走M(jìn)QTT每臺(tái)樁上報(bào)充電狀態(tài)、實(shí)時(shí)功率、累計(jì)充電量頻率不固定峰時(shí)3秒一包閑時(shí)30秒一包而且上行的JSON字段名經(jīng)常變。把清單列出來(lái)之后要做一件事給每個(gè)測(cè)點(diǎn)分配全局唯一的點(diǎn)號(hào)規(guī)則比如PV-01-P-Q、ESS-01-PCS-P后續(xù)所有數(shù)據(jù)存儲(chǔ)和展示都基于這套命名。這一步不做后面做可視化時(shí)會(huì)非常痛苦。2.2 為什么是Python快速迭代優(yōu)先的務(wù)實(shí)選擇我見(jiàn)過(guò)不少團(tuán)隊(duì)一上來(lái)就要用Java搭微服務(wù)或者用C寫采集程序但對(duì)于園區(qū)綜合能源這類規(guī)模在千級(jí)測(cè)點(diǎn)以下、邏輯偏重分析和展示的項(xiàng)目Python反而是最優(yōu)解。第一是生態(tài)pymodbus、paho-mqtt、有第三方庫(kù)直接支持104規(guī)約省掉大量底層協(xié)議開(kāi)發(fā)時(shí)間。第二是數(shù)據(jù)處理快pandas在幾萬(wàn)行時(shí)序數(shù)據(jù)上做重采樣、對(duì)齊、透視就是幾條命令的事?lián)Q別的語(yǔ)言要寫不少代碼。第三是生態(tài)里的可視化庫(kù)足夠豐富pyecharts、plotly、streamlit都可以直接做數(shù)據(jù)分析界面不必引入前后端分離的重型架構(gòu)。穩(wěn)定性的顧慮確實(shí)存在。我采用的策略是采集調(diào)度用Python但把關(guān)鍵任務(wù)寫成常駐服務(wù)加上超級(jí)看門狗異常重啟、斷點(diǎn)續(xù)采都在代碼層處理。項(xiàng)目運(yùn)行一年多實(shí)際體驗(yàn)下來(lái)掉線問(wèn)題主要出在網(wǎng)絡(luò)和設(shè)備不在Python本身。2.3 系統(tǒng)架構(gòu)分層四層各司其職系統(tǒng)按采集層、存儲(chǔ)層、處理分析層、展示層來(lái)劃分。采集層部署在園區(qū)邊緣的一臺(tái)工控機(jī)上跑數(shù)據(jù)采集服務(wù)和設(shè)備管理模塊。存儲(chǔ)層選的是關(guān)系庫(kù)加時(shí)序庫(kù)的混合方案MySQL存設(shè)備臺(tái)賬、用戶信息、報(bào)表配置這類結(jié)構(gòu)化數(shù)據(jù)時(shí)序數(shù)據(jù)放TDengine專門存測(cè)點(diǎn)歷史數(shù)據(jù)帶自動(dòng)保留策略和降采樣功能。這里強(qiáng)調(diào)一下負(fù)荷數(shù)據(jù)是典型的時(shí)序數(shù)據(jù)如果全塞MySQL單表幾百萬(wàn)行之后查詢就會(huì)明顯變慢時(shí)序庫(kù)按時(shí)間分區(qū)聚合查詢能夠做到秒級(jí)返回。處理分析層負(fù)責(zé)數(shù)據(jù)治理、指標(biāo)計(jì)算、負(fù)荷預(yù)測(cè)。展示層用開(kāi)源的Grafana做實(shí)時(shí)監(jiān)控大屏同時(shí)在內(nèi)部跑一套Streamlit做交互式分析頁(yè)面支持管理人員自助選時(shí)間、選設(shè)備、看趨勢(shì)。架構(gòu)定完之后我就開(kāi)始搭數(shù)據(jù)模型。時(shí)序表的設(shè)計(jì)非常簡(jiǎn)單但關(guān)鍵每張表以時(shí)間戳、測(cè)點(diǎn)ID、數(shù)值、質(zhì)量戳為核心字段設(shè)備維表放點(diǎn)號(hào)對(duì)應(yīng)關(guān)系統(tǒng)計(jì)表放日/月匯總指標(biāo)。質(zhì)量戳是容易忽略的細(xì)節(jié)如果不對(duì)采集值的有效性做標(biāo)記后面統(tǒng)計(jì)出來(lái)的結(jié)果被臟數(shù)據(jù)污染了都不知道。3. 核心實(shí)現(xiàn)細(xì)節(jié)數(shù)據(jù)治理與折標(biāo)計(jì)算3.1 數(shù)據(jù)鏈路搭建Modbus、104規(guī)約與MQTT的多協(xié)議接入數(shù)據(jù)采集的第一步是把各家設(shè)備的數(shù)據(jù)“翻譯”成統(tǒng)一的時(shí)間序列格式。Modbus這一塊我建議直接用pymodbus庫(kù)的異步客戶端按設(shè)備分組輪詢超時(shí)設(shè)置不要低于3秒否則現(xiàn)場(chǎng)設(shè)備響應(yīng)慢一點(diǎn)就會(huì)誤判離線。104規(guī)約稍微復(fù)雜一點(diǎn)要注意總召喚、時(shí)鐘同步、遙測(cè)變位幾個(gè)機(jī)制。我踩過(guò)的一個(gè)坑是104鏈路長(zhǎng)時(shí)間無(wú)數(shù)據(jù)后自動(dòng)斷開(kāi)處理辦法是定時(shí)發(fā)送測(cè)試幀同時(shí)監(jiān)聽(tīng)鏈路狀態(tài)事件斷開(kāi)后自動(dòng)重建連接重建間隔依次遞增5秒/30秒/60秒最多5次避免設(shè)備端扛不住頻繁重連。MQTT這一塊反而輕松一些paho-mqtt訂閱主題就行。但要注意充電樁上行的JSON不穩(wěn)定有時(shí)候字段名帶前后空格有時(shí)單位變了所以要在解析層做一層“保險(xiǎn)”先用schema校驗(yàn)再入庫(kù)不通過(guò)的消息進(jìn)原始數(shù)據(jù)緩沖區(qū)絕不直接往庫(kù)里寫。所有采集到的數(shù)據(jù)統(tǒng)一轉(zhuǎn)換成epoch毫秒時(shí)間戳加上浮點(diǎn)值的標(biāo)準(zhǔn)結(jié)構(gòu)然后寫入TDengine。寫入性能這關(guān)我測(cè)下來(lái)沒(méi)問(wèn)題常規(guī)的工控機(jī)配置下可以穩(wěn)定處理上千個(gè)測(cè)點(diǎn)每秒的寫入。3.2 數(shù)據(jù)清洗剔除垃圾填平缺失采集鏈路搭起來(lái)之后會(huì)發(fā)現(xiàn)數(shù)據(jù)質(zhì)量參差不齊。常見(jiàn)問(wèn)題包括光伏功率瞬間跳到額定功率的十倍又跳回來(lái)這是通訊干擾電表某個(gè)時(shí)段電量突變?yōu)榱氵@是規(guī)約解析時(shí)字節(jié)錯(cuò)位充電樁長(zhǎng)時(shí)間沒(méi)有新數(shù)據(jù)這是樁離線了。我的清洗規(guī)則分三層。第一層是死值檢測(cè)連續(xù)半小時(shí)數(shù)值完全不變的測(cè)點(diǎn)打上凍結(jié)標(biāo)記。第二層是越限檢測(cè)超過(guò)設(shè)備額定值上下限的數(shù)據(jù)直接剔除。第三層是突變檢測(cè)相鄰兩個(gè)點(diǎn)的跳變超過(guò)額定容量的30%時(shí)認(rèn)為是異常用前向值做填充。缺失值的處理也不能一刀切。光伏和風(fēng)電的短時(shí)缺失做線性插值但超過(guò)2小時(shí)的長(zhǎng)時(shí)間缺失不做插值直接標(biāo)記數(shù)據(jù)空洞因?yàn)樾履茉辞€依賴輻照和風(fēng)速用前后均值去填會(huì)誤導(dǎo)后續(xù)的預(yù)測(cè)模型。每天凌晨跑一次批處理把當(dāng)天全量數(shù)據(jù)過(guò)一遍清洗邏輯生成一份數(shù)據(jù)質(zhì)量報(bào)告列出哪些設(shè)備的掉線率、異常率分別是多少這一點(diǎn)我覺(jué)得比實(shí)時(shí)清洗更有價(jià)值因?yàn)檫\(yùn)維人員可以按報(bào)告去現(xiàn)場(chǎng)排查設(shè)備。3.3 負(fù)荷統(tǒng)計(jì)口徑與折標(biāo)計(jì)算負(fù)荷數(shù)據(jù)管理里最關(guān)鍵的一步是統(tǒng)一統(tǒng)計(jì)口徑。園區(qū)里有總進(jìn)線、各廠房分表、光伏發(fā)電、儲(chǔ)能充放、充電樁如果各看各的永遠(yuǎn)算不清“園區(qū)實(shí)際從電網(wǎng)買了多少電”。我采用的上游節(jié)點(diǎn)平衡法是實(shí)際外購(gòu)電力 總進(jìn)線正向電量 ? 光伏自發(fā)自用電量 ? 儲(chǔ)能放電電量 儲(chǔ)能充電電量注意儲(chǔ)能充電時(shí)消耗的是園區(qū)內(nèi)部電量所以要加回來(lái)。充電樁的用電如果是園區(qū)運(yùn)營(yíng)的要并入負(fù)荷側(cè)統(tǒng)計(jì)如果是第三方運(yùn)營(yíng)商獨(dú)立計(jì)費(fèi)的則從園區(qū)總負(fù)荷中剔除避免重復(fù)計(jì)算。統(tǒng)計(jì)周期按15分鐘、小時(shí)、日、月四級(jí)聚合。15分鐘粒度對(duì)應(yīng)電力市場(chǎng)的基本計(jì)量周期日、月粒度對(duì)應(yīng)管理考核。每個(gè)周期下面計(jì)算一組核心指標(biāo)最大負(fù)荷、最小負(fù)荷、平均負(fù)荷、負(fù)荷率、峰谷差、新能源滲透率、儲(chǔ)能充放電量、碳排放量。新能源滲透率的定義要提前跟運(yùn)營(yíng)方對(duì)清楚。我采用的口徑是光伏發(fā)電量風(fēng)電發(fā)電量÷總用電量?jī)?chǔ)能充電量這個(gè)定義同時(shí)考慮了儲(chǔ)能充電對(duì)新能源的消納。這里提醒一下不同團(tuán)隊(duì)對(duì)滲透率的定義可能完全不同有的只算光伏對(duì)負(fù)荷的占比有的算法還要扣掉棄光量項(xiàng)目開(kāi)始之前一定先確認(rèn)口徑。折標(biāo)計(jì)算方面要做兩類換算。一類是標(biāo)準(zhǔn)煤折算按每千瓦時(shí)電力消費(fèi)340克標(biāo)準(zhǔn)煤當(dāng)量值計(jì)算另一類是碳排放折算目前我用的系數(shù)是0.5703噸二氧化碳每兆瓦時(shí)雖然各地電網(wǎng)排放因子一直在更新但系統(tǒng)結(jié)構(gòu)上要做成可配置項(xiàng)這樣每年調(diào)整因子時(shí)只需改數(shù)據(jù)庫(kù)配置不用動(dòng)代碼。4. 可視化分析系統(tǒng)的落地實(shí)戰(zhàn)4.1 實(shí)時(shí)監(jiān)控大屏從“一鍋粥”到“一分鐘看懂全局”可視化是整個(gè)項(xiàng)目最容易出效果的部分也是領(lǐng)導(dǎo)最關(guān)心的部分。我用Grafana搭了實(shí)時(shí)監(jiān)控大屏數(shù)據(jù)源直連TDengine頁(yè)面按生產(chǎn)、能耗、新能源三個(gè)維度組織。最上面一排展示實(shí)時(shí)數(shù)據(jù)卡片——瞬時(shí)總負(fù)荷、光伏實(shí)時(shí)功率、儲(chǔ)能充放電功率、充電樁總功率。中間區(qū)域放負(fù)荷曲線近24小時(shí)和新能源出力曲線左側(cè)是設(shè)備運(yùn)行狀態(tài)列表有故障直接紅色告警。右下角是今日關(guān)鍵指標(biāo)的KPI匯總當(dāng)日總用電量、光伏發(fā)電量、新能源滲透率、等效減排量。這里我講一個(gè)設(shè)計(jì)細(xì)節(jié)顏色語(yǔ)義必須統(tǒng)一。功率類曲線用藍(lán)色表示用電、綠色表示發(fā)電、橙色表示儲(chǔ)能充電、紫色表示儲(chǔ)能放電光看顏色就能知道系統(tǒng)在“充”還是在“放”。設(shè)備狀態(tài)用綠/黃/紅三色表示正常/告警/離線絕不引入第四種顏色因?yàn)榇笃潦菕煸谶\(yùn)營(yíng)辦公室墻上的離遠(yuǎn)看時(shí)只有強(qiáng)對(duì)比色才有效。大屏的數(shù)據(jù)刷新策略是前端輪詢5秒鐘一次對(duì)TDengine來(lái)說(shuō)這個(gè)查詢壓力完全可以接受。如果測(cè)點(diǎn)數(shù)量繼續(xù)增長(zhǎng)可以改用Grafana的按時(shí)間分區(qū)查詢優(yōu)化但要避免疊加聚合查詢太頻繁否則前端會(huì)明顯卡頓。4.2 交互式分析報(bào)表讓運(yùn)營(yíng)人員自助取數(shù)光有大屏不夠運(yùn)營(yíng)人員更常問(wèn)的是“上個(gè)月3號(hào)晚上空調(diào)用電異常高是什么原因”“A廠房的負(fù)載率和B廠房比是不是偏高”這些答案需要靈活的組合查詢。我用Streamlit開(kāi)發(fā)了一套交互式分析頁(yè)面提供三個(gè)核心功能。多條件組合查詢頁(yè)面用戶可選設(shè)備類型、廠房、時(shí)間范圍查詢結(jié)果自動(dòng)生成曲線圖和明細(xì)表并且支持一鍵導(dǎo)出Excel。指標(biāo)對(duì)比分析頁(yè)面把不同廠房、不同設(shè)備的核心指標(biāo)并列展示自動(dòng)計(jì)算排名和超限告警。碳排放專題頁(yè)面按月度展示園區(qū)總排放量、各能源類型貢獻(xiàn)占比以及減排趨勢(shì)。Streamlit的組件生態(tài)做這種內(nèi)部工具非常順手但要注意頁(yè)面中每次篩選條件變動(dòng)都會(huì)重新執(zhí)行數(shù)據(jù)查詢和繪圖數(shù)據(jù)量大時(shí)會(huì)有明顯等待感。我加了st.cache_data緩存裝飾器同一查詢條件的結(jié)果緩存兩分鐘體驗(yàn)改善很多。4.3 負(fù)荷預(yù)測(cè)從“拍腦袋”到“模型輔助”項(xiàng)目中期運(yùn)營(yíng)方提出一個(gè)新需求能不能預(yù)測(cè)未來(lái)幾天的負(fù)荷目的是幫他們決定儲(chǔ)能滿充滿放的策略時(shí)段以及要不要參與需求側(cè)響應(yīng)。我調(diào)研之后確定方案輕量級(jí)梯度提升模型加滾動(dòng)預(yù)測(cè)。模型特征選的是溫度、濕度、氣壓、輻照度、是否工作日、是否節(jié)假日、過(guò)去7天同時(shí)刻負(fù)荷。天氣數(shù)據(jù)從公開(kāi)氣象接口獲取歷史負(fù)荷數(shù)據(jù)直接查TDengine。數(shù)據(jù)訓(xùn)練集用最近90天每15分鐘一個(gè)樣本點(diǎn)預(yù)測(cè)未來(lái)1小時(shí)到24小時(shí)的負(fù)荷曲線。這里強(qiáng)烈建議不要一開(kāi)始就上LSTM之類的深度學(xué)習(xí)模型。園區(qū)負(fù)荷的周期性明顯光照、溫度、工作日節(jié)律是主要影響因素梯度提升模型已經(jīng)能把MAPE壓到8%以內(nèi)而且訓(xùn)練只需幾秒不需要GPU。預(yù)測(cè)結(jié)果入庫(kù)后我在Grafana里用虛線展示預(yù)測(cè)曲線和實(shí)時(shí)的實(shí)績(jī)曲線疊加偏差太遠(yuǎn)時(shí)觸發(fā)提醒讓運(yùn)營(yíng)人員意識(shí)到可能出現(xiàn)了異常用電或者設(shè)備故障。5. 項(xiàng)目難點(diǎn)復(fù)盤與排錯(cuò)經(jīng)5.1 時(shí)序庫(kù)與關(guān)系庫(kù)的選型依據(jù)選型時(shí)我在TDengine、InfluxDB、TimescaleDB之間做過(guò)一番對(duì)比。園區(qū)項(xiàng)目的數(shù)據(jù)量級(jí)在每天幾十萬(wàn)行遠(yuǎn)沒(méi)到大數(shù)據(jù)量級(jí)三者在性能上都?jí)蛴谜嬲牟町愒谟谶\(yùn)維成本和生態(tài)適配。TDengine的優(yōu)勢(shì)是自帶超級(jí)表、分區(qū)、自動(dòng)建庫(kù)建表對(duì)中文文檔友好支持標(biāo)準(zhǔn)SQL數(shù)據(jù)保留策略可以直接配置部署時(shí)就是一個(gè)二進(jìn)制文件加一個(gè)taosAdapter后續(xù)也不需要單獨(dú)運(yùn)維分布式集群。InfluxDB生態(tài)成熟flux查詢語(yǔ)言功能強(qiáng)但和Grafana對(duì)接時(shí)對(duì)中文支持的體驗(yàn)一般。TimescaleDB是PostgreSQL擴(kuò)展功能極強(qiáng)但資源占用偏重對(duì)這臺(tái)園區(qū)邊緣工控機(jī)來(lái)說(shuō)有點(diǎn)奢侈。我最終選了TDengine因?yàn)樗罘稀霸O(shè)備測(cè)點(diǎn)管理”這個(gè)場(chǎng)景。用超級(jí)表加子表的方式每個(gè)測(cè)點(diǎn)一張子表大量測(cè)點(diǎn)共享統(tǒng)一表結(jié)構(gòu)。查詢時(shí)只要指定時(shí)間范圍和測(cè)點(diǎn)標(biāo)簽就能精準(zhǔn)取數(shù)聚合速度確實(shí)比MySQL快很多。5.2 斷點(diǎn)續(xù)采與數(shù)據(jù)補(bǔ)采機(jī)制數(shù)據(jù)采集里最容易丟數(shù)的是網(wǎng)絡(luò)瞬斷和設(shè)備重啟。我做了兩重保險(xiǎn)。第一重是本地緩存。采集進(jìn)程拿到數(shù)據(jù)后先寫本地SQLite緩沖再異步轉(zhuǎn)存TDengine。如果TDengine或者網(wǎng)絡(luò)不可用數(shù)據(jù)滯留在SQLite中恢復(fù)后按時(shí)間順序補(bǔ)傳。這是比較樸素的“先落地再上報(bào)”思路。第二重是定時(shí)補(bǔ)采。每天凌晨3點(diǎn)檢查昨天各測(cè)點(diǎn)的數(shù)據(jù)完整率低于90%的測(cè)點(diǎn)根據(jù)點(diǎn)號(hào)自動(dòng)重發(fā)采集指令補(bǔ)數(shù)。104規(guī)約的電表歷史數(shù)據(jù)支持按日期召喚Modbus設(shè)備需要讀累計(jì)量的就回讀后做差值計(jì)算。補(bǔ)采結(jié)果生成補(bǔ)采日志方便追溯。這些邏輯說(shuō)起來(lái)簡(jiǎn)單真正落地時(shí)要注意斷點(diǎn)續(xù)傳的冪等性同一時(shí)間段的數(shù)據(jù)可能被寫入兩次所以時(shí)間序列表的主鍵必須包含時(shí)間戳加測(cè)點(diǎn)ID。TDengine寫入相同時(shí)間戳同一測(cè)點(diǎn)時(shí)會(huì)自動(dòng)覆蓋正好利用這個(gè)特性實(shí)現(xiàn)了冪等。5.3 夏令時(shí)、時(shí)區(qū)與時(shí)間戳的坑做能源系統(tǒng)最容易踩的坑全在時(shí)間上。最開(kāi)始采集的數(shù)據(jù)直接用本地時(shí)區(qū)的字符串時(shí)間入庫(kù)結(jié)果跨天統(tǒng)計(jì)時(shí)老是不準(zhǔn)找了一天才發(fā)現(xiàn)是時(shí)區(qū)換算的問(wèn)題?,F(xiàn)在的統(tǒng)一約定是數(shù)據(jù)入庫(kù)全部使用無(wú)時(shí)區(qū)的epoch毫秒時(shí)間戳展示時(shí)才轉(zhuǎn)換為本地時(shí)區(qū)。任何涉及跨天、跨月、跨年的統(tǒng)計(jì)任務(wù)都基于UTC時(shí)間做切片再在展示層用Asia/Shanghai時(shí)區(qū)渲染。如果現(xiàn)場(chǎng)服務(wù)器設(shè)置了自動(dòng)時(shí)區(qū)同步還要考慮夏令時(shí)切換的場(chǎng)景好在國(guó)內(nèi)沒(méi)有夏令時(shí)但服務(wù)器時(shí)鐘漂移還是會(huì)有所以每日對(duì)時(shí)任務(wù)必須存在NTP同步周期設(shè)在30分鐘一次比較穩(wěn)。5.4 常見(jiàn)問(wèn)題速查表項(xiàng)目上線到現(xiàn)在不斷遇到問(wèn)題、解決問(wèn)題這里整理一份速查表對(duì)后來(lái)的實(shí)施者幫助最大。問(wèn)題現(xiàn)象可能原因處理方案某個(gè)設(shè)備數(shù)據(jù)長(zhǎng)時(shí)間不更新設(shè)備離線或采集線程卡死檢查鏈路心跳采集腳本加看門狗自動(dòng)重啟光伏實(shí)時(shí)功率出現(xiàn)負(fù)值逆變器夜間待機(jī)消耗或坐標(biāo)反了小于設(shè)備空載閾值的數(shù)據(jù)置零處理電表電量突增數(shù)十倍規(guī)約解析時(shí)字節(jié)錯(cuò)位校驗(yàn)字節(jié)長(zhǎng)度和CRC異常值剔除儲(chǔ)能SO C跳變超過(guò)10%BMS凍結(jié)數(shù)據(jù)未過(guò)濾對(duì)非穩(wěn)態(tài)數(shù)據(jù)進(jìn)行狀態(tài)過(guò)濾充電樁報(bào)文頻繁丟失上行JSON字段名改動(dòng)或?yàn)榭赵鲈O(shè)schema校驗(yàn)和字段映射表預(yù)測(cè)曲線偏差過(guò)大天氣數(shù)據(jù)更新失敗設(shè)置天氣數(shù)據(jù)獲取失敗時(shí)自動(dòng)跳過(guò)預(yù)測(cè)Grafana圖例單位混亂數(shù)據(jù)庫(kù)中不同表單位不一致在設(shè)備臺(tái)賬中強(qiáng)制維護(hù)單位字段展示時(shí)統(tǒng)一轉(zhuǎn)換6. 項(xiàng)目帶來(lái)的實(shí)際價(jià)值與擴(kuò)展空間系統(tǒng)上線到現(xiàn)在半年多最直接的變化是日?qǐng)?bào)不用人工做了運(yùn)營(yíng)人員打開(kāi)系統(tǒng)就能看到昨天園區(qū)總共用了多少電、光伏發(fā)了多少電、儲(chǔ)能充放了幾輪、折算碳排放是多少。運(yùn)維效率提升非常明顯以前查一個(gè)異常數(shù)據(jù)要翻三個(gè)系統(tǒng)現(xiàn)在一張大屏加一個(gè)分析頁(yè)面就夠。更關(guān)鍵的是數(shù)據(jù)讓決策有了依據(jù)。運(yùn)營(yíng)方根據(jù)光伏出力和負(fù)荷預(yù)測(cè)曲線調(diào)整了儲(chǔ)能的充放電策略把儲(chǔ)能的峰谷套利收益提高了約15%。某棟廠房負(fù)載率長(zhǎng)期偏低之后運(yùn)營(yíng)方重新規(guī)劃了部分產(chǎn)線的運(yùn)行班次高峰負(fù)荷明顯削低。這些改進(jìn)放在以前靠的是行政命令和經(jīng)驗(yàn)現(xiàn)在數(shù)據(jù)擺在那里各部門都認(rèn)可。這套系統(tǒng)的架構(gòu)也預(yù)留了擴(kuò)展空間。目前負(fù)荷預(yù)測(cè)用的是梯度提升模型后續(xù)可以接入更細(xì)粒度的人工智能時(shí)序模型來(lái)提升精度。如果園區(qū)未來(lái)參與電力市場(chǎng)交易這套系統(tǒng)可以直接擴(kuò)展電力交易輔助決策模塊。還有一個(gè)方向是設(shè)備的健康度評(píng)估目前已經(jīng)有采集數(shù)據(jù)積累下一步可以基于電池內(nèi)阻變化、光伏組件衰減率做預(yù)測(cè)性維護(hù)。架構(gòu)上留了余地業(yè)務(wù)上也可以隨著數(shù)據(jù)積累長(zhǎng)出新的應(yīng)用。比如把充電樁數(shù)據(jù)和車輛到達(dá)規(guī)律結(jié)合起來(lái)做充電調(diào)度優(yōu)化把光伏、儲(chǔ)能、負(fù)荷和天氣數(shù)據(jù)整合成園區(qū)微電網(wǎng)的智能控制依據(jù)。整個(gè)系統(tǒng)相當(dāng)于為園區(qū)綜合新能源管理鋪好了數(shù)字底座后續(xù)每一塊業(yè)務(wù)增長(zhǎng)都直接在這個(gè)底座上長(zhǎng)出來(lái)。7. 個(gè)人實(shí)踐體會(huì)與建議這個(gè)項(xiàng)目做下來(lái)最深的體會(huì)是數(shù)據(jù)管理系統(tǒng)的難點(diǎn)從來(lái)不在寫代碼而在對(duì)現(xiàn)場(chǎng)業(yè)務(wù)的理解和數(shù)據(jù)口徑的統(tǒng)一。我剛接手時(shí)運(yùn)營(yíng)方給的需求只有一句話“把數(shù)據(jù)都接上來(lái)看看”。如果沒(méi)有前期對(duì)每一類設(shè)備、每一條協(xié)議、每一項(xiàng)業(yè)務(wù)指標(biāo)的調(diào)研和梳理后面系統(tǒng)做得再漂亮也只是樣子貨。給后來(lái)者幾個(gè)實(shí)用的建議數(shù)據(jù)點(diǎn)號(hào)的全局規(guī)劃一定要先做哪怕前期花兩天時(shí)間也是值得的現(xiàn)場(chǎng)的克勞德協(xié)議文檔資料往往不全一定要和設(shè)備供應(yīng)商反復(fù)核對(duì)寄存器地址表系統(tǒng)開(kāi)發(fā)過(guò)程中每個(gè)統(tǒng)計(jì)指標(biāo)都要讓業(yè)務(wù)方簽字確認(rèn)口徑避免推翻重做。最后建議所有沒(méi)做過(guò)類似項(xiàng)目的人不要一開(kāi)始就追求大而全的微服務(wù)架構(gòu)。先跑通一條數(shù)據(jù)完整鏈路采集、清洗、入庫(kù)、看板再逐步添加分析模塊實(shí)踐下來(lái)這條路是走得最穩(wěn)的。