通过Python中的多线程从串行端口读取多个传感器值

时间:2019-04-04 09:06:41

标签: python-3.x serial-port python-multithreading

我想使用串行连接从不同的传感器接收和处理数据。我设法建立了一个连接以从其中一个传感器接收数据。现在,我想通过多线程一次处理两个串行端口。我已经尝试了一些方法,但是我陷入了困境。

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()

有人对我有提示吗?预先感谢!

0 个答案:

没有答案