簡體   English   中英

Python-讀取不斷發送的串行數據進行解析

[英]Python - Reading Serial Data that is constantly sending for parsing

我有一個控制箱和一個Raspberry Pi,它們通過串行通信(串行到RJ45)進行通信,我需要從控制箱發送的命令(每50毫秒發送一次)。 我可以閱讀代碼,但這是問題所在。 當我開始閱讀時,起始字節不正確,因此我無法解析它。

例如(我當前得到的輸出):

b'\0x21\0x21\0x98\0x98\0x21\0x21\0x18\0x12\0x21\0x12\0x02\0x32\0x11

我需要的起始字節必須是0x98,所以我需要像這樣

b'\0x98\0x98\0x21\0x21\0x18\0x12\0x21\0x12\0x02\0x32\0x11\0x‌​12\0x11

我需要這種方式,以便我可以解析行並說搶Byte [4]-(0x21)或類似的東西。

在研究方面,我遇到了Struct 我不知道如何使用它,我也不知道是否需要使用它。

目前,我暫時沒有完整的代碼版本,但是這里是我目前擁有的快速示例:

import serial
import time

port = serial.Serial("/dev/ttyS0", baudrate=9600)

while True:
   output = port.read(13) # --- In Total there are 13 Bytes
   print(output)

由於每隔50毫秒就會獲得另一批數據,因此您需要能夠與數據的開始同步:

buffer = b''
header = b'\0x98'
while True:
    if port.in_waiting:
        buffer += port.read(port.in_waiting)
    while len(buffer) >= 2:
        if buffer[0] == header and buffer[1] == header:
            break
        buffer=buffer[1:]
    if len(buffer) >= 13:
        print(buffer[:13]) # or otherwise process latest buffer
        buffer = buffer[13:]

該代碼以空緩沖區開始,然后讀取到達串行端口的所有數據。 雖然緩沖區不是以兩個標頭字節開頭的,但前面的所有多余部分都將被丟棄。 一旦緩沖區從正確的頭開始並且足夠長,就在此處打印13個字節(但是您可能要調用另一個函數來處理整個數據包),然后將該數據包扔掉,准備從下一個到達的地方開始。

暫無
暫無

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

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