【问题标题】:COM Port Error when port is already streaming端口已在流式传输时出现 COM 端口错误
【发布时间】:2011-07-07 14:51:22
【问题描述】:

我有一个应用程序,它从 COM 端口读取数据,然后对接收到的数据进行处理。我目前正在使用 COM 端口仿真器(因为我没有可用的设备),但我正在向它提供数据样本。如果我在开始传输数据之前打开 COMPort,程序似乎工作得很好。但是,如果我在打开 COMPort 之前开始传输,然后打开端口,则永远不会触发 dataReceived 事件,并且我永远无法获取任何数据。我什至尝试在打开端口后立即刷新 INBuffer,但无法从中读取。

我打开端口的代码是这样的:

public void setupComPort(string baudRate, string dataBits, string stopBits, string parity, string portName)
    {
        if (comPort.IsOpen)
            comPort.Close();
        comPort.BaudRate = int.Parse(baudRate);
        comPort.DataBits = int.Parse(dataBits);
        comPort.StopBits = (StopBits)Enum.Parse(typeof(StopBits), stopBits);
        comPort.Parity = (Parity)Enum.Parse(typeof(Parity), parity);
        comPort.PortName = portName;
        // When data is recieved through the port, call this method
        comPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
        try
        {
            // Open the port
            comPort.Open();
            //If there's data in buffer, discard so we can start receiving
            //comPort.DiscardInBuffer();
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message, "Error Opening Port", MessageBoxButton.OK, MessageBoxImage.Error);
        }
    }

任何帮助将不胜感激。

【问题讨论】:

  • 我很困惑,if I start transmitting before I open the COMPort then the dataReceived event is never fired;如果 com 端口未打开,它不应该触发。
  • 我的意思是我开始传输,然后设置我的端口。那有意义吗?我将编辑我的问题以澄清。
  • 啊,好吧,是的,这是有道理的。应该是模拟器的问题...
  • 你觉得呢?如果我在 Putty 或 HyperTerminal 中做同样的事情,它会获取所有数据,所以我不确定。

标签: c# serial-port


【解决方案1】:

这可能是模拟器的问题。我猜当您拥有实际硬件时,这个问题就会消失。我唯一能想到尝试的另一件事是将ReceivedBytesThreshold 设置为默认值以外的值(例如 10 或其他值)。

【讨论】:

  • 我正在使用 Com0Com 创建虚拟端口,这就是导致问题的原因。我必须更改端口设置并启用缓冲区溢出设置,现在我可以在打开端口之前获取数据,无论数据何时流式传输。
猜你喜欢
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 2016-12-09
  • 1970-01-01
  • 2014-09-28
  • 1970-01-01
相关资源
最近更新 更多