如何加快串口(RS422)读取速度?

问题描述 投票:0回答:2

我需要在 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!");
            }
      }
c# serial-port
2个回答
0
投票

你可以做到 8Mbit/s,没问题,可能更快。你必须使用FPGA来捕获数据,并将其转换为同一板内的rs232并将其发送回PC,没问题。


-2
投票

可能是端口设置的限制。 设备管理器 > 端口属性 > 端口设置 > 高级...

advanced port setting

© www.soinside.com 2019 - 2024. All rights reserved.