PC请求帧
前导码 | 起始码 | 地址域(A0-A5) | 起始符 | 控制码 | 数据域长度 | 数据域/数据标识(DI0-DI3) | 校验码 | 结束符 |
FE FE FE FE | 68 | 87 14 37 00 00 00 | 68 | 11 | 04 | 33 33 33 33 | 83 | 16 |
数据标识: 33 33 33 33 即 00 00 00 00,有功总电能。
从机应答帧(手动输入)
前导码 | 起始码 | 地址域(A0-A5) | 起始符 | 控制码 | 数据域长度 | 数据域/数据标识(DI0-DI3) | 校验码 | 结束符 |
FE FE FE FE | 68 | 87 14 37 00 00 00 | 68 | 91 | 08 | 33 33 33 33 39 37 33 33 | DD | 16 |
下图展示的是DLT645-2007协议读取电表电量的交互过程,数据请求帧里面请求的数据类型是当前有功总电量。
数据:39 37 33 33,即00 00 04 06,值为406,总电能分辨率为0.01,所以得4.06kWh
一、准备⼯作
1、产品准备
USR-M100-HM产品 数量1个
电源适配器 12V 数量1个
电脑数量1台|
485转usb线 数量1条
tcp服务器
2.连接拓扑
M100-HM的第一个485串口,接USB-RS485串口线,串口线的A接A1,B接B1。USB-RS485串口线的USB插到电脑USB口,然后产品接12V电源适配器上电。
M100-HM的网口,用网线和电脑直连。
3、查看端口
电脑打开计算机,设备管理器,点击端口,查看M100-HM的USB-RS485串口线的COM口号,是COM8。
4.电脑本地网卡设置
电脑打开控制面板,点击更改适配器设置,点击有线网卡,右击,点击属性,点击IPv4,M100-HM默认IP是192.168.0.7,电脑有线网卡设置同网段的静态IP,192.168.0.201,子网掩码255.255.255.0,网关192.168.0.1
二、M100-HM参数设置
- 登录网页
浏览器输入192.168.0.7,登录用户名和密码都是admin
- 波特率改成和要接的电表设备⼀致。
保存——继续配置,测试的电表串口参数:2400,EVEN,8,1
- 配置socket连接tcp服务器的参数
保存,继续配置注意,实际应用中填您自己服务器的ip和端口
- 配置开启边缘采集⽹关
数据采集配置添加点位。把要采集的645-07协议电表注意:功能码和数据类型定死的,可以忽略配置,寄存器地址指的就是电表的数据标识,测试设备地址或标号:000000371487(测试电表表号为000371487,不足12位的,前面补0,若电表号位数超了12位,取后12位输入),数据标识:00000000
- 数据上报
通道选择socket,数据上报开启,选择上报方式(测试用的周期上报) 配置上报 Json 模板,本例中配置模板:{"Current":"dushu"}
- 服务器监测
可以看到M100上报的采集的电表数据数据
DLT645-2007协议解析
DLT645-2007协议规定了数据帧结构,如下图:
DLT645-2007帧结构
根据帧结构定义,分析出应答帧是电表回复的正向有功电能数据,由固定前导码FE、固定68帧头、表地址、控制码、数据长度、数据类型、校验、帧尾组成,下面将对数据帧不同字段进行着色,方便展示。(从机应答)
FE FE FE FE 68 87 14 37 00 00 00 68 91 08 33 33 33 33 39 37 33 33 DD 16
其中红色部分数据为固定值,FE FE FE FE为前导码,用于发送方让接收方提前准备好接收数据,不同厂家不同型号的表前导码FE的个数是不同的,还有些厂家不会发送前导码FE,解析接收数据的一般方法是忽略前面N个FE(串口模拟从机应答应加上对应的前导码),寻找数据帧中的68帧头作为一帧的起始位置,下面进行解析。
从第一个68开始到第二个68之间的绿色数据为表号字段,在DLT645协议中规定,表号字段,数据字段都是逆序的,也就是与实际表号循序相反,我们要得到实际表号,需要反转数据帧中的表号字段87 14 37 00 00 00 ,反转后我们得到:000000371487,对比实际表号,确认解析正确。
应答帧中紫色1字节数据91为帧控制码,它表示本数据帧的帧类型,我们可以根据这个字节判断识别是07还是97协议,也可以通过此字节判断是请求帧还是应答帧,DLT645-2007协议定义如下:
解析控制码,我们需要将十六进制的控制码91转换成二进制数据10010001,高位的1对应上图控制码中的D7位,我们将转换后二进制数据一一对应到上图中,91的含义为主站发送的读数据应答帧,从站正确应答,且无后续数据帧。
应答帧中黑色1字节数据 08 为数据段长度,它表示从本帧数据中数据段的长度,也就是从长度字节 08 之后有多少个字节是数据段。本帧中长度字段为 08,表示数据段长度为8字节,我们可以据此,将数据段截取出来,即:
33 33 33 33 39 37 33 33
解析数据段的数据项标识:
数据段分为两部分,数据项标识部分和数值部分。数据像标识部分为黄色部分33 33 34 33,它也是逆序传输的,且需要统一逐个减去十六进制0x33后才是真实值,步骤如下:
第一步:减去十六进制0x33
33 33 33 33------减33------->00 00 00 00
第二步:四个字节反转顺序
00 00 00 00-------反转------->00 00 00 00
得到数据项标识 00 00 00 00,查询DLT645-2007协议,可以知道,00 00 00 00 标识当前组合有功总电能,即我们常用的电量值。
对比实际数据标识值,确认解析正确。
解析数据段的数据:
33 33 33 33 39 37 33 33
应答帧中蓝色部分数据是当前组合有功总电能,同样的,它也是逆序传输的,且需要统一逐个减去十六进制0x33后才是真实值,下面我们对 39 37 33 33 进行三步处理:
第一步:减去十六进制0x33
39 37 33 33--------减33-------->06 04 00 00
第二步:四个字节反转顺序
06 04 00 00--------反转-------->00 00 04 06
第三步:在指定位置加入小数点
00 00 04 06------加小数点-----> 00 00 04.06
三步骤完成得出当前电量为4.06kW.h。
通信校验是很重要,但是DLT645只有一个字节的简单校验和,即接收帧中紫色DD,他固定为倒数第二字节,它的值是它前面从第一个68起始符开始到最后一字节数据段的单字节累加和(单字节累加,忽略溢出)
FE FE FE FE 68 87 14 37 00 00 00 68 91 08 33 33 33 33 39 37 33 33 DD 16
计算方式是十六进制加法:
68 + 87 + 14 + 37 + 00 + 00 + 00 + 68 + 91 + 08 + 33 + 33 + 33 + 33 + 39 + 37 + 33 + 33 = 3DD
计算结果为十六进制的3DD,超出一个字节的高位溢出部分我们忽略,也就是忽略高位3,最后计算出的校验和为DD,经过对比我们收到的校验码也是DD,校验通过