2026/2/10 4:57:23
网站建设
项目流程
旅游短租公寓网站建设,那个网站做效果图电脑配置,最大的免费网站建设,网站建设开发环境C# 三菱FX编程口协议RS422圆口 C#三菱FX编程口协议RS422圆口测试工具#xff0c;及其相关资料最近在折腾三菱FX系列PLC的通信工具时发现#xff0c;原厂给的编程口协议文档看得人头皮发麻。特别是RS422圆口的硬件接线#xff0c;稍不留神就烧串口。今天咱们就用C#手搓个测试…C# 三菱FX编程口协议RS422圆口 C#三菱FX编程口协议RS422圆口测试工具及其相关资料最近在折腾三菱FX系列PLC的通信工具时发现原厂给的编程口协议文档看得人头皮发麻。特别是RS422圆口的硬件接线稍不留神就烧串口。今天咱们就用C#手搓个测试工具边写代码边聊协议那些事儿。先看硬件接线图8针圆口2号脚RDA- 3号脚RDB 7号脚SDA- 8号脚SDB建议用USB转RS422转换器时记得接地线接牢靠不然通信时灵时不灵。实测某宝30块的转换头也能用但得做好掉线重连的准备。C# 三菱FX编程口协议RS422圆口 C#三菱FX编程口协议RS422圆口测试工具及其相关资料核心代码部分先从串口配置开始var port new SerialPort(COM3, 9600, Parity.Even, 7, StopBits.One); port.Handshake Handshake.RequestToSend; port.ReadTimeout 500; // 响应超时别设太短 port.Open();这里的校验位用偶校验是协议强制要求别问为什么问就是三菱祖传规矩。波特率倒是可以改但FX默认9600改之前得先用GX Works2确认PLC设置。协议帧结构典型格式byte[] BuildCommand(byte stationNo, byte[] data) { var buffer new Listbyte { 0x02 }; // STX buffer.Add(stationNo); // 站号 buffer.AddRange(data); // 指令本体 buffer.Add(CalculateChecksum(buffer));// 校验和 buffer.Add(0x03); // ETX return buffer.ToArray(); }校验和计算最容易出错这里有个坑站号也要参与计算。之前漏了这个导致校验失败用串口抓包工具才排查出来byte CalculateChecksum(IEnumerablebyte data) { return (byte)(data.Aggregate((sum, b) (byte)(sum b)) 0xFF); }读取D100寄存器值的完整示例// 构建读取指令 0x00 0x30 对应ASCII 0 var cmd BuildCommand(0xFF, new byte[] { 0x30, 0x34, 0x30, 0x30 }); port.Write(cmd, 0, cmd.Length); // 接收处理注意粘包 var response new byte[256]; var bytesRead port.Read(response, 0, response.Length); var validData response.Take(bytesRead).ToArray(); // 解析示例假设返回02 30 34 30 30 XX 03 if(validData.Length 4 validData[0] 0x02) { var value Encoding.ASCII.GetString(validData, 1, 4); Console.WriteLine($D100当前值{Convert.ToInt32(value, 16)}); }调试时建议配合串口监视工具推荐老牌工具AccessPort。遇到无响应的情况先检查硬件接线再用十六进制模式查看原始数据流。曾有个诡异问题PLC返回数据末尾多出0x00后来发现是转换器固件bug换根线就好了。相关资料方面三菱的《FX系列编程手册》附录有协议细节但日式英语文档需要点想象力。GitHub上有个FXProtocolHelper项目可以参考不过部分实现有校验错误慎用。