版本: v1.5 修改日期: 2026-05-29
1 术语说明
| 术语 | 全称 | 说明 |
|---|---|---|
| TENANT_ID | 租户标识 | 每个项目分配一个唯一字符串(如 90),用于隔离各租户的容器、Kafka Topic 及数据库表。 |
2 整体流程
数据对接容器(connector)按租户隔离部署,数据从下位设备输入到标准化输出共经过 5 个阶段,依次流经 source、common、business 三层容器。

ℹ️
${TENANT_ID}为租户标识,每个项目分配一个。实际部署时需将文档中所有${TENANT_ID}替换为对应值(如90)。各租户的容器与 Kafka Topic 均以该标识隔离,互不干扰。
3 输入协议层
source 容器通过脚本对接七种下位设备协议:
| 协议 | 说明 |
|---|---|
Modbus | 工业现场总线,RS-485 / TCP 均支持 |
S7 | 西门子 S7 系列 PLC 协议 |
OPC-UA | 开放平台通信统一架构,推荐替代 OPC-DA |
HTTP | RESTful 接口对接,适用于第三方平台 |
MQTT | 消息队列遥测传输,轻量级物联网协议 |
Kafka | 分布式消息队列,适用于上游系统数据桥接 |
| 数据库 | 直连数据库(MySQL / PostgreSQL / Oracle / SQL Server)拉取数据 |
4 source 容器
容器名: connector-${TENANT_ID}-source-0-xxxxxxxxxx-xxxxx
职责: 对接下位设备,执行采集脚本,将原始点位数据发布到 Kafka。
输出:
| 目标 | 地址 |
|---|---|
| Kafka Topic | device.${TENANT_ID}.data |
5 common 容器
容器名: connector-${TENANT_ID}-common-xxxxxxxxxx-xxxxx
职责: 订阅 Kafka device.${TENANT_ID}.data,对数据做初步处理后并发写出三路。
输出:
| 路 | 目标类型 | 地址 / 表名 | 说明 |
|---|---|---|---|
| 1 | MQTT | conn/device/#、ws/device/# | 原始点位实时推送,供前端或其他系统订阅 |
| 2 | PostgreSQL | viscada_v2_xxxxxx | viSCADA 采集的设备原始数据,对应 viSCADA 历史数据记录,尚未经过业务分类与标准化 |
| 3 | Kafka | original.${TENANT_ID}.data | 转发给 business 容器消费 |
ℹ️ 三路写出并发触发,无先后依赖。
6 business 容器
容器名: connector-${TENANT_ID}-business-(gongye|minyong|pdos|iems)-xxxxxxxxxx-xxxxx
business 层共 4 个实例,按业务类型隔离:gongye(工业)/ minyong(民用)/ pdos(源测)/ iems(综合能源)。每个实例依次完成消费① 筛选分发和消费② 标准化写出两个阶段,使用同一批实例处理,无需额外部署。
5.1 消费①:筛选分发
4 个实例共同订阅 Kafka original.${TENANT_ID}.data,各实例按业务维度筛选属于自身的数据,发布到对应的私有 Kafka Topic。
| 实例 | 业务域 | 输出 Kafka Topic |
|---|---|---|
gongye | 工业 | gongye.${TENANT_ID}.data |
minyong | 民用 | minyong.${TENANT_ID}.data |
pdos | 源测 | pdos.${TENANT_ID}.data |
iems | 综合能源 | iems.${TENANT_ID}.data |
5.2 消费②:标准化写出
各实例订阅自身对应的 Kafka Topic(见 第5.1节 上表),完成标准化处理(点位映射、单位换算等),并发写出三路。
| 路 | 目标类型 | 表名 | 说明 |
|---|---|---|---|
| 1 | PostgreSQL base_ods | base_ods.viscada_s_v2_xxxx | 按模型分类后的设备原始数据,保留标准化前的采集值与设备标识,是数据溯源的第一落点 |
| 2 | PostgreSQL base_dwd | base_dwd.xxxx_m_source_history | 数据最终落库,按时间维度组织,支持历史查询与趋势分析 |
| 3 | MQTT | conn/standardDevice/#、ws/standardDevice/# | 标准化实时推送,已完成点位映射 |
⚠️ 标准化 MQTT 与原始 MQTT 的区别:
conn/device/#(common 阶段)推送的是采集原始值;conn/standardDevice/#(business 消费②阶段)推送的是经点位映射后的数据。两者 Topic 路径不同,订阅方需注意区分。
7 配置表说明
6.1 模型表
device.business_model_object 表存储 business 层各业务域的设备对象类型定义,每条记录对应一种可在平台中使用的设备类型标识。

图 4 device.business_model_object 表内容示例
| 字段 | 示例值 | 说明 |
|---|---|---|
name | substation | 设备对象类型名称 |
display_name | 热力站 | 设备对象类型名称 (中文名称) |
当前已录入的业务域与对象类型数量:
| 业务域 | 对象类型数量 |
|---|---|
| 工业(gongye) | 14 种 |
| 民用(minyong) | 30 种 |
| 综合能源(iems) | 19 种 |
| 源测(pdos) | 97 种 |
6.2 分库落库配置(可选)
device.connector_business 表中的 db_name 字段用于指定业务数据的落库目标库名。
| 字段 | 说明 | 当前默认值 |
|---|---|---|
db_name | 落库目标数据库名 | viSCADA 主库(默认) |
⚠️ 当前默认写入 viSCADA 主库;若需分库落库,须在
db_name字段中指定目标库名。实施时须确认该字段配置,避免数据写入错误的目标库。
ℹ️ 分库落库配置尚在规划阶段,后续将补充具体配置示例和校验要求。