鄧婷 范潤宇



摘? 要:遠程電力抄表系統內組成包括數據中心、遠程數據傳輸網關和WEB網頁數據顯示系統。網關數據采集是系統重要的設計環節,它包括總線通信、協議解析、數據封裝和網絡傳輸。遠程電力抄表系統使用RAM926EJ微處理器為核心的嵌入式系統網關,網關串口通信采用Modbus RTU通信協議,網絡通信采用TCP/IP協議,采用C++開發了網關程序和數據接收程序,通過實驗測試實現了多個電表的實時功率和累計電耗數據的采集,并將數據通過因特網傳送到服務器。
關鍵詞:Modbus RTU;通信協議;數據采集
中圖分類號:TP393? ? ?文獻標識碼: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)
隨著中央空調EMC用戶不斷增加,EMC管理必須建立有效地能耗管理方法,提高系統運行效率,增加EMC項目管理效益。用電管理是能耗管理的重要內容,包括能效管理、決算管理和用電安全管理。用電能效管理和用電安全管理必須借助于信息化和大數據分析才能實現,必須建立數據分析模型,包括每天空調負荷變化趨勢和用電趨勢模型,每天、每月、每年用電負荷對比模型,因此必須建立自動化抄表系統,實現空調系統用電信息化管理。
2? ?系統架構設計(System architecture design)
遠程電力抄表系統組成包括數據中心(監控中心)、遠程數據傳輸網關和WEB網頁數據顯示系統。數據中心接收電表數據進行數據解析、存儲和數據分析。遠程數據傳輸網關負責采集電表數據,并將數據通過因特網傳送到數據中心。該系統采用以RAM926EJ微處理器為核心的嵌入式系統網關[1]。如圖1所示。
3? ?電表計量方式設計(Meter measurement design)
中央空調系統電表計量方式有很多種,包括總表計量方式、按功能計量方式和系統分塊計量方式。總表計量方式用于計量整個中央空調機房系統用電,電表安裝在總電源進線處,用于計量中央空調系統總用電量和進行數據分析。按功能計量方式是指根據數據用途進行電表安裝計量。系統分塊計量方式是根據系統方便程度在系統中安裝多個電表用于電耗計算,不具有功能性計量的特點。考慮到EMC用戶電力計量主要用于用電結算、節能分析和用電安全分析,安裝電表應采用總表計量方式。
4? ?數據采集及處理(Data collection and processing)
網關數據采集是系統重要的設計環節,涉及總線通信、協議解析、數據封裝和網絡傳輸,最重要的是網關必須根據電表計量方式明確數據定義對象,方便數據中心根據數據對象特點處理數據[2]。考慮到系統總表計量方式、功能計量方式和分塊計量方式可能在系統中獨立存在也可能同時存在,網關協議設計兼容電表的三種計量方式,同時考慮到數據傳輸效率問題,數據傳輸設計采用按功能多次傳送,即總表一個數據包,功能表一個數據包,分表計量電表采用一個數據包,如果系統電表安裝出現其他方式,通過增加數據包實現,采用這種方式定義通信數據方便協議擴展和數據處理。
4.1? ?網關通信協議
4.1.1? ?通信協議
數據包由16進制字節組成,包括“包頭、用戶ID、功能碼、字節數、數據、校驗和、包尾”七個部分,具體格式如表1和表2所示[3]。
功能碼:包括兩部分,字節高4位表示通信設備類型,低4位表示數據包類型,用于區分同一類型設備傳輸的不同類型的數據,實際通信過程中網關根據功能碼低4位不同標志傳輸不同數據包到監控中心[4]。
4.1.2? ?數據封裝
網關通信協議數據包封裝程序如下:
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通信協議
電表數據采集是網關串口通信采用Modbus RTU通信協議,電表Modbus RTU通信協議。本協議旨在規定終端設備(從站)與總線接口單元(主站)之間的數據交換以MODBUS的RTU模式實現。協議采用異步主從半雙工方式通信,通信由主站發起,從站在接收到主站請求后做出相應的應答[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讀取電表函數
{
int iRet==ER_OK;
if(NULL==pio)
return ER_BADIO;// 打包數據體函數
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? ?模擬聯合測試(Simulation of the joint tests)
主要對基于RAM926EJ嵌入式系統網關的遠程電力抄表系統進行了系統測試,得到了較為理想的測試效果,肯定了該系統的實用價值。
(1)用Modbus Slave工具軟件模擬電表的實時功率和累計電耗數據,獲取電表的實時功率和累計電耗數據。如圖2和圖3所示。
(2)利用SecureCRT軟件模擬獲取電表的實時功率和累計電耗數據。如圖4所示。
(3)測試服務器收到的數據包,獲取第4塊電表的功率和電耗,并通過網絡調試助手,檢測了該數據和實際電表的數據是一致的,得到第四塊電表的功率43400000是192,第四塊電表的電耗43200000是160。
6? ?結論(Conclusion)
綜上所述,遠程電力抄表系統通過RAM926EJ嵌入式系統網關實現了電表的功率和電耗數據的采集,并將數據通過因特網傳送到數據中心服務器。有利于WEB服務平臺對獲取的數據進行分析和管理。
參考文獻(References)
[1] 方浩,李艾華,王濤.基于DM6437的智能視頻監控系統設計與實現[J].計算機應用與軟件,2016,33(2):192-196.
[2] 楊建國,蔡立志,鄭紅.基于ARM的嵌入式視頻監控系統的設計與實現[J].計算機應用與軟件,2018,35(10):223-225.
[3] 范興隆.ESP8266在智能家居監控系統中的應用[J].單片機與嵌入式系統應用,2016,16(9):52-56.
[4] 許彬,張海濤,胡豆豆.云計算平臺中監控視頻摘要任務調度方法研究[J].計算機應用與軟件,2017,34(7):7-10.
[5] 李慧靜,劉慧文,李東敬.基于Modbus-RTU協議的串口通信軟件實現[J].內蒙古科技大學學報,2017,36(4):372-376.
作者簡介:
鄧? 婷(1981-),女,碩士,講師.研究領域:嵌入式開發,軟件工程.
范潤宇(1991-),女,碩士,助教.研究領域:電子信息.