【问题标题】:Serial data logging with python使用 python 进行串行数据记录
【发布时间】:2017-04-12 17:30:46
【问题描述】:

简介:

我需要编写一个实时读取串行数据并将其写入文本文件的小程序。我在读取数据方面取得了一些进展,但我没有成功将此信息存储在新文件中。

这是我的代码:

from __future__ import print_function
import serial, time, io, datetime
from serial import Serial

addr = "COM1" ## serial port to read data from
baud = 9600 ## baud rate for instrument

ser = serial.Serial(
    port = addr,\
    baudrate = baud,\
    parity=serial.PARITY_NONE,\
    stopbits=serial.STOPBITS_ONE,\
    bytesize=serial.EIGHTBITS,\
    timeout=0)


print("Connected to: " + ser.portstr)

## this will store each line of data
seq = []
count = 1 ## row index

while True:
    for i in ser.read():
        seq.append(i) ## convert from ACSII?
        joined_seq = ''.join(str(v) for v in seq) ## Make a string from array

        if i == '\n':
            print("Line: " + str(count) + "" + str(datetime.datetime.now()) + joined_seq) ## append a timestamp to each row of data
            seq = []
            count += 1
            break

ser.close()

谢谢!

【问题讨论】:

    标签: python logging serial-port export-to-csv pyserial


    【解决方案1】:

    也许你可以将这样的东西应用到你的代码中:

    filename="myFile.txt"
    datafile=open(filename, 'a')
    while True:
        data = ser.readline()
        datafile.write(data)
    
    datafile.close()
    ser.close()
    

    编辑 如果一切正常,只需写入文件尝试:

    from __future__ import print_function
    import serial, time, io, datetime
    from serial import Serial
    
    addr = "COM1" ## serial port to read data from
    baud = 9600 ## baud rate for instrument
    
    ser = serial.Serial(
        port = addr,\
        baudrate = baud,\
        parity=serial.PARITY_NONE,\
        stopbits=serial.STOPBITS_ONE,\
        bytesize=serial.EIGHTBITS,\
        timeout=0)
    
    
    print("Connected to: " + ser.portstr)
    
    filename="myFile.txt"
    datafile=open(filename, 'a')
    
    ## this will store each line of data
    seq = []
    count = 1 ## row index
    
    while True:
        for i in ser.read():
            seq.append(i) ## convert from ACSII?
            joined_seq = ''.join(str(v) for v in seq) ## Make a string from array
    
            if i == '\n':
                datafile.write("Line: " + str(count) + "" + str(datetime.datetime.now()) + joined_seq) ## append a timestamp to each row of data
                seq = []
                count += 1
                break
    datafile.close()
    ser.close()
    

    【讨论】:

    • 这是一个很好的起点,但您的示例删除了我添加的时间戳。这引入了一个我还没有设法克服的新障碍。我正在研究使用 numpy 和 np.append 函数将时间戳列添加到原始串行数据中。我现在意识到使用数组格式可能是我的最佳选择。
    • 好的,否则,您可以在创建时间戳后datafile.write("stampedDataHere")....
    • 好的,谢谢,我会考虑创建一个 stampedData 对象。我刚刚意识到我的示例代码只打印时间戳,但它还没有将它附加到每一行数据。目前正试图弄清楚如何让它正常工作。
    • stamptedData 只是一个名字,我的意思是放在实际上有print ... 的地方,例如:datafile.write("Line: " + str(count) + "" + str(datetime.datetime.now()) + joined_seq)
    • 我正在编辑我的帖子...我无法在我的计算机上尝试此代码....但主要思想在这里....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-31
    • 2011-03-06
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    相关资源
    最近更新 更多