邓婷 范润宇
摘 要:远程电力抄表系统内组成包括数据中心、远程数据传输网关和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-),女,硕士,助教.研究领域:电子信息.