6.3 以太网通信
本节将介绍工业以太网通信技术
学习目标
- 了解工业以太网的特点与优势
- 掌握TCP/IP协议与IP地址配置
- 熟悉Modbus TCP协议的应用
- 了解PROFINET和EtherNet/IP等工业协议
- 能够实现PLC的以太网通信编程
一、工业以太网概述
1.1 以太网发展历程
以太网发展时间线:
┌─────────────────────────────────────────────────────┐
│ 1973年 │ Xerox PARC发明以太网 │
│ 1980年 │ DIX标准(DEC-Intel-Xerox) │
│ 1983年 │ IEEE 802.3标准发布 │
│ 1995年 │ 快速以太网(100Mbps) │
│ 1999年 │ 千兆以太网(1Gbps) │
│ 2002年 │ 万兆以太网(10Gbps) │
│ 2010年 │ 40G/100G以太网 │
│ 现在 │ 工业以太网广泛应用 │
└─────────────────────────────────────────────────────┘1.2 工业以太网特点
与商用以太网的区别:
| 特性 | 商用以太网 | 工业以太网 |
|---|---|---|
| 环境要求 | 办公环境 | 工业现场(温度、湿度、振动) |
| 实时性 | 非实时 | 确定性实时 |
| 可靠性 | 一般 | 高可靠性要求 |
| 接口 | RJ45 | M12/RJ45工业级 |
| 防护等级 | IP20 | IP65/IP67 |
| 电磁兼容 | 一般 | 强抗干扰 |
1.3 主流工业以太网协议
工业以太网协议市场份额:
┌─────────────────────────────────────────┐
│ PROFINET │████████████████│ 30% │
│ EtherNet/IP │████████████ │ 24% │
│ Modbus TCP │████████ │ 16% │
│ EtherCAT │██████ │ 12% │
│ POWERLINK │████ │ 8% │
│ CC-Link IE │███ │ 6% │
│ 其他 │██ │ 4% │
└─────────────────────────────────────────┘1.4 工业以太网拓扑结构
星型拓扑:
┌─────────┐
│ 交换机 │
└────┬────┘
┌────┬───┼───┬────┐
│ │ │ │ │
┌─┴─┐┌─┴─┐┌─┴─┐┌─┴─┐┌─┴─┐
│PLC││HMI││I/O││驱动││PC │
└───┘└───┘└───┘└───┘└───┘环型拓扑(MRP冗余):
┌────────────────────────────┐
│ │
┌─┴─┐ ┌───┐ ┌───┐ ┌─┴─┐
│PLC│────│SW1│────│SW2│────│I/O│
└───┘ └───┘ └───┘ └───┘
│ │ │ │
┌─┴─┐ ┌─┴─┐ ┌─┴─┐ ┌─┴─┐
│设备│ │设备│ │设备│ │设备│
└───┘ └───┘ └───┘ └───┘二、TCP/IP协议基础
2.1 TCP/IP四层模型
OSI七层与TCP/IP四层对比:
┌─────────────┐ ┌─────────────┐
│ 应用层 │ │ │
├─────────────┤ │ 应用层 │
│ 表示层 │ │ HTTP/FTP/ │
├─────────────┤ │ Modbus TCP │
│ 会话层 │ │ │
├─────────────┤ ├─────────────┤
│ 传输层 │ │ 传输层 │
│ │ │ TCP/UDP │
├─────────────┤ ├─────────────┤
│ 网络层 │ │ 网络层 │
│ │ │ IP │
├─────────────┤ ├─────────────┤
│ 数据链路层 │ │ │
├─────────────┤ │ 网络接口层 │
│ 物理层 │ │ Ethernet │
└─────────────┘ └─────────────┘
OSI模型 TCP/IP模型2.2 TCP与UDP比较
| 特性 | TCP | UDP |
|---|---|---|
| 连接方式 | 面向连接 | 无连接 |
| 可靠性 | 可靠传输 | 不可靠 |
| 顺序性 | 保证顺序 | 不保证 |
| 速度 | 较慢 | 较快 |
| 开销 | 较大 | 较小 |
| 应用场景 | 文件传输、数据库 | 视频流、广播 |
| 工业应用 | Modbus TCP | 实时控制 |
2.3 TCP三次握手
TCP连接建立过程:
客户端 服务器
│ │
│ SYN (seq=x) │
│ ──────────────────────>│ 1.发送SYN
│ │
│ SYN+ACK (seq=y,ack=x+1)│
│ <──────────────────────│ 2.回复SYN+ACK
│ │
│ ACK (ack=y+1) │
│ ──────────────────────>│ 3.发送ACK
│ │
│ 连接建立,开始通信 │
│ <─────────────────────>│2.4 端口号概念
常用端口号:
┌──────────────────────────────────────┐
│ 端口号 │ 协议/服务 │
├────────┼─────────────────────────────┤
│ 20,21 │ FTP (文件传输) │
│ 22 │ SSH (安全Shell) │
│ 23 │ Telnet │
│ 80 │ HTTP (Web服务) │
│ 102 │ S7通信(西门子) │
│ 443 │ HTTPS │
│ 502 │ Modbus TCP │
│ 2222 │ EtherNet/IP │
│ 44818 │ EtherNet/IP (显式消息) │
│ 34962 │ PROFINET │
└──────────────────────────────────────┘三、IP地址与网络配置
3.1 IP地址基础
IPv4地址格式:
IP地址结构(32位):
┌────────────┬────────────┬────────────┬────────────┐
│ 192 │ 168 │ 1 │ 100 │
│ 8位 │ 8位 │ 8位 │ 8位 │
└────────────┴────────────┴────────────┴────────────┘
点分十进制表示:192.168.1.100
二进制表示:
11000000.10101000.00000001.01100100IP地址分类:
| 类别 | 范围 | 默认子网掩码 | 网络数 | 主机数 |
|---|---|---|---|---|
| A类 | 1.0.0.0-126.255.255.255 | 255.0.0.0 | 126 | 1677万 |
| B类 | 128.0.0.0-191.255.255.255 | 255.255.0.0 | 16384 | 65534 |
| C类 | 192.0.0.0-223.255.255.255 | 255.255.255.0 | 209万 | 254 |
3.2 私有IP地址
私有地址范围(内网使用):
┌─────────────────────────────────────────┐
│ A类私有:10.0.0.0 - 10.255.255.255 │
│ B类私有:172.16.0.0 - 172.31.255.255 │
│ C类私有:192.168.0.0 - 192.168.255.255 │
└─────────────────────────────────────────┘
工业网络常用:
- PLC网段:192.168.0.x
- HMI网段:192.168.1.x
- 办公网段:192.168.10.x3.3 子网掩码
子网掩码作用示例:
IP地址: 192.168.1.100 = 11000000.10101000.00000001.01100100
子网掩码: 255.255.255.0 = 11111111.11111111.11111111.00000000
─────────────────────────────────────────────────────
网络地址: 192.168.1.0 = 11000000.10101000.00000001.00000000
主机地址: 0.0.0.100 = 00000000.00000000.00000000.01100100
子网掩码/24表示前24位是网络位3.4 PLC网络规划示例
典型工业网络规划:
┌──────────────────────────────────────┐
│ 企业网络 10.0.0.0/8 │
│ (办公网络) │
└───────────────┬──────────────────────┘
│
┌────┴────┐
│ 防火墙 │
└────┬────┘
│
┌────────────────────────┴────────────────────────┐
│ 控制网络 192.168.0.0/24 │
│ │
│ ┌───────┐ ┌───────┐ ┌───────┐ │
│ │ PLC-1 │ │ PLC-2 │ │ HMI │ │
│ │.0.10 │ │.0.20 │ │ .0.30 │ │
│ └───────┘ └───────┘ └───────┘ │
└────────────────────────────────────────────────┘
│
┌────────────────────────┴────────────────────────┐
│ 设备网络 192.168.1.0/24 │
│ │
│ ┌────┐ ┌────┐ ┌────┐ ┌────┐ ┌────┐ │
│ │VFD1│ │VFD2│ │伺服│ │I/O │ │仪表│ │
│ │.1.1│ │.1.2│ │.1.3│ │.1.4│ │.1.5│ │
│ └────┘ └────┘ └────┘ └────┘ └────┘ │
└────────────────────────────────────────────────┘四、Modbus TCP协议
4.1 Modbus TCP概述
Modbus TCP是Modbus协议在TCP/IP网络上的实现,保持了Modbus RTU的简单性,同时获得了以太网的高速度和灵活性。
Modbus TCP特点:
- 基于TCP/IP协议
- 使用端口502
- 无CRC校验(TCP保证数据完整)
- 支持多主站
- 传输速度快
4.2 Modbus TCP帧结构
Modbus TCP ADU(应用数据单元):
┌──────────────────────────────┬─────────────────────┐
│ MBAP报头(7字节) │ PDU(功能码+数据)│
├──────┬──────┬──────┬────────┼──────┬──────────────┤
│事务ID│协议ID│长度 │单元ID │功能码│ 数据 │
│2字节 │2字节 │2字节 │1字节 │1字节 │ N字节 │
└──────┴──────┴──────┴────────┴──────┴──────────────┘
MBAP报头详解:
- 事务标识符:请求/响应配对标识(2字节)
- 协议标识符:0x0000表示Modbus(2字节)
- 长度:后续字节数(2字节)
- 单元标识符:相当于从站地址(1字节)4.3 Modbus RTU vs Modbus TCP
帧格式对比:
Modbus RTU:
┌────────┬──────────┬────────────┬─────────┐
│地址(1) │功能码(1) │ 数据(N) │CRC(2) │
└────────┴──────────┴────────────┴─────────┘
Modbus TCP:
┌─────────────────────────────────────────────────┐
│事务ID│协议ID│长度 │单元ID│功能码│ 数据 │
│ (2) │ (2) │ (2) │ (1) │ (1) │ (N) │
└─────────────────────────────────────────────────┘4.4 Modbus TCP通信示例
读取保持寄存器请求:
读取单元1的寄存器40001-40005
请求帧(字节):
┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬────┐
│ 00 │ 01 │ 00 │ 00 │ 00 │ 06 │ 01 │ 03 │ 00 │ 00 │ 00 │ 05 │
└────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴────┘
| | | | | | | | | | | |
└────┘ └────┘ └────┘ | | └────┘ └────┘
事务ID=1 协议ID=0 长度=6 单元 功能 起始 数量
ID=1 码03 地址0 5个
响应帧:
┌────┬────┬────┬────┬────┬────┬────┬────┬────┬────┬───...───┐
│ 00 │ 01 │ 00 │ 00 │ 00 │ 0D │ 01 │ 03 │ 0A │ XX │ 数据... │
└────┴────┴────┴────┴────┴────┴────┴────┴────┴────┴───...───┘
事务ID 协议ID 长度=13 单元 功能 字节 数据
ID 码 数=104.5 西门子S7-1200 Modbus TCP配置
作为Modbus TCP服务器:
// 使用MB_SERVER指令
MB_SERVER_DB(
CONNECT := "MB_TCP_Connection", // 连接参数
MB_HOLD_REG := P#DB10.DBX0.0 WORD 100, // 保持寄存器
NDR => "NewData", // 新数据标志
DR => "DataRead", // 数据被读标志
ERROR => "Error", // 错误标志
STATUS => "Status" // 状态码
);
// 连接参数配置(DB):
// LocalPort := 502; // 本地端口
// MaxClients := 3; // 最大客户端数作为Modbus TCP客户端:
// 使用MB_CLIENT指令
MB_CLIENT_DB(
REQ := "Trigger", // 触发请求
CONNECT := "MB_TCP_Conn", // 连接参数
MB_MODE := 0, // 0=读,1=写
MB_DATA_ADDR := 40001, // 寄存器地址
MB_DATA_LEN := 10, // 数据长度
MB_DATA_PTR := P#DB20.DBX0.0 WORD 10, // 数据区
DONE => "Done", // 完成标志
BUSY => "Busy", // 忙标志
ERROR => "Error" // 错误标志
);
// 连接参数:
// RemoteAddress := 192.168.0.100; // 服务器IP
// RemotePort := 502; // 端口五、S7通信
5.1 S7协议概述
S7协议是西门子PLC专用的通信协议,基于ISO-on-TCP(RFC1006),使用TCP端口102。
S7通信特点:
- 西门子设备专用
- 支持PUT/GET指令
- 支持大数据块传输
- 配置简单
5.2 PUT/GET通信
PUT/GET通信配置步骤:
1. 启用PUT/GET功能:
CPU属性 → 防护与安全 →
勾选"允许来自远程对象的PUT/GET通信访问"
2. 配置连接:
┌──────────────────────────────────────┐
│ S7-1200 (本地) S7-1200 (远程) │
│ 192.168.0.10 192.168.0.20 │
│ │
│ GET ──────────────→ 读取数据 │
│ PUT ──────────────→ 写入数据 │
└──────────────────────────────────────┘GET指令示例:
// 从远程PLC读取数据
GET_DB(
REQ := "ReadTrigger", // 触发
CONNECT := "S7_Connection", // 连接参数
ADDR_1 := P#DB100.DBX0.0 BYTE 20, // 远程地址
RD_1 := P#DB200.DBX0.0 BYTE 20, // 本地存储
DONE => "ReadDone", // 完成
BUSY => "ReadBusy", // 忙
ERROR => "ReadError" // 错误
);PUT指令示例:
// 向远程PLC写入数据
PUT_DB(
REQ := "WriteTrigger", // 触发
CONNECT := "S7_Connection", // 连接参数
ADDR_1 := P#DB100.DBX0.0 BYTE 20, // 远程地址
SD_1 := P#DB300.DBX0.0 BYTE 20, // 本地数据
DONE => "WriteDone", // 完成
BUSY => "WriteBusy", // 忙
ERROR => "WriteError" // 错误
);5.3 S7通信连接配置
TIA Portal连接配置:
设备与网络视图 → 网络视图 → 连接
1. 选择源PLC
2. 拖动连接到目标PLC
3. 配置连接属性:
- 连接类型:S7连接
- 连接ID:自动分配
- 伙伴地址:远程PLC IP六、PROFINET通信
6.1 PROFINET概述
PROFINET(Process Field Network)是西门子主导的工业以太网标准,由PI(PROFIBUS & PROFINET International)组织维护。
PROFINET版本:
| 版本 | 实时性 | 循环时间 | 应用场景 |
|---|---|---|---|
| PROFINET CBA | 非实时 | 100ms | 组件化自动化 |
| PROFINET IO RT | 软实时 | 1-10ms | 标准自动化 |
| PROFINET IRT | 硬实时 | <1ms | 运动控制 |
6.2 PROFINET IO架构
PROFINET IO系统架构:
┌─────────────────────────────────────┐
│ IO控制器 │
│ (PLC/CPU) │
└─────────────┬───────────────────────┘
│
══════════════╪══════════════════════════ PROFINET网络
│ │ │ │
┌────┴───┐┌───┴────┐┌──┴───┐┌───┴────┐
│IO设备1 ││IO设备2 ││IO设备3││IO监视器│
│(远程IO)││(驱动器)││(HMI) ││(工程站)│
└────────┘└────────┘└──────┘└────────┘角色定义:
- IO控制器:管理IO设备,交换数据(如PLC)
- IO设备:被控制的设备(如分布式I/O)
- IO监视器:监控诊断(如工程站)
6.3 PROFINET设备配置
TIA Portal中配置步骤:
1. 硬件组态
设备视图 → 添加PROFINET设备
2. 分配设备名称
在线访问 → 分配PROFINET设备名称
3. 配置IP地址
设备属性 → PROFINET接口 → 以太网地址
4. 组态IO数据
设备视图 → 配置模块和子模块
5. 编译下载
编译项目 → 下载到设备6.4 PROFINET诊断
诊断信息结构:
┌─────────────────────────────────────────┐
│ PROFINET诊断层次 │
├─────────────────────────────────────────┤
│ 系统级 │ 网络状态、通信错误 │
│ 设备级 │ 设备状态、模块故障 │
│ 通道级 │ IO点状态、断线、短路 │
└─────────────────────────────────────────┘
诊断指令:
- DeviceStates:读取设备状态
- ModuleStates:读取模块状态
- GET_DIAG:获取详细诊断信息七、EtherNet/IP通信
7.1 EtherNet/IP概述
EtherNet/IP(Ethernet Industrial Protocol)是由ODVA组织管理的工业以太网协议,主要在北美地区广泛应用。
EtherNet/IP特点:
- 基于标准TCP/IP和UDP/IP
- 使用CIP(通用工业协议)
- 生产者/消费者模型
- 支持隐式和显式消息
7.2 通信模型
EtherNet/IP通信类型:
┌─────────────────────────────────────────┐
│ 显式消息(Explicit Messaging) │
│ - TCP端口44818 │
│ - 请求/响应模式 │
│ - 配置、诊断 │
├─────────────────────────────────────────┤
│ 隐式消息(Implicit Messaging) │
│ - UDP端口2222 │
│ - 生产者/消费者模式 │
│ - 实时IO数据 │
└─────────────────────────────────────────┘7.3 CIP对象模型
CIP对象层次:
┌──────────────────────────────────────┐
│ 应用对象 │
│ (Assembly, Parameter, Message...) │
├──────────────────────────────────────┤
│ 通用对象 │
│ (Identity, Connection, Message...) │
├──────────────────────────────────────┤
│ 网络对象 │
│ (TCP/IP, Ethernet Link...) │
└──────────────────────────────────────┘
对象寻址:
类ID (Class) → 实例ID (Instance) → 属性ID (Attribute)八、OPC UA通信
8.1 OPC UA概述
OPC UA(Open Platform Communications Unified Architecture)是新一代的工业通信标准,具有跨平台、安全性高等特点。
OPC UA优势:
- 平台无关(Windows/Linux/嵌入式)
- 内置安全机制
- 信息建模能力
- 支持云端连接
8.2 OPC UA架构
OPC UA通信模型:
┌─────────────┐ ┌─────────────┐
│ OPC UA │ │ OPC UA │
│ 客户端 │←───────→│ 服务器 │
└─────────────┘ TCP └─────────────┘
或
┌─────────────┐ HTTPS ┌─────────────┐
│ SCADA │←───────→│ PLC │
│ MES │ │ (内置服务器)│
└─────────────┘ └─────────────┘
端口:4840(默认)8.3 西门子OPC UA服务器配置
TIA Portal OPC UA配置:
1. 启用OPC UA服务器
CPU属性 → OPC UA → 服务器 → 启用
2. 配置服务器端口
默认端口:4840
3. 选择发布变量
OPC UA通信 → 服务器接口 → 添加变量
4. 配置安全策略
- None(无安全)
- Basic128Rsa15
- Basic256
- Basic256Sha256九、以太网通信编程实例
9.1 多设备数据采集系统
系统架构:
┌─────────────────┐
│ S7-1500 主站 │
│ 192.168.0.1 │
└────────┬────────┘
│
┌──────────────┼──────────────┐
│ │ │
┌─────┴─────┐ ┌─────┴─────┐ ┌─────┴─────┐
│ 变频器1 │ │ 变频器2 │ │ 温控仪表 │
│ Modbus TCP│ │ Modbus TCP│ │ Modbus TCP│
│192.168.0.10│ │192.168.0.11│ │192.168.0.12│
└───────────┘ └───────────┘ └───────────┘轮询通信程序:
// 多设备轮询通信
VAR
CommState : INT; // 通信状态
DeviceIndex : INT; // 设备索引
PollTimer : TON; // 轮询定时器
Device : ARRAY[1..3] OF UDT_Device;
END_VAR
// 设备数据结构
TYPE UDT_Device
IP_Address : STRING[15];
UnitID : BYTE;
RegAddress : WORD;
RegCount : WORD;
Data : ARRAY[0..9] OF WORD;
Status : BYTE;
ErrorCount : INT;
END_TYPE
// 轮询逻辑
CASE CommState OF
0: // 空闲,启动轮询
PollTimer(IN := TRUE, PT := T#500ms);
IF PollTimer.Q THEN
DeviceIndex := 1;
CommState := 1;
PollTimer(IN := FALSE);
END_IF;
1: // 发送读取请求
"MB_CLIENT".REQ := TRUE;
"MB_CLIENT".MB_DATA_ADDR := Device[DeviceIndex].RegAddress;
"MB_CLIENT".MB_DATA_LEN := Device[DeviceIndex].RegCount;
CommState := 2;
2: // 等待响应
IF "MB_CLIENT".DONE THEN
// 存储数据
Device[DeviceIndex].Status := 0;
Device[DeviceIndex].ErrorCount := 0;
CommState := 3;
ELSIF "MB_CLIENT".ERROR THEN
Device[DeviceIndex].Status := 1;
Device[DeviceIndex].ErrorCount += 1;
CommState := 3;
END_IF;
3: // 切换设备
"MB_CLIENT".REQ := FALSE;
IF DeviceIndex < 3 THEN
DeviceIndex += 1;
CommState := 1;
ELSE
CommState := 0; // 完成一轮
END_IF;
END_CASE;9.2 通信诊断功能块
// 通信诊断FB
FUNCTION_BLOCK FB_CommDiagnosis
VAR_INPUT
Enable : BOOL;
MaxRetry : INT := 3;
END_VAR
VAR_OUTPUT
Online : BOOL;
CommQuality : REAL; // 通信质量 0-100%
PacketsSent : DINT;
PacketsRcvd : DINT;
PacketsLost : DINT;
ResponseTime: TIME;
END_VAR
VAR
SendCount : DINT;
RcvCount : DINT;
LostCount : DINT;
StartTime : TIME;
EndTime : TIME;
END_VAR
// 计算通信质量
IF Enable THEN
IF SendCount > 0 THEN
CommQuality := DINT_TO_REAL(RcvCount) /
DINT_TO_REAL(SendCount) * 100.0;
END_IF;
// 在线判断
Online := (LostCount < MaxRetry);
// 输出统计
PacketsSent := SendCount;
PacketsRcvd := RcvCount;
PacketsLost := LostCount;
END_IF;十、网络故障诊断
10.1 常见故障及处理
| 故障现象 | 可能原因 | 诊断方法 | 解决方案 |
|---|---|---|---|
| 无法Ping通 | IP配置错误 | ipconfig /all | 检查IP设置 |
| 网线故障 | 查看链路灯 | 更换网线 | |
| 交换机故障 | 测试其他端口 | 更换端口/交换机 | |
| 连接超时 | 端口未开放 | netstat -an | 开放端口 |
| 防火墙阻止 | 关闭防火墙测试 | 配置规则 | |
| 数据错误 | 参数配置错误 | 抓包分析 | 检查配置 |
| 通信断续 | 网络拥堵 | 带宽监测 | 优化网络 |
10.2 诊断工具
常用网络诊断命令(Windows):
1. 测试连通性
ping 192.168.0.10
ping -t 192.168.0.10 (持续ping)
2. 查看IP配置
ipconfig /all
3. 查看端口状态
netstat -an | findstr 502
4. 跟踪路由
tracert 192.168.0.10
5. ARP缓存
arp -aWireshark抓包分析:
Modbus TCP抓包过滤器:
- tcp.port == 502
- modbus
分析要点:
1. 检查请求/响应配对
2. 验证功能码
3. 分析响应时间
4. 识别错误响应十一、实践练习
练习1:网络规划设计
设计一个包含以下设备的工业网络:
- 2台S7-1500 PLC
- 3台变频器(Modbus TCP)
- 2台HMI
- 1台工程师站
要求:
- 规划IP地址分配
- 绘制网络拓扑图
- 确定通信协议
练习2:Modbus TCP通信
使用S7-1200实现:
- 作为Modbus TCP客户端
- 读取远程设备的10个寄存器
- 每秒读取一次
- 显示通信状态
练习3:多PLC数据交换
两台S7-1200之间:
- 使用PUT/GET交换数据
- PLC1向PLC2发送10个字数据
- PLC2向PLC1返回处理结果
本节小结
- 工业以太网已成为自动化系统的主流通信方式
- TCP/IP协议是以太网通信的基础
- Modbus TCP简单易用,兼容性好
- PROFINET是西门子推荐的工业以太网标准
- OPC UA是面向未来的统一通信标准
- 合理的网络规划是系统稳定运行的基础
思考题
- 工业以太网与商用以太网有哪些区别?
- Modbus TCP与Modbus RTU的主要区别是什么?
- PROFINET IO的三种设备角色各有什么功能?
- 如何诊断以太网通信故障?
- OPC UA相比传统OPC有哪些优势?
下一节预告:6.4 现场总线技术 - 学习PROFIBUS、CAN总线等现场总线技术