Пишите только тогда, когда последовательное устройство выводит данные - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь сделать регистратор данных, чем записывает вывод с последовательного устройства, которое выводит только один раз в минуту. Мне нужно, чтобы на выходе была метка времени. Код, который у меня есть, будет регистрировать выходные данные, но при этом он будет регистрировать пробелы с отметкой времени между выходными данными устройства. Как заставить его писать только строку с отметкой времени, когда устройство выводит?

#!/usr/bin/env python
<h1>Log data from serial port</h1>

import argparse
import serial
import datetime
import time
import os
timestr = time.strftime("%Y%m%d")
Tstamp = time.strftime("%Y/%m/%d %H:%M ")

parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-d", "--device", help="device to read from", default="/dev/ttyUSB0")
parser.add_argument("-s", "--speed", help="speed in bps", default=9600, type=int)
args = parser.parse_args()

outputFilePath = os.path.join(os.path.dirname(__file__),
                 datetime.datetime.now().strftime("%Y-%m-%d") + ".csv")

with serial.Serial(args.device, args.speed) as ser, open(outputFilePath,'w') as outputFile:
    print("Logging started. Ctrl-C to stop.") 
    try:
        while True:
            time.sleep(1)  
            x = (ser.read(ser.inWaiting()))
            data = x.decode('UTF-8')          
            outputFile.write(Tstamp + " "  + data + '\n')
            outputFile.flush()
    except KeyboardInterrupt:
        print("Logging stopped")

Извините за плохое форматирование. Я не уверен, как заставить его выглядеть прямо здесь.

1 Ответ

0 голосов
/ 09 января 2019

Добавив if x!= "" и сделав правильный отступ, я получил его на работу. Теперь мне просто нужно исправить это, чтобы добавить файл, а не перезаписать его.

#!/usr/bin/env python
# Log data from serial port


import argparse
import serial
import datetime
import time
import os


parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument("-d", "--device", help="device to read from", default="/dev/ttyUSB0")
parser.add_argument("-s", "--speed", help="speed in bps", default=9600, type=int)
args = parser.parse_args()

outputFilePath = os.path.join(os.path.dirname(__file__),
                 datetime.datetime.now().strftime("%Y-%m-%d") + ".csv")

with serial.Serial(args.device, args.speed) as ser, open(outputFilePath,'w') as outputFile:
    print("Logging started. Ctrl-C to stop.") 
    try:
        while True:
            time.sleep(1) 
            x = (ser.read(ser.inWaiting())) 
            data = x.decode('UTF-8')
            if data !="":
                outputFile.write(time.strftime("%Y/%m/%d %H:%M ") + " " + data  )
                outputFile.flush()

    except KeyboardInterrupt:
        print("Logging stopped")
...