电力采集终端RS485通道搜表机制研究
扫描二维码
随时随地手机看文章
引言
如今,智能电能表已逐步取代老式电能表,智能电能表通过DL/T645或DL/T698协议将数据传输到采集终端,再由采集终端通过上行协议传输到用采主站。相比于以前的手动抄表,整个流程节省了大量的人力,极大地提高了数据采集效率。而搜表功能,则是通过下发广播报文,根据台区下电能表的响应,来统计台区电能表数量,并记录表地址,从而进行档案下发以及数据统计等工作。因此,提高搜表效率,有利于减少数据采集的整体时间,提高数据采集效率。
1RS485搜表原理
在采集终端下发采集数据的报文中,根据DL/T645或DL/T698协议,可通过将地址域的一个或多个字节替换成0xAA的方法,来达到当前字节为任意的效果,从而可以实现广播一条报文给所有符合条件电能表的功能。如果返回报文可解析,就得到了一块表的地址:如果不可解析,就说明满足当前地址条件的表数量不止一块,多条报文通过同一个通道返回糅杂在了一起,那么可以减少0xAA字节的数量,细化地址继续搜表,直到报文可解析为止。
2.1现有搜表方法
1.1.1不扩展抄表协议
在不扩展抄表协议的情况下,一般是先下发一条全0xAA地址的广播报文,确认一下当前RS485通道以及当前波特率下是否存在电能表。如果返回不止一条报文,无法进行解析,则替换最低位字节地址逐个搜寻:如果返回报文可解析,则记录。就这样逐轮次递归,逐个替换高一字节地址,直到搜齐为止。
1.1.2扩展抄表协议
杭州海兴电力科技股份有限公司于2021年提出了一种注册搜表的模式[2]:采集终端发送包含标记指令的搜表报文,电能表接收到后通过判断自身的注册状态来决定是否返回。这样就有效减少了重复表地址的返回,减少了搜表轮次。
1.2目前存在的问题
目前来看,普通的RS485搜表方法存在搜表周期长、轮次多、搜表慢的问题,如果遇到低位字节相同的特殊情况,搜表周期就会达到一个离谱的长度,且其中大部分时间都浪费于无意义的枚举,存在大量时间冗余。而注册搜表无疑在速度上提高了很多,但需要电能表回复特殊的搜表报文,以及判断自身是否是注册状态,这对普通的电能表协议进行了一部分扩展,在实际应用中不适合目前已稳定运行的台区环境。
2问题分析
针对1.1中提到的两种方法,本文提出了一种基于当前搜表协议的RS485通道的搜表算法,通过计算不同遍历层级的地址总数,以及分析优化遍历的字节路线,来达到在不扩展协议的前提下,有效减少搜表中存在的时间冗余,提高搜表效率的效果,且该算法在不规则表地址的场景下有着良好的调节能力。
3优化措施
在搜表返回报文的处理上,一般遇到无法解析的报文,只能判断为多块表同时返回,从而继续下一轮替换地址,但一个字节的地址替换就要遍历0x00到0x99共100种情况,如果提前搜出了目标表,但无法判断表的数量,则必须将所有情况遍历一遍,这无疑导致了极大的时间冗余。
因此,可以通过一定的方法来判断返回表的具体数量。这里以645表举例,如果将正向有功作为搜表报文,发送一条[68AAAAAAAAAAAA68110433323433xx16]的报文,返回报文的长度为36字节,算上前置4个0xFE就是40字节,可以通过RS48S通道上返回的报文长度,计算标志性字节,如5xFE、0x68的数量来确定当前地址下的表数量。如果当前地址下有返回,那么可以再下发一遍同样的报文来确保计算的准确度。在搜到表了之后,可以对比当前地址下的总数量,如果已经满足,那么就可以舍弃后续的循环遍历,提高搜表效率。
除此之外,当收到一条完整可解析报文的时候,可以针对解析出来的表地址,将部分字节替换成0xAA下发,并且记录统计返回报文中分析出来的表数量,加快枚举进度。比如说,下发[AAAAAAAAAAAA]地址的一条报文,分析返回报文得出有3块表。如果3块表的表地址分别为[xxxxxxaaaaaa][xxxxxxaabbcc][xxxxxxccbbcc],那么当表1首先被搜出来之后,可以替换部分字节的地址下发报文,得出对应的报文数量进行分析,从而计算优化遍历顺序。比如上述报文中得出表1地址,可以将全AA地址中每一字节分别替换为表1中对应字节来下发报文,得到返回报文的表数量分别为:[333211],由此可以分析得出,当前3块表高位前3字节相同,且另外存在一块表低位第3字节与表1相同。那么当继续遍历到[AAAAAAAAAAcc]时发现存在两块表,从上述信息中就可以得出剩余两块表低位第3字节不同,就可以在下一个遍历层级中直接遍历低位第3字节,减少了低位第2字节重复的轮次。当然在实际场景下,同一批次的电能表一般只有后几个字节存在区别,但是如果遇到不规则表地址的场景,本文的方法可以有效提高调节容错能力。
具体操作流程如下:
设当前台区下存有N块64S电能表,通道为RS48S,波特率2400。
(1)发送报文[68AAAAAAAAAAAA68110433323433xx16],根据返回的报文计算得出条数N,重复发送计算以保证准确性。
(2)替换最低位地址,从00~99逐个自增,直到接收到返回报文。
(3)计算返回报文中完整条数K,如果K=1,则解析报文,得到当前表地址,存入地址列表中,并且判断当前所得的地址条数是否达到了上一级计算出的地址总数K1:如果达到了,则比较上上级,直到达到总数N搜表结束或者未达到某一级的总数K为止。
(4)如果达到了某一级未达到总数K,则将刚解析出来的地址中部分字节替换成0xAA,发送并统计返回的报文条数,根据当前总数K和各个字节返回的报文条数M,可以分析得出最适合下一轮遍历的字节位置。且当前轮次总数满足不继续遍历,回到上一级。
(5)在步骤(3)中,如果当前报文条数K>1,则可以通过替换之前轮次步骤(4)中计算得出的字节,进行下一级的遍历循环,重复步骤(2)到(5):如果之前不存在步骤(4),则从低到高字节顺替。下一级遍历需要搜寻的地址总数为K。
(6)当满足搜表总数N,则在步骤(3)中退出搜表。整体流程如图1所示。
4验证结果
在实际验证过程中,通过算法得到的电能表总数可以很好地帮助节省不同层级搜表所需要的时间,这在提高整体效率上做出了巨大贡献。但是,这种提升在一定程度上取决于被搜表的表地址,所有表的表地址中有差异的最高地址位的字节值越接近下限0x00,则提高效率的效果越好。但是当有差异的最高地址位增加时,由于不同轮次减少的时间是相互乘加的,这样总体节约的轮次就显得很可观。整体期望值如表1所示。
但在实际验证中发现,优化下级遍历路线的方法效率提升并不明显。在现场台区环境下,台区下的电能表基本都是同一批次下的,因此表地址差异并不会太大,基本都是最低2字节上存在差异,且表地址分布较为密集,路线的选择并不能带来较大的优化。但验证过程中也测试了极端的低位相同、高位不同的表号,路线优化选择方法在这种情况下确实能显著地提高搜表效率。
除此之外,本文的方法尚有许多不足之处。比如在两只表处于同一遍历轮次中时,搜出第一只表并不能加快搜第二只表的速度。在这方面,文中提到的注册模式就能极大地提高效率,那么在当前表计协议的范畴内,是否有方法能够达到相似的效果,还有待研究。本文通过解析特殊字符来判断完整报文数量,那么是否可以通过算法剔除已搜到的电能表报文,得出其余报文的表地址或表地址区间,还可以进行深入研究。
5结语
本文介绍了目前电力系统中常用的RS485搜表机制,讲解了基础的搜表原理及流程,并对目前主流搜表方法进行了分析,结合它们的优点提出了一种基于当前表记协议的高效率搜表方法,通过报文分析及数据处理,优化搜表的遍历路线,减少搜完后的冗余时间,进一步提高搜表的效率。