王紅剛,王征風,王英強,付耀鋒
(1.西安思源學院,陜西 西安 710038;2.西北有色金屬研究院,陜西 西安 710016)
2016年2月,國家發展改革委、國家能源局、工業和信息化部聯合制定的《關于推進“互聯網+”智慧能源發展的指導意見》中提出,互聯網+“能源”將使用先進的傳感器、控制和軟件應用程序,將能源生產端、能源傳輸端、能源消費端的數以億計的設備、機器、系統連接起來,形成能源互聯網[1]。能源互聯網通過整合各行業數據,進行大數據分析,打通并優化能源生產和能源消費端的運作效率,使需求和供應將可以進行隨時的動態調整。
海南省瓊海市由于改革步伐的加快,農業加工產業發展較快,特別是當地特色支柱產業檳榔加工業發展更快。燃氣是檳榔加工業的主要能源,但是檳榔加工廠安全基礎設施數字化、智能化建設比較緩慢,不能滿足檳榔加工業飛快發展的需求,嚴重影響著檳榔加工廠的安全保障[2]。
JEECG是一款基于代碼生成器的智能開發平臺[3],采用Java語言,支持敏捷開發,使開發者專注于具體業務的開發,短時間內構建企業應用,同時保證了系統的復用性和二次開發特性,其越來越受到開發者的歡迎。
為此,文章提出了基于JEECG的燃氣壓力監測系統框架,以MYSQL為數據存儲模式,采用面向服務分層架構和組件化思想,提升了燃氣壓力監測平臺的通用性和可維護性。
燃氣壓力監測系統框架如圖1所示,分為基礎設施層、數據層、接口層、應用支撐層、應用服務層、門戶層等,同時通過一個統一的安全保障體系和標準規范體系來保障數據通信的安全。
圖1 燃氣壓力監測系統總體框架
各層的主要功能如下:
基礎設施層主要為燃氣壓力監測系統提供硬件和軟件運行環境。
數據層采用MySQL數據庫,存儲用戶信息、設備基本信息、設備地理位置、設備狀態信息、設備異常信息、壓力數據信息、設備預警信息等,作為本系統的基礎數據。
接口層包含業務接口、數據接口,其中業務接口進行業務數據的邏輯算法設計,完成了壓力數據協議解析等復雜數據操作接口,為應用支撐層提供業務應用支持。數據接口實現DAO(data access object)的設計和開發,將所有對數據庫的訪問操作抽象封裝在一系列的API中[4-5],供業務應用使用。
應用支撐層是整體應用系統建設的基礎保障。根據本平臺的需求,進行了面向服務體系架構設計,實現了相關應用組件[6-7],包括GIS服務、消息服務、安全服務、編碼解碼、報表工具、查詢引擎、下發指令等應用組件。
應用服務層主要包含燃氣壓力監測系統的8個子系統,包括設備管理子系統、區域信息管理子系統、參數信息管理子系統、指令管理子系統、實時壓力監測子系統、報表管理子系統、歷史數據分析子系統、數據采集子系統等。
門戶層主要包含的是一組具有相同標準和相同規范體系的網站群[8]。它涵蓋了主站、各級子網站以及移動終端網站等。同時門戶層為應用服務層的不同應用提供信息資源的不同表現形式。
系統在對海南省瓊海市檳榔加工業燃氣使用情況調查的基礎上,結合智慧能源行業的特點,做了詳細的需求分析。燃氣壓力監測系統設計的主要使用者包括系統管理員、壓力監測人員、設備維護人員。其中,系統管理員可以在系統中進行菜單信息管理、用戶信息管理、角色信息管理、數據再點維護、參數信息維護等。壓力監測人員完成系統核心功能的管理,主要包含實時壓力監測、歷史壓力數據分析、設備指令下發、數據采集、實時壓力報警、壓力數據報表等。設備維護人員實現對設備基本信息管理、設備狀態信息管理、區域信息管理、區域負責人管理等。
系統主要用例圖如圖2所示。
圖2 燃氣壓力監測系統主要用例圖
燃氣壓力監測系統包括設備管理子系統、區域信息管理子系統、參數信息管理子系統、指令管理子系統、實時壓力監測子系統、報表管理子系統、歷史數據分析子系統、數據采集子系統等,功能模塊如圖3所示。
(1)設備管理子系統:該功能借助百度地圖實現燃氣壓力監測系統中設備的添加、修改、刪除等。利用百度地圖獲取設備安裝的經度、緯度和具體的位置名稱,并且在地圖實現按照區、街道辦等準確定位。
(2)區域信息管理子系統:該功能借助百度地圖實現區域地理位置劃分,并在地圖上進行地理范圍標注,給每個區域范圍指定相應的設備維護人員。
(3)參數管理子系統:該子系統實現對壓力監測設備基本參數的設置,包括實時壓力上限、實時壓力下限、電壓上限、電壓下限、發送數據時間間隔等。
(4)指令管理子系統:該子系統實現對壓力監測設備的遠程操作,壓力監測人員可以根據需要修改設備的參數數據,主要包含設備的開關狀態、壓力數據采集時間間隔、壓力報警閾值等。
(5)壓力監測子系統:該功能實現對實時壓力的管理,并對實時壓力進行分析,判斷是否在正常壓力范圍內。
(6)歷史數據分析子系統:該功能實現對每個設備所產生的歷史數據進行樣本統計分析,從而確定該設備采集數據時間間隔等指標。
(7)報表管理子系統:該功能負責對解碼后的壓力數據進行分析,產生實時動態曲線變化圖,實時狀態圖,報表等。
(8)數據采集子系統:該功能負責從中國電信物聯網開放平臺獲取實時壓力數據,并將數據存放到燃氣壓力監控系統相應數據表中。
圖3 燃氣壓力監測系統功能模塊圖
NB-IoT設備和中國電信物聯網開放平臺之間采用CoAP協議通訊,CoAP消息的payload為應用層數據,應用層數據的格式由設備自行定義[9]。由于NB-IoT設備一般對省電要求較高,所以應用層數據一般采用二進制格式或者tlv格式。設備廠商需要提供編解碼插件,平臺負責調用編解碼插件,實現二進制消息轉Json格式的功能,以提供應用服務器使用[10]。
另外,Profile文件定義了該Json格式的具體內容,因此編解碼插件開發前需要先編寫設備的Profile文件。在Profile文件中主要描述一款設備的能力信息,包含該設備的識別屬性和提供的服務(功能)列表,其中設備型號識別屬性:設備類型、廠商、型號、協議類型。
服務列表:提供具體的功能服務說明列表[11-12]。編碼解碼插件開發流程如圖4所示。
圖4 編解碼插件開發流程
該燃氣壓力監測系統主要采用的是西安中星測控有限公司提供的Chinastar-CSiGPM02智能壓力監測器,該設備能測量各種氣體和流體的壓力、壓差等。針對該設備實現編碼解碼插件的步驟如下:
(1)編寫Profile文件。
"devices":[
{
"manufacturerId": "Chinastar",
"manufacturerName": "Chinastar",
"model": "CSiGPM02",
"protocolType": "CoAP",
"deviceType": "PressureMonitor",
"serviceTypeCapabilities": [
{
"serviceId": "Basic",
"serviceType": "Basic",
"option": "Mandatory"
}
……
]
}
(2)應用層協議解析。
例如,在該設備執行“AT+NMGS=7,00002023050101”發送上行數據。上報數據的AT命令為:AT+NMGS=7,00002016050101。具體解析如下:AT+NMGS=N,XXXXXXXXXX為上報數據的AT命令格式,其中“N”表示一共上報幾個字節,后面為具體的上報字節內容,以十六進制字符串表示。在該指令中,一共上報7個字節,分別為“00”、“00”、“20”、“16”、“05”、“01”、“01”。其中,第一個字節“00”表示上報數據deviceReq,第二個字節“00”表示沒有后續數據,第三個字節“20”表示溫度32,第四個字節“23”表示當前壓力35 Kpa,第五個字節“05”表示電壓值5 V,第六個字節“01”表示鎖1狀態關閉,第七個字節“01”表示鎖2狀態關閉。
燃氣壓力監測系統編碼解碼插件應用層協議解析主要完成了以下上行數據的解析:
·基礎數據:主要包括電池的電壓、電量數據。
·連接信息:主要包括信號強度、信噪比等數據。
·設備信息:主要包括設備ID、設備類型、設備SN、心跳時間、報警周期、采樣周期等數據。
·設備狀態:主要包括設備的報警狀態、布防狀態、無線模塊狀態、電池狀態、云端應答狀態等數據。
·壓力數據:主要包括設備的實時壓力數據。
(3)編寫兩個應用接口。
(a)decode接口的入參binaryData為設備發過來的CoAP報文的payload部分。主要為設備的上行數據。decode接口的入參結構如表1所示。
表1 decode接口的入參結構
表2 ArryNode定義
核心代碼如下:
public ObjectNode decode(byte[] binaryData) throws Exception {
try {
ReportProcess lightProcess=new ReportProcess(binaryData);
ObjectNode objectNode=lightProcess.toJsonNode();
logger.info("dynamic lrbtest "+objectNode.toString());
return objectNode;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
(b)encode接口的入參json格式數據,是平臺下發的命令或應答。encode接口的入參結構定義如表3所示。
表3 encode接口的入參結構
核心代碼如下:
public byte[] encode(ObjectNode input) throws Exception {
logger.info("dynamic lrbtest "+input.toString());
try {
CmdProcess cmdProcess=new CmdProcess(input);
byte[] byteNode=cmdProcess.toByte();
return byteNode;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
MiniDao-PE是一款Java持久化框架,類似mybatis的持久層解決方案[13],可以統一事務管理。MiniDao-PE支持SQL語句和Java代碼的分離、支持自動事務處理和手動事務處理,輕松實現與hibernate輕量級無縫集成等[14]。具體實現步驟如下:
(1)接口定義,核心代碼如下:
@MiniDao
public interface EmployeeDao {
@Arguments("employee")
public List
@Arguments("empno")
EmployeegetEmployee(String empno);
…
}
(2)接口方法對應SQL文件創建。
Sql文件定位到dao接口的方法,dao接口的每個方法對應一個sql文件。
SQL文件命名規則:{Dao接口名} _{方法名}.sql
簡單SQL,也可以采用方法注釋標簽。例如:
@Sql("SELECT count(*) FROM employee")
IntegergetCount();
(3)編寫SQL文件內容。
SQL文件采用模板語言Freemarker語法[15-16],可以靈活運用,甚至可以寫腳本語言、宏處理等。例如:
SELECT * FROM employee where 1=1
<#ifemployee.age ?exists> and age = '${employee.age}'
#if>
<#ifemployee.name ?exists> and name =
'${employee.name}'
#if> <#ifemployee.empno ?exists> and empno = '${employee.empno}'
#if>
(4)@Arguments參數標簽和@Param參數標簽設置。
@Arguments({"empno","name"})
Map getMap(String empno,String name);
項目建成了海南省瓊海市天然氣壓力監測系統。該系統提供了用戶管理功能、權限管理功能、設備管理功能、設備定位功能、數據采集功能、編解碼功能、數據分析功能、壓力預警功能、日志管理功能等。
系統對燃氣設備進行24小時監測,可實時掌握燃氣設備運營情況,為燃氣設備管理提供科學依據。并且該系統對燃氣壓力進行實時采集,當氣體發生泄漏時,監控室及管理部門可在第一時間做出反應,對提高生產安全性具有重要意義。
針對能源天然氣行業背景,文中提出了解決方案,使用JEECG平臺和面向服務思想設計了燃氣壓力監測系統。該系統包含了目前天然氣安全領域信息化管理的常用功能,系統對天然氣壓力進行24小時監測,并記錄了歷史壓力數據等,從而為燃氣企業的安全運營提供支持。