FX5U双PLC UDP通信必须双向配置的底层原理
2026/9/18 10:05:31 网站建设 项目流程

简介:本资源是一份面向工业自动化工程师与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)侧配置流程
  1. 基础网络参数设定
    在GX Works3工程中,右键导航窗口→“参数”→“模块参数”→“以太网端口”,双击打开设置窗口:

    • IP地址:192.168.3.100(必须与PLC-B在同一子网)
    • 子网掩码:255.255.255.0(默认值,不可修改为/23等)
    • 默认网关:192.168.3.1(可为空,但建议填写以防跨网段调试)
    • DNS服务器:留空(UDP通信无需DNS解析)
  2. UDP对象设备绑定
    同一窗口中,切换至“对象设备连接配置”标签页→点击“详细设置”:

    • 在“模块一览”区域,找到类型为UDP连接设备的条目(图标为蓝色方块+闪电符号)
    • 将其拖拽至左侧“本站”节点正下方(注意:必须放在“本站”之后,不可置于其他模块之间)
    • 双击新添加的UDP设备,弹出属性窗口:
参数名说明
本地端口号10000PLC-A用于接收数据的端口,必须唯一且未被其他服务占用
对象设备IP地址192.168.3.200PLC-B的IPv4地址,需精确到字节,不支持域名
对象设备端口号20000PLC-B监听的UDP端口,必须与PLC-B侧配置的本地端口一致
超时时间(ms)1000ETUDPRECV等待数据的最大时长,设为0则永不超时(不推荐)
重试次数3ETUDPSEND发送失败后的重试次数,每次间隔约50ms
  1. 参数固化与验证
    点击“反映设置并关闭”→回到主参数窗口→点击“应用”按钮→弹出确认对话框选择“是”。此时参数已写入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-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.100ARP表有条目;ping通率100%PLC IP冲突、子网掩码错误
传输层在PC安装Wireshark,过滤`udp.port==10000udp.port==20000`
应用层在GX Works3中监控D200(发送错误码)、D400(接收字节数)D200=0且D400>0梯形图逻辑错误、数据区地址越界

提示: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定时器,确保最小间隔≥2ms
E100x0A数据长度超限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(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%带宽余量。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询