Heim > Backend-Entwicklung > Golang > Wie lese ich Daten von einem seriellen Port nicht blockierend in Go?

Wie lese ich Daten von einem seriellen Port nicht blockierend in Go?

Mary-Kate Olsen
Freigeben: 2024-11-02 18:38:30
Original
1116 Leute haben es durchsucht

How to Read Data from a Serial Port Non-Blockingly in Go?

Nicht blockierendes Lesen der seriellen Schnittstelle mithilfe einer While-Schleife

In diesem Programm besteht das Ziel darin, über eine serielle Schnittstelle mit einem Sensor zu kommunizieren Port und vermeidet gleichzeitig die Verwendung von time.Sleep zum Lesen von Daten. Leider scheiterte der erste Versuch mit einer While-Schleife daran, dass der Datenpuffer bei jedem Schleifendurchlauf überschrieben wurde.

Die Lösung liegt in der Implementierung eines byteorientierten Leseansatzes, der durch die Einführung von bufio.Reader vorangetrieben wurde. Dieser stromorientierte Leser bietet einen ausgefeilteren und robusteren Mechanismus für die serielle Kommunikation.

<code class="go">package main

import (
    "bufio"
    "fmt"
    "github.com/tarm/goserial"
)

func main() {
    c := &serial.Config{Name: "/dev/ttyUSB0", Baud: 9600}
    s, err := serial.OpenPort(c)

    if err != nil {
        fmt.Println(err)
    }

    _, err = s.Write([]byte("\x16\x02N0C0 G A\x03\x0d\x0a"))

    if err != nil {
        fmt.Println(err)
    }

    reader := bufio.NewReader(s)
    reply, err := reader.ReadBytes('\x0a') // Read until a newline character is encountered
    if err != nil {
        panic(err)
    }

    fmt.Println(reply)

    s.Close()
}</code>
Nach dem Login kopieren

Mit dieser Modifikation liest das Programm kontinuierlich eingehende Daten, bis das angegebene Trennzeichen (in diesem Fall x0a) erreicht wird. Dieser Ansatz gewährleistet einen zuverlässigen Datenabruf, ohne dass Blockierungsvorgänge erforderlich sind.

Das obige ist der detaillierte Inhalt vonWie lese ich Daten von einem seriellen Port nicht blockierend in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage