一、简介
目前市面的大部分的电表,通信都是遵循该协议。因为物理层使用RS-485,故为半双工通信,主站指终端设备,从站指多功能电能表。
数据链路层,默认波特率2400,偶校验,8bit数据,1bit停止位。先传低位,后传高位。D0是字节最低有效位,D7是字节最高有效位,如下图所示
帧格式如下表所示
说明 | 帧起始符 | 地址域 | 帧起始符 | 控制码 | 数据域长度 | 数据域 | 校验码 | 结束符 |
---|---|---|---|---|---|---|---|---|
字节 | 0x68 | A0~A5 | 0x68 | C | L | DATA | CS | 0x16 |
1、帧起始符 | ||||||||
固定0x68。 | ||||||||
2、地址域 | ||||||||
由6个字节A0~A5构成,每个字节2位BCD码,故地址长度为12位十进制数,当地址码长度不足6字节时,高位用0补足。通讯地址0x9999 9999 9999时,为广播地址。特殊的是,地址域支持锁位寻址,从若干低位起,剩余高位补0xAA,作为通配符进行读表操作,从站应答帧会返回实际通信地址。 | ||||||||
什么是BCD码,我们知道,正常情况下,二进制、十进制、十六进制之间有一套转化的算法,例如18=0x12=10010。但是BCD码不同,它用四位二进制来表示十进制,最常用的是8421BCD码,例如8=1000,7=0111,为了方便,还是习惯把二进制用十六进制来表示,故8=0x8,7=0x7,但是问题来了,10怎么用BCD码表示,0xA?不是的,10用BCD表示是0x10。因为1的BCD码是0001,0的BCD码是0000,故10的BCD码是0001 0000,为了方便,表示为16进制,故为0x10。显然,9876的BCD码是0x9876。所以用BCD码的好处就是直观,这在工业领域大量的被应用。 | ||||||||
上面讲的是BCD码是压缩BCD码,它使用4位标识一个十进制数,1个字节可以表示2位十进制数。而非压缩BCD码使用1个字节来表示,故其高4位永远是0,1个字节只能表示1位十进制数。 | ||||||||
3、控制码C | ||||||||
用来表示帧的功能,具体如下所示: | ||||||||
![]() |
||||||||
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
– | – | – | – | – | – | – | – | |
0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | |
0x91代表电表返回的数据 | ||||||||
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 | |
– | – | – | – | – |