简介:本资源是一份面向工业自动化工程师与PLC初学者的实操型技术文档,聚焦三菱FX5U系列PLC在实际产线中实现UDP以太网通信的核心配置方法。文档系统拆解了双PLC(PLC-A与PLC-B)间的IP地址规划、端口绑定、GX-WORKS3中“模块参数→以太网端口”及“对象设备连接配置”的完整设置流程,并明确标注关键参数(如192.168.3.100/200、端口10000/20000),辅以指令应用提示(ETUDPSEND/ETUDPRECV)与UDP协议适用边界说明,助力读者快速构建低延迟、高实时性的PLC间数据交互基础。资源为单个3.26MB的DOCX文档,内容图文结合、步骤可复现,涵盖参数界面截图指引与配置验证要点。目前已有680人学习下载,适合需落地部署FX5U UDP通信、规避常见网络配置陷阱的现场技术人员与教学实践者。
1. UDP通信不是“配完IP就能通”:FX5U双PLC间必须双向对称配置的底层逻辑
很多刚接触FX5U以太网通信的工程师,第一次在GX Works3里填完IP和端口就以为万事大吉——结果下载后ping得通,但ETUDPSEND指令始终返回E02(目标不可达)或E04(连接失败)。根本原因在于:FX5U的UDP通信不是单向“发包即完成”,而是依赖于一对严格对称的“本地端点+远端端点”绑定关系,且双方必须互为对方的“对象设备”。这与TCP的主动/被动连接模型完全不同,也不同于PC端socket编程中bind+sendto的自由组合。PLC-A若只把PLC-B设为对象设备,而PLC-B未将PLC-A反向注册为对象设备,UDP数据帧在PLC固件协议栈层面就会被静默丢弃,连ARP请求都不会触发。本示例中192.168.3.100:10000 ↔ 192.168.3.200:20000的双向映射,本质是让两台PLC各自维护一个“出站UDP会话表项”,该表项在固件启动时固化为硬件加速通道。这意味着:IP地址必须处于同一子网(/24掩码下192.168.3.x),端口号不能复用(10000和20000必须错开),且对象设备配置必须通过GX Works3的“模块一览→拖拽→详细设置”路径写入参数区——直接修改PLC内存D寄存器或用MELSEC-Q系列指令无效。这种设计牺牲了灵活性,却换来μs级中断响应和零CPU占用的数据转发能力,特别适合高速IO同步、多轴位置偏移补偿等硬实时场景。
2. GX Works3中UDP连接设备的参数化配置原理与实操验证
2.1 为什么必须通过“模块参数→以太网端口→对象设备连接配置”三级路径设置?
FX5U的以太网模块(如内置的FX5-ENET)采用分层协议栈架构:物理层由专用ASIC处理,网络层(IP)和传输层(UDP)由独立协处理器运行固件,而应用层指令(ETUDPSEND/ETUDPRECV)仅操作内存缓冲区。“对象设备连接配置”实质是向协处理器的UDP会话管理表写入静态路由条目,而非动态创建socket。该表存储在PLC参数区(Parameter Memory),断电不丢失,且加载顺序优先于用户程序。若跳过此步骤直接在梯形图中调用ETUDPSEND,指令会因找不到预注册的远端地址而立即报错E02。GX Works3的拖拽式配置界面,底层生成的是符合MELSEC Protocol规范的二进制参数块(含设备类型码0x000A、IP地址、端口号、超时值等),经USB/以太网下载到PLC后,协处理器在初始化阶段解析并建立硬件DMA通道。
提示:参数区写入后必须点击“应用”按钮(非仅“反映设置并关闭”),否则更改仅保存在工程文件中,未烧录至PLC闪存。常见误操作是点击“关闭”后直接下载程序,导致通信始终失败。
2.2 具体配置步骤与关键参数含义详解
2.2.1 PLC-A(192.168.3.100)侧配置流程
基础网络参数设定
在GX Works3工程中,右键导航窗口→“参数”→“模块参数”→“以太网端口”,双击打开设置窗口:- IP地址:
192.168.3.100(必须与PLC-B在同一子网) - 子网掩码:
255.255.255.0(默认值,不可修改为/23等) - 默认网关:
192.168.3.1(可为空,但建议填写以防跨网段调试) - DNS服务器:留空(UDP通信无需DNS解析)
- IP地址:
UDP对象设备绑定
同一窗口中,切换至“对象设备连接配置”标签页→点击“详细设置”:- 在“模块一览”区域,找到类型为
UDP连接设备的条目(图标为蓝色方块+闪电符号) - 将其拖拽至左侧“本站”节点正下方(注意:必须放在“本站”之后,不可置于其他模块之间)
- 双击新添加的UDP设备,弹出属性窗口:
- 在“模块一览”区域,找到类型为
| 参数名 | 值 | 说明 |
|---|---|---|
| 本地端口号 | 10000 | PLC-A用于接收数据的端口,必须唯一且未被其他服务占用 |
| 对象设备IP地址 | 192.168.3.200 | PLC-B的IPv4地址,需精确到字节,不支持域名 |
| 对象设备端口号 | 20000 | PLC-B监听的UDP端口,必须与PLC-B侧配置的本地端口一致 |
| 超时时间(ms) | 1000 | ETUDPRECV等待数据的最大时长,设为0则永不超时(不推荐) |
| 重试次数 | 3 | ETUDPSEND发送失败后的重试次数,每次间隔约50ms |
- 参数固化与验证
点击“反映设置并关闭”→回到主参数窗口→点击“应用”按钮→弹出确认对话框选择“是”。此时参数已写入PLC,可通过以下方式验证:
若ping通但telnet失败,说明PLC未上电或以太网模块故障;若两者均正常,则UDP参数已生效。# 使用PC端netstat检查PLC是否监听端口(需先用GX Works3在线监视) # 在PLC-A所在网络的任意Windows PC执行: ping 192.168.3.100 # 确认物理连通性 telnet 192.168.3.100 23 # 测试PLC Telnet服务(默认开启,端口23)
2.2.2 PLC-B(192.168.3.200)侧配置要点
PLC-B配置逻辑与PLC-A完全对称,但存在两个易错细节:
- 本地端口号必须设为20000(而非10000),否则PLC-A发送到20000的数据将被PLC-B的10000端口忽略
- 对象设备IP地址必须填192.168.3.100(而非127.0.0.1或0.0.0.0),FX5U不支持环回地址或通配符
配置完成后,务必在GX Works3中对两台PLC分别执行“在线→PLC参数读取”,比对参数区地址D8000起始的UDP配置块内容,确保十六进制值完全一致(特别是IP地址字段为BE03A8C0对应192.168.3.190?需校验:192=0xC0, 168=0xA8, 3=0x03, 100=0x64 → 正确值应为6403A8C0)。
3. 梯形图中ETUDPSEND与ETUDPRECV指令的时序控制与错误处理
3.1 指令执行周期与缓冲区管理机制
FX5U的UDP指令并非立即执行,而是遵循“指令触发→协处理器DMA搬运→硬件发送”的三级流水线。ETUDPSEND指令的EN端上升沿触发后,PLC CPU将源数据区(如D100-D109共10字)复制到内部发送缓冲区(大小固定为1024字节),随后协处理器在下一个扫描周期开始前完成以太网帧封装与发送。关键约束是:两次ETUDPSEND调用间隔不得小于2ms,否则缓冲区溢出导致E05错误(发送缓冲区满)。同理,ETUDPRECV需配合定时器轮询,因FX5U不支持UDP数据到达中断。
// 梯形图逻辑示意(GX Works3 LD语言) // 网络1:发送使能控制 LD M100 // 发送触发信号(如每100ms脉冲) ANDF M101 // 下降沿检测,避免重复触发 OUT M102 // ETUDPSEND使能标志 // 网络2:ETUDPSEND指令 LD M102 ETUDPSEND K10 D100 K10000 K192.168.3.200 K20000 D200 // 参数说明: // K10 → 发送数据长度(字,即20字节) // D100 → 源数据起始地址(D100-D109共10字) // K10000 → 本地端口号(必须与参数配置一致) // K192.168.3.200 → 目标IP(点分十进制格式,GX Works3自动转换) // K20000 → 目标端口 // D200 → 错误代码存储地址(D200=0表示成功,非0需查手册) // 网络3:错误处理分支 LD D200 CMP K0 D200 M110 // M110=ON当D200==0 AND M110 OUT Y0 // 发送成功指示灯 LD D200 CMP K2 D200 M111 // E02=目标不可达 AND M111 OUT Y1 // 网络故障报警注意:K192.168.3.200在GX Works3中会被编译为32位常量
0xC0A803C8,若手动输入错误(如K192.168.3.201),指令将静默失败。务必使用点分十进制格式,不可用十六进制。
3.2 接收端ETUDPRECV的防丢包设计
UDP无重传机制,但FX5U提供ETUDPRECV的“非阻塞接收”模式(通过S1参数控制)。典型配置如下:
| S1参数 | 功能 | 推荐值 | 说明 |
|---|---|---|---|
K0 | 阻塞模式 | 不推荐 | 等待数据到达才继续扫描,导致PLC周期抖动 |
K1 | 非阻塞模式 | K1 | 立即返回,D300存接收字节数(0表示无数据) |
K2 | 超时模式 | K1000 | 等待1秒,超时返回0 |
// 接收逻辑(PLC-B侧) // 网络1:100ms定时中断触发接收 LD T0 OUT M200 // 网络2:ETUDPRECV执行 LD M200 ETUDPRECV K10 D300 K20000 D400 // K10 → 接收缓冲区长度(字) // D300 → 接收数据起始地址(D300-D309) // K20000 → 本地端口号(必须匹配参数配置) // D400 → 实际接收字节数(字单位,非字节!) // 网络3:数据有效性校验 LD D400 CMP K10 D400 M201 // 接收满10字才处理 AND M201 OUT M202 // 数据有效标志防丢包关键技巧:在PLC-B的主程序开头插入RST D400指令,清零接收计数器,避免旧数据残留。同时,将ETUDPRECV置于最高优先级中断(如T0定时器),确保每100ms至少轮询一次,降低因扫描周期波动导致的数据覆盖概率。
4. UDP通信稳定性验证与典型故障排查表
4.1 四层验证法:从物理层到应用层逐级定位
当PLC-A与PLC-B无法通信时,按以下顺序排查,避免盲目重启:
| 层级 | 验证方法 | 正常现象 | 故障指向 |
|---|---|---|---|
| 物理层 | 用万用表测RJ45水晶头1/2/3/6脚通断;交换PLC-A/B网线 | 两端LED常亮 | 网线损坏、交换机端口故障 |
| 网络层 | PC执行arp -a查看是否学习到PLC-MAC;ping -t 192.168.3.100 | ARP表有条目;ping通率100% | PLC IP冲突、子网掩码错误 |
| 传输层 | 在PC安装Wireshark,过滤`udp.port==10000 | udp.port==20000` | |
| 应用层 | 在GX Works3中监控D200(发送错误码)、D400(接收字节数) | D200=0且D400>0 | 梯形图逻辑错误、数据区地址越界 |
提示:Wireshark捕获时,若看到大量
Destination unreachable (Port unreachable)ICMP包,说明PLC-B的20000端口未在参数中注册为UDP对象设备。
4.2 常见错误代码速查与修复方案
| 错误码 | 十六进制 | 含义 | 根本原因 | 解决方案 |
|---|---|---|---|---|
E02 | 0x02 | 目标不可达 | 对象设备IP未配置或网络不通 | 检查PLC-B参数中“对象设备IP”是否为192.168.3.100;用PC ping测试 |
E04 | 0x04 | 连接失败 | 本地端口未在参数中启用 | 确认PLC-A参数中UDP设备的“本地端口号”设为10000,且未被其他服务占用 |
E05 | 0x05 | 发送缓冲区满 | ETUDPSEND调用过于频繁 | 在梯形图中增加TON定时器,确保最小间隔≥2ms |
E10 | 0x0A | 数据长度超限 | S1参数(数据长度)超过1024字节 | FX5U UDP最大包长为1024字节,K值需≤512(字) |
E20 | 0x14 | 接收缓冲区溢出 | ETUDPRECV未及时读取数据 | 增加接收轮询频率,或扩大D300起始地址的缓冲区长度 |
4.3 实战技巧:用PC模拟PLC进行UDP压力测试
在正式部署前,可用Python脚本模拟PLC-B接收端,验证PLC-A发送稳定性:
# udp_tester.py - 模拟PLC-B接收1000次数据包 import socket import time sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind(('0.0.0.0', 20000)) # 监听20000端口 print("Listening on port 20000...") success_count = 0 for i in range(1000): try: data, addr = sock.recvfrom(1024) if len(data) == 20: # 验证FX5U发送的10字数据(20字节) success_count += 1 time.sleep(0.01) # 模拟PLC扫描周期 except socket.timeout: break print(f"Success rate: {success_count/1000*100:.1f}%") sock.close()运行此脚本后,在PLC-A梯形图中连续触发ETUDPSEND 1000次,若成功率低于99.5%,则需检查网络交换机背板带宽或PLC-A的CPU负载率(通过GX Works3在线监视D8001)。实际产线中,建议将UDP通信周期设为≥50ms,并预留20%带宽余量。
本文还有配套的精品资源,点击获取