3. iQ-F内置以太网通信基础
三菱FX5U(iQ-F系列)CPU模块自带一个以太网端口,无需额外扩展模块即可实现与上位机、触摸屏、其他PLC或第三方设备的网络通信。要真正把这条链路用起来,需要依次解决三个层面的问题:网络层参数(IP地址与子网)、传输层协议(TCP还是UDP)、以及应用层的套接字指令(SP.SOCOPEN/SP.SOCCLOSE/SP.SOCRCV/SP.SOCSND)。本节按这个顺序展开,并给出一个可复现的简单客户端/服务器实验。
一、IP地址与子网设置
FX5U的内置以太网参数在GX Works3的“模块参数→以太网端口设置”中配置。关键参数包括:IP地址、子网掩码、默认网关。以教学示例为例,PLC设为192.168.1.10,子网掩码255.255.255.0,网关192.168.1.1;上位机PC设为192.168.1.100,掩码相同。判断两台设备是否在同一子网,可用“IP与掩码按位与”的方法:192.168.1.10 AND 255.255.255.0 = 192.168.1.0,192.168.1.100 AND 255.255.255.0 = 192.168.1.0,网络号相同,属于同一子网,可直接通信,无需经过网关。
若把PC改为192.168.2.100,网络号变为192.168.2.0,与PLC不同子网,此时必须依赖网关路由,否则通信失败。这是现场最常见的“能ping通自己、ping不通对方”的原因之一。配置完成后建议先用PC的ping 192.168.1.10验证链路,再进入协议与指令层面。
二、TCP与UDP协议选择
FX5U的套接字通信支持TCP和UDP两种传输层协议,选择依据是可靠性需求与实时性需求的权衡。
| 对比项 | TCP | UDP |
|---|---|---|
| 连接方式 | 面向连接,需三次握手 | 无连接,直接发送 |
| 可靠性 | 有确认、重传、顺序保证 | 不保证到达与顺序 |
| 开销 | 较大,建立/关闭有过程 | 小,适合短报文 |
| 典型场景 | 参数下发、数据采集、文件传输 | 周期性状态广播、实时性优先 |
工程上,若通信内容不能丢、不能乱序(如配方下发、生产数据上传),选TCP;若只是周期性发送状态且允许偶尔丢包(如广播式心跳),可选UDP。FX5U的SP.SOCOPEN指令中通过参数指定协议类型,TCP时还需区分主动(客户端)与被动(服务器)打开。
三、套接字通信指令
FX5U使用四个专用指令完成套接字生命周期管理:
- SP.SOCOPEN:打开连接。指定连接编号、协议(TCP/UDP)、本地端口、对方IP与端口、打开方式(Active/Passive)。
- SP.SOCSND:发送数据。指定连接编号、发送数据起始软元件、发送字节数。
- SP.SOCRCV:接收数据。指定连接编号、接收缓冲区起始软元件、最大接收字节数。
- SP.SOCCLOSE:关闭连接,释放套接字资源。
典型调用顺序为:SOCOPEN → SOCSND/SOCRCV(可多次)→ SOCCLOSE。每条指令都有完成标志位(如SOCOPEN的完成位)和出错标志位,编程时必须监视完成位再进入下一步,否则会出现“连接未建立就发送”的错误。
// 示例:TCP客户端打开连接(连接编号1)
// 参数:协议=TCP,本地端口=5000,对方IP=192.168.1.100,对方端口=6000,Active
SP.SOCOPEN D100 M100 D200
// D100起存放连接参数,M100为完成位,D200为出错代码存放区
// 发送8字节数据(D300~D303)
SP.SOCSND K1 D300 K8 M110
// 接收最多16字节到D400起
SP.SOCRCV K1 D400 K16 M120
// 关闭连接
SP.SOCCLOSE K1 M130
四、简单客户端/服务器实验
下面给出一个可复现的最小实验:PC作为TCP服务器,FX5U作为TCP客户端,PLC主动连接PC并发送一段数据,PC回送一段数据,PLC接收后关闭连接。
实验参数(示例):PC端用网络调试助手监听6000端口,IP为192.168.1.100;PLC IP为192.168.1.10,本地端口5000,对方端口6000,协议TCP,Active方式。
PLC侧操作:在GX Works3中编写上述指令序列,将SOCOPEN的完成位M100作为SOCSND的触发条件,SOCSND完成位M110作为SOCRCV的触发条件,SOCRCV完成位M120作为SOCCLOSE的触发条件。下载后运行,观察各完成位是否依次置位。
PC侧观察:网络调试助手应显示“客户端已连接”,随后收到PLC发来的8字节数据;在调试助手中手动发送一段文本,PLC的D400起应出现对应数据。
结果判断:若SOCOPEN出错,常见错误码指向“对方未监听”或“IP不可达”;若SOCSND出错,多为连接已断开;若SOCRCV长时间无数据,检查PC是否真的发送、以及接收字节数设置是否过小。实验成功后,可把PC与PLC角色互换,让PLC作服务器(Passive),PC作客户端,进一步理解Active/Passive的区别。
把上述实验跑通后,再回头理解IP与子网、TCP/UDP选择、四条指令的分工,就会形成一条完整的“网络层—传输层—应用层”认知链。实际项目中,连接编号、端口号、缓冲区地址都应根据设备规划统一分配,避免与已有连接冲突。