4. 数据采集与接入

生产历史数据追溯的第一步,是把分散在各类控制系统和业务系统中的过程数据、质量数据、批次数据汇聚到统一的历史库中。DCS、PLC、SCADA、MES、LIMS 这五类系统在数据模型、时间语义、接口能力和数据量级上差异很大,接入方案不能一刀切。本节围绕“接口选型—协议匹配—工程配置—质量校验”这条主线,说明每类系统实际怎么接、接什么、接的时候要注意什么。

一、先分清五类系统的数据特征

DCS 是过程控制的核心,数据以位号(Tag)为单位,典型特征是高频、连续、带质量码,采样周期常在 1 秒甚至更快,历史数据通常由 DCS 自身的趋势服务或历史站保存。PLC 更靠近设备层,数据以寄存器地址(如 DB 块、M 区、V 区)组织,扫描周期可达 10~100 毫秒,本身往往不保存长历史,需要外部采集器轮询。SCADA 处于监控层,聚合多个 PLC/RTU 的实时点,具备报警、事件和短周期历史,是接入 PLC 数据的常用中转。MES 面向生产执行,数据是工单、批次、物料、产量、设备状态等业务事件,时间粒度是分钟到小时级,接口多为数据库表或 REST API。LIMS 面向实验室,数据是样品、检验项目、结果值、判定结论,通常以样品编号和检验时间为键,通过数据库视图或接口文件交换。

理解这些差异后,接入策略就清晰了:高频过程数据走实时协议,业务事件数据走数据库或 API,质量数据走文件或接口表。

二、接口与协议选型

过程数据接入最常用的是 OPC 系列。传统 DCS 和 SCADA 多提供 OPC DA 接口,基于 COM/DCOM,配置时需要处理 DCOM 权限和防火墙;较新的系统提供 OPC UA,支持跨平台、带安全策略和订阅机制,更适合作为长期接入方案。对于西门子 PLC,可用 S7 协议直接读取 DB 块;对于罗克韦尔 PLC,可用 EtherNet/IP 或 CIP;对于 Modbus 设备,用 Modbus TCP 轮询寄存器。这些协议通常由采集网关或采集软件统一承载,网关再以 OPC UA、MQTT 或数据库写入方式把数据送入历史库。

MES 和 LIMS 的接入以数据接口为主。常见形式有三种:一是直接读取其关系数据库的只读视图,适合批量历史回补;二是调用 REST/SOAP API,适合按工单或样品实时拉取;三是通过中间表或文件交换,适合跨网络隔离场景。选择时要确认接口是否支持增量抽取、是否有时间戳字段、是否能按批次号关联。

五类系统数据接入路径与协议匹配 DCS 位号/质量码/1s级 PLC 寄存器/10~100ms SCADA 聚合点/报警/事件 MES 工单/批次/产量 LIMS 样品/检验/判定 OPC DA / OPC UA 订阅式,带质量戳 S7 / EtherNet-IP / Modbus 轮询式,需地址映射 OPC UA / MQTT 网关转发,统一命名 REST API / 只读视图 按工单增量抽取 接口表 / CSV / API 按样品号关联 采集网关 协议转换 时间戳对齐 断点续传 历史数据库 位号+时间+值+质量 批次关联字段 压缩与归档策略

三、工程配置的关键环节

接入工程的核心不是“连上”,而是“连得准、连得稳、连得可追溯”。配置时重点处理四件事。

第一,位号映射与命名规范。DCS 位号往往带有装置前缀和工段编码,PLC 地址是纯寄存器,两者必须映射到历史库统一的位号命名空间。建议采用“装置-单元-设备-参数”的分层命名,例如 RF-01-REACTOR-TEMP,并在映射表中保留源系统、源地址、数据类型、工程单位、量程上下限。量程用于后续异常值判断,单位用于跨系统对比,缺一不可。

第二,采集周期与时间戳策略。高频位号按 1 秒采集,低频业务数据按分钟或事件触发采集。时间戳要区分“源时间戳”和“采集时间戳”:源时间戳来自 DCS/PLC 的时钟,采集时间戳来自网关本地时钟。两者不一致时,追溯应以源时间戳为准,但需记录时钟偏差。若 DCS 与网关存在明显时钟漂移,应配置 NTP 对时,并在接入日志中保留偏差值。

第三,断点续传与缓存。网络中断或历史库维护期间,网关应把数据缓存在本地队列中,恢复后按时间顺序补传。配置时要设置队列容量和溢出策略:容量不足时优先保留高频关键位号,丢弃低频非关键位号,避免整条链路阻塞。

第四,质量码传递。OPC 数据自带质量码,表示数值是否有效、是否被替换、是否超时。接入时必须把质量码一并写入历史库,否则追溯时无法区分“真实值”和“坏值”。对于 MES/LIMS 数据,可用状态字段代替质量码,例如“已审核/未审核/作废”。

四、一个可参考的接入配置示例

以下是一段采集网关的位号映射配置片段,用于说明字段组织方式。参数为教学示例,实际工程需按现场点表替换。

tag_mapping:
  - source_system: DCS_A
    source_address: "REACTOR1.TIC101.PV"
    tag_name: "RF-01-REACTOR-TEMP"
    data_type: float
    unit: "℃"
    range_min: 0
    range_max: 300
    scan_interval_ms: 1000
    quality_enabled: true

  - source_system: PLC_B
    source_address: "DB10.DBD20"
    tag_name: "RF-01-PUMP01-SPEED"
    data_type: float
    unit: "rpm"
    range_min: 0
    range_max: 3000
    scan_interval_ms: 500
    quality_enabled: true

  - source_system: LIMS
    source_address: "V_SAMPLE_RESULT"
    tag_name: "RF-01-BATCH-PURITY"
    data_type: float
    unit: "%"
    range_min: 0
    range_max: 100
    scan_interval_ms: 60000
    quality_enabled: false
    batch_key: "SAMPLE_NO"

配置完成后,用三个动作验证接入是否成功:一是查历史库中最近 10 分钟的数据点数是否与理论值接近(例如 1 秒采集 10 分钟应约 600 点);二是抽查一个位号的源时间戳与采集时间戳偏差是否在允许范围内;三是人为断开网关网络 30 秒,恢复后检查缓存数据是否补传且时间顺序正确。三项都通过,才说明这条接入链路可用于追溯。

接入阶段最容易忽略的是“质量码”和“源时间戳”。追溯场景下,一个带坏质量码的数值如果被当成真实值参与计算,会导致整批产品的追溯结论失真。建议在历史库中把质量码作为必填字段,并在查询接口中默认过滤坏值。

五、常见问题与判断依据

接入过程中典型问题有三类。第一类是“数据有值但时间不对”,通常源于网关与源系统时钟不同步,判断方法是比较同一事件在 DCS 事件日志和网关日志中的时间差。第二类是“数据时有时无”,多因轮询周期与 PLC 扫描周期不匹配或网络抖动,可适当降低采集频率或启用重试。第三类是“MES/LIMS 数据关联不上批次”,原因是批次号字段在源系统中为空或格式不一致,需要在接入层做字段清洗和格式统一,例如统一为大写、去除前后空格。

把接口选型、协议匹配、映射配置、质量校验四步做扎实,DCS、PLC、SCADA、MES、LIMS 的数据才能真正汇入同一条可追溯的数据链,为后续的批次追溯、偏差分析和报表查询提供可靠基础。