数据采集技术基础:传感器原理与Modbus协议
大家好,我是老张。今天咱们聊聊数据采集里最基础、也最绕不开的一块——传感器和通信协议。说实话,我入行头两年,踩的最多的坑就在这。传感器选错了,后面所有数据都是垃圾。Modbus协议没搞明白,设备死活连不上。嗯,今天我把这些经验掰开揉碎了讲给你听。
一、传感器原理:温度、湿度、PM2.5、pH值
传感器说白了,就是把物理世界的信号变成电信号。我习惯把传感器分成两类:一类是输出模拟量的,比如电压、电流;另一类是直接输出数字量的,比如I2C、SPI接口的。咱们环境监测里,四种传感器最常见。
1. 温度传感器
温度传感器原理其实很简单。最常见的是热电偶和热电阻。热电偶利用两种不同金属接触时产生的热电势来测温。热电阻呢,比如PT100,它的电阻值随温度变化而变化。我个人习惯用PT100,因为它线性度好,在0-100℃范围内精度很高。
避坑指南: 我曾经在北方一个冬季项目里,用了普通的热电偶,结果低温下信号漂移严重。后来换成PT100,问题就解决了。记住,低温环境优先考虑热电阻。
2. 湿度传感器
湿度传感器大多基于电容原理。感湿材料吸收水分后,介电常数变化,电容值就变了。常见的型号有SHT30、DHT22。我建议你选数字输出的,比如SHT30,它内部做了温度补偿,精度比模拟的高不少。
3. PM2.5传感器
PM2.5传感器用的是激光散射原理。激光照射到颗粒物上,产生散射光,光强跟颗粒物浓度成正比。市面上主流的是攀藤的PMS系列,比如PMS5003。它直接输出数字信号,用起来很方便。
你想想看,为什么PM2.5传感器要定期校准?因为激光管会老化,风扇会积灰。我一般每半年校准一次,用标准气溶胶做对比。
4. pH值传感器
pH传感器用的是玻璃电极法。玻璃膜内外表面产生电位差,这个电位差跟溶液pH值成线性关系。嗯,这里要注意,pH传感器是消耗品,玻璃膜会老化,参比电极里的电解液会流失。
二、数据采集卡:模拟信号怎么变成数字信号
传感器输出的是模拟信号,但计算机只认数字信号。中间这个转换工作,就是数据采集卡干的。说白了,采集卡的核心就是ADC(模数转换器)。
选采集卡时,我主要看三个参数:
- 采样率: 每秒能采多少个点。温度变化慢,1Hz就够了;振动信号可能需要1000Hz。
- 分辨率: 常见的有12位、16位、24位。位数越高,精度越高。我一般用16位,性价比最高。
- 通道数: 能同时接多少个传感器。环境监测站一般需要8-16个通道。
举个例子,我做过一个水质监测项目,用了16位采集卡,采样率设成10Hz。pH传感器输出0-5V电压,对应pH 0-14。采集卡把电压转成数字量,0-65535。然后程序里再换算成pH值。就这么简单。
三、Modbus协议简介:工业通信的通用语言
Modbus协议,说白了就是设备之间怎么说话。它有两种模式:RTU(二进制)和ASCII(文本)。工业现场90%用RTU,因为效率高。
Modbus的核心概念就三个:
- 主站(Master): 发起通信的一方,通常是PLC或工控机。
- 从站(Slave): 响应请求的一方,比如传感器、采集卡。
- 寄存器(Register): 数据存放的地方。每个从站有多个寄存器,主站通过地址读写它们。
Modbus的常用功能码就几个:
| 功能码 | 含义 | 用途 |
|---|---|---|
| 0x03 | 读保持寄存器 | 读取传感器当前值 |
| 0x06 | 写单个寄存器 | 设置传感器参数 |
| 0x10 | 写多个寄存器 | 批量设置参数 |
我举个例子,读取一个温湿度传感器的数据。传感器地址是1,温度存在寄存器0,湿度存在寄存器1。主站发命令:01 03 00 00 00 02 CRC。意思是:地址1的从站,读寄存器0开始的两个寄存器。从站回复:01 03 04 01 2C 02 58 CRC。其中01 2C是温度(十进制300,除以10得30.0℃),02 58是湿度(十进制600,除以10得60.0%)。
// Modbus RTU读取示例(C语言伪代码)
uint8_t send_buf[] = {0x01, 0x03, 0x00, 0x00, 0x00, 0x02, 0xC4, 0x0B};
// 发送:地址1,功能码03,起始寄存器0,数量2,CRC校验
// 回复解析:
uint8_t recv_buf[] = {0x01, 0x03, 0x04, 0x01, 0x2C, 0x02, 0x58, 0xXX, 0xXX};
uint16_t temp = (recv_buf[3] << 8) | recv_buf[4]; // 0x012C = 300
uint16_t humi = (recv_buf[5] << 8) | recv_buf[6]; // 0x0258 = 600
float temperature = temp / 10.0; // 30.0℃
float humidity = humi / 10.0; // 60.0%
四、知识体系总览
下面这张图,是我自己总结的数据采集技术基础框架。你看一眼,心里就有数了。
你看,整个流程就是:传感器感知物理量 → 采集卡转成数字 → Modbus协议传数据。每一层都有坑,但每一层也都有规律可循。
好了,今天的内容就到这里。传感器原理、采集卡选型、Modbus协议,这三块是数据采集的基石。你把这些搞明白了,后面做环境大数据采集,心里就有底了。