验证串行读取

2024-09-25 08:32:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试读取一个串行端口,数据有时会“损坏”

我期待这样的数据

['CPS', '0', 'CPM', '11', 'uSv/hr', '0.06', 'SLOW']

打开串行端口后的第一个读数总是

['\x00']

然后在未知的时间内读取数据就可以了,直到serialport发送这样的内容

['CPS', '0', 'CPM', '21', 'uSv/hr', '\x000.11', 'SLOW']

我已经试着确认读数是正确的 这种相当丑陋的状况检查:

serialData = serialConnection.readline()
serialData = "".join(serialData.split())
serialList = serialData.split(",")
if (len(serialList) < 7 or serialList[5][0] == "\\"
    or serialList[0] != "CPS" or serialList[2] != "CPM"):
    uSvH = 0.1
else:
    uSvH = float(serialList[5])

因此,我正在检查读取的数据大小是否正确(七个条目),第一个条目始终必须是CPS,当接收到的是\x*而不是float时,它会将读取设置为默认值

但不知何故,当一个损坏的读数发生时,这就失败了

有没有更好的方法来清除读数或确保接收到的数据是正确的


Tags: or数据端口hr条目floatsplit读数
1条回答
网友
1楼 · 发布于 2024-09-25 08:32:26

看来我想得太复杂了。一个简单的try-except语句就完成了任务

 if(len(serialList) == 7):
    try:
        uSvH = float(serialList[5])
    except ValueError:
        uSvH = 0.1
if (len(serialList) < 7 or serialList[0] != "CPS" or serialList[2] != "CPM"):
    uSvH = 0.1

现在脚本传递一些随机读数

相关问题 更多 >