★北京城市排水集團有限責任公司劉偉,張建強,楊自強
★北京顯通恒泰科技有限公司張彤
★北京城市排水集團有限責任公司裘巖
某水廠目前安裝廠區進水兩塊自來水水表,用以測量整個廠區水區和泥區的自來水用量。本次水表數據采集利用物聯網及無線技術,實現比傳統PLC采集少土方施工的技術方向,以“WAMP”為數據平臺、“ESP8266MCU”為邊緣計算核心及“LORA”為通訊載體定期發送數據給中心端,實現了以太陽能為能源,搭建的現場數據采集系統。數據保存方面,本次研究單獨部署了一個開源“LAMP”系統,也就是使用“linux”作為操作系統,“Apache”網頁服務,“Mysql”數據庫,“PHP”服務應用。數據分析采“邊緣計算”,即用物聯網的特征“萬物互聯”,不同于傳統工控控制端在PLC,物聯網在物端有計算控制和通訊能力,發生在現場的數據采集數據分析處理和計算。根據運行情況給儀表端“ModbusRTU”從站供電,作為“ModbusRTU”主站采集從站數據,轉換數據格式,并編寫報文,啟動“LORA”工作,并發送報文,最后關閉外部電源進入休眠模式完成整個采集流程計算,最后在數據訪問端開發了基于CS的c#程序和基于BS架構的PHP服務。
某再生水廠水表數據需要采集到系統,根據位置和廠區自控設備的部署情況選取最優的策略。本次進廠水表遠離現有系統和電纜通道,采用傳統PLC加DCS的方式,施工成本高昂。廠技術團隊另辟蹊徑,嘗試以無線的方式對數據進行采集傳輸,研發了基于PCB層面的控制器設計、光伏及系統低功耗設計、LoRa傳輸的私有協議設計,應用WAMP系統,并編寫了數據入庫程序,開發了BS和CS架構的數據查詢應用。
1 系統結構概述
本次主要研究以下幾個方面:
(1)數據采集和保存
(2)數據存儲
(3)數據訪問
(4)數據應用
1.1數據采集和保存
某再生水廠目前的數據保存在相對封閉的DCS數據庫系統,可以查詢歸檔的歷史數據,但是訪問相對不方便,一般通過DCS界面進行訪問查詢。
行業內倡導的“雙網融合”目標是讓工控網在安全穩定的基礎上結合IT網絡,為用戶提供更為方便的訪問方式。
本項目以探索的方式,部署了一個WAMP系統,即使用Windows操作系統,Apache網頁服務,MySQL數據庫,PHP服務應用。
1.2數據存儲
數據庫中包含一張數據表名稱為“his_xhm_simbase”,用于存儲記錄過程數據,如不同工藝設備代號、記錄時間、工藝單位等。
本項目開發了數據接入服務程序。該應用運行期間會偵聽串口LoRa模塊的報文并進行解析,用SQL語句把數據寫入數據庫。
1.3數據訪問
基于數據庫的IT應用方式很多,目前開發的程序主要是基于CS架構和基于BS架構的瀏覽器查詢數據。未來隨著數據的數量和接入點的增多,基于大數據的工藝優化程序成為可能。
1.4控制器研發
供電單元:現場供電采用太陽能電池板、充電模組、鉛酸電池構成的供電系統,該系統提供5VDC和12VDC兩路直流電源供給;
通訊單元:采用LoRa433MHz模塊,定期發送數據給中心端;控制單元現場部署一套ESP8266物聯網單元和配套支持電路。
2 系統設計
基于物聯網技術水表數據遠傳的設計主要包括以下幾個部分:
(1)基于水表的低功耗設計;
(2)基于LoRa模塊數據采集低功耗設計;
(3)系統硬件復位電路的設計;
(4)系統邊緣計算設計與控制。
2.1基于水表的低功耗設計
本次研究采用光伏供電,除了要保證自身MCU控制系統供電外,還要考慮給水表進行供電。
水表工作不需要電源,但是和水表的Modbus模塊通訊的時候,需要給它提供12VDC的電源。這個電源如果一直提供,在沒有外部供電的情況下,會對光伏和儲能模塊提出比較大的能耗需求。設計研究的方案是在MCUESP8266休眠的時候,斷開給儀表12V的供電,我們選擇的是松下電子的光耦合固態繼電器AQW212EH,電路實現如圖1所示。
圖1 水表485供電硬件電路設計
2.2基于LoRa模塊數據采集的低功耗設計
LoRa模塊采用壹佰特的E32-TTL-1W,該模塊是一款基于SEMTECH公司SX1278射頻芯片的無線串口模塊(UART),采用透明傳輸方式,工作在410~441MHz頻段(默認433MHz),1W發射功率,LoRa擴頻技術,TTL電平輸出。
該模塊提供了低功耗的管腳配置,在M1管腳和M2管腳都為高電平情況下,發射模塊進入休眠模式,其休眠電流為2^A,工作期間在發射時候670mA@30dBo
在微控制單元(MicrocontrollerUnit,MCU)休眠的時候,GPI。管腳處于釋放狀態,無法為E32模塊提供適合的高電平信號使其進入休眠。需要使用一個SS8050
的三極管做一個電平轉換電路,此時提供2個高電平輸出;當MCU喚醒后,給出GPIO高電平,經過轉換后給出M0M1低電平,使它們進入工作狀態。如圖2所示。
圖2 LoRa模塊數據采集硬件電路設計
2.3系統硬件復位電路的設計
在失去電源后,如果MCU處在休眠模式,則GPIO16會給出一個低電平脈沖,脈沖出現后將不再重復輸出。如果增加一個外圍電路,在電壓降低到臨界值或者電壓升高到臨界值時,單獨給出低電平脈沖到reset管腳,或許可以解決“假死”后自恢復問題。選擇TL7705AC做了一個外部復位電路。
本系統是由太陽能電池板進行供電、鉛酸電池進行電能保存,失電后如果光伏恢復,首先電流要大于100mA解決MCU“假死”的供電電耗,如果有富余電能,光伏會緩慢給電池充電,在電池電壓升高觸發閾值后,會給MCU一個低電平脈沖。復位情況如圖3所示。
圖3 復位邏輯時序圖
MCU接收到復位信號會啟動,但是ESP8266啟動電流為200~500mA,相對于剛剛充電到臨界電壓的電源系統來說負擔很重,無法維持正常的運行狀態,造成關機。
改進措施:增加C1電容,延長TD時間,希望給電源系統更多的充電時間。
隨后問題又出現了,MCU在reset低電平的時候也有很大的功耗,在reset低電平情況下無法提供足夠的充電電能。此再生水廠使用的進水水量數據報送頻率實際上是1天1次,目前把數據報送頻率調整為1800秒(30分鐘)一次,把每天24X60X2=2880次減少為48次。電源系統可以實現長期穩定工作。
2.4系統邊緣計算與控制
邊緣計算是指在靠近物或數據源頭的一側,采用網絡、計算、存儲、應用核心能力為一體的幵放平臺,就近提供最近端服務。其應用程序在邊緣側發起,產生更快的網絡服務響應,滿足行業在實時業務、應用智能、安全與隱私保護等方面的基本需求。邊緣計算處于物理實體和工業連接之間,或處于物理實體的頂端。而云端計算,仍然可以訪問邊緣計算的歷史數據。
簡而言之,物聯網的特征是“萬物互聯”,不同于傳統工控控制端在PLC,物聯網在物端有計算控制和通訊能力,發生在現場的數據采集、數據分析處理和計算就是“邊緣計算”。
具體計算內容如下:
(1)根據運行情況給儀表端“ModbusRTU”從站供電;
(2)作為“ModbusRTU”主站采集從站數據;
(3)轉換數據格式,編寫報文;
(4)啟動“LoRa”工作,并發送報文;
(5)關閉外部電源進入休眠模式。
3 系統數據接收與存儲
(1)系統數據的接收與存儲;
(2)系統數據的查詢與顯示。
3.1系統數據的接收與存儲
安裝本次開發的CS架構軟件:“某再生水無線數據串口接收程V02B”軟件,該軟件界面如圖4所示。
圖4 軟件開發
功能有四個方面。
(1)接收:在串口安裝了“LoRa”接收裝置并轉
為串口數據,接收到不同設備發送的JSON報文;
(2)解析:接收到報文會進行JSON格式的解析,得到接收變量和對應值;
(3)辨析:把解析的數據進行分析處理,如果對應的key和value不符合識別規則,則沒接收到;
(4)入庫:以SQL語言把數據保存到數據庫hisxhmsimtable中。數據表如圖5所示。
圖5 數據表存儲
3.2系統數據的查詢與顯示
基于MySQL數據庫的數據展示,在IT行業就有無窮多的案例說明和應用。本次研究是基于CS架構開發的應用。圖6為CS客戶端方式的水表查詢軟件界面,用戶輸入查詢的開始、結束時間和變量名稱,就可以查詢對應的歷史數據,轉成曲線,另存csv文件等功能。
圖6 數據查詢界面
4典型代碼
4.1數據合成
Modbus的HoldingRegisters是16-bit整型,從站儀表的數據給出的32-bit的長整數,當MCU用F03指令讀取從站的保持寄存器HoldingRegisters的數據,合成整數方面查閱技術資料,得到如下結論:
實際儀表數據二數據高位*0xff+低位數據。代碼段實現如下:
for(inti=0;i<MBcounts;i++)
{
uMybuf[i]=ModbusRTUClient.read();DEBUGLOG(H[%d]\t\nH,uMybuf[i]);
}
longlsum=uMybuf[0]*65536+uMybuf[1];
水表提供的數據是0.01立方米為基本單元,最終得到的整數應轉換后再除以100。
4.2Modbus中浮點數的識別轉換
Modbus還能以數據高位和數據低位的合成方式實現浮點數的合成,解析高低數據,我們寫了一個方法用于實現這一功能,代碼如下:
floatuint2float(uint_uintB,uint_uintA)
{
DEBUGLOG("DBG_uintA=%d\t_uintB=%d\t\n",_uintA,_uintB);
intintSign,intSignRest,intExponent,intExponentRest;
floatfaResult,faDigit;
intSign=_uintA/32768;
intSignRest=_uintA%32768;
intExponent=intSignRest/128;
intExponentRest=intSignRest%128;
faDigit=(float)(intExponentRest*65536+_uintB)/8388608;
faResult=(float)pow(-l,intSign)*(float)pow(2,intExponent-127)*(faDigit+1);
DEBUGLOG("intSign=%d\tintSignRest=%d\tintExponent=%d\tintExponentRest%d\tfaDigit%d\t\n",intSign,intSignRest,intExponent,intExponentRest,faDigit);
returnfaResult;
}
作者簡介:
劉 偉(1988-),男,河北保定人,中級工程師,碩士,現就職于北京城市排水集團有限責任公司,研究方向為工業自動化控制。
參考文獻:
[1]林惠霞,武永華,張淑城.基于BF592的攝像直讀無線遠傳抄表裝置的設計[J].自動化技術與應用,2020,39(01):140-143.
[2]喬芝忠,楊琦.電子遠傳水表兼容性與互換性問題及其對策[J].給水排水,2017,53(12):110-114.
[3]侶金玲.無線遠傳大口徑水表的數據采集與管理系統[D].石家莊:河北科技大學,2013.
⑷吉健紅.淺談自來水遠傳水表抄表系統的幾次技術改進[J].科技資訊,2012,(23):218.
[5]白天明.無線智能水表的設計與研究[J].科技傳播,2010,(19):80,79.
[6]王衛國,韋萌.基于CC1100的無線抄表系統[J].計算機與數字工程,2009,37(01):171-173.
[7]王春.智能無線遠傳水表設計及應用研究[D].北京:北方工業大學,2009
摘自《自動化博覽》2022年第三期