FX5U双PLC UDP通信必须双向配置的底层原理 简介本资源是一份面向工业自动化工程师与PLC初学者的实操型技术文档聚焦三菱FX5U系列PLC在实际产线中实现UDP以太网通信的核心配置方法。文档系统拆解了双PLCPLC-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编程中bindsendto的自由组合。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-A192.168.3.100侧配置流程基础网络参数设定在GX Works3工程中右键导航窗口→“参数”→“模块参数”→“以太网端口”双击打开设置窗口IP地址192.168.3.100必须与PLC-B在同一子网子网掩码255.255.255.0默认值不可修改为/23等默认网关192.168.3.1可为空但建议填写以防跨网段调试DNS服务器留空UDP通信无需DNS解析UDP对象设备绑定同一窗口中切换至“对象设备连接配置”标签页→点击“详细设置”在“模块一览”区域找到类型为UDP连接设备的条目图标为蓝色方块闪电符号将其拖拽至左侧“本站”节点正下方注意必须放在“本站”之后不可置于其他模块之间双击新添加的UDP设备弹出属性窗口参数名值说明本地端口号10000PLC-A用于接收数据的端口必须唯一且未被其他服务占用对象设备IP地址192.168.3.200PLC-B的IPv4地址需精确到字节不支持域名对象设备端口号20000PLC-B监听的UDP端口必须与PLC-B侧配置的本地端口一致超时时间(ms)1000ETUDPRECV等待数据的最大时长设为0则永不超时不推荐重试次数3ETUDPSEND发送失败后的重试次数每次间隔约50ms参数固化与验证点击“反映设置并关闭”→回到主参数窗口→点击“应用”按钮→弹出确认对话框选择“是”。此时参数已写入PLC可通过以下方式验证# 使用PC端netstat检查PLC是否监听端口需先用GX Works3在线监视 # 在PLC-A所在网络的任意Windows PC执行 ping 192.168.3.100 # 确认物理连通性 telnet 192.168.3.100 23 # 测试PLC Telnet服务默认开启端口23若ping通但telnet失败说明PLC未上电或以太网模块故障若两者均正常则UDP参数已生效。2.2.2 PLC-B192.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.0FX5U不支持环回地址或通配符配置完成后务必在GX Works3中对两台PLC分别执行“在线→PLC参数读取”比对参数区地址D8000起始的UDP配置块内容确保十六进制值完全一致特别是IP地址字段为BE03A8C0对应192.168.3.190需校验1920xC0, 1680xA8, 30x03, 1000x64 → 正确值应为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使能标志 // 网络2ETUDPSEND指令 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 → 错误代码存储地址D2000表示成功非0需查手册 // 网络3错误处理分支 LD D200 CMP K0 D200 M110 // M110ON当D2000 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侧 // 网络1100ms定时中断触发接收 LD T0 OUT M200 // 网络2ETUDPRECV执行 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-MACping -t 192.168.3.100ARP表有条目ping通率100%PLC IP冲突、子网掩码错误传输层在PC安装Wireshark过滤udp.port10000udp.port20000应用层在GX Works3中监控D200发送错误码、D400接收字节数D2000且D4000梯形图逻辑错误、数据区地址越界提示Wireshark捕获时若看到大量Destination unreachable (Port unreachable)ICMP包说明PLC-B的20000端口未在参数中注册为UDP对象设备。4.2 常见错误代码速查与修复方案错误码十六进制含义根本原因解决方案E020x02目标不可达对象设备IP未配置或网络不通检查PLC-B参数中“对象设备IP”是否为192.168.3.100用PC ping测试E040x04连接失败本地端口未在参数中启用确认PLC-A参数中UDP设备的“本地端口号”设为10000且未被其他服务占用E050x05发送缓冲区满ETUDPSEND调用过于频繁在梯形图中增加TON定时器确保最小间隔≥2msE100x0A数据长度超限S1参数数据长度超过1024字节FX5U UDP最大包长为1024字节K值需≤512字E200x14接收缓冲区溢出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(fSuccess rate: {success_count/1000*100:.1f}%) sock.close()运行此脚本后在PLC-A梯形图中连续触发ETUDPSEND 1000次若成功率低于99.5%则需检查网络交换机背板带宽或PLC-A的CPU负载率通过GX Works3在线监视D8001。实际产线中建议将UDP通信周期设为≥50ms并预留20%带宽余量。本文还有配套的精品资源点击获取