首页
社区
课程
招聘
[原创]智能电表安全之通讯分析(一)
2022-4-11 10:14 25316

[原创]智能电表安全之通讯分析(一)

2022-4-11 10:14
25316

关于基础设施电表安全的还没见过有雪友发过,踩坑过程也写下来了希望后面有研究的朋友少踩坑(取之看雪,还之看雪吧)

平时研究二进制漏洞和内核遇到的问题都在看雪得到了答案,也很感谢这些前辈将自己解决问题的思路共享出来,让后人少踩坑

设备信息和结构组成

参数信息:

型号

XXX

静态功耗

1.5W10VA

频率

(50±2.5)   Hz

额定电压

220V

启动电流

0.004Ib

标定(最大)电流

60A

电表类型

单相电表

imp/kwh

1200

规约

DL/T645-2007

抄表

远程/RS 485/载波

制造商

XXXXX股份有限公司

功能配置:

序号

类型

功能列表

1

电量计量

正向有功电能、反向有功电能、组合有功电能

2

清零

电表清零

3

输出

电量脉冲(光脉冲和电脉冲)

4

安全认证

安全认证功能

5

显示功能

自动循显、按键循显

6

通信

RS485接口

7

费控功能

本地费控功能

8

时钟

备用电池保证时钟在停电条件下正常运行(仅带电池电表支持)

9

费率时段

支持多费率和阶梯电价(仅带电池电表支持)

组成结构

实物图:

通讯方式

    从电表的详细参数可以得知主要支持的通讯方式为脉冲通讯和载波通讯,该款电表支持使用载波RS485协议建立通讯连接,RS485是串口的一种,常见的还有RS232RS422都属于串口,485是半双工通讯,传输速率在10Mbps左右,发送数据的时候,控制CTRL为高电平,数据通过TXD发送出去(这个在电表图中右下角的位置),要接收数据的时候,控制CTRL为低电平,数据通过RXD(这个在电表图中右下角第二的位置)接收回来实现收发,简单说就是把TTL的“0-3.3V/5V之间摆动”的信号,转换为“5V压差颠倒反转的AB线信号”。

    最左侧的编号从5开始到12分别代表了对外的接口,每个接口都各自对应在PCB上。



序号

功能

5-6

跳闸控制

7-8

脉冲正负

9-10

多功能口正负

11-12

RS485(A/B)接口


    我使用了RS485用子线接A/B后进行异步串行通信,如下图所示。 正对正负对负(data+ data-)

如果出现部分通信不正常,可以确定问题是否出现在转接器中(我在实际实验过程中就出现了转接器故障最后通过短接测试才发现问题出在哪,最后买了一个新的转接器)转换器子线正接正、负接负进行短接测试。

通过系统设备管理器查看是否有COM口已经接入,如果有就可以串口通信了,一般波特率可以设置在2400或者9600其中一个,校验位改成“偶校验”。

波特率的字节格式每字节含8位二进制码,传输时加上一个起始位(0)、一个偶校验位和一个停止位(1)11位。如下图,D0是字节的最低有效位,D7是字节的最高有效位。先传低位,后传高位。

尝试发送数据看看是否能够正常接收到数据,因为是短接测试所以发送什么数据就会收到什么数据。

如果收不到数据可能你的转换接口或者子线接入是有问题的。以上测试完成后就可以给电表上电了,先将转接器一头接入电脑USB,然后将子线接入电表RS485 A/B口,记住:正对正负对负。

我这款就是单相电能表,单相电表从左到右有四个接线端依次为1234,通过单相电表的剖析图可以得知分火、零两线(13为进,24为出,13)

这里我自己制作了简单的一条电线,我使用了14口构成电回路(134都行,别接2火线接火线会跳闸。)

插入插座上电后就可以通过USB打开串口和电表通讯了。

电表有专用的电力通讯标准,也是国家的一个标准统称叫645DL/T 645》最早在1997年发布一个《DL/T 645-1997》的通讯标准,而后在2007发布《DL/T 645-2007》,现在2007已经替代了1997的标准了,从信息头可以看到。

电力协议是一个相对比较复杂的协议,光看完标准得半个月-1个月。

电表数据读取

        目前新表主流还是07版的,下面就解析这两种表通信协议:



