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)→ 数据库 → 数据分析

下面我用一张图来展示这个系统的结构:

温度传感器 压力传感器 转速传感器 ADAM-4117 采集模块 以太网交换机 S7-1200 PLC 工控机 SCADA 搅拌电机/加热器 图例:传感器 → 采集模块 → 交换机 → 工控机(SCADA) | PLC → 执行器

这个系统搭好后,你就能在SCADA界面上实时看到温度、压力、转速的变化。数据也会自动存入数据库,方便后续分析。

最后提醒一句: 中试阶段的数据采集,稳定性比精度更重要。我曾经为了追求0.1%的精度,用了高精度采集卡,结果现场干扰太大,数据跳得厉害。后来换了带隔离的普通模块,数据反而更稳。记住,稳定压倒一切。


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