簡體   English   中英

如何從串行設備的字節流中找到EOL(行尾)

[英]How to find EOL (end of line) in a byte-stream from a serial device

我嘗試從設備讀取行,該設備每2秒發送1到3行文本到串行打印機,並使用pyserial讀取該設備的串行輸出。

首先,我使用minicom來獲得輸出樣本:當我使用hax閱讀器(在Linux中為ghex)打開它時,我看到每一行的末尾都有十六進制值x0A。

當我逐字節捕獲pyserial(3.2.1版)的輸出時:

print(self.ser.read())

行末的輸出是

b'\\ r'

b'\\ n'

每次一行結束(為什么要輸入兩個字符?)

我試圖定義一個read_line()函數:

import serial  

def read_line(self):
        line = []
        print("start read_line")
        while True:
            print("read_line_loop")
            for c in self.ser.read():
                line.append(c)
                print("appended")
                if c == b'\x0A':
                    print("stop condition")
                    print("Line: " + line)
                    line = []
                    break

按預期方式進入了循環,但從未滿足條件c == b'\\ x0A'。 顯示的消息為“ read_line_loop”,每隔幾秒“附加”幾次,但從不“停止條件”。

任何想法?

使用\\ r \\ n(回車,換行)結束一行是Windows的普通方法(和打字機)來結束一行。 用十六進制翻譯的這些符號是“ \\ x0D”和“ \\ x0A”。 為什么找不到它,我不能告訴你。 但是,當您正在讀取行時,我將使用串行端口的readline方法。 由於您的行以\\ n結尾,因此應該可以正常工作。 當您的行不是以\\ n結尾,而是以其他結尾時,您只會遇到問題。

一種方法是輸出c以查看其實際含義。 c可能與您的想法有所不同。

另一種方法是使用內置的readline方法,該方法使用換行符( http://pyserial.readthedocs.io/en/latest/shortintro.html#readline )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM