C#,使用readto()从串口接收数据

时间:2014-01-20 05:34:08

标签: c# serial-port

我有一台以[stx]..data...[etx]

格式发送数据的设备

有没有办法使用serialport.readto()函数将数据读取到[etx]

byte test = sp.ReadByte();

if (test == 0x02 && comOpen)
{
   string indata = sp.ReadTo("");
   watch = "\n" + indata;
   SetText(watch);
   process_data(indata);
   sendack(0x06);
}

每次发送数据时数据量都会有所不同。

我发现serialport.read()函数的实现很典型:)。那么有什么方法可以使用serialport.readto()函数来读取传入流中的数据吗?

任何建议都会非常有用。

2 个答案:

答案 0 :(得分:0)

如果etx是多个字节,您需要将其与缓冲区进行比较,以了解何时收到传输结束。

示例:

// Set to whatever ending marker is used in your scenario.
var endingMarker = new byte[] { 0x01, 0x02, 0x03 };
var buffer = new List<byte>();

// Continue to read until ending marker is read.
while (!endingMarker.SequenceEqual(buffer.Skip(Math.Max(0, buffer.Count - endingMarker.Length))))
{
    // Read one byte to the buffer.
    buffer.Add(sp.ReadByte());
}

// Remove ending marker.
var result = buffer.Take(buffer.Count - endingMarker.Length).ToArray();

答案 1 :(得分:0)

通过在sp.readto()函数中使用“\ u0003”来解决此问题。

sp.readto("\u0003")