朱 敏, 朱志敏, 陶维青, 牛 涛
(合肥工业大学 电气与自动化工程学院,安徽 合肥 230009)
随着配电网的快速发展以及风电、光伏等分布式能源的大量接入,给配电网的运行带来了新的技术难题,对配电网的安全、稳定、经济和可靠性产生大量影响,配电网的稳定监控变得尤为重要[1]。同步相量测量技术自1980年提出以来,日趋成熟,并已成功应用到基于同步相量测量单元(phasor measurement unit,PMU)的广域测量系统,在电力系统状态估计、电压稳定性监视等多个方面发挥着重要作用[2-3]。而与此同时,国内外正在积极探索同步相量测量技术在配电网的应用,文献[4-5]研发的基于同步相量测量技术的频率测量网络已经应用于110 V的低压配电网,其成果已经证明同步相量测量技术有利于保证配电网的安全经济运行。
同步相量测量技术的广域测量系统(wide area measurement system,WAMS)中的PMU基于全球卫星定位系统,在电力系统的不同节点采集实时相量送到相量数据集中器(phasor data concentrator,PDC)。PDC同时接收多个PMU的测量数据,对齐所有PMU测量数据的时标,组包发送给主站,PDC起着承上启下的关键作用[6-8]。配电网与主网通信方案不同,其组网通信方案带来的不同时延问题给PDC对齐所有PMU测量数据的时标增加了技术难题。另一方面,项目要求配电网WAMS通信采用GB/T 26865.2—2011《电力系统实时动态监测系统第2部分:数据传输协议》[9],结合配电网组网通信方案,并通过对该数据传输协议的研究,提出了配电网WAMS中基于实时数据传输的PDC设计方案。
目前在主网与配电网中,光纤通信具有通信信息量大、抗干扰能力强等优点,在可靠性、通信速率、延迟等各方面均是最理想的。光纤通信是主网通信的首选,但是配电网中监控网络分散,测控点多面广,施工条件限制和运行成本等原因,光纤通信方式难以或不可能全部部署整个配电网[10-12],因而配电网WAMS中 PDC到主站上行通信采用光纤以太网方式,PDC与PMU之间下行通信方式选择光纤通信为主、无线专网或公网通信以及电力线载波通信的混合通信方案,配电网WAMS通信组网示意图如图1所示。
图1 配电网WAMS通信组网示意图
PMU基于高精度同步时钟,PDC同时接收多个PMU测量的实时数据,对齐所有PMU测量数据的时标,即将相同时标的PMU数据帧组成1帧转发给主站,由于不同通信方式的传输时间延迟也不同,不同节点的PMU相同时间采集的实时数据不能同时上送到PDC,就会出现PDC在打包发送同一时间戳的所有PMU数据帧给主站之前存在PMU的实时数据帧还没上送到PDC的丢包问题,这就要求 PDC对PMU实时数据帧有较强的时间对齐能力。
配电网WAMS中PDC连接多个PMU,PDC向上实现与主站的通信,向下实现与PMU的通信。依据文献[9]第2部分数据传输协议中主站与子站的通信规范,考虑主站对上传数据的选择性,定义子站为连接建立的服务端,主站为客户端。主站与PDC之间的通信,PDC就作为通信连接的服务端,系统主站作为客户端;而PDC与PMU通信时,PMU作为通信连接的服务端,PDC作为客户端。
主站和子站之间通信包括数据管道和命令管道。数据管道是主站和子站之间实时相量数据的传输管道,数据传输方向是单向的,由子站到主站;命令管道是子站和主站之间管理命令、记录数据和配置信息等信息的传输通道,传输方向是双向的。数据管道和命令管道的关闭过程应由主站发起;在特殊情况下,子站也可主动关闭管道。
(1) 建立命令管道。流程如下:① 首先由主站发送建立命令管道申请给子站;② 当申请发送到子站,与主站之间的命令管道建立成功;③ 主站的控制命令、CFG1配置文件、CFG2配置文件与子站通过命令管道进行传输。
(2) 建立实时数据管道。流程如下:① 子站侦听数据连接服务端口,等待主站建立连接的申请;② 主站向子站提出建立数据管道的申请;③ 子站接受申请,建立与主站之间的数据管道。
命令管道和数据管道建立成功后,就可以实现子站和主站或者PMU和PDC之间的数据传输。在第1次开启实时数据前,主站通过命令管道发送“上传CFG1”命令查询CFG1文件,主站再根据子站上传的CFG1文件生成CFG2文件,下发给子站。子站通过命令管道接收主站的“开启实时数据”命令后,根据主站下传的CFG2文件定时发送实时数据报文。
实时传输数据有数据帧、配置帧、头帧以及命令帧4种类型。前3种帧由子站发出,后1种帧格式支持子站与主站间双向通信。所有的传输帧都以2个字节的帧同步字(SYNC)开始,后紧随着2个字节的帧长(FRAMESIZE)、8个字节的数据集中器标识(DC-IDCODE)、4个字节的世纪秒(SOC)、4个字节的秒等(FRACSEC)。帧类型的辨识和同步信息在这个次序中被提供。所有帧以16位的循环冗余校验码结束。所有传输帧都没有分界符。
传输帧的结构如图2所示,包括传输次序、字段的描述,同步字首先传送,校验字最后传送。多个字节的字传输时,先传送最高位字节,所有各帧都使用同样的次序和格式。
图2 传输帧结构
在实时传输头帧、数据帧、命令帧结构中包含了“DC-IDCODE”字段,对没有配置PDC的子站,本字段即“PMU-IDCODE”字段,这可以用来区分PDC和PMU。在子站上传CFG1配置文件和主站下发的CFG2配置文件时,主站可以通过配置帧的“DC-IDCODE”字段和“PUC-IDCONE”字段精确定位动态监测数据的来源,当运行中出现数据异常时能够快速定位站内PMU,从而便于站端运维人员更快处理装置存在的异常。
在“FRACSEC”字段中使用时间质量位来反映子站当前时钟同步状态和同步精度,以便主站实时掌握子站设备的同步情况,进而判断是否采纳上送的数据开展高级应用。主站可以通过数据帧中的“STAT”字段来掌握PMU的状态,方便主站实时动态检测PMU。
本文提出的PDC设计方案采用基于传输层通信协议TCP/IP的套接字(Socket)通信。PDC将接收到的所有PMU实时数据进行解析,放入对应的结构体,并且对同一个时间戳的PMU实时数据帧进行时标对齐,排序打包成一个数据帧发送给主站,PDC起到一个承上启下的桥梁作用。另外,因为PDC接收的PMU实时数据帧是乱序的,所以在组包发送之前先将数据帧进行排序。
(1) 网络初始化模块。将所有PMU的网络配置信息和所连接主站的网络配置信息读入PDC,配置信息包括所连接PMU的数量以及所连接PMU的IDCODE、IP地址、命令管道、数据管道对应的端口号;并根据PMU的IDCODE建立PMU的IDCODE链表。
(2) 上行通信模块。建立与主站之间的命令、实时数据通信管道,实现对主站的侦听。并通过通信管道实现命令传输以及对PDC缓存的PMU数据向主站的传输。
(3) 下行通信模块。建立与PMU之间的命令、实时数据通信管道,通过建立的通信管道,实现命令、实时数据的上传下达。
(4) 任务处理模块。通过接收到的命令作出相应的处理,将PMU发送上来的实时数据帧进行解析、对齐数据时标、排序打包转发给系统主站。
为了充分利用中央处理器(central processing unit,CPU)资源,提高CPU的使用率,在本文提出的实现方案里,使用了多线程技术。多线程处理将程序划分为多个独立的任务,当前没有任务进行处理时可以将处理器时间让给其他任务,并且占用大量处理时间的任务可以定期将处理器时间让给其他任务。
PDC对主站用2个线程分别完成与主站的命令管道和实时数据管道的通信;PDC也用2个线程分别实现与连接在PDC上的所有PMU的命令传输管道、实时数据传输管道的通信。另外设计1个线程用来处理命令数据和实时相量数据。这样PDC在处理与主站、PMU的通信任务的同时可以处理命令分析任务和完成实时数据帧进行解析、时间对齐、排序、打包的任务,有效地利用了处理器的时间。
PDC线程结构如图3所示。
在本方案中对Socket的处理中采用了Select机制,在PDC开启线程处理多个PMU的命令管道和实时数据传输管道时,PDC分别创建了多个连接,每个连接对应不同的套接字,由于Socket编程里recv()函数默认是阻塞的,从而会造成在等待一个PMU套接字返回数据的时候整个线程阻塞,而无法接收其他PMU套接字数据,使用select()函数提供一种文件句柄集合fd-set机制,首先文件将所有PMU的命令或实时数据套接字句柄放入读文件句柄集合,当select()函数返回大于0的值,用户可根据套接字句柄是否仍在该读文件句柄集合中来判断哪个PMU套接字有数据,有效地避免线程的阻塞。
图3 PDC线程结构
3.3.1 PMU实时数据帧解析
PDC接收到PMU实时数据帧,根据数据帧中IDCODE对应字节判断是否为PDC连接的PMU,如果成功匹配,那么给对应的PMU分配数据帧结构体存储空间,将实时数据帧存入到对应的结构体,未匹配就直接丢弃。
3.3.2 PMU实时数据帧的时间对齐算法
在本文设计的实时数据传输方法中,结合配电网的组网方案,给PDC设计了及时对齐PMU实时数据帧的算法,利用容量可设置的循环队列来对PMU的实时数据帧进行时间对齐处理。假设循环队列的容量为LEN,PMU上传周期为t,当循环队列第LEN+1组时间戳数据开始缓存时将实时数据排序打包转发给主站,则每组时间戳数据组从缓存到发送之间间隔T为:
T=tLEN,
这样可以灵活地设置容量LEN去满足配电网WAMS中任意通信方式的延迟时间要求,并且可以很容易地处理不同上传数据速率的数据。循环队列存储空间示意图如图4所示。图4中,TSB[LEN-1]表示第LEN组时间戳数据组。
图4 循环队列存储空间示意图
时间对齐算法如下:
(1) 建立一个容量为LEN的循环队列存储空间,LEN组数据缓存LEN个不同时间戳的所有PMU的实时数据帧,并且在每个时间戳数据帧组中,PMU数据帧按照链表结构存储,将rear和front初始化为-1。
(2) 处理第1个PMU实时数据帧结构体,rear和front赋值为0,存放在循环队列的第1个时间戳组TSB[rear]的数据帧结构体链表的第1个节点中,TSB[rear]时间戳按照第1个数据帧时间戳来设置。
(3) 将其他PMU相同时间戳的实时数据帧结构体存放在这个时间戳组的链表中,并且每次接收到新的PMU数据帧结构体,都要根据数据帧的时间戳判定该数据帧存在是否迟于此时对应的TSB[front]的数据帧,要保证当前缓存的PMU数据帧不早于循环队列中最早缓存的时间戳数据帧。
(4) 当接收到的PMU数据帧的时间戳不同且迟于缓存在TSB[front]的数据帧时,令rear=(rear+1)%LEN,将此PMU数据帧放入新的时间戳组TSB[rear]中,且TSB[rear]的时间戳按照此数据帧时间戳来设置,之后将其他PMU在这个时间戳的数据帧存放在这个时间戳组数据的结构体链表中。
(5) 以此类推,之后接收到的每个PMU数据帧都依据时间戳判断是否在循环队列已经存在的时间戳组中,如果在就放进对应的TSB[rear]组中,不存在就执行rear=(rear+1)%×LEN,将PMU数据帧放进新的时间戳组TSB[rear]中。
(6) 当执行rear=(rear+1)%LEN后rear等于0,此时循环队列的容量达到LEN,循环队列准备缓存第LEN+1组时间戳数据。此时rear等于front成立,将TSB[rear]的数据帧排序发送。
(7) TSB[rear]排序转发完成后,释放该TSB[rear]内存空间,令front=(front+1)%LEM,然后将接收到的第LEN+1组新的时间戳的数据帧存放在循环队列中刚发送完数据帧的空时间戳的数据组里,并且按照新的时间戳设置循环队列中TSB[rear]的时间戳。
(8) 将rear=(rear+1)%LEN,满足rear等于front,将TSB[rear]数据帧发送,再将新来的第LEN+2组时间戳数据帧缓存在刚发送完数据帧的空时间戳的数据组里。以此类推,以后每次接收到新的时间戳数据帧时,按照新的时间戳设置循环队列中已经发送完数据帧的空时间戳数据组的时间戳,并且将所有PMU在这个时间戳的数据帧缓存在这个时间戳数据帧组中。
(9) 如果存在PMU的实时数据帧未集齐的情况,那么在排队发送时建立一个空数据帧,并将该PMU的数据帧设置数据异常。
时间对齐算法流程如图5所示,其中,df为当前缓存的数据帧结构体;df-time为其时间戳;tsb-time为当前TSB[front]的时间戳,即循环队列中最早缓存的数据帧的时间戳。
图5 时间对齐算法流程
3.3.3 同一时间戳内PMU数据帧结构
在时间戳结构体成员中,除了时间SOC和FRACSEC,还包含了数据帧结构体链表和每个PMU的IDCODE的结构体链表。数据帧和PMU的IDCODE都存放在单链表中。当发送已经缓存在循环队列的每一组时间戳数据帧时,要先将数据帧链表按照建立的IDCODE链表的先后重新排序。具体排序的方法如下:从PMU的IDCODE链表的第1个节点开始,根据PMU的IDCODE在数据帧链表中查找出相对应的数据帧,再将该数据帧节点放在数据帧链表的第1个节点,然后根据IDCODE链表的下一个IDCODE从数据帧链表的第2个节点开始查找对应的数据帧放在数据帧链表的第2个节点,以此类推进行排序。
如果PMU的IDCODE链表中的IDCODE在时间戳的数据帧链表中找不到对应的数据帧,那么就按照实时数据帧的格式分配存储空间,建立一个空数据帧,并在对应的STAT位设置数据异常,放在数据帧结构体链表对应的节点中,一起打包发送。
同一时间戳PMU数据帧结构体排序流程如图6所示。
图6 PMU数据帧结构体排序流程
为了验证本设计方案的可行性,在实验室环境下,PDC向下连接10台WAMS仿真子站(模拟PMU测试软件),向上连接WAMS仿真主站(模拟主站测试软件),并接入到局域网,其中PDC程序中循环队列的容量设为4,并按照25、100帧/s且连续传送的要求分别设置PMU子站的上传数据速率进行实验分析。
首先,在给定PMU上传速率的情况下,在仿真主站中解析PDC转发的实时动态数据,计算流量(主站数据管道每秒接收的总帧数),仿真主站运行图如图7所示。
由图7中的数据可知,在10台PMU上传速率都设置为25、100帧/s时,PDC中对仿真子站实时数据帧进行时间对齐、排序组包的方法能够使转发速率达到25、100帧/s的要求,该PDC可以接收不同上传速率的数据。
图7 仿真主站运行图
其次,在实验过程中,采用抓包软件Wireshark抓取实时数据传输帧[13-14]。上传速率为100帧/s时,传输帧抓包图如图8所示。
图8 传输帧抓包图
图8a所示为抓取其中一个仿真子站上传给
PDC的数据包,图8b所示为PDC将所有相同时标的PMU数据帧对齐、排序组包后发送给主站的数据包。
在PDC运行1 d的时间内,多次开启Wireshark抓取数据帧,通过对多次抓取的数据帧的分析,经过PDC对齐时间、排序组包发送给主站的数据帧符合文献[9]的数据帧传输格式,并且按照时标查找数据帧,10台仿真子站上传给PDC的实时数据帧经过PDC缓存排序组包发送给主站,没有出现丢帧的情况,验证了本方案中PDC对PMU数据帧的时间对齐和排序组包方法的可靠性。
另外,Wireshark中抓取第1个数据包的时间为0.000 000 s,根据数据传输帧相对于第1个数据包的抓取时间,计算出PMU数据帧从到达PDC到进行时间对齐、排序组包转发给仿真主站的处理时间,在实验中随机抓取3个仿真子站的实时数据帧进行计算,计算结果见表1所列。表1中,t1为抓取的仿真子站上传给PDC的实时数据帧相对于第1个抓取的数据包的时间;t2为PDC转发给仿真主站的数据包相对于第1个抓取的数据包的时间;t为t2和t1的差值,即所需计算的时间。当仿真子站上传速率为25帧/s和100帧/s时,仿真子站按照每40 ms和每10 ms发送数据帧,PMU数据帧从到达PDC到对齐时间组包转发给仿真主站的理论处理时间分别为160 ms和40 ms。
表1 PMU数据帧在PDC中的处理时间
从表1可以看出,通过Wireshark抓包计算的时间与理论值基本一致,PDC可以通过设置时间对齐算法中循环队列的容量去适应不同通信方式带来的时间延迟。
本文提出的配电网WAMS中PDC的设计方案,实验表明该PDC严格按照文献[9]的数据格式和实时数据通信流程,能够较好地完成实时数据的汇集、时间对齐、排序、拼包转发的任务,并且该方案针对配电网组网通信方案提出的时间对齐算法,能够有效解决不同速率上传问题和通过设置时间对齐算法中循环队列的容量去适应配电网WAMS中不同通信方式带来的时间延迟,有较强的实时通信能力和数据处理能力。