Чтение нескольких значений датчика из последовательных портов через многопоточность в Python - PullRequest
0 голосов
/ 04 апреля 2019

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

from tkinter import *
import serial
import time
import sys
import xml.dom.minidom as dom
from struct import *
import csv

SerialPortOxigraf = "COM4"
SerialPortMensor  = "COM5"
SerialBaudrateOxigraf = 9600
SerialBaudrateMensor = 57600

def ReadOxigraf(serObject):
    byte_list = []
    while True:
        try:
                # Remove newline character '\n'
            dataOxigraf = str(serObject.readline()).split('\\')
            print('Whole Code', dataOxigraf)
            for i in dataOxigraf:
                for cnt in range(0, 4):
                    byte_list.append(i)
            print(type(dataOxigraf))
            for b in byte_list:
                print('In List', b)
                # response = serObject.readline()
            if dataOxigraf:
                print("Oxigraf-> " + str(dataOxigraf))
                with open('Oxigraf_Data.csv', 'w', newline='') as csvfile:
                    OxigrafData = csv.writer(csvfile, delimiter=',')
                    OxigrafData.writerows(dataOxigraf)
        except serial.SerialException as e:
            print("Could not read serial port '{}': {}".format(SerialPortOxigraf, e))
        except (KeyboardInterrupt, SystemExit):
            sys.exit()
    serObject.close()

def main():
    ser = serial.Serial()
    ser.port = SerialPortMensor
    ser.baudrate = SerialBaudrateMensor
    ser.bytesize = serial.EIGHTBITS #number of bits per bytes
    ser.parity = serial.PARITY_NONE #set parity check: no parity
    ser.stopbits = serial.STOPBITS_ONE #number of stop bits
    #ser.timeout = None     #block read
    ser.timeout = 1         #non-block read
    #ser.timeout = 2        #timeout block read
    ser.xonxoff = False     #disable software flow control
    ser.rtscts = False      #disable hardware (RTS/CTS) flow control
    ser.dsrdtr = False      #disable hardware (DSR/DTR) flow control
    ser.writeTimeout = 2    #timeout for write
    try:
        ser.open()
    except Exception as e:
        print("Error open serial port: " + str(e))
        sys.exit()
    if ser.isOpen():
        try:
            ser.flushInput()    #flush input buffer, discarding all its contents
            ser.flushOutput()   #flush output buffer, aborting current output and discard all that is in buffer
            ReadMensor(ser)
        except Exception as e:
            print("Error...: " + str(e))
        except (KeyboardInterrupt, SystemExit):
            print("\nClose program..\n")
            if ser: ser.close()
            sys.exit()

У кого-нибудь есть намеки на меня? Заранее спасибо!

...