当大家阅读完前6部分,就已经初步完成了PLC模块的配置工作,接下来给大家介绍一下如果利用Sniffer软件查看电力线路上传输的PLC数据帧。所以Sniffer软件就像是一个Spy,来侦测具体电力线上的传输的命令和数据帧,可以方便用户进行网络情况的评估以及判断。
首先要下载Sniffer软件,具体的下载在前几章节已经提及过。
安装完成后,在桌面上会看到如下的小红青蛙图标:
双击Sniffer软件,会出现如下的界面,让大家来设置使用的PC机串口和利用解析Prime的插件程序。
可以在Setup中,进行串口信息的设置。
Debug Level是设置Sniffer软件的显示信息的详细程度,Debug Level=10,是非常详细的显示出任何一条命令的详细信息,Debug Level=9,是显示所有命令,但不进行完整解析。 Debug Level=8,跟9比较只是不显示Beacon信息,其他信息进行显示。当设置完成之后,选择Send,将命令传输给DSP,会收到Success的返回。
接下来给大家看一个典型的PLC 模块的注册,连接以及发送数据的过程, Debug Level=9.
其中绿色的语句为Sniffer检测到的Beacon命令,如果利用Debug Level=8,将不显示Beacon命令。
下面我将其中的白色语句进行单独提炼:
1. REG注册过程:
1)其中第13行和第14行的命令帧为:
Sniffer GPDU Level=0,Downlink=0,ppduLen=21,Len=14,mcs=4,pLv=15
REG CTRL SID=0,LNID=16383,LEN=8,nFlag=0,spc=0,time=0,PayLoad[0x03280000,0x00001234]
此语句为UpLink语句,也就是从Meter端传输到DC端的PLC传输命令帧。
DownLink=0, 即为UpLink
SID为Switch ID,因为DC和Meter是直连的,中间没有Switch存在。
LNID为 DC给表分配的Short Address,默认情况下首先使用16383,0x3FFF为LNID
MCS=4, 即调试模式为BPSK+FEC
此语句的含义为 REG,即Meter端向DC端进行注册请求。
2)第16行和第17行的命令帧为
Sniffer GPDU Level=0,Downlink=1,ppduLen=21,Len=14,mcs=4,pLv=18
REG CTRL SID=0,LNID=5,LEN=8,nFlag=0,spc=0,time=7,PayLoad[0x022f0000,0x00001234]
此语句为DownLink语句,也就是从DC端传输到Meter端的PLC传输命令帧。
DownLink=1, 即为DownLink
LNID=5,此时DC已经将表的Short Address设置成5.
3)第18行和第19行的命令帧为:
Sniffer GPDU Level=0,Downlink=0,ppduLen=21,Len=14,mcs=4,pLv=14
REG CTRL SID=0,LNID=5,LEN=8,nFlag=0,spc=0,time=0,PayLoad[0x02280000,0x00001234]
此语句为UpLink语句,也就是从DC给Meter端的REG注册确认。
LNID=5,EUI-48=1234
通过以上三条语句,就完成了注册的流程。
2. CON连接过程:
从第20行到第23行为整个连接过程:
Sniffer GPDU Level=0,Downlink=0,ppduLen=23,Len=16,mcs=4,pLv=16
CON CTRL SID=0,LNID=5,LEN=10,nFlag=0,arqFlag=0,lcid=256,type=3,dLen=6
Sniffer GPDU Level=0,Downlink=1,ppduLen=21,Len=14,mcs=4,pLv=19
CON CTRL SID=0,LNID=5,LEN=8,nFlag=0,arqFlag=0,lcid=256,type=3,dLen=4
首先DownLink=0,为UpLink,由Meter向表发送连接请求。
然后收到DownLink=1,由集中器给表回复的CON确认帧。
以上两条命令,完成了连接过程。
3.Keep ALV:
但表已经注册到集中器上时,集中器会不断发送Keep alive命令来确保所注册连接的结点是存活的。例如下面第50到底53行:
Sniffer GPDU Level=0,Downlink=1,ppduLen=16,Len=9,mcs=4,pLv=20
ALV CTRL SID=0,LNID=5,LEN=3,rxCnt=0,txCnt=0,time=0,ssid=0xff,PayLoad[0x0000ff00]
Sniffer GPDU Level=0,Downlink=0,ppduLen=16,Len=9,mcs=4,pLv=12
ALV CTRL SID=0,LNID=5,LEN=3,rxCnt=1,txCnt=1,time=0,ssid=0xff,PayLoad[0x2400ff00]
首先由DC发起的ALV命令,当表接收到时,会回复一个UpLink的ALV确认帧。
4. PNPDU
如果一个新上电的表端,听不到周围的Beacon,则此表就会发送PNPDU寻求帮助命令,具体格式如下:
Sniffer PNPDU from PNA=0x0000:0000:3412
即为EUI-48=1234的表发送的求救信号,周围听到的SN会帮助其将其请求通过已经存在的链路发送给DC。
5. PRO
DC会根据情况进行一个节点的Promote,将其Promote成Switch。
1)Sniffer PNPDU from PNA=0x0000:0000:1500
2)Sniffer GPDU Level=0,Downlink=0,ppduLen=24,Len=17,mcs=4,pLv=19
Sniffer MAC PRO CTRL Level=0,Downlink=0,SID=0,LNID=28,LEN=11,PayLoad[0x18ff0000,0x00000015,0x04040600]
3)Sniffer GPDU Level=0,Downlink=1,ppduLen=15,Len=8,mcs=4,pLv=23
Sniffer MAC PRO CTRL Level=0,Downlink=1,SID=0,LNID=28,LEN=2,PayLoad[0x07030000,0x00000000,0x00000000]
4)Sniffer GPDU Level=0,Downlink=0,ppduLen=15,Len=8,mcs=4,pLv=14
Sniffer MAC PRO CTRL Level=0,Downlink=0,SID=0,LNID=28,LEN=2,PayLoad[0x07030000,0x00000000,0x00000000]
5)Sniffer GPDU Level=0,Downlink=1,ppduLen=15,Len=8,mcs=4,pLv=19
Sniffer MAC BSI CTRL Level=0,Downlink=1,SID=0,LNID=28,LEN=2,PayLoad[0x04500000,0x00000000,0x00000000]
6)Sniffer GPDU Level=0,Downlink=0,ppduLen=15,Len=8,mcs=4,pLv=18
Sniffer MAC BSI CTRL Level=0,Downlink=0,SID=0,LNID=28,LEN=2,PayLoad[0x04500000,0x00000000,0x00000000]
6. Data Transfer
数据传输首先要由DC发起,例如下面这个命令帧
Sniffer GPDU Level=0,Downlink=1,ppduLen=20,Len=13,mcs=4,pLv=17
Sniffer MAC DATA Level=0,Downlink=1,SID=0,LNID=1,LEN=7,LCID=256,PayLoad[0x00900101,0x32333210]
其中后面的0x32333210为DC发送给Meter端是数据。
我想通过以上的描述,大家应该大概对Prime的整个注册和组网流程有了一个了解,我们可以在集中器端将连接上的模块的信息打印出来,利用get-node-info这个命令在Linux平台。
---------------------------------------------------------------------
EUI-48 SID LNID LEVEL LSID 432-ADDR SERIAL-NR
---------------------------------------------------------------------
66:66:66:66:66:66 000 0001 00 -- 01 66 66 66 66 66 66
11:11:11:11:11:11 000 0002 00 -- 02 11 11 11 11 11 11