标准中提到协议为主/从结构的半双工通信方式。每帧由前导符、帧长度、特征域、地址域、控制域、数据域、校验域、结束符等8个域组成。

前导符

帧长度

特征域

地址域

控制域

数据域

校验域

结束符

那么依据此标准的格式域就可以对电表数据进行读取,在实际应用场景从主节点到基表 MCU 之间的下行和上行数据传输格式如下:

还会遇到中继路由的情况,可能还存在其他场景也挺复杂的,通过串口方式实现一个数据读写的代码来实现数据读取,这里我使用C/C++来完成了。

先尝试读取电表的地址,通过标准可以发现在不知道电表地址的情况下可以使用AAH去替代地址

发送数据:68H AAH AAH AAH AAH AAH AAH 68H 13H 00H DFH 16H

   因为写代码花的时间比较少,这里没有把串口同步的代码写上不过没有关系,根据标准的要求提到16H为结束符。(代码写的丑就不贴了)


        整理后的数据为:68 89 41 53 20 51 17 68 93 06 BC 74 86 53 84 4A E5 16

        至此成功获取了电表的返回数据,通过标准解析:

        894153205117(地址域)

        93(控制码)

        06(数据域长度)

        BC 74 86 53(数据域寄存器地址)

        84 4A(数据项)

        E5 16(校验码\结束符)

        根据传输次序-低在前,高在后得到175120534189 为电表的地址,后来我发现该地址其实就是外壳贴条上的那一串No.

        电表数的计算公式:数据项-33H=电表数

        84H-33H=51H

        4AH-33H=17H

        电表数为:1751

        

  也可获取如电量数据、电表时间、峰平谷值、用电总量、金额等,就先到这。(另外想问问看雪搞IOT的雪友有没有性价比高的焊枪推荐)



[培训]内核驱动高级班,冲击BAT一流互联网大厂工 作,每周日13:00-18:00直播授课

最后于 2022-4-11 10:19 被badboyl编辑 ,原因:
收藏
点赞4
打赏
分享
打赏 + 80.00雪花
打赏次数 1 雪花 + 80.00
 
赞赏  Editor   +80.00 2022/05/09 恭喜您获得“雪花”奖励,安全圈有你而精彩!
最新回复 (10)
雪    币: 2415
活跃值: (1684)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
fengzhidian 2 2022-4-11 10:56
2
0
厉害,焊枪我是用两百多块钱的二合一拆焊台。这表有无线吗?
雪    币: 3985
活跃值: (5624)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
badboyl 2 2022-4-11 11:12
3
0
fengzhidian 厉害,焊枪我是用两百多块钱的二合一拆焊台。这表有无线吗?
脉冲    焊枪有连接嘛?
雪    币: 0
活跃值: (58)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
lsal 2022-4-11 11:20
4
0
集中器更好玩
雪    币: 2415
活跃值: (1684)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
fengzhidian 2 2022-4-11 12:03
5
0
https://item.taobao.com/item.htm?spm=a230r.1.14.7.3cf23dcdYEH4B6&id=604041704933&ns=1&abbucket=16#detail
雪    币: 2415
活跃值: (1684)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
fengzhidian 2 2022-4-11 12:05
6
0
blck四 脉冲 焊枪有连接嘛?
烙铁头买几个刀和马蹄的,我用马蹄的多
雪    币: 3985
活跃值: (5624)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
badboyl 2 2022-4-11 12:05
7
0
fengzhidian https://item.taobao.com/item.htm?spm=a230r.1.14.7.3cf23dcdYEH4B6&id=604041704933&ns=1&ab ...
thanks
雪    币: 1037
活跃值: (1700)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wooyunking 2022-4-11 12:32
8
0
推荐买T12或JBC的
雪    币: 7325
活跃值: (3296)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
十年后 2022-4-12 09:39
9
0
学习了,谢谢分享
雪    币: 7321
活跃值: (921)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
祭祀雨人 2022-4-16 01:31
10
0
人才…之前从没想过会有人发类似的帖子,学习了
雪    币: 218
活跃值: (218)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
re1wn 2022-5-10 08:40
11
0
师傅,你是电网的工作人员吗?
游客
登录 | 注册 方可回帖
返回