通过 C# 进行串行通信

本文关键字:通信 通过 | 更新日期: 2023-09-27 18:37:15

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

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

问题2:

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

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

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

有人可以帮我吗?感谢您的帮助。谢谢

通过 C# 进行串行通信

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

我认为这将解决您的问题

http://www.fryan0911.com/2009/04/c-serial-port-communication.html

按照这个代码示例进行操作

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

问候。