1. 项目概述:C#与松下PLC串口通信实战
第一次用C#通过串口控制松下PLC时,我盯着屏幕上的通讯超时错误整整两小时。后来才发现是波特率设成了19200,而PLC默认是9600。这种看似简单的参数匹配问题,恰恰是工业通信中最容易踩的坑。本文将分享如何用C#的SerialPort类构建稳定的PLC通信系统,涵盖从硬件接线到协议解析的全流程。
松下FP-X系列PLC在小型自动化设备中应用广泛,其串口通信采用标准的Modbus-RTU协议。与西门子、三菱等品牌不同,松下PLC的通信帧格式有特殊要求——数据区需要反转字节顺序。这意味着即使你熟悉Modbus协议,直接套用常规代码也会导致通信失败。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件准备与环境搭建
2.1 硬件连接方案选择
推荐使用USB转RS232转换器(建议选用FTDI芯片的可靠型号),通过SC09编程电缆连接PLC的编程口。实测中,某宝30元的CH340芯片转换器在连续工作时会出现数据丢包,而FTDI芯片的转换器稳定性更好。接线时注意:
- PLC侧2号针脚(RXD)接转换器的TXD
- PLC侧3号针脚(TXD)接转换器的RXD
- 必须短接PLC侧的4和5针脚(这是松下PLC的通信使能信号)
重要提示:带电插拔串口线可能损坏PLC通信芯片,务必在断电状态下操作
2.2 开发环境配置
安装Visual Studio时需勾选.NET桌面开发工作负载,特别注意添加NuGet包:
bash复制Install-Package NModbus.Serial
这个库封装了Modbus协议处理,比直接操作SerialPort更可靠。新建Windows Forms项目时,建议目标框架选.NET 6+,其串口通信性能较.NET Framework有显著提升。
3. 通信协议深度解析
3.1 松下PLC的特殊帧结构
标准Modbus-RTU请求帧为:
code复制[设备地址][功能码][起始地址Hi][起始地址Lo][数据长度Hi][数据长度Lo][CRC校验]
但松下PLC要求:
- 寄存器地址需要加1(如D0对应Modbus地址40001)
- 数据区必须高低字节互换(0x1234 → 0x3412)
例如读取D100-D101的代码实现:
csharp复制by
