0

COM ポート経由で Fluke メーターと通信する Python スクリプトを作成しています。データを受け取ることはできますが、使用可能な浮動小数点数に解析したいと考えています。コードは次のようになります。

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、オーム、正常、どれも正しく ない

編集:データは実際には端末上で次のように表示されます: b'0\r8.597E3,OHM,NORMAL,NONE\r'

最初に数値を使用できるようにしたいので、時間の経過とともにいくつかの計算を行うことができます。また、事前に測定範囲がわからないため、数値の科学的概念の部分を使用できるようにする必要があります。これを行う簡単な方法があるに違いないことはわかっています。

余談ですが、これらの値をグラフ化するか、何らかの .csv ファイルに配置できるようにしたいと考えています。これを行う方法を学ぶためにどこを見ればよいかについてコメントがあればそれも素晴らしいことですが、私は主にバイト配列の処理に関心があります。

4

2 に答える 2

2

split()文字列をカンマ区切りの部分に分割するために使用します。次に、最初の部分は文字列 '8.597E3' で、float()関数を使用して変換します。

s = '8.597E3,OHM,NORMAL,NONE'.split(',')
value = float(s[0])
于 2012-08-10T18:20:44.200 に答える
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']
于 2012-08-14T01:39:35.347 に答える