4、数据采集系统搭建:PLC与SCADA基础、数据采集卡与模块、通信协议(Modbus, OPC UA)
说到中试阶段的数据采集,我见过太多人一上来就买最贵的硬件,结果发现根本跑不通。说白了,数据采集系统不是堆料,而是搭积木。你得知道每块积木是干什么的,怎么连,才能搭出稳当的系统。
这一章,我带你过一遍最核心的三块:PLC与SCADA、数据采集卡与模块、还有通信协议。嗯,这三样东西,你搞懂了,中试数据采集就算入门了。
4.1 PLC与SCADA:现场的大脑与眼睛
PLC(可编程逻辑控制器)是什么?我习惯把它比作现场的大脑。它负责接收传感器信号,做逻辑判断,然后控制执行器。比如温度高了,它就关小阀门。就这么简单。
SCADA(数据采集与监视控制)呢?它是眼睛。你坐在办公室,就能看到现场所有PLC的数据。压力、流量、温度,一目了然。
我个人习惯,在中试阶段,PLC选型不用太高端。中小型PLC完全够用。比如西门子S7-1200系列,或者三菱FX系列。为什么?因为中试产线变化快,PLC程序经常要改。大PLC改起来太麻烦,小PLC灵活。
核心要点:
- PLC负责实时控制,响应时间通常在毫秒级
- SCADA负责数据展示与记录,刷新频率在秒级
- 中试阶段,建议PLC与SCADA分开部署,不要用一体化方案
我的经验: 我曾经在一个项目中,把PLC和SCADA装在同一台工控机上。结果PLC一跑高速逻辑,SCADA界面就卡死。后来分开部署,问题全解决了。记住,实时控制和人机交互,最好分家。
4.2 数据采集卡与模块:选对接口很重要
数据采集卡,说白了就是把模拟信号(比如4-20mA电流、0-10V电压)转成数字信号,让电脑能读。模块呢?就是把这些卡做成独立的小盒子,方便现场安装。
你想想看,中试现场的信号类型有多杂?有热电偶的毫伏信号,有压力变送器的4-20mA信号,还有流量计的脉冲信号。一个采集卡不可能通吃所有。
我建议,按信号类型分模块采集:
| 信号类型 | 推荐模块 | 注意事项 |
|---|---|---|
| 4-20mA 模拟量 | ADAM-4117(研华) | 注意供电电压,不要超过24V |
| 热电偶/RTD | NI 9211(国家仪器) | 冷端补偿必须做,否则数据不准 |
| 脉冲/频率信号 | USB-6210(NI) | 注意最高频率,别超采样率 |
| 数字量(开关信号) | DIO-24(Measurement Computing) | 注意干接点和湿接点的区别 |
避坑指南: 我曾经在选采集卡时,只看采样率,没看输入阻抗。结果接上传感器后,信号衰减了30%。后来才知道,采集卡的输入阻抗必须比传感器输出阻抗大100倍以上。这个坑,你千万别踩。
4.3 通信协议:Modbus与OPC UA
数据采集系统里,通信协议就是语言。设备之间说同一种语言,才能交换数据。中试现场最常见的两种语言,就是Modbus和OPC UA。
4.3.1 Modbus:老牌工业协议
Modbus诞生于1979年,到现在还在用。为什么?因为它简单、可靠。你想想看,一个协议能活40多年,肯定有它的道理。
Modbus有两种模式:RTU(二进制模式)和TCP(网络模式)。RTU走串口(RS-232/RS-485),TCP走以太网。
我个人习惯,中试阶段优先用Modbus TCP。为什么?因为走网线,不用考虑串口接线问题,而且速度更快。但要注意,Modbus TCP的报文长度有限制,一次最多读125个寄存器。
下面是一个简单的Modbus TCP读取示例(Python):
from pymodbus.client import ModbusTcpClient
# 连接PLC
client = ModbusTcpClient('192.168.1.100', port=502)
client.connect()
# 读取保持寄存器,起始地址0,读取10个
result = client.read_holding_registers(0, 10, unit=1)
if not result.isError():
print("读取成功:", result.registers)
else:
print("读取失败:", result)
client.close()
小技巧: 调试Modbus时,我习惯先用Modbus Poll这个软件模拟一下。它能帮你确认地址对不对、数据类型对不对。别一上来就写代码,先用手动工具验证,能省一半时间。
4.3.2 OPC UA:新一代工业标准
OPC UA(统一架构)是Modbus的升级版。它解决了Modbus的几个痛点:
- 安全性: OPC UA支持加密和认证,Modbus是明文传输
- 数据模型: OPC UA可以描述数据的含义(比如温度、压力),Modbus只传数字
- 跨平台: OPC UA不依赖Windows,Linux也能跑
但OPC UA也有缺点:配置复杂。我第一次配置OPC UA服务器时,光证书就折腾了两天。嗯,这个坑我替你们踩过了。
下面是一个OPC UA读取示例(Python,使用opcua库):
from opcua import Client
# 连接OPC UA服务器
client = Client("opc.tcp://192.168.1.100:4840")
client.connect()
# 获取节点(变量)
temp_node = client.get_node("ns=2;i=1001")
temp_value = temp_node.get_value()
print(f"当前温度:{temp_value} °C")
client.disconnect()
选型建议:
- 如果设备老旧、只支持串口,用Modbus RTU
- 如果设备支持以太网、数据量不大,用Modbus TCP
- 如果需要跨平台、跨网络、高安全性,用OPC UA
- 中试阶段,我建议Modbus TCP为主,OPC UA为辅
4.4 系统搭建实战:一个完整的例子
说了这么多,咱们来搭一个实际系统。假设你要采集一个中试反应釜的数据:温度、压力、搅拌转速。
硬件选型:
- PLC:西门子S7-1200(负责控制搅拌电机和加热器)
- 采集模块:ADAM-4117(采集4-20mA的温度和压力信号)
- 通信:Modbus TCP,通过交换机连接PLC和采集模块
- 上位机:一台工控机,运行SCADA软件(比如WinCC或Ignition)
数据流:
传感器 → 采集模块(ADAM-4117)→ Modbus TCP → 工控机(SCADA)→ 数据库 → 数据分析
下面我用一张图来展示这个系统的结构:
这个系统搭好后,你就能在SCADA界面上实时看到温度、压力、转速的变化。数据也会自动存入数据库,方便后续分析。
最后提醒一句: 中试阶段的数据采集,稳定性比精度更重要。我曾经为了追求0.1%的精度,用了高精度采集卡,结果现场干扰太大,数据跳得厉害。后来换了带隔离的普通模块,数据反而更稳。记住,稳定压倒一切。
公众号:蓝海资料掘金营,微信deep3321