Skip to content

数据流图

下方为 archify 生成的交互式数据流图,展示 CoreC 上行采集管道的完整数据流转。点击图片可全屏查看:

点击全屏查看

管道阶段

阶段组件数据类型说明
DevicesPLC / S7 / OPC UATagValue设备原始读数(tag, value, type, quality, timestamp)
IngestSchedulerTagValueDriver.Read 按 interval 分组,goroutine 并行读取
KernelonDriverData → DataBus.Push → Processing LoopDataPointTagValue 被 enriched 为 DataPoint(加 driver, group, metadata);多 worker(runtime.NumCPU())并发消费
RouteRule EngineDataPoint优先级匹配,决定 forward/drop/alert/transform/mirror
CloudMQTT / HTTPDataPoint发布到云端(异步/连接池)

数据类型转换

输入:TagValue                          输出:DataPoint
┌──────────────────┐                   ┌──────────────────────┐
│ Tag       string │                   │ Driver    string     │
│ Value     any    │                   │ Device    string     │
│ Type      DataType│  ──enrich──►     │ Group     string     │
│ Quality   Quality│                   │ Tag       string     │
│ Timestamp time   │                   │ Value     any       │
│ Error     error  │                   │ Type      DataType   │
└──────────────────┘                   │ Quality   Quality   │
                                       │ Timestamp time      │
                                       │ Metadata  map       │
                                       └──────────────────────┘

onDriverData() 是核心转换点:从「裸设备读数」变成「可路由的工业数据点」。

背压策略

当采集速度超过处理速度时:

DataBus.Push(point)
  ├─ 有空间 → ch <- point     // 直接塞入
  └─ 满了   → 丢最旧 → 塞最新  // drop-oldest

这保证了采集 goroutine 永不阻塞,工业数据中最新值比历史完整性更重要。

链式入站(Chained-kernel Inbound)

传输可通过 Transport.OnData() 接收上游数据(如另一个 CoreC 实例经 MQTT data-topic 或 HTTP webhook 推送),由 startDataListener goroutine 送入 DataBus,复用同一条处理管道:

上游 CoreC → Transport.OnData() → startDataListener → DataBus.Push → ProcessingLoop(多worker) → Rule → Publish

这条路径与上行采集汇合于 DataBus,使多级 CoreC 可链式级联而无需额外接线。

下行控制

下行控制(Downlink)不经过 DataBus,由每个传输独立的 startCommandListener goroutine 处理(commandLoop 本身仅等待 ctx.Done() 以参与优雅停机,实际命令分发在 startCommandListener 中按传输逐个进行):

MQTT command-topic → Transport.OnCommand() → startCommandListener → Driver.Write() → Device

详见 架构总览 中的完整架构图。

Released under the MIT License.