繁体   English   中英

以 921600 波特读取字节 C#

[英]Read bytes with 921600 baud C#

我必须通过 RS-422 实时接收和处理 arrays 字节,比特率为 921600。 我一次处理大约 3500 个字节,我的问题是我后来丢失了大约 2800 个字节。

我使用: client.OnReceiving += new EventHandler<DataStreamEventArgs>(receiveHandler);

void receiveHandler(object sender, DataStreamEventArgs e)
{
  ReadData(e.Response);
}

void ReadData (byte[] byteBuffer)
{
  if (byteBuffer != null)
  {
    for (int i = 0; i < byteBuffer.Length; i++)
    {
      if (i < byteBuffer.Length-1 && byteBuffer[i] == 0xAA && byteBuffer[++i] == 0xBA)
      {
        results = new byte[138];
        Buffer.BlockCopy(byteBuffer, i + 1, results, 0, results.Length);
        byte[] h = { results[results.Length - 2], results[results.Length - 1] };
        ControlSum = (ushort)BitConverter.ToInt16(h, 0);
        results = results.Take(results.Count() - 2).ToArray();
        ushort u = checkSum.CRC_Calc(results);
        PackCounterForAll++;
        if (ControlSum == u)
        {
          int offset = 0;
          @float = results.Skip(8)
            .ToArray()
            .GroupBy(x => offset++ / 4)
            .Select(x => BitConverter.ToSingle(x.ToArray(), 0))
            .ToArray();
          PackCounter++;
        }
      }
    }
  }
}

首先,我必须找到两个起始字节,写入一个 138 字节的数据包,并计算其校验和。 据我了解,我通过以下方式处理第一个字节:

    public int Receive(byte[] bytes, int offset, int count)
    {
        int readBytes = 0;

        if (count > 0)
        {
            readBytes = _serialPort.Read(bytes, offset, count);
        }

        return readBytes;
    }

我处理它们,然后我开始丢失它们。 我怎样才能解决这个问题?

这取决于你的情况和愿望。 最简单的方法是使用一些流量控制信号(例如 RTS / CTS)来向您的发送端点发出信号,表明您暂时无法处理数据。 根据您的连接,您可以使用硬件来做到这一点:

硬件流控制使用 RS-232 的 RTS 和 CTS 信号来指示数据传输何时应该暂停或重新开始。 例如,如图所示,当PC1准备接收时,它拉高RTS信号向PC2请求数据

或使用软件(如果您没有连接硬件线或无法控制硬件端口):

软件流控制通过数据通道发送 XON/XOFF 信号来工作。 例如,如下图所示,PC2在准备接收时发送一个XON pattern,然后当它的Rx buffer快满时,它发送一个XOFF pattern请求PC1停止发送

快速搜索显示这个 PDF 为您解释主题,但 inte.net 充满了它(只是谷歌流量控制 RS-244):

https://www.moxa.si/Title_Pages/Basics_of_RS232-422-485.pdf

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM