1. FX5U PLC以太网通讯实战指南
作为工业自动化领域的核心控制设备,PLC的通讯功能一直是现场调试的难点和重点。三菱电机FX5U系列PLC凭借其强大的以太网通讯能力,在中小型自动化项目中广受欢迎。但官方手册往往只提供基础说明,实际应用中总会遇到各种"坑"。本文将分享我在多个产线调试中积累的FX5U以太网通讯实战经验,所有代码均经过实际设备验证,可直接套用。
2. 以太网通讯基础配置
2.1 硬件连接与网络设置
FX5U PLC自带一个RJ45以太网口,支持10/100Mbps自适应。在进行任何通讯前,必须确保硬件连接正确:
- 直连通讯:使用标准网线(建议Cat5e以上)直接连接两台FX5U的LAN口
- 交换机连接:多设备通讯时,建议使用工业级交换机(如Hirschmann OCTOPUS)
- IP设置原则:
- 同一网络内的设备IP必须在同一网段
- 子网掩码通常设置为255.255.255.0
- 默认网关根据网络拓扑配置
注意:直连时建议使用交叉网线,虽然现代设备大多支持自动翻转,但使用交叉线可避免兼容性问题。
2.2 GX Works3基础配置
在GX Works3中配置以太网参数时,需要重点关注以下位置:
- 导航窗口 → 参数 → FX5UCPU → 模块参数 → 以太网端口
- 设置IP地址、子网掩码等基本网络参数
- 在"应用设置"中勾选需要使用的协议(Socket通信、SLMP等)
3. Socket通信实战
3.1 两台PLC直连通讯
这是最经济实惠的通讯方案,只需一根网线即可实现数据交换。以下是经过产线验证的完整程序示例:
发送方PLC程序(假设IP为192.168.3.1)
plaintext复制// 网络参数设置
D8120 = H0C81 // 通讯格式:TCP协议+端口5000
D8121 = 2 // 目标IP末位(192.168.3.2)
D8122 = 5000 // 端口号
// 建立连接
OPEN #3 // 使用通道3
// 数据发送
DSEND D100 K8 D200 K8 // 将D100-D107的8个字发送到对方D200-D207
接收方PLC程序(假设IP为192.168.3.2)
plaintext复制// 网络参数设置
D8120 = H0C81 // 与发送方一致
D8121 = 1 // 目标IP末位(192.168.3.1)
D8122 = 5000 // 端口号
// 建立连接
OPEN #4 // 使用通道4
// 数据接收
DRECV D300 K8 D400 K8 // 接收8个字存储到D400-D407
调试技巧:
- 先用PING命令测试网络连通性
- 监控SD系列状态寄存器(如SD1220-SD1223)查看通讯错误代码
- 建议在程序开始时添加2秒延时,避免上电立即通讯导致的连接失败
3.2 异常处理机制
稳定的通讯系统必须包含完善的异常处理:
plaintext复制// 发送方异常处理
IF SM8000 THEN
MOV K0 D900 // 清空状态字
END_IF
// 接收方异常处理
IF SD1220 <> 0 THEN
MOV SD1220 D901 // 记录错误代码
CLOSE #4 // 关闭连接
DELAY K2000 // 延时2秒
OPEN #4 // 重新连接
END_IF
4. SLMP协议高级应用
4.1 协议原理详解
SLMP(Seamless Message Protocol)是三菱开发的轻量级通讯协议,相比Modbus具有以下优势:
- 数据传输效率更高
- 支持更多三菱特有功能
- 响应速度更快
协议帧基本结构:
| 字段 | 长度 | 说明 |
|---|---|---|
| 副头部 | 2字节 | 固定为0x5000 |
| 访问路径 | 2字节 | 通常为0x0000 |
| 请求长度 | 4字节 | 大端格式 |
| 超时时间 | 2字节 | 单位250ms |
| 命令代码 | 2字节 | 如0x0104为读D寄存器 |
| 起始地址 | 2字节 | 寄存器偏移 |
| 数据长度 | 2字节 | 读取的字数 |
4.2 C#完整示例代码
csharp复制using System;
using System.Net;
using System.Net.Sockets;
class SLMP_Reader
{
static void Main()
{
// 创建Socket连接
Socket socket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream,
ProtocolType.Tcp);
socket.Connect(new IPEndPoint(IPAddress.Parse("192.168.3.1"), 5000));
// 构建读取D0-D9的请求帧
byte[] request = {
0x50, 0x00, // 副头部
0x00, 0x00, // 访问路径
0x00, 0x00, 0x03, 0x00, // 请求长度(大端)
0x0A, 0x00, // 超时(2.5秒)
0x01, 0x04, // 读D寄存器
0x00, 0x00, // 起始地址(D0)
0x00, 0x0A // 读取10个字
};
// 发送请求
socket.Send(request);
// 接收响应
byte[] response = new byte[256];
int received = socket.Receive(response);
// 解析数据
for(int i=0; i<10; i++)
{
int value = (response[11+i*2] << 8) | response[12+i*2];
Console.WriteLine($"D{i} = {value}");
}
socket.Close();
}
}
性能优化建议:
- 使用异步Socket提高吞吐量
- 设置合理的Socket缓冲区大小(建议8KB以上)
- 对高频读取数据启用保活机制
5. JE-C伺服控制实战
5.1 硬件配置要点
- 使用标准以太网电缆连接FX5U和J5伺服驱动器
- 伺服参数设置:
- PA01: 控制模式选择(位置/速度/转矩)
- PA05: 电子齿轮比分子
- PA06: 电子齿轮比分母
- 在GX Works3中配置轴参数:
- 基本设置:轴类型、单位等
- 极限设置:软限位、硬限位
- 增益调整:根据负载特性调整
5.2 运动控制程序示例
plaintext复制// 轴参数设置
MOV K1 D1800 // 轴1参数区首地址
MOV K1000 D1800 // 速度设置(rpm)
MOV K500 D1801 // 加速时间(ms)
MOV K500 D1802 // 减速时间(ms)
MOV K5000 D1803 // 急停减速时间(ms)
// 伺服使能
MC_Power D100 TRUE
// 回原点操作
MC_Home D200 K1 K0
// 等待原点复归完成
WHILE SM2000 <> TRUE
// 可添加超时判断
END_WHILE
// 绝对定位运动
MC_MoveAbsolute D300 K3000 K1
// 等待定位完成
WHILE SM3000 <> TRUE
// 可添加过程监控
END_WHILE
常见问题排查:
- ERR24报警:检查伺服准备信号(SD1840.4)
- 定位偏差大:检查电子齿轮比和机械背隙
- 运动抖动:调整速度环增益(PA10-PA12)
6. Modbus协议深度应用
6.1 Modbus RTU配置
硬件连接:
- 使用FX5U的RS485扩展模块(如FX5-485ADP)
- 接线注意A/B极性和终端电阻
参数设置:
plaintext复制// 通讯格式设置
MOV H0C96 D8420 // 19200bps,8,N,1
MOV K3 D8421 // 站号3
// 数据读写示例
MSTR D100 K3 D200 K5 // 读站号3的5个保持寄存器(40001-40005)
MSTW D300 K3 D400 K3 // 写站号3的3个保持寄存器
6.2 Modbus TCP服务器配置
plaintext复制// 启用Modbus TCP服务器
MOV K1 D3420 // 服务器使能
MOV H01F6 D3421 // 端口502
MOV K5 D3422 // 最大连接数
// 寄存器映射
MOV K1234 D3428 // 40001寄存器值
MOV K5678 D3429 // 40002寄存器值
协议转换技巧:
- 地址偏移:PLC的D100对应Modbus的400101
- 数据类型:注意字/双字转换
- 异常响应:通过SD状态字监控通讯异常
7. 高级调试技巧
7.1 状态监控与诊断
-
网络状态监控:
- SD1220-SD1223:Socket通讯状态
- SD1400-SD1499:以太网端口统计
-
伺服诊断:
- SD1840-SD1849:轴状态字
- SD1860-SD1869:轴错误代码
-
Modbus诊断:
- SD3400-SD3499:Modbus TCP状态
- SD8400-SD8499:Modbus RTU状态
7.2 通讯性能优化
- 合理设置通讯周期,避免网络拥堵
- 使用批量读写减少通讯次数
- 关键数据添加时间戳校验
- 启用通讯超时重试机制
7.3 常见故障速查表
| 故障现象 | 可能原因 | 解决方法 |
|---|---|---|
| 通讯超时 | IP设置错误 | 检查IP和子网掩码 |
| 数据错误 | 字节顺序不对 | 检查数据排列格式 |
| 连接断开 | 网线接触不良 | 更换高质量网线 |
| 伺服报警 | 使能信号未给 | 检查MC_Power指令 |
在实际项目中,我习惯在程序初始化时添加网络自检功能,通过PING测试验证网络连通性,并记录通讯质量统计。对于关键数据通讯,建议采用"发送-确认-重发"机制,确保数据可靠性。FX5U的以太网功能虽然强大,但只有深入理解其工作原理,才能发挥最大效能。