3、通信协议入门:Modbus RTU/TCP协议详解、OPC DA/UA协议对比、IEC 61850与IEC 104简介

各位同学,今天我们来聊聊风场SCADA里最绕不开的话题——通信协议。

说实话,我刚入行那会儿,被这些协议搞得一头雾水。Modbus、OPC、IEC 61850……名字一个比一个长,到底该用哪个?

嗯,别急。咱们一个一个捋清楚。

3.1 Modbus RTU / TCP:最老牌、最通用的“通用语言”

Modbus 是1979年诞生的协议,比我的工龄还长。但你别小看它,直到今天,90%以上的风机控制器、PLC、电表都支持它。

为什么它这么能打?

说白了,就三个字:简单、稳定、免费

核心要点:

  • Modbus RTU:走串口(RS-232/RS-485),数据是二进制格式,效率高。适合短距离、低速场景。
  • Modbus TCP:走以太网,把RTU的报文封装在TCP/IP包里。适合长距离、高速场景。

我在项目里遇到过一件事:有个风场,风机离中控室3公里,用RS-485拉线,结果信号衰减得厉害,数据老是丢包。后来换成Modbus TCP,走光纤,问题就解决了。你想想看,物理层不一样,效果天差地别。

3.1.1 报文结构(看一眼就懂)

Modbus的报文其实很简单,就四个部分:

| 地址码 | 功能码 | 数据区 | 校验码 |
|  1字节  |  1字节  | N字节  |  2字节  |
  • 地址码:你要找哪个设备?比如风机1号、风机2号。
  • 功能码:你要干什么?读数据(03)、写数据(06)、读线圈(01)等。
  • 数据区:具体的数据内容,比如寄存器地址、数值。
  • 校验码:CRC校验,保证数据没被干扰。

我的小技巧:调试Modbus时,我习惯先用串口助手抓一下原始报文。看到“01 03 00 00 00 01 84 0A”这样的十六进制串,心里就有底了。第一个字节是地址,第二个是功能码,后面是数据,最后两位是CRC。

3.1.2 常见功能码速查表

功能码 名称 用途
01 读线圈 读取开关量(如断路器状态)
02 读离散输入 读取数字量输入(如急停按钮)
03 读保持寄存器 读取模拟量(如风速、功率)
04 读输入寄存器 读取只读模拟量(如温度传感器)
06 写单个寄存器 设置参数(如功率限值)
16 写多个寄存器 批量设置参数

注意:我曾经遇到过一个问题——读回来的风速值总是偏大。查了半天,发现是寄存器地址搞错了。风机厂家给的文档里,地址是从0开始的,而我用的驱动库是从1开始的。嗯,这种“偏移量”问题,坑过不少人。

3.2 OPC DA vs OPC UA:老将与新王

Modbus虽然好用,但它有个硬伤——只能传原始数据,不能传“语义”。比如你读到寄存器地址100的值是35.6,但35.6是什么?是风速?还是温度?Modbus不告诉你。

这时候,OPC就登场了。

3.2.1 OPC DA(OLE for Process Control – Data Access)

OPC DA是90年代微软搞出来的,基于COM/DCOM技术。它最大的贡献是:统一了数据访问接口

以前,每个硬件厂商都有自己的驱动,SCADA要对接10种设备,就得装10个驱动。有了OPC DA,只要硬件厂商提供OPC服务器,SCADA通过OPC客户端就能统一读取。

但OPC DA有个致命问题:它依赖Windows,而且DCOM配置极其复杂。我记得有一次,为了配置两台机器之间的DCOM安全策略,我折腾了整整一天。防火墙、用户权限、注册表……搞到半夜才通。

3.2.2 OPC UA(Unified Architecture)

OPC UA是OPC DA的升级版,也是未来趋势。它不再依赖COM/DCOM,而是基于TCP/IP,跨平台(Windows、Linux都行)。

核心区别:

对比项 OPC DA OPC UA
平台依赖 仅Windows 跨平台
通信方式 COM/DCOM TCP/IP、HTTPS
安全性 弱(DCOM配置复杂) 强(加密、认证、审计)
数据模型 简单标签 对象化、支持类型继承
历史数据 不支持 内置历史数据访问

我的建议:新项目直接上OPC UA。虽然前期配置稍微复杂一点,但后期维护省心太多。我手头一个老风场,还在用OPC DA,每次Windows更新都提心吊胆,生怕DCOM出问题。

3.3 IEC 61850 与 IEC 104:电力行业的“正规军”

Modbus和OPC是通用协议,什么行业都能用。但电力行业有自己的“行规”——IEC 61850和IEC 104。

3.3.1 IEC 61850:变电站的“普通话”

IEC 61850最初是为变电站自动化设计的,但现在风电场也越来越常用。它最大的特点是:面向对象建模

什么意思呢?

在Modbus里,你看到的是一个个寄存器地址。在IEC 61850里,你看到的是“断路器XCBR”、“变压器YPTR”、“测量单元MMXU”这样的逻辑节点。每个节点有自己的属性和服务。

举个例子:

// 读取断路器位置
XCBR1.Pos.stVal  // 返回值:0=分,1=合

是不是很直观?

但IEC 61850也有门槛:它需要专门的配置工具(如SCL文件),而且报文格式复杂(基于MMS协议)。我刚开始接触时,光理解“逻辑设备-逻辑节点-数据对象-数据属性”这四层结构,就花了一周。

3.3.2 IEC 104:远动协议的“老兵”

IEC 104是IEC 60870-5-104的简称,主要用于调度端和变电站之间的远动通信。它基于TCP/IP,传输遥测、遥信、遥控、遥调数据。

和Modbus TCP的区别:

  • IEC 104有标准的ASDU(应用服务数据单元)结构,数据组织更规范。
  • 支持“总召唤”功能,可以一次性读取所有数据。
  • 有标准的时钟同步机制。

避坑指南:我曾经在调试IEC 104时,发现遥信数据老是抖动。后来查了规范,才知道IEC 104的遥信默认是“单点遥信”,需要配置“抖动抑制”参数。嗯,不看规范就上手,容易踩坑。

3.4 知识体系总览

为了让你更直观地理解这些协议的关系,我画了一张图:

风场SCADA通信协议知识体系 应用层协议 Modbus RTU/TCP OPC DA / UA IEC 61850 / 104 特点 • 简单、稳定、免费 • 寄存器/线圈模型 • 适合设备级通信 特点 • 统一数据访问接口 • UA跨平台、更安全 • 适合系统集成 特点 • 面向对象建模 • 电力行业标准 • 适合调度/变电站 应用场景:风机控制器 → 场站SCADA → 集控中心 → 调度端 实际项目中,往往多种协议并存。Modbus用于风机内部,OPC用于系统集成,IEC用于调度通信。

3.5 小结

好了,这一章的内容就到这里。总结一下:

  • Modbus:最基础、最通用,适合设备级通信。RTU走串口,TCP走以太网。
  • OPC:解决数据语义问题。DA是老将,UA是新王,新项目建议直接上UA。
  • IEC 61850/104:电力行业标准,61850面向对象建模,104用于远动通信。

说实话,这些协议你不需要全部精通。但至少要明白:什么时候该用哪个。我在项目里见过有人用Modbus去传几十公里外的数据,结果延迟高得离谱;也见过有人用IEC 61850去读一个简单的温度传感器,配置工作量比写代码还大。

嗯,选对工具,比会用工具更重要。


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