1. 项目背景与核心需求
在工业自动化领域,PLC(可编程逻辑控制器)作为核心控制设备,与上位机的数据交互是系统集成的基础需求。三菱FX3U系列作为经典的小型PLC,广泛应用于设备控制、产线监控等场景。而串口通讯因其简单可靠的特点,至今仍是PLC与计算机通讯的主流方式之一。
这个项目的核心目标是建立C#应用程序与FX3U PLC之间的稳定数据通道,实现:
- 实时读取PLC寄存器数据(如D、M寄存器)
- 可靠写入控制指令和参数设定
- 异常情况下的自动重连机制
- 通讯过程的可视化监控
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 通讯协议解析
2.1 三菱专用协议基础
FX3U支持两种串口通讯协议:
- MC协议(三菱专用协议):基于二进制格式,支持全功能访问
- 简单协议:ASCII格式,功能有限但易于调试
实际项目中推荐使用MC协议,其帧结构示例如下:
plaintext复制[STX][命令码][地址][数据][ETX][校验和]
- STX:起始符(0x02)
- ETX:结束符(0x03)
- 校验和:从STX到ETX所有字节的累加和最低字节
2.2 寄存器地址映射
关键寄存器类型及地址范围:
| 寄存器类型 | 地址范围 | 访问方式 |
|---|---|---|
| 输入X | X0-X377 | 只读 |
| 输出Y | Y0-Y377 | 读写 |
| 辅助继电器M | M0-M3071 | 读写 |
| 数据寄存器D | D0-D7999 | 读写 |
注意:地址需要转换为协议要求的16进制格式,如D100表示为0x0640
3. C#实现方案
3.1 硬件连接配置
典型接线方式(RS422接口):
plaintext复制PC端DB9 - FX3U-422BD
2(RxD) - 2(TxD+)
3(TxD) - 1(RxD+)
5(GND) - 3(GND)
7(RTS) - 7(CS+)
8(CTS) - 8(CS-)
参数配置要点:
- 波特率:通常9600/19200/38400
- 数据位:7位
- 停止位:1位
- 校验位:偶校验
- 流控制:需要启用RTS/CTS
3.2 SerialPort类封装
创建PLC通讯核心类:
csharp复制public class FX3UCommunicator : IDisposable
{
private SerialPort _serialPort;
private readonly object _lockObj = new object();
public FX3UCommunicator(string portName, int baudRate)
{
_serialPort = new SerialPort(portName, baudRate)
{
DataBits = 7,
Parity = Parity.Even,
StopBits = StopBits.One,
Handshake = Handshake.RequestToSend,
ReadTimeout = 1000,
WriteTimeout = 1000
};
}
public void Open()
{
if (!_serialPort.IsOpen)
{
_serialPort.Open();
