C#停止与Arduino的连接

时间:2018-09-07 17:00:23

标签: c# arduino serial-port windows-7-embedded

我正在编写一个C#程序,该程序将一些简单命令发送到Arduino。通过USB串行虚拟端口。
即使代码受try / catch块保护,有时也会挂起程序。
当我看到问题时,问题似乎出在关闭端口上。
功能非常简单:

void Send() {
  try {  
    Debug.WriteLine("SR1 "+rel+" "+status);
    _serialArduino.Open();
    Debug.WriteLine("SR2");
    _serialArduino.WriteLine(string.Format("switch {0} {1}\n", rel, Convert.ToSByte(status)));
    Debug.WriteLine("SR3 '"+_serialArduino.ReadLine()+"'");
    _serialArduino.Close();
    Debug.WriteLine("SR4");
    Thread.Sleep(400);
  } catch (Exception e) {
    LogManager.Write(string.Format("ERR SwitchRel({0}, {1}) - {2}", rel, status, e.Message));
  }
}

我在Close函数期间读到一个问题,但是在这种情况下,没有定义DataReceived事件处理程序(== null)。

有什么主意吗?

*编辑后添加了一些详细信息*

经过几天的调试并登录analisys,我发现了以下内容:

  • 我正在运行Win7Embedded Standard的设备上
  • 该应用程序是用C#编写的
  • 过一会儿(或者到目前为止可能是由未知原因引起的),连接Arduino的端口从枚举端口列表中消失了
  • 程序最初在我的日志中报告“设备已断开连接”,然后显示“端口COM9不存在”消息
  • 设备管理器在“端口”树上报告COM9(!!)
  • 如果我关闭程序并重新运行,它会报告“ COM9不存在”,并且如果我列出端口,则COM9不会出现

我的猜测是usbser驱动程序一团糟。
到目前为止,唯一的解决方案是重置主板。
有没有一种方法可以在不重新启动的情况下重置驱动程序,并检查驱动程序是否返回已知状态? 或者也许是不检测端口的DotNet Framework?

0 个答案:

没有答案