遵循IEC的电能表通信程序的设计与实现Word格式文档下载.doc
- 文档编号:4639033
- 上传时间:2023-05-03
- 格式:DOC
- 页数:6
- 大小:67KB
遵循IEC的电能表通信程序的设计与实现Word格式文档下载.doc
《遵循IEC的电能表通信程序的设计与实现Word格式文档下载.doc》由会员分享,可在线阅读,更多相关《遵循IEC的电能表通信程序的设计与实现Word格式文档下载.doc(6页珍藏版)》请在冰点文库上搜索。
本文以计算机对电能表的数据采集通信程序为例,程序流程图见图1。
2.2建立电能表的对象模型
实现计算机与电能表通信首先需要在计算机侧建立该电能表的对象模型。
假定需要采集电能表的数据有:
正向有功总电能底度值、正向无功总电能底度值、A相电压和A相电流,这些数据都可通过接口类库中的“寄存器”接口类来实现。
“寄存器”类共有3个属性:
逻辑名、值、倍率量纲和1个方法:
复位。
“逻辑名”属性表示该寄存器实例化对象的OBIS(OBjectIdentificationSystem)码;
“值”属性表示该寄存器保存的测量值或状态值;
“倍率和量纲”属性表示值属性的倍率和量纲。
“复位”方法可以对该寄存器的值清零。
图2演示了正向有功总电能底度值、正向无功总电能底度值数据是如何通过“寄存器”类来建立对象模型的,用类似方法同样可以建立A相电压、A相电流数据的对象模型。
表1列出了电能表对象模型中各对象的属性、方法及属性的取值。
以正向有功总电能底度值为例,其逻辑名为1.1.1.8.0.255,表示该对象代表能量类型为电能1、测量通道号为1、物理量类型为有功功率1、处理方法为积分值8、费率类型为总费率0、结算周期为与结算周期无关的底度值255的数据;
值的数据类型为64位整数,值的内容为40028;
倍率为10,量纲为Wh。
这些属性表示该电能表的正向有功总电能底度值为4.0028kWh。
同理,其余三个对象分别表示该电能表的正向无功总电能底度值为1.8562kvarh、A相电压为57.95V、A相电流为0.996A。
开始
建立电能表的对象模型
建立数据链路层连接
建立应用层连接
访问电能表的对象的属性和方法
断开连接
结束
图1电能表通信程序流程图
配置物理层通信参数
尽管正向有功总电能底度值、正向无功总电能底度值、A相电压和A相电流者4种数据都是通过“寄存器”接口类建模的,但由于其“值”属性的数据类型不同,所以在VC++6.0中需要分别通过C++类Energy_Register和Analog_Register来实现,详见以下源程序。
classEnergy_Register //电量寄存器C++类定义
{
public:
BYTELogical_Name[6];
//属性1:
逻辑名
__int64Value;
//属性2:
值
Scaler_UnitScalerUnit;
//属性3:
倍率和量纲
BOOLReset();
//方法:
复位
Energy_Register();
//构造函数
virtual~Energy_Register();
//析构函数
};
寄存器
倍率量纲
类
图2“寄存器”接口类及其实例
方法
属性
实例
对象
属性值
正向有功总电能底度值寄存器
逻辑名=1.1.1.8.0.255
值:
40028
倍率量纲:
10^-1Wh
正向无功总电能底度值寄存器
逻辑名=1.1.1.3.8.0.255
18562
10^-1varh
classAnalog_Register//模拟量寄存器C++类定义
//属性1:
__int32Value;
//属性2:
//属性3:
//方法:
Analog_Register();
//构造函数
virtual~Analog_Register();
//析构函数
Energy_RegisterDel_Act_Energy;
//正向有功总电能底度值对象
Energy_RegisterDel_Rea_Energy;
//正向无功总电能底度值对象
Analog_RegisterA_Voltage;
//A相电压对象
Analog_RegisterA_Current;
//A相电流对象
表1电能表的对象模型
接口类
属性1
属性2
属性3
(数据类型)值
正向有功总电能底度值
1.1.1.8.0.255
(Integer64)40028
10-1Wh
Reset
正向无功总电能底度值
1.1.3.8.0.255
(Integer64)18562
10-1varh
A相电压
1.1.32.7.0.255
(Integer32)5795
10-2V
A相电流
1.1.31.7.0.255
(Integer32)996
10-3A
2.3配置物理层通信参数
物理层采用RS485总线连接,计算机和电能表的物理层通信参数应配置相同,包括电能表高位HDLC地址、低位HDLC地址、计算机地址、通信波特率等。
2.4建立数据链路层连接
先由计算机发送SNRM报文,与电能表协商数据链路层参数,参数包括最大发送报文长度、最大接收报文长度、发送窗尺寸、接收窗尺寸等,电能表确认后返回UA报文,数据链路层连接建立成功。
计算机SNRM报文中的参数可省略,表示默认采用电能表UA报文中的参数。
计算机发送SNRM报文源程序如下。
//建立数据链路层连接
mCommand[0]=0x7E;
//帧头
mCommand[1]=0xA0;
//帧类型
mCommand[2]=0x0A;
//帧长度
//电能表高位HDLC地址
mCommand[3]=((ComPortSetup.LogDevAdd&
0x3f80)>
>
6)&
0xff;
mCommand[4]=((ComPortSetup.LogDevAdd&
0x7f)<
<
1)&
//电能表低位HDLC地址
mCommand[5]=((ComPortSetup.PhyDevAdd&
mCommand[6]=((((ComPortSetup.PhyDevAdd&
1))|0x01)&
//计算机HDLC地址
mCommand[7]=((((ComPortSetup.MasterAdd&
mCommand[8]=0x93;
//命令类型:
SNRM
FCS=GetFCS(&
(mCommand[1]),8);
//FCS校验和
mCommand[9]=FCS&
mCommand[10]=FCS>
8;
mCommand[11]=0x7E;
//帧尾
Send(mCommand,12);
//发送SNRM报文
2.5建立应用层连接
建立数据链路层连接之后可以建立应用层连接。
先由计算机发送应用连接请求(AARQ)报文,与电能表协商应用环境(如短名或逻辑名引用)、xDLMS环境(如COSEM一致性块)并使用已知的密码或HLS秘密进行身份验证,报文格式与数据链路层连接报文格式相同,报文内容依次为帧头、帧类型、帧长度、目的HDLC地址、源地址、I命令帧、HCS校验和、逻辑链路控制字节、AARQ标识、应用环境名称、发送方ACSE参数、身份验证机制名称、密码、用户信息标识、xDLMS-Initiate.request、FCS校验和、帧尾等。
电能表确认后返回应用连接响应(AARE)报文,应用层连接建立成功。
2.6访问电能表的对象的属性和方法
在建立应用层连接之后,就可以使用应用层提供的服务集访问电能表的对象的属性和方法。
在使用逻辑名(LN)引用时服务集为GET/SET/ACTION,在使用短名(SN)引用时服务集为READ/WRITE。
下面以短名引用方式读取表1中“正向有功总电能底度值”对象的属性为例,说明访问电能表对象属性的通信过程。
假设“正向有功总电能底度值”对象逻辑名映射的基本名为16进制C440,发送和接收报文的16进制原码及其解释如下:
计算机发送:
7EA0119575BEE498E6E600050102C440E67C7E
7EA0119575BEE498E6E600//HDLC帧前半部分(帧头、帧类型、帧长度、目的HDLC
//地址、源地址、I命令帧、HCS校验和、逻辑链路控制字节),以下通信帧中省略HDLC帧前半部分
0501//Read.request
02//CHOICEvariable-name
C440//对象属性1逻辑名映射的基本名,
E67C7E//HDLC帧后半部分(FCS校验和、帧尾),以下通信帧中省略HDLC帧后半//部分
电能表返回:
0C010009060101010800FF
0C01//Read.response
00//Data
09060101010800FF//对象的第1个属性:
逻辑名(1.1.1.8.0.255)
050102C448
C448//计算机读对象的第2个属性:
0C0100140000000000009C5C
140000000000009C5C//电能表返回对象的第2个属性:
值。
值为40028,
//其类型为integer64
050102C450
C450//计算机读第3个属性:
0C010002020FFF161E
02020FFF161E//电能表返回对象的第3个属性:
倍率和量纲。
其中倍率为integer//FFH=-1,表示倍率为10-1;
量纲为枚举值1EH表示Wh。
访问电能表对象的属性和方法部分源程序如下:
//读正向有功总电能底度值对象的第1个属性:
Logicalname
if(COSEM_Get_Request_Normal(0xC440,mDataBuff,nCmdNum,nDataNum,
ComPortSetup,IECHDLCSetup)==TRUE){
Del_Act_Energy.Logical_Name[0]=mDataBuff[5];
Del_Act_Energy.Logical_Name[1]=mDataBuff[6];
Del_Act_Energy.Logical_Name[2]=mDataBuff[7];
Del_Act_Energy.Logical_Name[3]=mDataBuff[8];
Del_Act_Energy.Logical_Name[4]=mDataBuff[9];
Del_Act_Energy.Logical_Name[5]=mDataBuff[10];
}
//读正向有功总电能底度值对象的第2个属性:
Value
if(COSEM_Get_Request_Normal(0xC448,mDataBuff,nCmdNum,nDataNum,
for(j=0;
j<
j++) {
m_int64data.cData[7-j]=mDataBuff[4+j];
}
Del_Act_Energy.Value=m_int64data.nData;
//读正向有功总电能底度值对象(1.1.1.8.0.255)的第3个属性:
ScalerandUnit
if(COSEM_Get_Request_Normal(0xC450,mDataBuff,nCmdNum,nDataNum,
Del_Act_Energy.ScalerUnit.Scaler=mDataBuff[6];
Del_Act_Energy.ScalerUnit.Unit=mDataBuff[8];
2.7断开连接
在对电能表对象的属性和方法的访问完毕之后,应该断开连接。
计算机发送断开连接DISC报文,报文格式与数据链路层连接报文格式相同,报文内容依次为帧头、帧类型、帧长度、目的HDLC地址、源地址、DISC命令、FCS校验和、帧尾等。
电能表返回包含UA命令帧的报文,数据链路层连接断开,同时也意味着应用层连接断开,计算机和电能表之间的通信结束。
3结束语
本文给出的实例程序在低安全级别身份验证(LLS)和短名(SN)引用方式下,实现了计算机与多功能电能表的通信。
该程序只是IEC62056标准在电能表通信中的一个简单应用,通过扩充支持服务器模型、接口类类型等组件,能够满足更加复杂的应用需求。
参考文献:
[1]IEC62056,Electricitymetering-Dataexchangeformeterreading[S].
第一作者简介:
宋晓林(1973-),男,工程师,西北电力试验研究院电测室,现为西安交通大学在读硕士生,从事电能计量和自动抄表方面的应用和研究。
通信地址:
西安市友谊东路308号西北电力试验研究院电测室,邮编:
710054
办公室电话:
(029)7892965转3227
传真:
(029)7892965转3225
手机:
13002976032
E-mail:
xiaolinsong@
6
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 遵循 IEC 电能表 通信 程序 设计 实现