1. FX3U-ENET-L模块的硬件定位与协议背景
三菱FX3U-ENET-L是以太网通信模块中的经典产品,专为FX3U系列PLC设计。这个银色金属外壳的模块通过PLC右侧的扩展槽直接安装,其正面LED指示灯(LINK/ACT、100M、COLL等)是现场调试时最先需要观察的窗口。MC协议(MELSEC Communication Protocol)作为三菱自家研发的工业通信标准,其核心价值在于实现了PLC与上位系统间的高效数据交互。
在工业现场,当我们需要从SCADA系统读取PLC的D寄存器数据,或是通过HMI修改定时器设定值时,底层走的往往就是MC协议。与Modbus这类通用协议不同,MC协议针对三菱PLC的存储区结构做了深度优化。举个例子,当读取连续10个D寄存器时,MC协议只需发送一个包含起始地址和长度的帧,而Modbus可能需要拆分成多个请求。这种设计在批量操作时能显著降低通信负荷。
2. 协议帧结构的解剖与实践
MC协议的通信帧就像精心设计的集装箱,每个字段都有严格定义。一个典型的读取命令帧如下(以十六进制表示):
code复制50 00 00 FF FF 03 00 0C 00 10 00 01 04 00 00 00 00 00 00 A8 00 00 00 01 00 00 00
拆解这个帧结构:
- 前6字节是固定头(50 00 00 FF FF 03)
- 接下来2字节表示后续数据长度(00 0C)
- 子头部分(00 10 00 01)包含网络号、PLC编号等
- 04 00表示读取指令
- 00 00 00 00是起始地址(此处为D0)
- A8 00表示读取点数(这里是168个寄存器)
在C#中构造这样的帧时,需要注意字节序问题。三菱PLC采用大端序(Big-Endian),而x86系统是小端序。我曾遇到过因字节序处理不当导致地址错位的案例:当试图读取D100时,实际读到的却是D256,这就是因为没对地址字段做正确的字节序转换。
3. 模块配置的魔鬼细节
通过GX Works2配置FX3U-ENET-L时,有几个关键参数容易踩坑:
- IP地址分配:务必确认PLC IP与上位机在同一子网。曾有个项目因IP设为192.168.1.10而上位机是192.168.0.x导致三天未能通信。
