基于电力线通信(PLC)的自动抄表(AMR)应用在我国已有十多年历史。近几年来,技术的发展重点从点对点通信能力转向了网络系统能力,从而使自动抄表产品达到了实用的程度。目前,自动抄表技术正处于从小批量应用转向大面积推广的阶段。在这一阶段遇到了一些阻力。例如互联互通、模块互换等问题已经引起了业界的充分注意,并在国网公司的协调下制定了初步的可行解决方案和计划。但是,还有一些现实的问题未被充分注意和讨论,而这些问题有可能成为抄表系统大批量应用的瓶颈。本文着重讨论配电台区与电能表的管辖关系问题,它涉及到系统初始的施工量和日常的维护量。
1 典型的PLCAMR体系
典型的PLCAMR体系由三级系统构成:主站、集中器和电能表终端。主站负责管理全局的集中器与电能表信息,可通过光纤、GPRS、公话网或其他方式与集中器通信;集中器一般每个配电台区安装一个,管理所在台区的全部电能表,其日常工作是通过电力线通信采集各电能表数据;电能表负责计量用电户的各类用电量。
当前的集中器虽然不同程度地具备了自学习路由知识和自组网络的能力,但还不能基于纯零知识开始工作。只有在了解了要管辖的电能表编号及其计量项目后才能工作,这就要求电力营销部门理清配电台区的用电户档案,尤其是电能表编号,通过主站将这些资料下发到台区集中器,才能启动自动抄表。同样,在抄表系统运行过程中,当台区内发生更换电能表、新增用电户或者台区之间发生线路切换等业务时,必须及时正确地维护集中器中的用户资料。由于电力公司通常是按照面向人工抄表的习惯划分组织用户资料(例如按街道顺序组织),理清配电台区与用电户的关系往往需要耗费很大的人力。所以经常因为台区集中器装入了错误的表号而导致费时费力的现场排查工作,尤其对于用电历史长的老城区,理清电能表与台区的关系极其困难,成为普及自动抄表技术的关键瓶颈。
解决上述问题的本质在于系统能够从零知识开始工作。所谓零知识是指初始时主站只知道有哪些配电台区和集中器,但是并不清楚哪些电能表属于哪个台区的集中器;集中器仅知道自己的编号(ID),但不知道有哪些,有多少电能表隶属自己;电能表仅知道自己的编号(还有自己的计量项目),但不知管辖自己的集中器是谁。
在上述条件下,要求集中器能够自动获取所在台区已经安装的全部电能表表号(及其可抄读数据项)。在对等网络中这一要求较容易满足,因为对等网络的任意节点都可以主动地启动通信业务,只要配以载波冲突检测和随机回避等待机制即可完成主动注册任务。但目前国家电网关于自动抄表的通信协议都是主从结构的,电能表作为通信节点只有被动应答的能力,不能主动发起通信任务[1-4]。为了适应主从体系结构,本文设计了专门的电能表捕获算法。该算法的优点在于不需要额外的空间资源,线性时间,倘若台区内有n个电能表,算法可在O(n)次报文跳转时间内完成搜索任务。
2 表号捕获算法
假设电能表编号的区间为[a,b](实际应用中a=0,b=1012,或者说是6 B的BCD码)。表号捕获算法的核心思想比较简单,有2点:
(1)对于给定的表号区间I=[a,b],利用报文冲突判断出3种情况:在区间I中恰有1只电能表;在区间I中无电能表;在区间I中存在多只电能表。
(2)利用二分搜索技术快速缩减查找空间。
以下分4个子节描述基于上述思想的表号捕获算法。为了简明本文略去实现细节。在以后的叙述中,集中器和电能表统称为节点。
2.1 判定给定区间的邻居分布情况
首先定义一种查询报文Q={IDsource,a,b}。其中IDsource为报文源节点(发出者)的编号,IDmin≤a≤b≤IDmax。报文Q向编号在区间[a,b]内的节点发出查询请求,凡是编号在此区间的节点(即编号IDme满足a≤IDme≤b的节点)收到该报文后立即回应一个报文R={IDme,r},报出自己的编号IDme和自己的属性r。
定义了以上2种报文,节点IDsource判定给定区间[a,b]的邻居情况的方法是依靠区别冲突信号与背景噪音的能力。这种能力是指当有多个节点同时发送报文时,接收节点虽然由于报文冲突不能正确地收到任何一个报文,但不会和无报文(线路上只有背景噪音)混为一谈,接收者能够根据冲突信号与背景噪音的特征差异判断出有多个报文同时到达并造成了冲突。正如当多人同时讲话时,可能听不清楚任何一个人说的内容,但能够断定有多人在讲话。如果PLC的物理层能够将冲突信号与背景噪音区分出来,则一个节点IDsource就可以发送报文Q={IDsource,a,b},然后利用载波侦听判定其周围节点的编号。在给定编号区间[a,b]内的3种分布情况为:
(1)正确完整地侦听到一个报文R={IDme,r}:说明存在编号为IDme的节点,且是唯一的一个编号在a和b之间的节点。
(2)未能正确地侦听到任何一个报文,并且线路只有背景噪音:说明没有节点其编号在a和b之间;
(3)未能正确地侦听到任何一个报文,但是存在冲突信号:说明存在多个节点,其编号在a和b之间。
然而,目前的PLC技术还不能提供区分冲突信号与背景噪音的能力,从而分辨不清情况(2)、(3)。目前的低成本技术仅能做到接收到报文或者接收不到报文。在未收到报文时,区分不出是情况(2)还是情况(3)。对于低成本的载波芯片,实现这一功能目前还是一项极具挑战性的任务。在此,本文给出一个方法可绕过这一难题。该方法利用报文冲突实现这一功能,在收不到报文时,利用报文冲突进一步区分出是的确没有报文,还是由于多个节点同时发送报文造成了冲突。采用该方法需要付出额外的代价是:多一次报文应答过程;源节点需要事先知道一个确实存在的节点IDknown;需要定义一种新型的报文S={IDsource,IDknown,a,b}。
S型报文比Q型报文多了一个已知节点的编号IDknown,该报文的功能是令编号为IDknown的节点或编号处于a、b之间的节点收到该S报文后立即回应R型报文,报出自己的编号和属性。区分上述3种情况的算法如下:
算法1 WhoIn(a,b):
算法说明:该算法的输入是两个非负整数 a、b,使得[a,b]形成节点ID区间; 设运行该算法的节点的ID为IDsource,节点IDsource已知其一个邻居节点IDknown,算法要求IDknown不属于区间[a,b];该算法判定节点IDsource有一个、还是没有、还是有多个邻居其ID属于区间[a,b];对应这三种情况,算法分别报告唯一邻居的ID、或者ZERO、或者MANY。
send out a packet Q={IDsource,a,b}
wait for a packet R
if a packet R={IDme,r} arrived
then return IDme //*IDme is the unique neighbor
in[a,b]*/
else if a=b
then return ZERO
else send out a packet S={IDsource,IDknown,a,b}
wait for a packet R
if a packet R={IDme,r} arrived
then return ZERO //*Dme must be IDknown
and whose packet has not been
collided*//
else if no packet received
then return MANY //*IDme must have been interfered with some neighbors
in[a,b]*//
end if
end if
显然,该算法最坏情况下也能在4次报文跳转的时间内作出正确判断。
2.2 搜索编号最小的邻居节点
使用普通的二分搜索技术,节点IDsource在表号区间[a,b]上重复地调用算法WhoIn,可以快速地搜索出编号最小的邻居节点(若存在)。算法可递归描述如下:
算法2 MinID(a,b):
算法说明:该算法的输入及要求同算法WhoIn(a,b);如果区间[a,b]有邻居节点,算法返回其中最小的ID,否则返回ZERO。
let result=WhoIn(a,b)
if result is a valid ID or result=ZERO
then return result
let result=MinID(a,[(a+b)/2])
if result is a valid ID
then return result
else return MinID([(a+b)/2],b)
该算法log(b-a)次调用算法WhoIn,其总的时间复杂度不大于4log(b-a)次报文跳。
2.3 搜索全部邻居节点编号
有了MinID算法,节点IDsource通过在表号区间[a,b]重复地搜索最小的未知表号,直至获得ZERO值。算法如下:
算法3 IDsIn(a,b):
result=MinID(a,b)
while result≠ZERO do
report result
result=MinID(result+1,b)
end while
该算法最多每4log(b-a)跳时间搜索到一个节点。若节点IDsource在区间[a,b]上有n个邻居节点,节点IDsource在4nlog(b-a)跳时间内可完成捕获这n只电能表的任务。
2.4 集中器捕获全部电能表节点
假设一个台区内存在n个电能表节点,由集中器节点直接运行算法IDsIn(0,248),可在 4nlog(248-0)≤192n跳时间内搜索到全部一跳(直抄)电能表节点。然后由集中器通知一跳表,二跳表,……。运行同一算法,并将发现的节点编号上报集中器,于是集中器可以继续搜索到二跳表,三跳表,……。全部过程进行完最多用192n2跳时间。
为了简单易读,上述的2.1~2.4节中只是在思路层叙述算法设计,忽略了很多重要的实现细节。
时间界192n2在2.4节中估计得很粗略。将一些精细的实现细节纳入考虑后,该时间界可下降。例如在任何节点执行该算法时,如果其他节点记录侦听到的节点,则时间可降至192n跳。
在青岛东软公司的一个实验台区运行本文所述算法,捕获全部的620只电能表需要1.5 h。算法实现细节上可以进一步优化,使捕获效率更高。
参考文献
[1] Q/GDW 376.1-2009电力用户用电信息采集系统通信协议,第一部分:主站与采集终端通信协议.
[2] Q/GDW 376.2-2009电力用户用电信息采集系统通信协议,第二部分:集中器本地通信模块接口协议.
[3] DL/T645-2007,多功能电能表通信协议.
[4] DL/T645-1997,多功能电能表通信规约.