尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

IEC 61850标准协议解读 6.RCB报告控制块

IEC 61850标准协议解读 6.RCB报告控制块 概述在 IEC 61850 标准中报告控制块Report Control Block, RCB是用于管理事件报告的核心组件。根据是否使用缓冲区RCB 分为两种类型URCBUnbuffered Report Control Block非缓冲报告控制块BRCBBuffered Report Control Block缓冲报告控制块一、URCB非缓冲报告控制块1.1 原理含义URCB全称Unbuffered Report Control Block 无缓存报告控制块是一种实时推送模式的报告机制。当数据发生变化时服务端立即将报告发送给订阅的客户端。核心定位是无事件缓存、实时即时上送、不支持断链补发主要用于实时性优先、允许少量数据丢包、无需历史事件回溯的常规遥测、实时状态刷新业务场景。核心特点报告生成后立即发送实时性高。摒弃缓存聚合、时序排序、缓存存储等流程事件触发后直接打包推送传输延迟极低可满足电力系统高频遥测刷新、实时状态同步的低延时需求。报文结构更精简报文收发效率更高不会出现缓存堆积导致的延迟卡顿问题。不保存历史报告。服务器不开辟专用事件缓冲区数据集触发的各类更新事件无存储能力事件生成后仅单次尝试报文封装发送发送失败、网络断链、客户端离线时事件会直接丢弃无法留存历史数据不做任何历史数据补偿。全程无事件序号记录、无历史数据留存仅保障当前时刻的实时数据传输。采用独占锁定机制同一时间只能有一个客户端订阅针对一个实例单个报告控制块也是支持多个实例的。URCB无严格的独占绑定限制相较于BRCB单客户端独占的机制部分设备模型支持多个客户端同时订阅同一组URCB报告适配多主站、多后台同时实时监听设备数据的场景适配性更广。客户端断链、重连后可直接重新使能订阅无需历史点位同步。1.2 工作机制阶段1配置与客户端订阅初始化SCL模型预定义URCB绑定对应数据集DataSet仅配置基础触发条件dchg数据变化、qchg品质变化、dupd数据更新、integrity周期完整性报告无缓存相关配置客户端发起简单订阅配置仅需设置Enabletrue开启报告服务无需配置EntryID、缓存时长、聚合时间等参数客户端完成订阅绑定设备开启实时事件监测与上送逻辑。阶段2事件检测与即时封装核心差异点设备后台实时扫描数据集成员监测四类触发条件一旦检测到数据变位、品质变化、数据刷新或周期上报触发条件立即生成对应事件报文无缓存入库、无聚合等待不存储事件、不等待bufTime窗口触发即封装单事件对应单报文或即时批量打包网络正常、客户端在线时立即推送报文网络断链、客户端离线时当前事件直接丢弃无任何留存操作。阶段3在线实时上送流程事件触发后即刻完成报文组装携带实时数据值、数据品质、时标、seqNum序列号等基础信息无EntryID、无溢出标志通过MMS服务实时主动推送至客户端报文发送完成后设备立即清空当前事件数据不做任何留存无后续补发、重传逻辑支持GI总召唤客户端下发总召唤指令后URCB上送数据集当前全量实时数据总召唤完成后无数据缓存留存。阶段4断链与重连处理机制通信断链、客户端离线期间所有触发的变位、刷新、品质变化事件全部直接丢弃设备不做任何记录链路恢复、客户端重新使能URCB后无历史事件补发流程仅从重连成功的时刻开始正常上送新产生的事件重连后数据断层断链期间的所有历史数据、变位记录完全丢失无法回溯。阶段5资源管理机制无缓存溢出问题因无事件存储区域不存在缓存占满、数据覆盖、溢出丢失的情况无手动/自动缓存清理操作无需超时清理、无需客户端点位重置全程零缓存维护开销设备重启无缓存清空操作本身无数据存储重启后仅需重新订阅即可恢复实时上送。1.3 实现机制1.3.1 数据变化监听当 URCB 启用时会注册到数据属性的变化监听器列表// Urcb.enable() - 注册数据变化监听for(FcModelNodedataSetMember:dataSet){for(BasicDataAttributebda:dataSetMember.getBasicDataAttributes()){if(bda.dchggetTrgOps().isDataChange()){synchronized(bda.chgRcbs){bda.chgRcbs.add(this);// 注册到变化监听器列表}}}}代码位置Urcb.java1.3.2 报告生成与发送当数据发生变化时ServerSap会遍历所有注册的 URCB 并触发报告// ServerSap.dataSetMemberChanged() - 数据变化触发报告for(Urcburcb:bdaMirror.chgRcbs){urcb.report(bdaMirror,true,false,false);// 直接发送报告}代码位置ServerSap.java1.3.3 独占锁定机制URCB 采用严格的独占锁定独占指的是一个 URCB 实例instance只能被一个客户端使能RptEnatrue。其他客户端如果需要订阅同一个数据集的报告需要使用另一个 URCB 实例。// ServerAssociation - URCB 写入处理if(urcb.reservednull){urcb.reservedthis;// 第一个客户端获得锁定urcb.enable();rsvdURCBs.add(urcb);}elseif(urcb.reservedthis){// 同一客户端再次操作}else{writeResponse.setFailure(newDataAccessError(3L));// 其他客户端被拒绝}代码位置ServerAssociation.java1.4 工作流程客户端设置 RptEnatrue ↓ URCB 启用并注册到数据变化监听器 ↓ 数据发生变化 ↓ ServerSap 触发 URCB.report() ↓ 生成 MMS InformationReport PDU ↓ 直接发送给客户端二、BRCB缓冲报告控制块2.1 原理含义BRCB 全称Buffered Report Control Block 缓存报告控制块是一种按需读取模式的报告机制。当数据发生变化时报告先写入缓冲区等待客户端主动读取。核心定位是带事件缓存、断链恢复补发、支持 SOE 事件顺序记录用于保护、测控等不能丢失变位、告警、测量事件的业务场景。核心特点服务器开辟专用缓冲区dchg 数据变化、qchg 品质变化、dupd 数据更新、周期完整性报告 integrity四类触发事件全部存入缓存分配唯一递增EntryID事件序号按发生时序排队存储。不立即发送支持历史数据查询。通信断链、客户端离线、网络拥塞时事件不会丢弃链路恢复、客户端重新使能 BRCB 后自动按时间顺序补发全部缓存事件保障事件不丢失。。写入独占读取共享。单个 BRCB 同一时刻仅允许一个客户端占用Owner 属性记录客户端 IP多客户端需配置多块独立 BRCB客户端注销、断开后自动释放占用权。允许多个客户端同时读取专属缓存管理参数BRCB 独有bufTime 缓存聚合时间事件触发后不立即上送等待 bufTime 毫秒窗口窗口内多组变化合并为单条报告报文减少网络报文风暴仅 BRCB 支持该参数URCB 无聚合缓存机制。bufOvfl 缓冲区溢出标志缓存容量有限事件超出缓冲区上限时置位 bufOvfl通知客户端有历史事件丢失溢出采用先进先出 FIFO删除最旧事件存入新事件。EntryID 事件唯一序列号每条缓存事件绑定全局递增 EntryID客户端可指定起始 EntryID按需拉取某一段历史事件实现断点续传、历史回溯。ResvTms 缓存保留时长超过保留时间的历史事件自动清理防止缓存无限占用内存。可靠传输与时序保障报告携带seqNum主序列号、subSeqNum子序列号补发时严格按事件原始时序发送保证 SOE 事件顺序不颠倒满足故障录波、事故追忆需求。支持GI 总召唤客户端下发总召唤指令BRCB 把数据集当前所有实时值打包上送总召唤报文仅缓存最新一条新 GI 到来自动覆盖旧 GI避免缓存塞满大量全量数据。注意BRCB 是内存级缓存设备重启缓存清空LCB 日志控制块为掉电持久存储二者应用场景分离BRCB 用于实时变位补发LCB 用于长期历史存储。两者的缓存类型需要区分开2.2 工作机制阶段 1配置与客户端订阅初始化SCL 模型预定义 BRCB绑定指定数据集 DataSet配置触发条件 (dchg/qchg/dupd/integrity)、bufTime、缓存最大条数、ResvTms。客户端发起写操作设置Enabletrue开启报告写入EntryID指定补发起始位置填 0 代表从缓存最早事件开始补发占用 BRCBOwner 写入客户端地址完成订阅绑定。阶段 2事件检测 缓存入库正常在线 / 断链均执行后台周期扫描数据集成员监测四类触发条件dchg开关位置、保护动作等状态变位qchg遥测品质失效、检修置位dupd周期刷新测量值integrity周期完整性总报定时上送全量数据。触发事件生成事件条目分配递增 EntryID存入环形缓冲区若短时间连续多事件等待 bufTime 聚合窗口合并多条事件到同一报告报文减少报文数量。链路断开时入库流程完全不受影响持续缓存新事件直至缓冲区上限。阶段 3在线实时上送流程bufTime 超时 / 缓存达到单条报文最大容量组装报告报文携带EntryID、seqNum、事件时标、数据集变化数据、品质、bufOvfl 溢出标志通过 MMS 服务主动推送客户端客户端接收正常后不立即删除缓存条目条目保留在缓冲区支持重复拉取、断点重传。阶段 4断链恢复补发核心流程BRCB 独有逻辑TCP/MMS 链路重建客户端重新使能 BRCB 并指定起始 EntryID服务器检索缓冲区中 EntryID≥客户端指定值的全部历史事件严格按事件发生时序EntryID 从小到大逐条补发报告序列号连续递增补发完成后切换为实时推送模式新事件正常上送补发全程 bufOvfl 若置 1客户端可判断存在丢失历史事件。阶段 5缓存清理与溢出处理FIFO 溢出清理缓存满时删除最旧 EntryID 条目写入新事件置位 bufOvfl超时自动清理事件存储超过 ResvTms后台定时删除过期条目客户端主动清理客户端可通过写服务重置 EntryID丢弃指定之前的历史缓存设备重启清空BRCB 为内存缓存IED 上电后缓存全部清零无持久化。2.3 实现机制2.3.1 缓冲区数据结构// Brcb.java - 缓冲区实现privatefinalConcurrentLinkedDequeBufferedReportEntrybuffernewConcurrentLinkedDeque();privatestaticlongentryIdCounter0;// 递增的条目ID2.3.2 报告写入缓冲区// Brcb.writeReportToBuffer() - 写入缓冲区publicsynchronizedvoidwriteReportToBuffer(booleanintegrity,booleangi){longentryIdentryIdCounter;byte[]encodedReportgenerateMmsReportPdu(integrity,gi,entryId,timestamp);BufferedReportEntryentrynewBufferedReportEntry(encodedReport,entryId,timestamp);while(buffer.size()maxBufferSize){buffer.pollFirst();// 溢出时移除最旧条目bufOvfltrue;}buffer.addLast(entry);}2.3.3 客户端读取缓冲区// Brcb.getBufferedReports() - 客户端读取publicsynchronizedListBufferedReportEntrygetBufferedReports(longstartingEntryId,intmaxEntries){ListBufferedReportEntryentriesToSendnewArrayList();for(BufferedReportEntryentry:buffer){if(entry.entryIdstartingEntryId){entriesToSend.add(entry);if(entriesToSend.size()maxEntries)break;}}returnentriesToSend;}2.3.4 写入独占读取共享// ServerAssociation - BRCB 启用检查写入独占if(brcb.getReserved()null){brcb.enable(this);// 只有第一个客户端可以启用}elseif(brcb.getReserved()!this){writeResponse.setFailure(newDataAccessError(3L));// 其他客户端被拒绝}// BRCB 读取无需检查读取共享// getBufferedReports() 没有权限检查任何客户端都可以调用2.4 工作流程客户端设置 RptEnatrue获得写入权限 ↓ BRCB 启用并注册到数据变化监听器 ↓ 数据发生变化 ↓ ServerSap 触发 BRCB.writeReportToBuffer() ↓ 报告写入缓冲区分配 EntryID ↓ 等待客户端主动读取任何客户端都可以读取 ↓ 客户端调用 getBufferedReports() 获取报告三、URCB 与 BRCB 对比3.1 核心特性对比特性URCBBRCB传输模式Push推送Pull拉取实时性高实时推送中等按需读取缓冲区无有ConcurrentLinkedDeque历史数据不保存可保存历史报告锁定机制完全独占写入独占读取共享多客户端不支持支持多个读取者EntryID不支持支持8字节递增BufOvfl不支持支持缓冲区溢出标志PurgeBuf不支持支持清空缓冲区网络开销持续推送按需读取3.2 访问权限对比操作URCBBRCB设置RptEnatrue独占独占设置Resvtrue独占独占修改DatSet独占独占触发GI独占独占执行PurgeBuf不支持独占读取报告独占只有订阅者共享任何客户端3.3 适用场景对比场景URCBBRCB实时监控告警✅ 推荐❌ 不适合历史数据查询❌ 不支持✅ 推荐故障分析❌ 不支持✅ 推荐控制操作反馈✅ 推荐❌ 不适合低带宽场景❌ 开销大✅ 推荐多客户端访问❌ 不支持✅ 支持BRCB 典型应用场景保护装置 SOE 事件上送断路器变位、保护跳闸、告警断链恢复后完整补发事故时序间隔层测控遥信遥测防止网络瞬时闪断丢失变位信号远动通信子站主站短暂离线后一次性补全间隔全部变位历史故障追忆、事故分析对事件完整性、时序有强要求的场景。URCB 典型应用场景高频实时遥测数据上送电压、电流、功率、温度等周期性刷新测量量允许瞬时丢包重点保障实时性常规设备状态实时刷新非关键类遥信状态、设备运行常态信号无需事故追忆与时序记录高频刷新、低延时优先的监控场景后台实时画面刷新、设备常态监测对历史事件完整性无要求多客户端并行监听场景多后台、多监控终端同时订阅同一设备实时数据的业务场景。四、设计模式分析4.1 URCB观察者模式URCB 采用经典的观察者模式Subject被观察对象: BasicDataAttribute Observer观察者: Urcb 通知机制: chgRcbs 列表当数据变化时所有注册的 URCB 都会收到通知并立即发送报告。4.2 BRCB生产者-消费者模式BRCB 采用生产者-消费者模式Producer生产者: Owner 客户端写入 Buffer缓冲区: ConcurrentLinkedDeque Consumer消费者: 任意客户端读取 ┌────────────────────────────────────────────────────────────┐ │ BRCB 缓冲区 │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ Entry 1 │ Entry 2 │ Entry 3 │ ... │ Entry N │ │ │ └─────────────────────────────────────────────────────┘ │ └────────────────────────────────────────────────────────────┘ ↑ ↑ ↑ │ │ │ ┌─────┴─────┐ ┌───────┴───┐ ┌────┴────┐ │ Owner │ │ Reader 1 │ │Reader 2 │ │ (Producer)│ │ (Consumer)│ │(Consumer)│ └───────────┘ └───────────┘ └─────────┘ │ ↓ 数据变化 → 写入缓冲区Owner 客户端第一个写入开始使能的客户端负责配置触发条件可以写参数开始后服务端负责生成报告并写入缓冲区Reader 客户端从缓冲区读取报告互不影响BRCB 的不同客户端角色划分角色一所(拥)有者客户端Owner权限说明✅ 设置 RptEnatrue启用报告✅ 设置 Resvtrue预留 BRCB✅ 修改 DatSet配置数据集✅ 触发 GI发起总召唤✅ 执行 PurgeBuf清空缓冲区✅ 读取缓冲区读取报告角色二读取者客户端Reader权限说明❌ 设置 RptEnatrue被拒绝❌ 设置 Resvtrue被拒绝❌ 修改 DatSet被拒绝❌ 触发 GI被拒绝❌ 执行 PurgeBuf被拒绝✅ 读取缓冲区可以读取五、代码实现关键要点5.1 URCB 关键代码方法功能位置enable()启用 URCB注册监听器Urcb.java#L49disable()禁用 URCB取消注册Urcb.java#L100report()生成并发送报告Urcb.java#L284getMmsReport()生成 MMS PDUUrcb.java#L1585.2 BRCB 关键代码方法功能位置enable()启用 BRCB注册监听器Brcb.java#L319disable()禁用 BRCB取消注册Brcb.java#L354writeReportToBuffer()写入缓冲区Brcb.java#L87getBufferedReports()读取缓冲区Brcb.java#L280purgeBuffer()清空缓冲区Brcb.java#L287generateMmsReportPdu()生成 MMS PDUBrcb.java#L126六、总结6.1 选择建议需求场景推荐选择理由实时监控告警URCB实时推送及时响应历史数据查询BRCB支持缓冲区可查询历史多客户端访问BRCB读取共享多个客户端可访问控制操作反馈URCB实时性要求高故障分析BRCB可追溯历史事件低带宽网络BRCB按需读取减少流量6.2 核心区别URCB强调实时性和独占性适合需要立即响应的场景。BRCB强调数据持久化和共享访问适合需要历史查询和多客户端访问的场景。两者互补共同构成 IEC 61850 标准中完整的报告机制。
返回列表