Go 如何从串行数据中读取数据并在找到特定分隔符时对其进行处理

Go 如何从串行数据中读取数据并在找到特定分隔符时对其进行处理,go,Go,我有一个设备,它继续通过串行端口发送数据。 现在我想读一下并处理它。 数据发送此分隔符“!”和 一旦这个分隔符出现,我想暂停读取,以处理已经收到的数据。 我该怎么做?是否有我可以阅读或遵循的文档或示例。对于从串行端口读取数据,您可以在Github上找到一些软件包,例如 您可以使用此软件包从串行端口读取数据。为了在到达特定分隔符之前进行读取,您可以使用以下方法: config := &serial.Config{Name: "/dev/ttyUSB", Baud: 9600} s, er

我有一个设备,它继续通过串行端口发送数据。 现在我想读一下并处理它。 数据发送此分隔符
“!”
和 一旦这个分隔符出现,我想暂停读取,以处理已经收到的数据。
我该怎么做?是否有我可以阅读或遵循的文档或示例。

对于从串行端口读取数据,您可以在Github上找到一些软件包,例如

您可以使用此软件包从串行端口读取数据。为了在到达特定分隔符之前进行读取,您可以使用以下方法:

config := &serial.Config{Name: "/dev/ttyUSB", Baud: 9600}

s, err := serial.OpenPort(config)
if err != nil {
    // stops execution
    log.Fatal(err)
}

// golang reader interface
r := bufio.NewReader(s)

// reads until delimiter is reached
data, err := r.ReadBytes('\x21')
if err != nil {
    // stops execution
    log.Fatal(err)
}
// or use fmt.Printf() with the right verb
// https://golang.org/pkg/fmt/#hdr-Printing
fmt.Println(data)

另请参见:

bufio
的阅读器不幸对我不起作用-它在一段时间后不断崩溃。这是不可能的,因为我需要一个低性能系统的稳定解决方案

我的解决方案是通过一个小的调整来实现。如前所述,如果不使用
bufio
,每次调用时都会覆盖缓冲区

n,err:=s.Read(buf0)
要解决此问题,请将
buf0
中的字节附加到第二个缓冲区
buf1

如果n>0{
buf1=追加(buf1,buf0[:n]…)
}
然后解析存储在
buf1
中的字节。如果找到要查找的子集,请进一步处理它

  • 确保以适当的方式清除缓冲器
  • 确保限制循环运行的频率(例如,
    time.Sleep

欢迎来到stackoverflow。请遵循这些指南,以便获得帮助