鄧婷 范潤宇
摘? 要:遠程電力抄表系統(tǒng)內(nèi)組成包括數(shù)據(jù)中心、遠程數(shù)據(jù)傳輸網(wǎng)關(guān)和WEB網(wǎng)頁數(shù)據(jù)顯示系統(tǒng)。網(wǎng)關(guān)數(shù)據(jù)采集是系統(tǒng)重要的設(shè)計環(huán)節(jié),它包括總線通信、協(xié)議解析、數(shù)據(jù)封裝和網(wǎng)絡(luò)傳輸。遠程電力抄表系統(tǒng)使用RAM926EJ微處理器為核心的嵌入式系統(tǒng)網(wǎng)關(guān),網(wǎng)關(guān)串口通信采用Modbus RTU通信協(xié)議,網(wǎng)絡(luò)通信采用TCP/IP協(xié)議,采用C++開發(fā)了網(wǎng)關(guān)程序和數(shù)據(jù)接收程序,通過實驗測試實現(xiàn)了多個電表的實時功率和累計電耗數(shù)據(jù)的采集,并將數(shù)據(jù)通過因特網(wǎng)傳送到服務(wù)器。
關(guān)鍵詞:Modbus RTU;通信協(xié)議;數(shù)據(jù)采集
中圖分類號:TP393? ? ?文獻標(biāo)識碼:A
Abstract:The remote power meter reading system consists of the data center,remote data transmission gateway,and web page data display system.Gateway data acquisition is an important part of system design,which includes bus communication,protocol analysis, data encapsulation,and network transmission.Remote power meter reading system uses RAM926EJ microprocessor as the core of the embedded system gateway;the gateway uses Modbus RTU communication protocol;the network communication uses TCP/IP protocol; C++ is used to develop the gateway program and data reception. Through the experimental tests,data acquisition for real-time power and total power consumption from multiple electric meters was achieved,and the data was sent to the server through the Internet.
Keywords:Modbus RTU;communication protocol;the data collection
1? ?引言(Introduction)
隨著中央空調(diào)EMC用戶不斷增加,EMC管理必須建立有效地能耗管理方法,提高系統(tǒng)運行效率,增加EMC項目管理效益。用電管理是能耗管理的重要內(nèi)容,包括能效管理、決算管理和用電安全管理。用電能效管理和用電安全管理必須借助于信息化和大數(shù)據(jù)分析才能實現(xiàn),必須建立數(shù)據(jù)分析模型,包括每天空調(diào)負荷變化趨勢和用電趨勢模型,每天、每月、每年用電負荷對比模型,因此必須建立自動化抄表系統(tǒng),實現(xiàn)空調(diào)系統(tǒng)用電信息化管理。
2? ?系統(tǒng)架構(gòu)設(shè)計(System architecture design)
遠程電力抄表系統(tǒng)組成包括數(shù)據(jù)中心(監(jiān)控中心)、遠程數(shù)據(jù)傳輸網(wǎng)關(guān)和WEB網(wǎng)頁數(shù)據(jù)顯示系統(tǒng)。數(shù)據(jù)中心接收電表數(shù)據(jù)進行數(shù)據(jù)解析、存儲和數(shù)據(jù)分析。遠程數(shù)據(jù)傳輸網(wǎng)關(guān)負責(zé)采集電表數(shù)據(jù),并將數(shù)據(jù)通過因特網(wǎng)傳送到數(shù)據(jù)中心。該系統(tǒng)采用以RAM926EJ微處理器為核心的嵌入式系統(tǒng)網(wǎng)關(guān)[1]。如圖1所示。
3? ?電表計量方式設(shè)計(Meter measurement design)
中央空調(diào)系統(tǒng)電表計量方式有很多種,包括總表計量方式、按功能計量方式和系統(tǒng)分塊計量方式??偙碛嬃糠绞接糜谟嬃空麄€中央空調(diào)機房系統(tǒng)用電,電表安裝在總電源進線處,用于計量中央空調(diào)系統(tǒng)總用電量和進行數(shù)據(jù)分析。按功能計量方式是指根據(jù)數(shù)據(jù)用途進行電表安裝計量。系統(tǒng)分塊計量方式是根據(jù)系統(tǒng)方便程度在系統(tǒng)中安裝多個電表用于電耗計算,不具有功能性計量的特點。考慮到EMC用戶電力計量主要用于用電結(jié)算、節(jié)能分析和用電安全分析,安裝電表應(yīng)采用總表計量方式。
4? ?數(shù)據(jù)采集及處理(Data collection and processing)
網(wǎng)關(guān)數(shù)據(jù)采集是系統(tǒng)重要的設(shè)計環(huán)節(jié),涉及總線通信、協(xié)議解析、數(shù)據(jù)封裝和網(wǎng)絡(luò)傳輸,最重要的是網(wǎng)關(guān)必須根據(jù)電表計量方式明確數(shù)據(jù)定義對象,方便數(shù)據(jù)中心根據(jù)數(shù)據(jù)對象特點處理數(shù)據(jù)[2]??紤]到系統(tǒng)總表計量方式、功能計量方式和分塊計量方式可能在系統(tǒng)中獨立存在也可能同時存在,網(wǎng)關(guān)協(xié)議設(shè)計兼容電表的三種計量方式,同時考慮到數(shù)據(jù)傳輸效率問題,數(shù)據(jù)傳輸設(shè)計采用按功能多次傳送,即總表一個數(shù)據(jù)包,功能表一個數(shù)據(jù)包,分表計量電表采用一個數(shù)據(jù)包,如果系統(tǒng)電表安裝出現(xiàn)其他方式,通過增加數(shù)據(jù)包實現(xiàn),采用這種方式定義通信數(shù)據(jù)方便協(xié)議擴展和數(shù)據(jù)處理。
4.1? ?網(wǎng)關(guān)通信協(xié)議
4.1.1? ?通信協(xié)議
數(shù)據(jù)包由16進制字節(jié)組成,包括“包頭、用戶ID、功能碼、字節(jié)數(shù)、數(shù)據(jù)、校驗和、包尾”七個部分,具體格式如表1和表2所示[3]。
功能碼:包括兩部分,字節(jié)高4位表示通信設(shè)備類型,低4位表示數(shù)據(jù)包類型,用于區(qū)分同一類型設(shè)備傳輸?shù)牟煌愋偷臄?shù)據(jù),實際通信過程中網(wǎng)關(guān)根據(jù)功能碼低4位不同標(biāo)志傳輸不同數(shù)據(jù)包到監(jiān)控中心[4]。
4.1.2? ?數(shù)據(jù)封裝
網(wǎng)關(guān)通信協(xié)議數(shù)據(jù)包封裝程序如下:
short int Ydcb_ProtocolGetPack(e_typedata type,YDCBHEAD*pHead,YDCBDATA *pdata,unsigned char*pPackdata,short int &packlen)
{
short int offset;
unsigned char packsum==0;
if ((pHead==NULL) || (pdata==NULL) || (pPackdata==NULL))
return false;
if (pdata->DataLen->MAXDATALEN)
return false;
offset==0;
memcpy(pPackdata,pHead,sizeof(YDCBHEAD));
offset+=sizeof(YDCBHEAD);
short int temp_datalen==HtoNs(pdata->DataLen);
memcpy(pPackdata+offset,&temp_datalen,2);
offset+=2;
memcpy(pPackdata+offset,pdata->pdatabody,
pdata->DataLen);
offset+=pdata->DataLen;
packsum==CheckSum(pPackdata,offset);
pPackdata[offset]==packsum;
offset+=1;
pPackdata[offset]==0xfe;
pPackdata[offset+1]==0xfe;
offset+=2;
packlen==offset;
return true;
}
4.2? ?Modbus RTU通信協(xié)議
電表數(shù)據(jù)采集是網(wǎng)關(guān)串口通信采用Modbus RTU通信協(xié)議,電表Modbus RTU通信協(xié)議。本協(xié)議旨在規(guī)定終端設(shè)備(從站)與總線接口單元(主站)之間的數(shù)據(jù)交換以MODBUS的RTU模式實現(xiàn)。協(xié)議采用異步主從半雙工方式通信,通信由主站發(fā)起,從站在接收到主站請求后做出相應(yīng)的應(yīng)答[5]。如表3所示。
采集電表信息程序如下:
int MBBase::Command(IIO*pio,unsigned char nslave,unsigned char function,
unsigned short address,unsigned short cnt,char*psrc,short srcLen,char*pdest,unsigned short*destlen,short debug ) //MODEBUS讀取電表函數(shù)
{
int iRet==ER_OK;
if(NULL==pio)
return ER_BADIO;// 打包數(shù)據(jù)體函數(shù)
iRet==Pack(nslave,function,address,cnt,psrc,srcLen);
if(iRet!=ER_OK)
{
ErrorPrint(GetName(),iRet);
return iRet;
}
if(m_bufferLength<=0)
{
ErrorPrint(GetName(),ER_BADLEN);
return ER_BADLEN;
}
if(debug)
{
debugprintf("modbus write:%s",DumpEx(m_buffer,m_bufferLength).c_str());
}
int iwrcnt==pio->Write((const char*)m_buffer,m_bufferLength);
if(iwrcnt !=m_bufferLength)
{
ErrorPrint(GetName(),ER_WR);
return ER_WR;
}
#if defined(WIN32)
::comSleep(800);
#else
::comSleep(1000*700);? ? ? ? ?//改動
#endif
char buffertp[1024]=={0};
unsigned int? bufread==1000;
iwrcnt==pio->Read(buffertp,bufread);
if(bufread<=0 || iwrcnt<=0)
{
ErrorPrint(GetName(),ER_RDTIMEOUT);
return ER_RDTIMEOUT;
}
if(debug)
{
debugprintf("modbus read:%s [%d]",DumpEx(buffertp,iwrcnt).c_str(),iwrcnt);
} //debugprintf("modbus read:%s",DumpEx(buffertp,iwrcnt).c_str());// 解包正確
iRet==UnPack((unsigned char*)buffertp,iwrcnt);
if(iRet!=ER_OK)
{
ErrorPrint(GetName(),iRet);
return iRet;
}
memcpy(pdest,m_data,m_dataLen);
*destlen==m_dataLen;
return ER_OK;
}
5? ?模擬聯(lián)合測試(Simulation of the joint tests)
主要對基于RAM926EJ嵌入式系統(tǒng)網(wǎng)關(guān)的遠程電力抄表系統(tǒng)進行了系統(tǒng)測試,得到了較為理想的測試效果,肯定了該系統(tǒng)的實用價值。
(1)用Modbus Slave工具軟件模擬電表的實時功率和累計電耗數(shù)據(jù),獲取電表的實時功率和累計電耗數(shù)據(jù)。如圖2和圖3所示。
(2)利用SecureCRT軟件模擬獲取電表的實時功率和累計電耗數(shù)據(jù)。如圖4所示。
(3)測試服務(wù)器收到的數(shù)據(jù)包,獲取第4塊電表的功率和電耗,并通過網(wǎng)絡(luò)調(diào)試助手,檢測了該數(shù)據(jù)和實際電表的數(shù)據(jù)是一致的,得到第四塊電表的功率43400000是192,第四塊電表的電耗43200000是160。
6? ?結(jié)論(Conclusion)
綜上所述,遠程電力抄表系統(tǒng)通過RAM926EJ嵌入式系統(tǒng)網(wǎng)關(guān)實現(xiàn)了電表的功率和電耗數(shù)據(jù)的采集,并將數(shù)據(jù)通過因特網(wǎng)傳送到數(shù)據(jù)中心服務(wù)器。有利于WEB服務(wù)平臺對獲取的數(shù)據(jù)進行分析和管理。
參考文獻(References)
[1] 方浩,李艾華,王濤.基于DM6437的智能視頻監(jiān)控系統(tǒng)設(shè)計與實現(xiàn)[J].計算機應(yīng)用與軟件,2016,33(2):192-196.
[2] 楊建國,蔡立志,鄭紅.基于ARM的嵌入式視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[J].計算機應(yīng)用與軟件,2018,35(10):223-225.
[3] 范興隆.ESP8266在智能家居監(jiān)控系統(tǒng)中的應(yīng)用[J].單片機與嵌入式系統(tǒng)應(yīng)用,2016,16(9):52-56.
[4] 許彬,張海濤,胡豆豆.云計算平臺中監(jiān)控視頻摘要任務(wù)調(diào)度方法研究[J].計算機應(yīng)用與軟件,2017,34(7):7-10.
[5] 李慧靜,劉慧文,李東敬.基于Modbus-RTU協(xié)議的串口通信軟件實現(xiàn)[J].內(nèi)蒙古科技大學(xué)學(xué)報,2017,36(4):372-376.
作者簡介:
鄧? 婷(1981-),女,碩士,講師.研究領(lǐng)域:嵌入式開發(fā),軟件工程.
范潤宇(1991-),女,碩士,助教.研究領(lǐng)域:電子信息.