我需要在 100 毫秒内从激光雷达获取数据。该数据由 1122 字节组成,当我向激光雷达发送 10 字节请求数据时,我收到该数据。通过 RS422 进行通信。我的电脑有 Rs422 端口。最高可支持5M波特率。我通过在 C# 中读取串口来获取这些数据。我使用的激光雷达可以支持高达 500k 波特率。
这是我的问题;虽然我将 BaudRate 设置为 115200,230400,460800,但所有读取操作都无法低于 190ms。我不知道我哪里错了。有没有一种编程方式可以更快地做到这一点?
平均 对于 115200-> 210ms,
对于 230400-> 200ms,
对于 460800-> 190ms
我的获取数据功能代码;
public static void GetData()
{
System.Diagnostics.Stopwatch watch;
if (isLidarStart)
{
serialport.DiscardInBuffer();
serialport.DiscardOutBuffer();
sendByte(ScanDataRequreBytes);
int byteslen;
watch = new System.Diagnostics.Stopwatch();
long timeOut1 = 220; // for protection
watch.Start();
byteslen = serialport.BytesToRead;
while (watch.ElapsedMilliseconds < timeOut1 && byteslen != 1122)
{
byteslen = serialport.BytesToRead;
}
watch.Stop();
System.Diagnostics.Debug.WriteLine("Time elapsed only when receiving data = " + watch.ElapsedMilliseconds + " ms");
if (byteslen != 1122)
{
System.Diagnostics.Debug.WriteLine("Error = " + serialport.BytesToRead);
return null;
}
else
{
byte[] SerialPortbytes = new byte[byteslen];
serialport.Read(SerialPortbytes, 0, byteslen);
// Do something
}
}
我的init串口函数代码;
public static void initSerialPortCommunication()
{
try
{
serialport = new SerialPort();
serialport.BaudRate = 460800;
serialport.PortName = "COM2";
serialport.Parity = Parity.None;
serialport.StopBits = StopBits.One;
serialport.DataBits = 8;
serialport.Open();
isLidarStart = true;
}
catch (Exception)
{
ErrorOccured = false;
MessageBox.Show("Error starting port!");
}
}
你可以做到 8Mbit/s,没问题,可能更快。你必须使用FPGA来捕获数据,并将其转换为同一板内的rs232并将其发送回PC,没问题。
可能是端口设置的限制。 设备管理器 > 端口属性 > 端口设置 > 高级...