我正在尝试使用SerialPort类来处理串行端口。C#串行端口通信
该应用程序要求我们先收到一个命令,然后在20ms内给出答复;问题在于,我们读取的命令与实际命令之间存在延迟(最长15ms),并且我们没有时间将回复发送回去。
我们需要读取的命令的长度固定为20个字节,我们每次从输入缓冲区轮询一个字节。
serialPort.Read(input, 0, 1).
我不知道这个过程有什么问题。
我正在尝试使用SerialPort类来处理串行端口。C#串行端口通信
该应用程序要求我们先收到一个命令,然后在20ms内给出答复;问题在于,我们读取的命令与实际命令之间存在延迟(最长15ms),并且我们没有时间将回复发送回去。
我们需要读取的命令的长度固定为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;
}
在这一点上,你把所有20个字节或已到达流的末尾。
你是什么意思?“我们阅读的命令和实际的命令之间存在延迟(最多15毫秒)”?
我将使用范围来检查线上的数据,当我收到命令时,我将发送一封信与实际命令进行比较,从范围,我测量延迟高达15ms,我想知道这是什 – lin 2011-06-10 16:03:45
你说当你告诉发送者发送一个字节,并且接收者实际读取它时,会有多达15毫秒的时间?有很多事情可能会导致这种情况。发送者可能会暂时缓冲,接收者可能会缓冲。接收者可能无法立即*对角色作出反应。有什么方法可以确定您的计算机何时接收到该角色? 15毫秒是相当可疑的,因为这是你将从.NET程序中获得的最佳分辨率。 – 2011-06-10 17:58:53