1. 工业自动化中的PLC通讯基础
在工厂车间里,PLC就像是一个不知疲倦的工头,24小时不间断地协调着各种设备的运转。而作为程序员的我们,常常需要和这些"数字工头"对话。三菱FX3U系列PLC凭借其稳定性和性价比,在国内自动化领域占据着重要地位。
与PLC通讯的方式有很多种,串口通讯就像是用老式对讲机对话——虽然速度比不上现代智能手机,但胜在简单可靠。特别是在一些老旧设备改造项目中,串口通讯往往是唯一的选择。FX3U提供的是RS-422/485接口,但通过简单的电平转换器就能与电脑的RS-232串口连接。
注意:实际操作前请务必确认PLC的通讯端口类型,错误的接线可能损坏设备。建议使用三菱原装的SC-09编程电缆,或者质量可靠的第三方兼容电缆。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 通讯环境搭建与配置
2.1 硬件连接准备
在开始编码前,我们需要做好硬件准备。FX3U的编程口是一个DB9母头,引脚定义如下:
| 引脚号 | 信号名称 | 说明 |
|---|---|---|
| 1 | FG | 机壳接地 |
| 2 | SD | 发送数据 |
| 3 | RD | 接收数据 |
| 4 | RS | 请求发送 |
| 5 | CS | 清除发送 |
| 6 | DR | 数据准备就绪 |
| 7 | SG | 信号地 |
| 8 | CD | 载波检测 |
| 9 | - | 未连接 |
连接时,我们需要将PLC的SD(发送)与电脑的RD(接收)交叉连接,PLC的RD与电脑的SD交叉连接,SG(信号地)直接相连。如果使用USB转串口适配器,Windows设备管理器中会显示为COMx端口。
2.2 软件环境配置
在C#项目中,我们需要确保引用了System.IO.Ports命名空间。对于.NET Core/.NET 5+项目,可能需要额外安装System.IO.Ports NuGet包:
bash复制dotnet add package System.IO.Ports
3. 串口通讯核心实现
3.1 串口初始化与基础操作
让我们深入看看串口初始化的细节。FX3U支持两种波特率:9600和115200。对于大多数应用场景,9600已经足够,但在需要快速响应的场合,115200能显著提升通讯效率。
csharp复制public class PlcCommunication : IDisposable
{
private readonly SerialPort _serialPort;
private readonly object _lockObject = new object();
public PlcCommunication(string portName, int baudRate = 9600)
{
_serialPort = new SerialPort
{
PortName = portName,
BaudRate = baudRate,
Parity = Parity.None, // FX3U使用无校验
DataBits = 7, // 注意:FX3U使用7位数据位
StopBits = StopBits.One,
Handshake = Handshake.None,
ReadTimeout = 500, // 读取超时500ms
WriteTimeout = 500 // 写入超时500ms
};
}
public void Open()
{
if (_serialPort.IsOpen) return;
try
{
_serialPort.Open();
// 首次打开时清空缓冲区
_serialPort.DiscardInBuffer();
_serialPort.DiscardOutBuffer();
}
catch (Exception ex)
{
throw new PlcCommunicationException($"无法打开
