C#串行端口通信

本文关键字:通信 串行端口 | 更新日期: 2023-09-27 17:58:44

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

该应用程序要求我们首先接收一个命令,然后在20ms内给出答复;问题是,我们读取的命令和实际命令之间有一个延迟(长达15ms),我们没有时间发回回复。

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

serialPort.Read(input, 0, 1).

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

C#串行端口通信

为什么一次读取一个字节?如果你期望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个字节,或者您已经到达了流的末尾。

你所说的"在我们读取的命令和实际命令之间有一个延迟(长达15ms)"是什么意思?

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