将bytearray从串行端口转换为float

时间:2012-08-10 18:04:01

标签: python parsing serial-port bytearray

我正在编写一个python脚本,它将通过COM端口与Fluke仪表通信。我能够接收数据,但想将其解析为可用的浮点数。代码如下所示:

import serial

ser = serial.Serial('COM3', 115200, timeout=1)

#Decalring some variables
FlukeID = b'ID\r'
FlukeQM = b'QM\r'

#Requesting the meters ID to verify connection on terminal
ser.writelines(FlukeID)
line = ser.readline()
print(line)

#Declaring variables for my while loop
thermdata = 0
t=1

ser.writelines(FlukeQM)
thermdata = ser.readline()

while(t < 5):
    ser.writelines(FlukeQM)
    #thermdata = (thermdata + ser.readline()) /2
    thermdata = ser.readline()
    print(thermdata)
    t+=1

设备返回的数据在控制台上如下所示:

8.597E3,OHM,NORMAL,NONE 不正确

编辑: 数据实际上在终端上显示如下: 的 为b'0 \ r8.597E3,OHM,NORMAL,NONE \ R'

我只是希望能够在开头使用数值,所以我可以随着时间的推移做一些计算。我还需要能够在我的号码中使用科学概念部分,因为我不知道我的测量范围。我知道必须有一个简单的方法来做到这一点,并非常感谢任何帮助。

另外,我还希望能够将这些值绘制成图形或将它们放入某种.csv文件中。如果你有什么意见可以学习如何做到这一点也很好,但我主要关心的是bytearray的处理。

2 个答案:

答案 0 :(得分:2)

使用split()将字符串分成逗号分隔的部分。然后第一部分是字符串'8.597E3',您可以使用float()函数进行转换。

s = '8.597E3,OHM,NORMAL,NONE'.split(',')
value = float(s[0])

答案 1 :(得分:0)

如下:

def atof(text):
    try:
        return float(text)
    except ValueError:
        return text

thermdata = b'0\r8.597E3,OHM,NORMAL,NONE\r'
for line in thermdata.strip().split(b'\r'):
    print(list(map(atof, line.split(b','))))

# [0.0]
# [8597.0, b'OHM', b'NORMAL', b'NONE']