4. 数据采集接口与协议对接
历史库的数据质量,首先取决于采集接口能否把现场设备的原始值稳定、准确地送进来。SCADA 系统面对的设备协议差异很大:老站控层常用 OPC DA,新建系统倾向 OPC UA,电力和工业现场大量使用 Modbus TCP/RTU,调度侧则常见 IEC 60870-5-104。本节围绕“协议接入历史库”这一目标,说明各协议的接入方式、关键配置参数、时间戳与质量码处理,以及调试时如何判断数据是否真正落库。
一、先分清“采集通道”与“历史归档”的边界
协议对接不是把数据读上来就结束。完整链路是:协议驱动建立连接 → 周期或变化时读取/订阅 → 生成带时间戳和质量码的测点值 → 写入实时库 → 归档服务按策略写入历史库。历史库只接受“已经带时标和质量码的测点值”,因此配置重点在于:采集周期、时标来源、质量码映射、死区与压缩策略。若时标由采集程序本地生成,设备侧的时间偏差会直接污染趋势曲线;若质量码未映射,坏值会被当作正常值归档。
二、OPC DA 与 OPC UA 的接入差异
OPC DA 基于 COM/DCOM,配置时先确认 OPC Server 的 ProgID 与运行账户权限,再在采集端建立 Group 并添加 Item。DA 的典型参数是更新周期(Update Rate)和死区(Deadband),例如设置 Update Rate=1000ms、Deadband=0.5%,则模拟量变化超过量程 0.5% 才上报。DA 本身不携带统一时标,采集端通常以本地接收时间作为时标,因此必须保证采集机与设备侧时钟同步(NTP 偏差建议小于 1s)。
OPC UA 则内建时间戳与状态码,支持订阅(Subscription)和监控项(MonitoredItem)。配置重点是采样间隔(SamplingInterval)、发布间隔(PublishingInterval)和队列长度(QueueSize)。例如 SamplingInterval=500ms、PublishingInterval=1000ms、QueueSize=10,可在 1 秒内合并最多 10 个采样值,既降低网络压力,又保留变化细节。UA 的 StatusCode 需映射为历史库质量码:Good→Good,Bad→Bad,Uncertain→Uncertain,不能一律写成 Good。
三、Modbus 接入的关键:寄存器映射与数据类型
Modbus 只提供寄存器地址和原始字,不提供工程单位、时标和质量码。接入历史库前必须完成三件事:地址映射、数据类型解析、量程换算。以一台电表为例,读取保持寄存器 40001(对应协议地址 0)开始的 2 个寄存器组成 32 位浮点数,字节序为 CDAB(大端字交换),量程 0~1000 kW。配置示例如下:
测点: Feeder1.Power
协议: Modbus TCP
从站地址: 1
功能码: 03 (读保持寄存器)
起始地址: 0
寄存器数量: 2
数据类型: Float32
字节序: CDAB
量程: 0 ~ 1000 kW
采集周期: 2000 ms
死区: 1.0 kW
调试时先用 Modbus Poll 或采集驱动的“原始值监视”确认读到的两个寄存器值,再按字节序拼装验证。若读回 0x42480000 对应 50.0,说明解析正确;若得到 1.4e-45 之类的异常值,通常是字节序或寄存器偏移错误。RTU 还需核对波特率、数据位、停止位、校验位与从站地址,任一不匹配都会导致超时无响应。
四、IEC 104 接入:总召唤、变化上送与时标
IEC 60870-5-104 是调度主站与变电站之间的标准协议,采用 TCP 端口 2404。接入历史库时,采集端作为主站(Client),配置链路地址(Common Address)、信息对象地址(IOA)和类型标识(TI)。典型流程是:建立 TCP 连接 → 发送 STARTDT 激活 → 总召唤(C_IC_NA_1)获取全量数据 → 接收变化上送(M_SP_NA_1、M_ME_NC_1 等)。104 的测量值报文自带时标(CP56Time2a),应优先使用报文时标而非本地时间,这样历史曲线才能与调度侧一致。
需要特别关注品质描述词(QDS):OV(溢出)、BL(封锁)、SB(取代)、NT(非当前)、IV(无效)。其中 IV=1 表示值无效,应映射为 Bad 质量码;NT=1 表示非当前值,应映射为 Uncertain。若忽略这些标志,历史库会把无效值当成真实趋势,导致分析结论错误。
五、调试与验证:怎么判断数据真的落库了
协议接通不等于历史库有数据。建议按以下顺序验证:
- 链路层:查看驱动日志是否有连接成功、心跳正常;Modbus 看轮询响应时间,104 看 STARTDT 确认。
- 测点层:在实时库中查看该 Tag 的当前值、时标、质量码是否随现场变化更新。
- 归档层:查询历史库最近 10 分钟数据,确认时间间隔与采集周期一致,且质量码正确。
- 异常层:断开设备或制造坏值,观察历史库是否记录 Bad 质量码,恢复后是否自动续传。
把上述配置固化为点表模板,是保证多协议接入一致性的有效手段。点表中至少应包含:测点名、协议类型、连接参数、地址/IOA、数据类型、字节序、量程、采集周期、死区、质量码映射规则。这样新增设备时只需填表,而不必每次重新摸索协议细节,历史库的数据质量也更容易长期保持稳定。