通讯管理机之数源系统(一)框架
更多内容点击:边缘智联专栏
一、功能概述
数源系统是通讯管理机的核心数据子系统,负责对接下端采集设备,完成实时数据的采集、存储、查询和控制。主要包含以下五大功能:
| 功能模块 | 说明 |
|---|---|
| 配置加载 | 从配置文件加载通道、设备、测点的完整描述信息,建立内存数据模型 |
| 数据采集 | 通过可动态加载的协议驱动(如 ModbusRTU),与串口/网口/CAN 等链路下的现场设备进行周期性通讯,获取实时遥测、遥信、遥脉数据 |
| 数据查询 | 提供以"通道 → 设备 → 测点"为路径的三级查询接口,支持按 ID 或名称查找 |
| 事件通知 | 基于订阅模式,当测点值发生变位或触发告警时,主动推送给已注册的监测模块(如数据转发、历史存储、告警服务等) |
| 远程控制 | 支持人工置数、遥控选、遥调等写值操作,并支持闪开闪断、保持时间等高级控制模式 |
二、整体架构
2.1 层次结构
数源系统采用七层递进的分层设计,从上到下依次为:
┌─────────────────────────────────────────────┐ │ ① 统一入口层 │ │ 对外提供所有功能的单一访问入口 │ ├─────────────────────────────────────────────┤ │ ② 模块路由层 │ │ 接收上层调用,分发给不同的数据子模块 │ ├──────────────┬──────────────┬────────────────┤ │ ③ 采集子模块 │ 自定义子模块 │ 系统子模块 │ ├──────────────┴──────────────┴────────────────┤ │ ④ 通道层 │ │ 每条通道 = 一个独立线程 + 一组设备 │ ├─────────────────────────────────────────────┤ │ ⑤ 设备层 │ │ 每个设备按测点类型分组管理命令块 │ ├─────────────────────────────────────────────┤ │ ⑥ 命令块层 │ │ 将同一协议命令的一组测点归并,一次收发 │ ├─────────────────────────────────────────────┤ │ ⑦ 测点层 │ │ 单个测点的完整配置和实时值 │ └─────────────────────────────────────────────┘2.2 各层职责
| 层次 | 核心职责 |
|---|---|
| 统一入口 | 对外暴露加载、查询、置数、控制、事件订阅等全部 API;内部通过单例确保全局唯一 |
| 模块路由 | 目前承载采集子模块的实例,未来可扩展自定义模块、系统模块、数据池模块 |
| 采集子模块 | 读取配置,解析通道-设备-测点树,管理所有通道的启停 |
| 通道 | 继承线程基类,每个通道独占一个线程;负责动态加载协议驱动(.so 共享库),并持有该通道下的所有设备 |
| 设备 | 存储设备地址、超时时间、历史存储策略等配置;按遥测/遥信/遥脉/遥控/遥调五类分组命令块 |
| 命令块 | 将一条协议命令(如 Modbus 03 功能码)所能读取的所有寄存器测点归为一个命令块,驱动程序按块组帧,一次收发批量更新 |
| 测点 | 存储名称、类型、单位、使能、系数(Fk/Fb)、位操作、计算公式、协议私有参数,以及原始值和转换后的最终值 |
2.3 测点类型
系统支持六种工业场景标准测点类型:
| 测点类型 | 中文名称 | 说明 |
|---|---|---|
| YC | 遥测 | 连续模拟量,如温度、压力、流量 |
| YX | 遥信 | 离散开关量,如开关状态、告警信号 |
| YM | 遥脉 | 脉冲累计值,如电能、水量 |
| YK | 遥控 | 远程控制输出,如合闸/分闸 |
| YT | 遥调 | 远程调节输出,如设定值下发 |
| DEV | 设备变量 | 设备自身的状态信息,如通讯正常/异常 |
2.4 关键设计要点
a) 协议驱动动态加载
每个通道以配置的方式指定协议驱动文件名(如libModbusRTU.so),运行时通过动态加载。驱动程序只需实现三个标准接口:运行采集服务、销毁资源、控制测点。不同协议的驱动可独立编译、替换,无需重新编译主程序。
b) 每个通道一个线程
每个通道对象继承自统一的线程基类,启动后独立运行。线程内部由协议驱动控制采集节奏:轮询设备 → 组帧 → 发送 → 等待响应 → 解析 → 更新测点值 → 检测变位/告警。
c) 命令块批量收发
同一设备下,将同一条协议命令可读取的多个寄存器测点归并为一个命令块。采集时一条命令批量读取,减少通讯次数,提升采集效率。
d) 原始值与转换值分离
每个测点保留原始值(协议直接返回的值)和转换后的最终值。转换流程为:原始值 → 系数换算(×Fk + Fb)→ 位操作 → 公式计算 → 最终值。分离设计确保在取值过程中正在进行系数转换时不会读到中间状态。
e) 事件订阅-通知模式
变位事件和告警事件采用观察者模式。驱动程序检测到变化后,将事件写入缓存(最大 1000 条)后立即返回,不影响采集速度;由独立线程定期消费缓存并推送给所有订阅者。告警支持上上限/上限/下限/下下限四级阈值和通讯中断类型,每种告警有激活、恢复、确认三种状态。
f) 控制操作的安全机制
遥控操作遵循"选择-执行"两步流程:先选择目标对象确认,再执行控制命令。同时支持闪开闪断(瞬时合闸后立即断开)和保持时间(保持特定时长后自动恢复)两种高级模式。
2.5 整体数据流
┌─────────────┐ │ 配置文件 │ └──────┬──────┘ │ 加载解析 ▼ ┌────────────────────────┐ │ 内存数据模型 │ │ 通道 → 设备 → 测点 树 │ └───────────┬────────────┘ │ ┌─────────────────┼──────────────────┐ ▼ ▼ ▼ ┌──────────┐ ┌─────────────┐ ┌──────────────┐ │ 查询接口 │ │ 协议驱动采集 │ │ 控制下发接口 │ │ (读数据) │ │ (周期轮询) │ │ (写值/遥控) │ └──────────┘ └──────┬──────┘ └──────────────┘ │ ┌────────▼────────┐ │ 通讯链路驱动 │ │ COM / NET / CAN │ └────────┬────────┘ │ ┌────────▼────────┐ │ 现场设备 │ │ (PLC/RTU 等) │ └─────────────────┘