Go で While ループを使用して連続シリアル ポート データ読み取りを実現するにはどうすればよいですか?

DDD
リリース: 2024-10-27 16:28:28
オリジナル
905 人が閲覧しました

How to Achieve Continuous Serial Port Data Reading Using a While-Loop in Go?

while ループを使用してシリアル ポートからデータを継続的に読み取る

シリアル ポートを介してセンサーまたはデバイスと通信する場合、多くの場合、これが必要になります。受信データを継続的に読み取ります。このコンテキストでは、while ループを使用してこれをどのように実現するかという疑問が生じます。

シリアル通信に使用される Go プログラムの例を考えてみましょう:

<code class="go">package main

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

func main() {
    // ... (code to open the serial port and write data)

    time.Sleep(time.Second / 2)

    var buf []byte

    for {
        n, err := s.Read(buf)

        if n > 0 {
            break
        }
    }

    fmt.Println(string(buf[:n]))

    // ... (code to close the serial port)
}</code>
ログイン後にコピー

このスニペットでは、最初の試行は連続読み取り用の while ループを作成することが期待どおりに機能しません。ブロッキング Read() 関数とは異なり、シリアル パッケージの Read() メソッドは、データが利用できない場合でも、すぐに戻ります。この動作により、バッファが上書きされ、すべての受信データをキャプチャできなくなります。

この問題に対処するためのより堅牢なアプローチは、バッファリング機能を提供する bufio.Reader を使用することです。定義された区切り文字 (改行文字の場合は「x0a」など) を備えたリーダーを使用すると、区切り文字に到達するまで継続的に読み取ることができます。

このアプローチを組み込んだ変更されたコード スニペットを次に示します。

<code class="go">package main

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

func main() {
    // ... (code to open the serial port and write data)

    // Create a bufio.Reader with a defined delimiter
    reader := bufio.NewReader(s)

    // Continuously read data until the delimiter is encountered
    reply, err := reader.ReadBytes('\x0a')

    // Print the received data
    fmt.Println(string(reply))

    // ... (code to close the serial port)
}</code>
ログイン後にコピー

この変更を組み込むことにより、プログラムはデータ ストリーム レートに関係なく、受信データを継続的かつ確実に読み取ることができるようになりました。

以上がGo で While ループを使用して連続シリアル ポート データ読み取りを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!