C#中无法重新建立与串口设备的通信问题求助
不拔插USB线缆无法重新与串口设备建立连接的问题
现象说明
- 首次连接设备完全正常:能发送数据,设备会回复预期的
\u002ACK\x0d或\u002NACK\x0d - 程序崩溃/关闭后重连异常:通过重写的
Open()方法重新连接时,仅能发送数据但无法接收任何响应,同步、异步接收模式均无改善 - 恢复正常的触发条件:只有拔插设备USB线缆,或用Python脚本/第三方串口工具向设备发送一次数据(设备会正常回复)后,代码才能再次正常工作
相关代码实现
基类SerialCommunication
public class SerialCommunication { protected SerialPort serial_port = null; protected string serial_port_name; // 省略其他代码 public SerialCommunication(string _serial_port_name) { serial_port_name = _serial_port_name; } public virtual bool Open(bool dtr = true) { try { if ((serial_port == null || !serial_port.IsOpen)) { serial_port = new SerialPort(serial_port_name) { BaudRate = 115200, DataBits = 8, StopBits = StopBits.One, DtrEnable = dtr, }; serial_port.Open(); } } catch { // 省略异常处理逻辑 } // 省略返回值逻辑 } }
子类重写实现
public class SubClass : SerialCommunication { // 省略其他代码 public override bool Open() { bool isOK = base.Open(false); if(isOK) { serial_port.DataReceived += Serial_port_DataReceived; return Init(); } // 省略其他逻辑 } // Init方法仅向设备发送数据,预期设备返回ACK/NACK private bool Init() { // 省略数据发送逻辑 } private void Serial_port_DataReceived(object sender, SerialDataReceivedEventArgs e) { // 省略数据接收处理逻辑 } }
已排查内容
- 对比工作与非工作状态下
SerialPort对象的所有属性,完全一致 - 排除了同步/异步接收模式对问题的影响
推测问题出在底层串口驱动或设备内部状态,但无法准确定位根因。
内容的提问来源于stack exchange,提问作者Cholas
相关产品推荐
相关产品推荐

