C#串行端口通信

C#串行端口通信,c#,C#,我正在尝试使用SerialPort类处理串行端口 应用程序要求我们先接收一条命令,然后在20毫秒内回复;问题是,我们读取的命令与实际命令之间存在延迟(高达15毫秒),我们没有时间发回回复 我们需要读取的命令的长度固定为20字节,我们每次从输入缓冲区轮询一个字节 serialPort.Read(input, 0, 1). 我不知道这个过程有什么问题。为什么每次读取一个字节?如果需要20个字节,可以编写: byte[] buffer = new byte[20]; int bytesRead; i

我正在尝试使用SerialPort类处理串行端口

应用程序要求我们先接收一条命令,然后在20毫秒内回复;问题是,我们读取的命令与实际命令之间存在延迟(高达15毫秒),我们没有时间发回回复

我们需要读取的命令的长度固定为20字节,我们每次从输入缓冲区轮询一个字节

serialPort.Read(input, 0, 1).

我不知道这个过程有什么问题。

为什么每次读取一个字节?如果需要20个字节,可以编写:

byte[] buffer = new byte[20];
int bytesRead;
int totalBytesRead = 0;
while ((bytesRead = serialPort.Read(buffer, totalBytesRead, buffer.Length - totalBytesRead)) != 0  
    && totalBytesRead < buffer.Length)
{
    totalBytesRead += bytesRead;
}
byte[]buffer=新字节[20];
int字节读取;
int totalBytesRead=0;
而((bytesRead=serialPort.Read(buffer,totalBytesRead,buffer.Length-totalBytesRead))!=0
&&totalBytesRead
此时,您已经拥有全部20个字节,或者已经到达流的末尾


您所说的“我们读取的命令与实际命令之间存在延迟(最多15毫秒)”是什么意思?

为什么每次读取一个字节?如果需要20个字节,可以编写:

byte[] buffer = new byte[20];
int bytesRead;
int totalBytesRead = 0;
while ((bytesRead = serialPort.Read(buffer, totalBytesRead, buffer.Length - totalBytesRead)) != 0  
    && totalBytesRead < buffer.Length)
{
    totalBytesRead += bytesRead;
}
byte[]buffer=新字节[20];
int字节读取;
int totalBytesRead=0;
而((bytesRead=serialPort.Read(buffer,totalBytesRead,buffer.Length-totalBytesRead))!=0
&&totalBytesRead
此时,您已经拥有全部20个字节,或者已经到达流的末尾


您所说的“我们读取的命令与实际命令之间存在延迟(最多15毫秒)”是什么意思?

您使用的是DataReceived事件吗?不久前我遇到了一个类似的错误,显然有些功能没有在不使用事件处理程序的情况下调用。

您使用的是DataReceived事件吗?不久前我也遇到了类似的错误,显然有些功能在未使用事件处理程序的情况下无法调用。

我没有使用DataReceived事件,你的意思是我应该使用DataReceived事件,而不是逐个轮询数据?你应该明确使用事件,在我的情况下,我从来没有在没有使用事件的情况下实际收到任何数据,这需要几天的时间才能弄清楚。我没有使用DataReceived事件,你的意思是我应该使用DataReceived事件,而不是逐个轮询数据?你应该明确使用事件,在我的情况下,我从来没有在没有使用事件的情况下实际收到任何数据,我会用示波器在线检查数据,当我收到命令时,我会发送一封信与实际的命令进行比较,从示波器上,我测量了15毫秒的延迟,我想知道是什么原因造成了这种延迟。你说,在你告诉发送者发送一个字节之间有15毫秒的时间,当接收者真的读到它的时候?有很多事情可能会导致这种情况。发送方可以进行短暂的缓冲,接收方可以进行缓冲。接收者可能无法立即对角色做出反应。是否有一种方法可以确定计算机何时接收字符?15毫秒是相当可疑的,因为这是从.NET程序中获得的最佳分辨率。我将使用示波器在线检查数据,当我收到命令时,我将发送一封信与实际命令进行比较,从示波器中,我测量的延迟高达15毫秒,我想知道是什么导致了这种延迟。你说从你告诉发送者发送一个字节到接收者实际读取它之间有15毫秒的时间?有很多事情可能会导致这种情况。发送方可以进行短暂的缓冲,接收方可以进行缓冲。接收者可能无法立即对角色做出反应。是否有一种方法可以确定计算机何时接收字符?15毫秒是相当可疑的,因为这大概是从.NET程序中获得的最佳分辨率。