sACN Universe Discovery 少了一页,怎样确认发现列表还不完整
Universe Discovery收到一页不等于已得到完整Universe列表。应按同一源和一致的Last Page收齐从零到Last Page的所有页,再把有序列表提交给应用;缺页时只能暂存,不能把未出现的Universe判为不存在。
先固定输入与适用条件
附件模拟同一源发布五百一十三个Universe,按每页最多五百一十二项分成两页;另有缺第二页和Last Page不一致的输入。这里只检查分页集合,不发现真实设备。Universe发现与设备发现、控制器在线状态是不同问题,不从发现列表推断所有Universe当前都有实时数据。
Art-Net字段按官方4版Release V1.4、Revision 1.4dp核对。sACN例子限定ETC sACN v2.0.2所声明的E1.31-2018兼容字段及IPv4样本;现行ESTA目录已列E1.31-2025,2018亦含IPv6。本文不声称旧库实现新版全部功能。
按字段与边界执行
-
按源CID及一个受控收集窗口暂存页面,保留Page、Last Page和本页列表。跨源或跨次列表更新的数据不能无条件合并。
-
先检查页号未超过Last Page、每页项数未超过上限、Universe范围有效,再核对所有页面的Last Page是否一致。
-
计算应有页集合与已到页集合的差。缺页时输出pending和缺少页号,冲突时要求丢弃或按应用策略重新收集,不默认为已完整。
-
收齐后再合并并检查列表有序、重复及边界。在真实实现中还需结合发现间隔和列表更新生命周期,本例不提供替代完整协议栈的缓存算法。
用具体样例核对结果
完整例中第零页为1到512,第一页为513,两页Last Page都为1,合并后共513项。缺页例只收到第零页,输出缺页1;冲突例把第零页Last Page写成0而第一页写成1,输出冲突而非完整。附件解析器实际断言三种状态分别为complete、pending、conflict。
通过条件是页面集合完整且一致,合并结果没有重复或倒序。看到Last Page为零也只说明该次列表预计一页,不能证明源以后不会增加Universe。收到新的列表版本时需要重新判断一致性;把昨天缓存的最后一页混入今天第一页面,可能生成从未真实发布过的列表,因此收集窗口与更新策略必须在目标应用中确认。
下载与复现
analyze.py、input.json、result.json。
下载文件包含具体五百一十三项数据及反例,不是空白分页表。现场交接应追加CID、捕获时刻和源软件版本;本地列表校验通过并不表示网络发现或订阅流程已执行。
把输入与脚本保存到同一个本地目录后执行 python analyze.py,脚本只读取输入、计算并重写同目录的结果文件。先保留原始附件副本,再将自己的脱敏输入另存为新版本,记录输入摘要与执行日期;不要把合成字段覆盖成看似真实的现场日志。
已用 Python 3.12.4 实际运行附件算法并检查断言。结果来自同目录合成输入;没有接入真实NDI源、控制器、灯具、接收卡或LED屏,不能据此填写现场验收通过。
对接下一步与一级来源
基础背景可看sACN(E1.31)灯光网络协议速查。相关流程收在展厅中控专题;需要项目对接时,带上本文输入及结果向SoftControl核对实际能力。
一级来源核对日期:2026-10-24。原始协议规则、本文原创运算和目标系统行为应分别留证;附件计算正确,不等于设备已经按该参数工作。
相关阅读
留言讨论
评论发布后会被人工复核,违规内容将被删除。
如果发表没有反应,可以前往联系我们告诉我们。