1. 项目背景与核心价值
去年接手一个自动化产线改造项目时,第一次遇到需要从三菱FX3U PLC读取200多个寄存器数据的场景。产线主管要求每500毫秒采集一次数据,而现场只有一台老旧的工控机通过USB转串口连接,实测下来通讯速率根本达不到要求。那次经历让我深刻意识到工业现场以太网通讯的重要性,也促使我深入研究三菱MC协议(MELSEC Communication Protocol)的客户端实现方案。
三菱FX3U系列PLC作为中小型自动化项目的常客,虽然自带编程口和基础通讯功能,但原生并不支持以太网通讯。通过添加FX3U-ENET-L以太网模块(市场价约2000元),可以让这台经典PLC具备10/100Mbps的网络通讯能力。MC协议作为三菱自家研发的通讯规约,相比Modbus TCP等通用协议,能更高效地访问PLC内部软元件,支持批量读写和位操作等特色功能。
2. 协议解析与通讯原理
2.1 MC协议帧结构解析
典型的MC协议请求帧由三部分组成:固定头部(11字节)+ 命令块(4字节)+ 数据块(可变长度)。以读取D寄存器为例,完整请求帧如下:
code复制50 00 00 FF FF 03 00 0C 00 10 00 01 04 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
拆解关键字段:
- 第1字节0x50:固定起始码
- 6-7字节0x0003:子头部,表示TCP/IP通讯
- 8-9字节0x000C:请求数据长度(后续12字节)
- 10-11字节0x0010:监控定时器值(16*250ms=4秒超时)
- 命令块0x01040000:读取D寄存器(0x01表示读,0x04表示D寄存器类型)
2.2 软元件地址映射规则
三菱PLC使用独特的地址编码方式,需要特别注意:
- X/Y/M/S等位元件:地址计算为
元件编号/8取整 + 0x0080 - D/T/C等字元件:直接使用元件编号
- 特殊模块地址:基地址 + 模块偏移量
例如读取X20-X27这8个输入点:
- 物理地址:X20
- 协议地址:20/8=2 → 0x0082
- 读取命令:0x01010082
3. C#实现关键代码
3.1 建立TCP连接
csharp复制
