ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Q/CSG 110017.12-2012标准解读:载波模块测试与DL/T 645报文验证

Q/CSG 110017.12-2012标准解读:载波模块测试与DL/T 645报文验证 简介《Q/CSG 110017.12-2012》是南方电网一体化电网运行智能系统技术规范中“总则”部分的第2篇面向智能电网及电力二次系统领域的技术人员重点解决二次系统种类繁杂、运行信息割裂、建设运行标准不统一等问题为后续架构、数据、平台等各篇提供统一的术语与定义基础。资源包中仅有1个doc文档文件大小约211KBWord格式便于阅读和引用。文档正文包含标准范围、参考标准、术语定义并在前言中列出该系列标准8大部分共72篇的总体目录涵盖总则、架构、数据、平台、主站应用、厂站应用、配置和验收等建设环节完整呈现南方电网一体化电网运行智能系统的标准体系前言还注明该版本适用于2013年起开展可行性研究的新建或技改项目有助于项目人员在规划阶段统一概念口径。目前已有324人学习下载对于参与南网工程规范制定、智能电网项目设计或运维工作的技术人员这份标准文本可直接作为术语依据和体系索引使用。1. Q/CSG 110017.12-2012 是做什么用的标准台区运维把一个旧载波模块换进集中器连续三天看不到这块表的日冻结数据换回旧模块数据又立刻恢复。这类问题在现场经常被归为“模块硬件不稳定”实际上很多时候是模块上电后的自动上报时序与旧批次不一致而验收时没有按 Q/CSG 110017.12-2012 的检验项目把这一类行为核清楚。这个编号是中国南方电网的企业标准。Q/CSG 表示企业标准110017 是标准体系里的流水号.12 表示这个系列的第 12 分册2012 是发布年份。它约束的是低压用电信息集抄场景中通信模块与集中器之间的物理接口、串口参数、数据帧格式和入网行为经常出现在集抄设备的招标技术文件、入网检测报告和现场验收记录里。搜到这个编号的工程师多数是要写应标偏差表或协议一致性测试用例。这篇文章就按“拆编号、搭链路、做用例、写验收”的顺序把从标准条文到现场落地的一条线讲完。2. 先拆编号再读条文Q/CSG 标准分册与模块边界2.1 编号里的四个信息企业标准、体系号、分册号与年份拿到 Q/CSG 110017.12-2012 这个编号先别急着翻正文编号本身就是第一层信息。Q 是“企业标准”的汉语拼音首字母CSG 是南方电网公司的英文缩写这两段表明这是一份企业标准法律效力和适用范围低于国标、行标但在南方电网体系内是招投标和入网检测的直接依据。110017 是这套标准在南方电网技术标准体系中的流水号不代表版本要看后面的年份和历次修订记录才能确认现场该执行哪一版。.12这个位置很容易被误读成版本号。它其实是分册号说明 110017 是一个系列标准整体被拆成了多个分册每个分册管一类设备或一类行为。分册之间经常互相引用比如前面的分册定义设备总体要求后面的分册定义通信模块、通信协议或检验方法。只看单本分册容易漏掉引用关系读标准时应该先把这个系列的分册目录拉出来确认 .12 在整条链路中的位置。这一系列标准解决的是“国标管不到工程细节”的问题。DL/T 645 规定了电能表的数据链路层和数据格式DL/T 698 规定了主站与采集终端之间的信息交换但模块的物理尺寸、引脚顺序、供电电压、载波耦合方式、上电上报时序这些直接影响现场互换性的参数通常留给企业标准去做落地约束。所以读 Q/CSG 分册时重点不是重新学协议而是核对“物理接口、电气参数、时序要求”这三个国标没有细化的地方。拿到电子版分册后我一般会先转成文本再检索而不是从头翻 PDF。很多分册正文几十页用阅读器滚动找参数效率太低。pdftotext -layout Q_CSG_110017.12-2012.pdf - | sed -n 1,120p pdftotext -layout Q_CSG_110017.12-2012.pdf - | grep -n -E 自动上报|引脚|波特率|耦合 | head -20第一条命令用-layout保留原文排版输出前 120 行通常能覆盖封面、目录和适用范围第二条命令直接定位与实现相关的关键词能快速确认这份分册管的是本地通信还是远程通信有没有对自动上报行为做专门规定。对一份几十页的标准来说这个“先定位再精读”的路径比顺序阅读少花一半时间。2.2 本地通信与远程通信先确定这个分册管的是哪一侧在低压集抄系统里“通信模块”这个词可能指两种完全不同的设备。集中器上行的远程通信模块负责连接主站通常走 TCP/IP 公网、光纤或无线专网解决的是“集中器如何把数据送到系统主站”集中器下行的本地通信模块负责连接电能表走电力线载波、微功率无线或 RS-485解决的是“集中器如何把数据抄回来”。这两个模块虽然都叫通信模块但协议栈、故障现象和测试手段差别很大。判断 Q/CSG 110017.12-2012 管的是哪一侧先看分册的适用范围和术语定义。适用范围里如果出现“低压集中抄表”“本地通信”“载波模块”这类词它约束的是集中器到电表这一段如果出现“上行”“远程”“安全接入”这类词约束的是集中器到主站这一段。现场最容易犯的错是拿远程模块的调试工具去测本地模块。远程模块关心拨号注册、心跳周期、在线率、掉线重连本地模块关心搜表、组网、路由收敛、跨相通信两个方向完全没有共用一套验收指标。本地与远程的测试关注点差异直接决定了检验用例的设计粒度。模块类别对端设备常见通信方式测试关注点远程通信模块系统主站4G/公网/光纤注册、心跳、在线率、断线重连本地通信模块电能表/采集器载波、微功率无线、RS-485搜表、组网、路由收敛、跨相抄读判断完这一侧再去读分册里的技术章节思路会清晰很多。本地通信模块的技术要求里最值得先看的是载波中心频率、发射电平和路由机制远程模块则先看网络制式、SIM 卡接口和 APN 参数。后面做测试用例时这些差异会直接映射成不同的合格判据。2.3 接口与电气参数读标准时最先核对的一页确定模块类型后第一步不是读协议而是核对物理接口和电气参数。现场大量“模块换了没反应”的问题根源不在协议而在供电、电平和引脚顺序。标准分册里通常会给出模块的引脚定义图标注每个引脚的序号、信号名、方向、电平范围。阅读时要特别注意两点一是引脚视图是按模块安装面还是焊接面绘制的方向看反会把 TX 和 RX 接反二是模块上标注的 TX/RX 是从模块自身视角定义的接调试底板时需要对端交叉连接。核对项常见典型设置不核对会出现的问题供电电压DC 5V 或 12V按模块丝印模块反复重启通信成功率低串口电平TTL 3.3V少部分 5V直连电脑串口收不到数据或烧引脚串口参数2400, 8, E, 1本地抄读场景抓包有数据波形但一帧都解析不出来载波耦合通过强电端子耦合到电力线单点抄读正常台区整体上线率低天线/接口载波模块无外置天线无线模块有模块识别不到信号注册失败提示很多集中器本地通信模块的串口是 TTL 电平直接拿 USB 转 RS-232 线去对接轻则收不到数据重则烧掉模块调试口。正确做法是使用带电平转换的调试底板或 USB 转 TTL 的小板先把电平匹配确认再上电。把接口页吃透后面的协议测试才站得住脚。如果接口定义和现场底板不一致后面抓到的所有报文都不能证明模块本身有问题只能说“这块底板和模块不匹配”。这也是入网检测会把接口检查列为第一项的原因。3. 用 Python 组装 DL/T 645 报文打通模块的最小验证链路3.1 最小验证环境一台电脑、一个调试底板、一块表验证一个本地通信模块能不能正常工作不一定非要连真台区的集中器。在实验室或仓库里搭一条“主站—串口—模块—电表”的最小链路就够了。需要的硬件是一台带 USB 口的电脑一块带电平转换和模块插座的调试底板一个 5V/12V 可调电源以及一块支持 DL/T 645 的电能表或模拟表。软件方面用 Python 加 pyserial 库就能完成帧构造、发送、读回和成功率统计。不需要专用测试台也不需要商业协议分析软件。串口调试助手虽然也能收发十六进制数据但它不适合做一致性验证——一致性测试要连续跑几百轮盯返回率靠手点按钮不现实必须用脚本自动统计。验证的核心思路是从“电表侧”直接发 DL/T 645 帧看模块能不能正确转发和回帧。这个链路绕开了集中器能区分故障是在模块本身还是在集中器与模块的配合上。如果串口直连模块时抄表正常说明模块硬件和协议转发没问题问题大概率出在集中器侧的参数或时序配置。3.2 Python 脚本构造读 A 相电压帧并统计回帧DL/T 645 的帧结构固定为起始符 68H、地址域 6 字节、控制码 1 字节、数据域长度 1 字节、数据域、校验和 1 字节、结束符 16H。下面这个脚本构造一条“读 A 相电压”请求并连续发送 5 次打印每次的回帧结果。import serial import time # 6 字节表地址按 BCD 编码发送时需低字节在前 METER_ADDR bytes([0x12, 0x34, 0x56, 0x78, 0x90, 0x12]) def build_frame(addr: bytes, ctrl: int, data: bytes) - bytes: # 地址域反转DL/T 645 要求低字节先发 frame b\x68 addr[::-1] bytes([ctrl, len(data)]) data # 校验和控制码 数据域长度 数据域各字节取低 8 位 checksum (ctrl len(data) sum(data)) 0xFF return frame bytes([checksum, 0x16]) def read_voltage(ser: serial.Serial, addr: bytes) - str: # 数据标识A 相电压为 02010100H传输时低字节优先即 00 01 01 02 di bytes([0x00, 0x01, 0x01, 0x02]) frame build_frame(addr, 0x11, di) ser.reset_input_buffer() ser.write(frame) resp ser.read(32) if len(resp) 2 or resp[0] ! 0x68: return 无响应 ctrl resp[1] if len(resp) 1 else 0 if ctrl 0x80: return f回帧异常控制码 0x{ctrl:02X} return f收到回帧 {len(resp)} 字节: {resp.hex()} ser serial.Serial( port/dev/ttyUSB0, baudrate2400, bytesize8, parityserial.PARITY_EVEN, # 偶校验 stopbits1, timeout2 ) for i in range(5): print(f[{i 1}] {read_voltage(ser, METER_ADDR)}) time.sleep(1)这段代码的要点集中在build_frame函数里。addr[::-1]是地址域的字节序反转因为 DL/T 645 规定 6 字节地址按低字节在前发送不反转的话地址会变反电表和模块都会直接丢弃。校验和只参与“控制码、长度、数据域”三部分不包含起始符 0x68 和结束符 0x16这是新手最容易算错的地方。读回帧时脚本只判断了回帧首字节和控制码的最高位。DL/T 645 回复帧的控制码最高位是 1 表示异常响应常见原因是数据标识不存在或当前数据不可用。如果脚本输出“回帧异常”优先查数据标识是否正确而不是怀疑模块坏了。timeout2表示串口最多等 2 秒超过就当无响应避免单个坏帧把整个测试卡住。3.3 帧结构参数表与三个最容易踩的坑写抄表脚本时高频使用的参数其实就几个。把它们单独列出来方便接到其他台区或设备时快速核对。参数项典型值说明波特率2400DL/T 645 最常见的默认值数据位/校验位/停止位8/E/1偶校验地址域6 字节 BCD表号转 BCD 后低字节在前发送控制码 0x11读数据常用读取命令控制码 0x13读通信地址用于搜表校验和范围控制码长度数据域不包含 68H 和 16H三个最常见的坑每一个都能让回帧从“正常”变成“无响应”。第一个坑是地址域直接填 ASCII 表号。DL/T 645 的地址域是 BCD 编码6 字节能表示 12 位数字有的表号不足 12 位需要前补 0。串口助手里输入的“123456789012”和报文里的 6 字节 BCD 是两回事填错了模块不会回复抓包观察却能看到数据波形容易误判成模块故障。第二个坑是校验和多算或少算。要记住校验和不包括起始符和结束符只对控制码、数据域长度、数据域内容求和。如果在整帧上做累加算出来的校验位永远对不上回帧概率会低到接近零。第三个坑是串口参数用错。很多串口调试工具的默认参数是 9600、8、N、1而 DL/T 645 的常见默认配置是 2400、8、E、1。用错参数后数据波形在示波器上能看出有信号但没有任何一帧能通过校验。现场排查时先用串口工具读模块手册确认参数再跑脚本能省掉半小时的盲试。4. 把检验项目做成用例载波组网测试与时序问题定位4.1 一张可以照做的模块测试用例表“能通信”和“符合标准”是两回事。单点抄读成功只能说明链路通了不能说明模块在台区里能稳定工作。入网检测和现场验收要覆盖上电自检、单点抄读、路由收敛、自动上报四类行为每一类都对应不同的故障面。测试项操作步骤合格判据失败优先排查上电自检给模块上电观察指示灯与串口输出上电后有主动上报帧供电电压、电平转换单点抄读通过集中器读取电表当前电压连续读 10 次成功率不低于 80%载波相位、表地址路由收敛重启集中器本地模块计时首次成功抄读在项目规定时间内完成收敛档案下发、搜表周期自动上报配置日冻结自动上报任务主站每天定时收到数据上报周期、主站采集方式验收记录至少要留下模块条码、固件版本、测试软件版本、连续抄读结果和上线时间戳。没有这些信息后续一旦出现问题连是哪个批次、哪个固件的模块在跑都说不清。4.2 载波组网测试里必须等满的三个时间窗口载波通信和 RS-485 不一样它是窄带信道模块上电后不一定会立刻被集中器发现。测试载波模块时有三个时间窗口必须等满否则很容易把正常现象误判成故障。第一个是入网窗口从模块上电到被集中器搜索到。集中器通常按电表地址顺序轮询搜表模块开机瞬间不一定正好轮到自己刚上电就判定“未入网”是不对的。常见做法是把观察窗口拉到 5 分钟以上至少覆盖一个完整搜表周期。第二个是路由收敛窗口。载波组网不是点对点集中器需要经过多次探测才能建立到各电表的路由表。新台区或整批更换模块时路由收敛可能持续 10 到 30 分钟这期间抄读失败率高是正常的。测上线率要看收敛完成后的数据不能只看开局前几分钟。第三个是抄读恢复窗口。单块表在某次轮询中抄不到可能只是落在搜索间隙不一定是模块离线。记录失败时间点等一个完整搜表周期后再复测如果恢复了就是轮询时序问题如果连续多个周期都失败再判定为模块或信道问题。4.3 三个容易被误判的失败场景现场最常见的误判是把“连接问题”当成“模块问题”。几个典型场景如果没提前想清楚会浪费大量排查时间。场景一电脑直连模块收不到数据。排除供电问题后先确认 TX/RX 是否交叉。模块上的 TX 指的是模块发送引脚要接到调试底板的 RX接反后完全没有数据。解决方法是把两根杜邦线对调如果对调后能收到数据说明模块没问题是连接方式问题。场景二报文正常但成功率低。抓包能看到正确回帧但整体成功率不到 60%。这种情况优先看相位。载波信号通过电力线耦合三相之间的衰减很大如果集中器的本地模块在 A 相而目标表计在 C 相跨相抄读的成功率会明显下降。可以尝试把模块改接到负荷较重且靠近多数电表的相线或检查现场是否有跨相中继设备。grep 230714000001 /var/log/concentrator.log | awk {print $1} | uniq -c这条命令按表地址过滤集中器日志按时间统计失败次数分布。如果失败集中在固定时段说明是周期性任务冲突如果全天均匀分布更可能是信道质量或物理连接问题。场景三在线率正常但日冻结数据缺失。所有通信指标都正常主站就是收不到冻结数据。这个问题往往不在通信层而在主站采集方式。现场常见的组合是老集中器配置的“定时巡测”模式而新换的模块默认支持主动上报两边都在等对方发起任务数据自然送不上去。处理方法是到主站侧把采集任务从巡测改成自动上报接收或按模块配置把上报周期调小。5. 把编号变成验收依据离线筛模块与在线完整率跟踪5.1 到货模块先过一遍离线筛新批次模块到货后不要直接拉到台区去换。先在仓库用调试底板做一轮“连续帧回读”把批次性硬件问题挡在进场之前。脚本每 200 毫秒读一次 A 相电压跑满 500 次把每次结果写成module_preread.csv字段顺序是序号、时间、状态状态为 OK 或 FAIL。awk -F, NR1 {if($3OK) ok; n} END {printf 成功率%.2f%%\n, ok/n*100} module_preread.csv awk -F, NR1 {if($3!OK) {fail; if(failmax) maxfail} else fail0} END {printf 最长连续失败%d次\n, max} module_preread.csv第一条命令统计整体成功率第二条命令统计最长连续失败次数。我一般用“成功率不低于 95% 且最长连续失败不超过 5 次”作为放行门槛低于这个标准的批次说明存在明显的硬件或耦合问题应该退回厂家而不是拿到台区去试。5.2 用小时粒度完整率曲线盯现场进场后的在线情况不能只看主站当天的完整率要看小时粒度的趋势。从主站导出采集日志每条记录包含采集时间、表地址、状态字段完整标记为 complete之后用 awk 按小时统计完整率。awk -F, NR1 {hoursubstr($1,1,13); if($3complete) ok[hour]; n[hour]} END {for(h in n) printf %s %.2f%%\n, h, ok[h]/n[h]*100} archive.csv | sort连续盯 48 小时比只看一天更能暴露问题。如果完整率在某个整点掉坑查那台集中器是不是正好在那个时段发起了广播搜表如果某块表长期缺失按对应台区的相位去现场排查。趋势比单点数值更有说服力。5.3 建一张“条文—用例—断言”双向追踪表把标准条文变成可验收的东西靠一张双向追踪表就能实现。在项目文档里建一个 Markdown 或 Excel 表四列分别是分册条款号、测试用例名、验收断言、测试日志文件。比如“自动上报”对应的条款映射到用例“配置日冻结自动上报任务”断言写“主站 48 小时内收到全部冻结数据”日志文件指向当天的 archive.csv。验收时直接从测试日志里抽断言结果按成功率、延迟和完整性三项断言是否通过。断言失败时直接打开对应的日志文件看是模块离线、路由未收敛还是主站任务没触发。这张表同时也是给甲方的交付物比单纯贴一份检测报告更能证明“按标准做了验证”。本文还有配套的精品资源点击获取
返回列表