【问题标题】:Serial communication through C#通过 C# 进行串行通信
【发布时间】:2012-06-15 15:02:11
【问题描述】:

从我正在使用的串行端口读取时 serialport.read(xyz,0,4) 其中 xyz 是一个字节数组。

问题1:这样做时,我读取的数据是否从串口缓冲区中删除?还是有一个指针会递增?

问题 2:

private void moduleSerialPort_DataReceived(object sender,System.IO.Ports.SerialDataReceivedEventArgs e)
{
.
.
.
}

如果在执行之前数据的代码时接收到新数据,是否会触发接收数据事件?

我发现当我的系统运行几个小时后,事情发生了: 当传输新数据时,它是在串行端口上接收的,但计算机会处理先前发送的数据。所以我怀疑数据是否保留在缓冲区中并在下一个 datareceived 事件中执行。

谁能帮帮我。 感谢你的帮助。 谢谢

【问题讨论】:

  • “有人可以帮帮我吗?”您的问题具体是什么?您没有提供任何代码。这应该是两个单独的问题,并且它们都应该有代码。串行通信有一个缓冲区,你读取 4 个字节,这 4 个字节发送给你。

标签: c# serial-port buffer serial-communication


【解决方案1】:

数据会一直保留在缓冲区中,直到您读取它为止。简单地处理DataReceived 事件不会导致数据出队,实际上您必须读取它。如果您读取的缓冲区少于整个缓冲区,那么下次发生DataReceived 事件时,您将在新数据之前读取旧的剩余部分。

【讨论】:

  • 谢谢我的问题的答案。我现在唯一想要的是:在收到数据的事件中,我想读取字节直到缓冲区变空。我无法在此处粘贴代码..也许我会尝试提供网址。谢谢
  • @Akshay:看看BytesToRead 属性,它告诉您缓冲区中有多少字节。
【解决方案2】:

【讨论】:

    【解决方案3】:

    按照此代码示例进行操作

    http://code.msdn.microsoft.com/SerialPort-Windows-Forms-a43f208e

    问候。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多