# rcv — L1 电文接收与路由 ## 概述 rcv 是 EIS 系统中的 **L1 电文接收与路由分发器**。它通过 ICE 接收来自 L1(一级自动化)系统的各种电文(telegram),根据电文号和事件类型将数据路由到对应的 L2 服务:数据缓存(zcache)、物料跟踪(ztrk/zmtr)。 ## 进程架构 ``` L1 系统 / znode / zsub │ │ ICE HandleMessage(ByteSeq) ▼ ┌──────────────────────────────────────────┐ │ rcv │ │ │ │ HandleMessage(ByteSeq) │ │ │ │ │ ├→ 解析 stru_recvtext7 结构 │ │ │ ├─ textbuf: 电文正文 │ │ │ ├─ textlenth: 电文长度 │ │ │ ├─ ctextno: 电文号 (TeleID) │ │ │ ├─ lineno: 回线号 │ │ │ └─ header: 报文头 │ │ │ │ │ ├→ TeleID < 2000 (排除1000): │ │ │ MemoryData(带4字节头) │ │ │ │ │ └→ TeleID >= 2000 或 =1000: │ │ MemoryData(仅 textbuf) │ │ │ │ MemoryData() │ │ │ │ │ ├→ EV_TRK_SIGNAL (跟踪信号): │ │ │ ├→ ztrk_proxy (区域跟踪) │ │ │ └→ zmtr_proxy (物料跟踪) │ │ │ │ │ └→ 其他事件: │ │ └→ zcache_proxy (数据缓存) │ │ │ └──────────────────────────────────────────┘ ``` ## 核心职责 ### 电文路由 rcv 不做数据解析,而是按电文类型做**纯路由**: | 电文类型 | 目标 | 用途 | |----------|------|------| | 跟踪信号 | `ztrk` + `zmtr` | 带钢位置跟踪和物料信息跟踪 | | 其他所有 | `zcache` | 通用 PLC 数据缓存 | ### L1-L2 桥接 rcv 是 L1(设备控制层)和 L2(过程控制层)之间的关键桥接点。代码历史中保留了大量 L1-L2 电文路由的注释,包括: - 跟踪初始化电文 - 入口/轧机/炉区/酸洗/出口各段的周期数据电文 - PDI/PDO 数据电文 - 称重数据电文 - 辊子性能电文 - 锌层厚度电文 这些历史路由已被简化,当前大多数电文统一转发到 zcache 进行处理。 ## ICE 接口 ### 服务端(接收调用) | 方法 | 说明 | |------|------| | `HandleMessage(ByteSeq) → ByteSeq` | 同步请求-响应模式,接收电文并返回相同数据(echo) | ### 客户端(代理调用) | 代理 | 用途 | |------|------| | `baosight/zcache` | 通用数据缓存 | | `baosight/ztrk` | 区域跟踪 | | `baosight/zmtr` | 物料跟踪 | ## 现场适用场景 rcv 是 EIS 系统中**最通用的数据入口**,适用于通过 iXcomTCP2 协议接收 L1 电文的场景。它作为 L1-L2 的电文调度中心,将所有到达的电文按类型分发给正确的 L2 服务。 ## 源文件 ``` src/rcv/ ├── RcvBase.cpp # PACE 组件入口 + ICE 代理初始化 + HandleMessage ├── RcvCus.cpp # MemoryData() 电文路由逻辑 └── makefile ```