Replace task/batch shorthand IDs and residual layer labels in human-facing docs with semantic phrases. Add the new cleanup policy to docs/编号规范.md and update the entry docs. Machine keys (TC/CODE-RULE/MENU-STATE/TRAP/FR), hardware designators/pins/MAC, protocol/version numbers and frozen historical evidence are intentionally kept. Docs only; no code behavior change. Verified with check_doc_links.py --all and git diff --check.
24 KiB
IEC 60870-5-104 上行设计说明(IEC 104 上行)
定位:DTU 上行规约 IEC 60870-5-104(DL/T 634.5104-2009)的设计基线—— 范围、点表、链路流程、板端接入、预算与测试。规格来源
docs/算法/继电保护功能复现规划.md§1.5(产品定义,验收 = 省电科院点表); 代码落点App/protocol/iec104/;未闭环的送检验收挂docs/任务规划/登记簿.md§7。 角色:本 DTU = 被控站(受控端),104 TCP 服务器,端口[comm]段port(工厂默认 2404);主站 (控制端,点表参考192.168.1.199)主动连入。
1. 范围(V0.1 子集)
| 面 | 本期做 | 本期不做(登记 §8) |
|---|---|---|
| 链路 | APCI U/S/I、STARTDT/STOPDT/TESTFR、k/w 窗、t1/t2/t3 | 多主站并发(单连接语义,见 §5) |
| 遥测 YC | 短浮点 M_ME_NC_1(系数 1):背景/周期/死区上送 | 归一化/标度、谐波轨(「遥测谐波轨(可选)」) |
| 遥信 YX | 单点 M_SP + 双点 M_DP:背景 + 突发(COT=3);突发单点带 CP56 时标 = M_SP_TB_1(SOE 记录,随「SOE 记录」 SOE 落地) | 双点带时标(V0.1 双点恒 IV,无意义) |
| 遥控 YK | 双点 C_DC 两段式(选择 82H/执行 02H) | 带时标、升降/步位 |
| 定值 | C_RD 读 + C_SE_NC 两段写(地址 = prot_set comm_addr) |
定值区切换/下装文件 |
| 其他 | C_CS 对时(→ sys_clock)、C_TS、C_RP |
固有参数 8001H~800AH(字符串类)、C_CI 电度、文件传输(录波) |
2. 分层与模块(采集链路测试可验证性约束:协议解析与硬件 I/O 分离)
| 模块 | 文件 | 职责 | I/O |
|---|---|---|---|
| ASDU 编解码 | App/protocol/iec104/iec104_asdu.c/h |
类型/COT 常量、ASDU 头、IOA 3B 小端、短浮点、CP56Time2a↔epoch | 零 |
| 点表/数据源 | App/protocol/iec104/iec104_pts.c/h |
YC/YX/YK/定值表、COV(变位+死区)、数据源 vtable(板端绑 phasor/prot_*,单测绑假源) | 零(源注入) |
| 链路状态机 | App/protocol/iec104/iec104_link.c/h |
TCP 流重组、U/S/I、k/w/t1/t2/t3、总召/突发/遥控/定值/对时编排 | 零(收=on_rx 喂流,发=回调,时基注入) |
| 板端胶水 | App/task/iec104_serv.c/h(随实现定名) |
[comm] port 监听(工厂默认 2404)、数据通道收发、断链重听、netTask 驱动 |
全部(net_* API) |
| 通讯参数段 | App/protocol/iec104/iec104_comm.c/h(道G task-8) |
[comm] 段注册 + ca/端口 getter 合法带自愈 / setter 守卫 |
cfg_file 引擎(只注册不属主) |
三个纯逻辑模块 + 真实数据源(
App/algo/全纯逻辑)可整体在主机侧编译 → 主机侧纯逻辑单测覆盖全协议栈(test/host/iec104/),与test/host/prot_elm/同模式。
3. 点表(V0.1)
3.1 遥测 YC(IOA 0x4011+,短浮点,系数 1)
| IOA | 点 | 来源 | V0.1 状态 |
|---|---|---|---|
| 0x4011 | 1Ua | 测频与遥测快照槽 ADC_SEM_UA(104 改读快照) |
✅ 有效 |
| 0x4012/0x4013 | 1Ub/1Uc | 同表槽位;STM32 侧削顶(docs/算法/继电保护功能复现规划.md §1.6) |
❌ 发 IV——品质驱动(快照 CLIPPED 位映射,非点表绑死;V0.2 消除双转换器无共同采样触发后零改动自动启用) |
| 0x4014 | 1U0 | 快照槽 ADC_SEM_UN(外部零序专用通道) |
✅ 有效 |
| 0x4015 | 1Ia | 快照槽 ADC_SEM_IA |
✅ 有效 |
| 0x4016~0x4018 | 1Ib/1Ic/1I0 | 同 Ub/Uc:绑槽 + 品质驱动 | ❌ 发 IV |
| 0x401D | 1f 频率 | 快照 freq_hz(频率点绑定;测频与遥测快照 自适应窗测频 freq_get() 同源) |
✅ 随测频收敛生效;freq_valid()==0 → IV(该点 DoD 原句) |
- 数据源 = 测频与遥测快照(
App/algo/meas.h,「数据可信」遥测快照发布与 104 消费):200 ms 基波有效值- 每点品质,104 与 UI 共用同一份上游;读数单位 = ADC 引脚电压(eng=0,
App/algo/adc_cal折算层 2026-10-25 落地;二次值等两点标定置 VALID)。槽位值/品质整体透传,本层 不再自行判新旧(快照seq仅供 COV 去重)。
- 每点品质,104 与 UI 共用同一份上游;读数单位 = ADC 引脚电压(eng=0,
- 品质映射:快照
MEAS_QDS_*低字节与线上 QDS 同值直传;CLIPPED → IV(「削顶通道 恒 IV」口径不变、改由品质驱动,docs/任务规划/数据可信.md §8 风险表「削顶通道被当成可测」行的单测要求); 快照从未发布(开机 <200 ms)→ IV|NT;判定顺序 IV 优先于 NT。 - 死区(104 改读快照):从「越死区即报」改为连续 2 个新测量点越限才确认——板端测量点 =
快照换帧(100 ms 轮询 vs 200 ms 快照按
seq去重,防同一帧把单点噪声重复计满 2 点; 基准恒为上次上送值,非上次读值——防慢漂移把基准吃掉,参考系统同款);品质翻转 当拍直报、不计数。死区数值 = 运行时副本(iec104_pts_yc_set_deadband,ROM 默认沿 下游常数按工程量重定的额定 0.5% 档:0.5 V / 0.005 A / 0.5 Hz;运行参数段接 8020H 段后主站可读写); 标准源注入复核(两点标定)待台架。
3.2 遥信 YX(IOA 1~33)
| 段 | 点 | 来源 | V0.1 状态 |
|---|---|---|---|
| 1~4 | 开关位置(双点) | 无出口/位置硬件 | ❌ IV |
| 5~14 | 预留 | — | ❌ IV |
| 15 | 故障总 | OC1∨OC2∨OC3∨3U0(prot_elm) |
✅ |
| 16~18 | 过流 Ⅰ/Ⅱ/Ⅲ 段 | PE_OC1/2/3 asserted |
✅ |
| 19~20 | 零序过流 Ⅰ/Ⅱ | 「三段式零序过流」未实现 | ❌ IV |
| 21~22 | 接地故障/重载 | 未实现 | ❌ IV |
| 23 | 过载 | PE_OL asserted |
✅ |
| 24~30 | 外部遥信(RS-485) | RS-485 采集链路 暂缓(docs/任务规划/暂缓-RS485.md) |
❌ IV |
| 31 | 保护闭锁 | prot_set_locked() |
✅ |
| 32~33 | 预留 | — | ❌ IV |
点存在性优先:无效点照常入总召/周期表并置 IV——点表是验收口径,缺行比 置 IV 更糟(主站侧无法区分"没做"与"接线错")。
保护类 YX(15/16~18/23/31)自 保护任务(2026-10-12)起为活数据:protectTask 20 ms 判据节拍驱动
prot_elm状态 → pts COV 变位上送(≤120 ms 端到端)。突发单点遥信自 SOE 记录(2026-10-12)起带时标 = M_SP_TB_1(30):仅自发 (COT=3)单点组(idx≥4)换型,信息体 = SIQ + CP56Time2a(8B);总召/ 周期扫描保持 M_SP_NA_1/M_DP_NA_1(时标只用于变位事件,标准语义,防 "全量换型")。时标源 =
sys_clock(link cfgepoch_ms回调):秒域时基 → ms 域 = 秒×1000(亚秒恒 0,不造假);墙钟未建 → CP56 IV 位如实置位。 与/log/soe.log落盘记录同源同时基(App/log/soe_store.c,见App/log/README.md)——104 时标 = 事件上送时刻,SOE 记录 = 事件发生 时刻(20 ms 判据拍),两者差 ≤ 一拍 + 排空延迟(≤50 ms)。
3.3 遥控 YK(IOA 0x6000+,双点两段式)
| IOA | 点 | V0.1 行为 |
|---|---|---|
| 0x6000~0x6003 | YK1~4 开关 | 否定确认(无出口硬件,docs/算法/继电保护功能复现规划.md R7) |
| 0x600A | YK11 信号复归 | ✅ 执行段 → prot_elm_request_reset()(保护任务 起跨上下文安全:请求由 protectTask 下一拍 eval 头部消费,不当拍直接复位) |
| 0x600B | YK12 遥控软压板 | ✅ 两段式转真(保护定值持久化):选择段校验 DPC(ON/OFF,非法即 PN);执行段 → prot_set_set_sealed(PS_GLOBAL_EN) 原子写+封存;protectTask 下一拍读到退出态即复位元件并停判据(App/task/protect_task.c) |
| 0x600C | YK13 电池活化 | 否定确认(无对应硬件) |
| 0x600D | YK14 解除闭锁 | 否定确认(闭锁源于定值校验和,只能重写定值解除) |
3.4 定值(IOA = 通讯地址)
- 地址 =
App/algo/prot_set.h元数据comm_addr(0x8820 基址 + 告警段 0x8027~0x802A, 逐项对照参考项目Const_CommSetPara.c,见docs/算法/继电保护功能复现规划.md§5.4)—— 点表不另立地址表,prot_set 即单一事实源。comm_addr = 0的本地项(投退/返回系数/ 全局软压板)不可经 C_RD/C_SE 寻址(保护定值持久化 起显式排除,防 IOA=0 误命中首个本地项)。 - 写两段式:选择 = 范围校验;执行 =
prot_set_set_sealed(原子写+封存:影子区 写好后单字交换活跃区,protectTask 的「定值校验和」巡检任何时刻都看到自洽快照, 保护任务 登记的 µs 级竞态窗口就此收口)。 - 持久化(保护定值持久化):执行段置 prot_set 脏标志 → iec104Task 每轮 poll
dirty_peek投递SYS_EVT_PROT_SET_SAVE→ defaultTask(配置引擎属主) 经App/cfg/prot_set_store.c原子写/prot_set.bin(blob = magic+版本+计数+值区+sum32 正/反码对); 开机在 STORAGE_READY 屏障前装载,损坏/越界/版本换代 = 整表拒绝保持出厂默认 (all-or-nothing)+ 自检留痕prot set corrupt;写盘失败脏标志保留 = 下轮重试。
运行参数段 0x8020H~0x8058H(「数据可信」交付项,2026-10-25 落实):
⚠ 逐项地址为本仓自定(
docs/算法/继电保护功能复现规划.md§5.4 的权威表不在仓—— 参考项目CommPara_ConfigTable拿不到,送检点表到位后以送检为准替换常量表, 映射表只落在App/algo/run_par.c顶部常量段一处)。
| 地址 | 项 | 域(C_SE/C_RD 浮点工程量) | 工厂默认 | 真源与守卫 |
|---|---|---|---|---|
| 0x8030~0x8038 | 遥测死区 UA/UB/UC/UN/IA/IB/IC/IN/FREQ | V / A / Hz,分档上限 50/1/5 | 下游常数按工程量重定的额定 0.5 % 档(0.5 V ×4 / 0.005 A ×4 / 0.5 Hz) | run_par [run_par] 段 9 键 int32 毫单位;落盘键表 → docs/子系统设计/网络配置说明.md §3.5 |
| 0x8040~0x8047 | 通道 k 覆盖(µV/码) | 正浮点;adc_cal 合法带 ROM×[0.5,2.0] 执行段裁决 | 回显生效值(ROM = 152.587890625 / 805.6640625) | 写 = adc_cal_set 代理,系数唯一真源在 [adc_cal] 段,run_par 不存系数(防后人拿 run_par 表当真源表) |
| 0x8048~0x804F | 通道 b 覆盖(码值,可负) | ±8192(adc_cal 带) | 0(回显) | 同上;单侧写 RMW 用另一侧当前生效值 |
| 其余 | 留白(PT/CT 变比等未启用类别) | — | — | C_RD → COT14+EVI / C_SE → actcon+PN |
0x8027~0x802A是 prot_set 告警段(过压/欠压),run_par 命中集精确匹配、永不覆盖; 两表共存的路由顺序 = run_par 表先、未命中落 prot_set(iec104_pts.cset 路由, 证据钉在 TC-IEC104-029)。- 现行门控 = 两段式 + 范围/合法带校验(与保护定值同款),无「仅暂停/测试态可写」
门控——文档现行如此,不造新语义;若送检点表要求该类门控,接线点在
run_par_104_write执行段入口,加一处即可。 - 持久化(运行参数段):任一写成功置
run_par脏 → iec104Task 同款 peek 投递SYS_EVT_RUN_PAR_SAVE(1<<8) → defaultTaskrun_par_store_save()调cfg_file_save()整档外科保存(一趟覆盖 [run_par] 9 键 + 被代理改写的 [adc_cal]/[adc_cal_ofs], lead 裁②一条事件位一趟够用);失败脏保留 = 下轮重试。消费侧(COV 判定)实时读 引擎副本,无缓存无投递(104 改读快照时的 pts 层 s_yc_db 副本已收编进 run_par)。
4. 链路与流程
- 参数:k=12 / w=8 / t1=15s / t2=10s / t3=20s(标准默认);序号 15bit 回绕,
超时判定一律差值法(tick 回绕安全,同
App/algo/惯例)。 - 状态机:IDLE→(TCP 建立)OPEN→(STARTDT act/con)RUN⇄STOPPED;t1 超时或坏帧 → 实例回 IDLE,由胶水层负责断 socket(纯逻辑层不感知 I/O)。
- 总召(C_IC 组 1):actcon → 分片背景扫描(YX 双点组 SQ=1 → YX 单点组 SQ=1 → YC 组 SQ=1 → 频率单点)→ actterm;首召/ RBT 位 → COT=4(初始化),否则 COT=2。 单次 poll 发送预算 4 个 ASDU(防大扫描饿死宿主任务)。
- 突发:COV = 遥信变位 + 遥测死区 2 点确认 + 品质翻转直报(
iec104_pts_cov_check, 104 改读快照语义见 §3.1 注),COT=3 逐点 SQ=0。 - 周期:RUN 态 60 s 全 YC 上送 COT=1。
- 遥控/定值写:两段式,失配/越界 → COT|PN 否定确认;未知 IOA → COT=14+EVI、 错公共地址 → COT=13+EVI、未知类型 → COT=12+EVI。
- 对时 C_CS:CP56 → epoch ms → 胶水层
sys_clock设置(IV 位置起即 PN)。
5. 板端接入(iec104Task 胶水,2026-10-12 实现回填)
-
承载任务 = 专用 iec104Task(640 words / Normal),非 netTask:netTask 是 socket RPC 执行者,
net_recv/net_send在 netTask 内调用 = 自己等自己回执(死锁)。 手写于Src/freertos.cUSER CODE 区(timeSyncTask/adcTask 同款先例),文件App/task/iec104_serv.c(纯编排,协议语义全在App/protocol/iec104/)。 -
看门狗:
TASK_WD_IEC104 = 7纳入wd_required_mask()两分支(产品 0x1F7 / HW 测试层 0x1F5,含 保护任务 protect 位 bit8);主循环 100ms 节拍喂位,屏障等待按 100ms 分片喂位(timeSyncTask 2026-10-02 台架先例)。 -
就绪屏障:等
SYS_EVT_NET_READY(osFlagsNoClear+ 分片)后才建监听。 -
单连接语义(
AGENTS.md模块约定,抄ui_net_sink.c模板):监听端口(工厂默认 2404)与 数据通道复用同一 socket(accept 返回即 listen fd);EOF 时 net 层 auto_relisten, 应用层不得关 fd(client == listen分支);仅模拟器多连接后端(fd 不同)显式关。 -
门控 + 兜底:
net_listener_armed/net_can_read(纯 RAM 读)省无谓 RPC 往返 (门控不用只认 ESTABLISHED 的net_can_accept——那会把监听 服役窗口全挡掉,CONNECT 事件补 accept 探针从不运行); 每 32 轮无条件 recv 一次防 RECV_OK 事件未收到(沿用 UI 推流侧「周期 recv 兜事件丢失」的先例)。 -
网络代次自愈:
net_get_generation()变化 → 关旧 fd 重建监听(netTask NET_RECONFIG 重建路径的既有约定)。 -
主动拆链(与 EOF 路径相对):协议故障(坏帧/N(R) 倒退/t1 超时)或发送连续 3 次失败(短写先例)→ 本端
net_close+ 重建监听,促主站重连——违例时 主站不会自行断开,必须本端断(time_sync 会话收尾先例,非芯片 auto_relisten 风暴路径)。 -
抢占策略修正(V0.1 如实登记):建档时定"后连优先",实现后确认单连接 socket 在连接态无法 accept(监听即数据通道),V0.1 实为首到优先——旧会话 经 EOF/t1/拆链结束后新主站才能接入;后连优先需 net 层支持,见 §8 第 7 条。
-
k/w 与 RPC 时延:
net_send经 netTask 串行 RPC(最坏往返无界 ≈4 s); t1/t2/t3 全部用注入 tick 判定,单次 RPC 停顿不会误触 t1(15 s),连续停顿由 "发送 3 连败拆链"兜底。COV 突发延迟 ≤100ms(服务周期),远小于 SOE 5000ms 线。 -
对时:C_CS →
sys_clock_set_unix()(含 SD2506 RTC 写回);epoch 秒 >2^32 (2106-02-07 后)显式拒绝回 PN。 -
通讯参数可配置化(道G task-8,2026-10-26 落地):公共地址与监听端口真源 =
/config.ini[comm]段(键表 →docs/子系统设计/网络配置说明.md§3.6)。消费方式 =iec104Task启动读一次iec104_comm_ca()填链路 cfg(ca 生效 = 改后重启),s_bind_listen()每次现取iec104_comm_port()(端口另在下次重 bind 自然生效); getter 合法带 ca∈1..65535 / port∈1024..65535,带外自愈回工厂默认 1/2404 (adc_cal 合法带哨兵同款;getter 不打日志,省 iec104Task 深链栈)。不挂段回调、 不新增事件位、不走 SYS_EVT_NET_RECONFIG(热切换代价见 §8,原「V0.1 固定 1」口径作废)。 -
面板编辑(道G task-9,2026-10-27):「通讯参数 → 通讯设置」页(
#page=comm,Drivers/BSP/UI/ui_page_comm.c)经通道六注入(ui_data_comm_ops_t,理由与 通道五同构:分层 / 模拟器 / 「写值+置脏」原子性)编辑 ca/port;合法带由执行侧 现给(面板粗守与 setter 守卫同一出口,抄数即第二真源)。保存行 ENTER → WAIT/OK 锁存判定 =iec104_comm_dirty_peek(),落盘 = defaultTask 每轮无条件iec104_comm_store_save()(run_par/prot_set 同款 保护定值持久化 脏位形态,无事件位, 延续上条 D5 口径)。屏上 OK 只证明落盘完成,不证明"已在新值上运行"—— 生效时刻仍按上条(ca 重启 / port 重 bind)。容量核对:生产占 6/8 段、 [comm] 2/16 键,超限现象 = 注册返 -1 →comm init: FAIL启动锚 + getter 回 ROM 默认,语义由 cfg_file 宿主套 TC-CONFIG-056/057 钉住,不抬宏。 -
观测计数(只读 getter,2026-10-27 道G task-12):
App/task/iec104_serv.c另有四枚 只增不清的计数,经iec104_serv_get_stats()(声明在App/task/iec104_serv.h)对外只读:conn_up(主站接入次数)/apdu_tx(成功发出的 APDU 帧数)/tx_fail(发送短写或失败次数)/rx_bytes(收到的字节数,不是帧数——帧边界在 link 层重组,serv 层看不见)。口径是 上电以来、跨重连不清零,给页面用时那一栏要写「本次开机以来」,与运行时长同一类。 ⚠ 与本节三枚控制量(s_liveness_ctr/s_send_fail_run/s_conn_dead,为"要不要拆链" 服务、会被复位、只有 8 位)无关,拿它们当统计数字必错。为什么留在 serv.c 而不并进通用 统计模块、也不放进iec104_link_t(实例是文件级 static,喂数据侧拿不到指针,且link_open/link_close会把"上电以来"洗成"本次连接"):104 的账本归 104。getter 任意上下文可读(不取锁、不读时刻、不碰 socket;四枚 u32 单字原子,跨字段不保证同一 瞬间,四枚之间没有"合起来才成立"的判据),到顶饱和不回绕。「总召次数 / 上送 I 帧数」 不在这里:那是 link 层事件,serv 照不到,需要它得去App/protocol/iec104/iec104_link.c加——本卡未做,别在页面上摆一个数却没有产生它的地方。
6. RAM / 栈预算(2026-10-12 实测)
| 项 | 实测 | 依据 |
|---|---|---|
| 静态(新增) | link 实例 ~560 B(含 512 B 流重组缓冲)+ pts 快照 ~120 B + 胶水 rx 128 B | iec104_link_t 字段和 |
| iec104Task 栈 | 640 words(2560 B):静态最坏链 1456 B(拆链→重建监听→net_bind→SPI 故障→日志尾),余 1104 B / 43% PASS | stack_report.py 2026-10-12;512 words 时余 592 B < ISR 底线 → 抬栈 |
| CCM 堆 | 任务栈 2.5 KB + TCB,min_ever 6,640 → ≈6,100 B(> 3,072 告警线) | adcTask 抬栈同口径台账 |
| 总量门禁 | RW_IRAM1 73.1% / RW_CCM 75.3%(<92%) | ram_baseline.py --update 2026-10-12 |
7. 测试方案
| 层 | 内容 |
|---|---|
| 主机侧纯逻辑单测 | test/host/iec104/:APCI 重组/坏帧、STARTDT 握手、总召全流程(含 RBT/分片/预算)、COV、k/w 窗、t1/t2/t3(假时基)、遥控两段式与 PN、YK12 软压板两段转真 + 置脏(保护定值持久化)、定值两段写 + set_sealed 后 selfcheck、C_RD(含本地项不可寻址)、C_CS(含闰年)、错地址/错类型 EVI;板端默认源真实链(ring→phasor→freq→meas 快照,非桩):值/品质透传、CLIPPED→IV、0x401D 绑频(收敛 ±0.02 Hz / 未新鲜 IV)、死区运行时化 + 2 点确认/回摆撤销、seq 去重(104 改读快照与频率点绑定,TC-IEC104-025[comm] 段真链(道G task-8,TC-IEC104-031test/host/iec104_serv/ 钉端口与 ca 取值来源(TC-I104SRV-001b/c);test/host/cfg_file/ 钉段/键容量上限(TC-CONFIG-056/057);test/host/run_par/:[run_par] 注册/落盘往返/守卫/系数直通合法带(TC-RUNPAR-001~008);test/host/prot_set/:blob 往返 + 损坏整表拒绝(all-or-nothing) |
| 静态门禁 | iec104-unit-test 钩子 + cppcheck/coding-standard |
| 台架 | /serial-boot-test 锚点(104 服务启动/监听行);PC 主站客户端 test/host/iec104_master.py(纯标准库,台架复测 2026-10-12 就绪):STARTDT/总召四组+actterm/C_SE 定值两段写→YX15·16 变位(COT=3)/恢复复归/YK11 两段正答/C_RD 读回,台架往返 18/18 PASS(证据 ../测试说明/测试数据/boot_log_data/20261012_B6_iec104_roundtrip_log.txt);保护定值持久化模式 --b7-pre/--b7-post/--b7-mark/--b7-check(中间 ST-LINK 复位):YK12 两段投退→保护退出/联动、定值与压板态跨复位保持(含非默认 7.5 往返),21/21 + 13/13 + 4/4+4/4 PASS(证据 ../测试说明/测试数据/boot_log_data/20261012_B7_iec104_persist_log.txt);SOE 记录腿(同工具同轮回归):自发 YX 断言 M_SP_TB_1 带 ts(工具解析 type 30/1 双型)+ FTP 下载 /log/soe.log 经 test/host/soe/decode_soe.py 解码断言(校验和/seq 单调/CP56↔epoch UTC 交叉),pre 21/21 + post 13/13 不回归;lib60870 级第三方全流程归 第三方送检验收 |
8. V0.1 限制与待办(如实登记)
- 固有参数 8001H~800AH 未实现(字符串类无法短浮点上送)→ 未知 IOA 应答;随送检需求再设计。
SOE 带时标突发单点已带 CP56 时标 = M_SP_TB_1(SOE 记录 落地,见 §3.2); 双点带时标不做(V0.1 双点恒 IV,无意义)。- YK1~4/13/14 否定确认——出口硬件确认后(R7)转真执行(YK12 已于 保护定值持久化 转真)。
遥测死区 10.0 码值为拟定值——工程量死区已于 2026-10-25 随下游常数按工程量重定落地(额定 0.5%); 104 改读快照已加 2 点确认;运行参数段(2026-10-25)已落地 0x8020~0x8058 读写映射 + [run_par] 持久化 + 系数覆盖直通 adc_cal——死区系数唯一真源 = cfg 引擎副本(run_par 存死区、 不存系数,系数真源在 [adc_cal] 段,见 §3.4 表注),iec104_pts_yc_set_deadband降级为转发壳。- 多主站/双链路冗余不做(单连接语义)。
- 主站侧验证工具 =
test/host/iec104_master.py(台架复测 2026-10-12 就绪,台架往返 18/18,覆盖总召/变位/遥控/定值);第三方送检环境仍未就绪——lib60870 级第三方全流程归 第三方送检验收。 - 后连优先未实现(V0.1 = 首到优先):单连接 socket 连接态无法 accept, 旧会话结束前新主站接入被拒;后连优先需 net 层(CH395F 单连接模型)支持, 真需要冗余切换时随 net 扩展立项。
公共地址固定 1、监听端口固定 2404——可配置化已落地(道G task-8, 2026-10-26,[comm]段,见 §5 与docs/子系统设计/网络配置说明.md§3.6)。 主站地址(accept 侧 IP 白名单)仍不做:现无既有消费点;单连接 socket 上 「拒绝非白名单」= close + re-listen,端口扫描可打成 SPI/看门狗风暴,且配错 即锁死真主站(FTP 口令那套失败锁的代价在 104 侧没有等价护栏可低成本复刻) → 待送检/现场需求明确后另行立项,[comm]段当前没有该键。