2. 数据采集与监控(SCADA):遥测遥信原理、RTU/FTU通信协议(IEC 104/Modbus)、数据质量码处理

各位同学,咱们今天聊聊SCADA。说实话,这是EMS系统里最接地气、也最容易出幺蛾子的部分。你想想看,调度员在屏幕上看到的每一个数据,背后都经历了一段不简单的旅程。我做了十几年电力系统,见过太多因为数据采集出问题导致的误判——嗯,咱们今天就把这块彻底讲透。

2.1 遥测与遥信:SCADA的两大基石

遥测和遥信,说白了就是SCADA系统从现场设备那里“听”回来的两种信息。

  • 遥测(Telemetry):采集模拟量。比如电压、电流、有功功率、无功功率、频率、温度等。这些是连续变化的数值。
  • 遥信(Teleindication):采集状态量。比如断路器的分/合位、隔离开关的状态、保护动作信号、告警信号等。这些是离散的0或1。

我个人习惯把遥测比作“血压计”,遥信比作“心跳监测仪”。一个告诉你数值,一个告诉你状态。两者缺一不可。

核心要点:遥测数据是连续值,需要经过模数转换(ADC)和标度变换;遥信数据是离散值,需要防抖处理(去抖动时间通常设为20-50ms)。

2.2 RTU与FTU:现场的数据“哨兵”

RTU(远程终端单元)和FTU(馈线终端单元)是部署在变电站或线路上的智能设备。它们负责采集现场数据,并转发给主站。

设备类型 典型部署位置 主要功能 通信特点
RTU 变电站、发电厂 遥测、遥信、遥控、遥调 通道多、数据量大、可靠性要求高
FTU 配电线路、柱上开关 遥测、遥信、遥控(故障隔离) 环境恶劣、供电受限、通信距离远

我记得有一次在西北某风电场调试,FTU装在户外柱上,冬天零下30度,设备频繁死机。后来发现是电源模块低温性能不达标——嗯,选型时一定要看工作温度范围,别只看参数表。

2.3 通信协议:IEC 104 vs Modbus

通信协议是SCADA系统的“语言”。目前国内电力系统最主流的就是IEC 60870-5-104(简称IEC 104)和Modbus。

2.3.1 IEC 104:电力系统的“普通话”

IEC 104是基于TCP/IP的网络协议,广泛应用于变电站和调度主站之间的通信。它的特点是:

  • 面向连接:建立TCP连接后,通过启动帧(STARTDT)激活数据传输
  • 数据分类清晰:遥测用M_ME_NA(归一化值)、M_ME_NB(标度化值);遥信用M_SP_NA(单点遥信)、M_DP_NA(双点遥信)
  • 具备传输确认机制:发送方需要等待接收方确认,否则会重发

你想想看,为什么电力系统偏爱IEC 104?因为它有完善的数据同步机制和时钟同步功能。我在项目中遇到过一个问题:主站和子站时钟偏差超过2秒,导致SOE(事件顺序记录)时间戳全部错乱。后来加了SNTP对时,问题才解决。

实战技巧:IEC 104的T0、T1、T2超时参数要合理设置。T0(连接超时)建议30秒,T1(发送/确认超时)建议15秒,T2(接收/确认超时)建议10秒。别设太短,网络抖动一下就会断链。

2.3.2 Modbus:工业界的“通用语”

Modbus协议简单、轻量,广泛应用于配电自动化、光伏逆变器、储能系统等场景。常见的有Modbus RTU(串口)和Modbus TCP(以太网)。

Modbus的核心是“寄存器”和“线圈”:

  • 保持寄存器(Holding Register):存放遥测数据,如电压、电流
  • 线圈(Coil):存放遥信状态,如开关分合
  • 输入寄存器(Input Register):只读的遥测数据
  • 离散输入(Discrete Input):只读的遥信状态
