第二章:数据采集与传感技术
各位同学,今天我们来聊聊数据采集与传感技术。说实话,这部分是整个数字化管理工具的「眼睛」和「耳朵」。你系统做得再漂亮,数据不准,一切都是白搭。
我在做第一个光伏电站项目时,就吃过这个亏。传感器选型没经验,结果采集回来的数据跟实际偏差了15%。嗯,那会儿被运维老大骂得狗血淋头。所以这一章,我把这些年踩过的坑、总结的经验,都给你掰开揉碎了讲。
2.1 IoT传感器选型:别只看参数表
传感器选型,说白了就是三个字:准、稳、省。
准,是精度要够。稳,是长期运行不漂移。省,是功耗和成本可控。
我个人习惯,先看应用场景再选型。比如光伏电站,你需要采集的物理量无非这几类:
- 电气参数:电压、电流、功率、频率
- 环境参数:温度、湿度、辐照度、风速
- 状态参数:开关状态、故障告警、位置信息
这里我列个常用传感器选型表,你直接拿去用:
| 测量参数 | 推荐传感器类型 | 精度要求 | 输出接口 | 我踩过的坑 |
|---|---|---|---|---|
| 温度 | PT100 / DS18B20 | ±0.5°C | 4-20mA / 1-Wire | PT100接线长了会有压降,记得做补偿 |
| 辐照度 | 硅光电池式辐照计 | ±5% | RS485 / 0-10V | 别买便宜的,半年就漂移 |
| 电流 | 霍尔电流传感器 | ±1% | RS485 / 4-20mA | 直流分量会干扰,选闭环型 |
| 风速 | 超声波风速仪 | ±0.3m/s | RS485 / 脉冲 | 机械式的冬天会冻住 |
小提示:选型时别只看精度,还要看响应时间。光伏逆变器的电流变化很快,响应时间超过100ms的传感器,采集到的数据基本是「历史数据」。
2.2 数据采集协议:Modbus vs MQTT
协议这块,我见过太多人纠结了。其实没那么复杂,记住一句话:现场总线用Modbus,远程传输用MQTT。
2.2.1 Modbus:工业界的「普通话」
Modbus协议,说白了就是主从问答模式。主机问,从机答。简单、可靠、延迟低。
我在项目中用得最多的是Modbus RTU,走RS485总线。为什么?因为抗干扰能力强,传输距离能到1200米。
给你看个实际配置的例子:
// Modbus RTU 读取逆变器数据示例
// 设备地址:0x01
// 功能码:0x03(读取保持寄存器)
// 起始地址:0x0000(直流电压)
// 读取数量:0x0002(2个寄存器)
请求帧:01 03 00 00 00 02 C4 0B
响应帧:01 03 04 0B B8 0D AC 8E 4F
// 解析:直流电压 = 0x0BB8 = 3000(实际值30.00V)
// 直流电流 = 0x0DAC = 3500(实际值35.00A)
注意:Modbus地址映射表一定要跟设备厂商确认清楚。我曾经遇到过,同一个型号的逆变器,不同批次寄存器地址不一样。嗯,那次排查了整整两天。
2.2.2 MQTT:云端的「快递员」
MQTT是发布/订阅模式,适合数据量不大、但需要实时推送的场景。你想想看,几百个光伏板的数据,如果都用轮询,网络带宽根本扛不住。
MQTT的核心概念就三个:
- Broker:消息中转站,类似快递集散中心
- Topic:消息主题,类似快递单上的地址
- QoS:服务质量等级,0最多发一次,1至少发一次,2确保只发一次
我个人建议,告警数据用QoS 2,普通遥测数据用QoS 1,日志类数据用QoS 0。这样既保证可靠性,又不浪费带宽。
// MQTT 主题设计示例
// 光伏电站数据主题结构
solar/{station_id}/{device_type}/{device_id}/{param}
// 实际例子
solar/SZ001/inverter/INV-001/temperature
solar/SZ001/meter/MTR-001/power
solar/SZ001/env/sensor-001/irradiance
// 发布数据格式(JSON)
{
"timestamp": "2024-01-15T10:30:00Z",
"value": 25.3,
"unit": "°C",
"quality": 1
}
2.3 边缘计算网关配置
网关这东西,很多人以为就是个协议转换器。其实不然,它承担着三个关键角色:数据采集、边缘计算、断点续传。
我习惯把网关配置分成三步走:
- 硬件选型:CPU主频、内存大小、网口数量、串口数量
- 协议适配:配置Modbus从站列表、MQTT Broker地址
- 边缘规则:数据清洗、异常检测、本地存储
给你看个实际项目的网关配置逻辑:
# 边缘网关配置示例(伪代码)
# 1. 定义采集任务
采集任务:
- 名称: "逆变器数据采集"
协议: Modbus RTU
串口: /dev/ttyS0
波特率: 9600
数据位: 8
停止位: 1
校验: 无
设备列表:
- 地址: 0x01
寄存器: [0x0000, 0x0001, 0x0002] # 电压、电流、功率
采集间隔: 5秒
# 2. 边缘计算规则
规则:
- 名称: "异常检测"
条件: "功率 < 0.1 * 额定功率 && 辐照度 > 200"
动作: "生成告警,QoS 2发布到告警主题"
# 3. 数据上传策略
上传:
协议: MQTT
Broker: "mqtt://cloud.energy.com:1883"
主题前缀: "solar/SZ001/"
压缩: true
断点续传: true
本地缓存: 7天
核心要点:边缘计算不是把云端的活搬到本地,而是做减法。只做三件事:数据清洗(去噪、补零)、异常检测(阈值判断)、本地缓存(断网不丢数据)。
说到断点续传,我特别想强调一下。曾经有个项目,网络不太稳定,每天断个三五次。一开始没做本地缓存,结果每次断网就丢数据。后来加了SQLite本地存储,配合MQTT的保留消息机制,数据完整率从82%提升到了99.7%。
2.4 本章知识体系总览
下面这张图,是我梳理的整个数据采集链路的核心逻辑。你把它存下来,做项目时对照着看:
从这张图你能看到,数据从传感器到云端,经历了四个层次。每一层都有它的职责,也都有坑。我的建议是:不要试图跳过任何一层。曾经有个团队想省掉边缘计算层,直接把传感器数据往云端推,结果网络一波动,数据全乱套了。
实战建议:刚开始做项目时,先拿一个逆变器、一个网关、一个MQTT Broker搭最小系统。跑通了再扩展。我每次带新人都是这么教的,效果很好。
好了,这一章的内容就到这里。数据采集是数字化管理的基础,基础不牢,地动山摇。你把这些知识点吃透了,后面的章节学起来会轻松很多。
公众号:蓝海资料掘金营,微信deep3321