验证串行读取

时间:2019-03-24 20:49:51

标签: python serial-port

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

我期望这样的数据

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

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

['\x00']

然后在未知时间内读取数据就可以了,直到串行端口发出类似这样的信息

['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时,它将读数设置为默认值。

但是以某种方式,当读取错误时,此操作将失败。

是否有更好的方法来清理读数或确保接收到的数据正常?

1 个答案:

答案 0 :(得分:0)

好像我在想的太复杂了。一个简单的try else语句完成了工作。

 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

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