// Modbus RTU读取遥测数据示例(C语言伪代码)
uint16_t read_holding_register(uint8_t slave_id, uint16_t reg_addr) {
    uint8_t request[8];
    request[0] = slave_id;          // 从站地址
    request[1] = 0x03;              // 功能码:读保持寄存器
    request[2] = (reg_addr >> 8) & 0xFF;  // 寄存器地址高字节
    request[3] = reg_addr & 0xFF;         // 寄存器地址低字节
    request[4] = 0x00;              // 读取数量高字节
    request[5] = 0x01;              // 读取数量低字节(读1个寄存器)
    // CRC16校验(略)
    // 发送request,接收response,解析数据
    return (response[3] << 8) | response[4];
}

Modbus有个坑:它没有数据质量码。你读到一个数值,不知道它是正常值还是无效值。所以我在项目中通常会在应用层加一个“心跳”寄存器,如果心跳停止更新超过3个周期,就判定数据无效。

注意:Modbus RTU的CRC校验不能省略!我曾经见过一个项目,因为CRC校验代码写错了,导致误码率高达5%。现场查了三天,最后发现是CRC查表法表格生成有误——嗯,这种低级错误,咱们别犯。

2.4 数据质量码:数据的“体检报告”

数据质量码(Quality Code)是SCADA系统给每个数据打的标签。它告诉你这个数据是“健康”还是“生病”。

我习惯把数据质量码分为三级:

  1. 好数据(Good):数据正常采集,无异常。可以直接用于调度决策。
  2. 可疑数据(Questionable):数据超出合理范围、通信有短暂中断、或设备处于检修状态。需要人工确认。
  3. 坏数据(Bad):通信中断、设备故障、数据超时未更新。不能用于任何计算。

在IEC 104协议中,数据质量码通常包含以下标志位:

标志位 含义 典型场景
IV(Invalid) 数据无效 设备掉电、通信中断
NT(Not Topical) 数据非当前值 数据缓存未刷新、历史数据
SB(Substituted) 数据被人工置入 调度员手动输入替代值
BL(Blocked) 数据被封锁 设备检修、信号屏蔽

我曾经在某个省调项目里,发现AGC(自动发电控制)系统频繁误调。查了三天,最后发现是某个遥测点的质量码被置为“SB”(人工置入),但调度员忘记取消置入标志了。AGC系统以为这个数据是真实的,结果按错误数据调节了机组出力——嗯,从那以后,我要求所有数据在进入AGC前必须检查质量码,IV和SB的数据一律不参与计算。

数据质量码处理原则:

  • 好数据:直接使用
  • 可疑数据:标记告警,人工确认后决定是否使用
  • 坏数据:丢弃,使用上一帧有效数据或插值替代
  • 所有数据在存入历史库时,必须保留原始质量码

2.5 知识体系总览

下面这张图,是我自己总结的SCADA数据采集与监控的核心逻辑。你把它理解了,整个章节就通了。

SCADA数据采集与监控核心逻辑 现场设备(RTU/FTU) 数据采集:遥测(模拟量)+ 遥信(状态量) 通信协议:IEC 104(电力标准) / Modbus(工业通用) 数据质量码:Good / Questionable / Bad EMS应用:AGC / AVC / 状态估计 / 告警 部署在变电站/线路 连续值 + 离散值 TCP/IP 或 串口 IV/NT/SB/BL 标志位 数据质量决定可用性

这张图从下往上看,就是数据从现场设备到EMS应用的完整链路。每一步都有坑,每一步都需要认真对待。我个人觉得,数据质量码处理是最容易被忽视、但影响最大的环节——你想想看,一个坏数据进了AGC,后果有多严重?

我的建议:在开发SCADA数据采集模块时,先把数据质量码处理逻辑写好,再写业务逻辑。顺序别搞反了。数据质量是1,业务逻辑是后面的0——没有1,再多的0也没用。


公众号:蓝海资料掘金营,微信deep3321