Ich bin neu in Python und Programmierung im Allgemeinen. Ich versuche einen Gerätetreiber mit Pyserial zu schreiben. Ich öffnete einen Thread, der Daten von dem Gerät lesen und an std out senden würde. In meiner Hauptschleife verwendete ich eine Funktion, die Anweisungen von std als Strings lesen und sie mit einem Wörterbuch auf das Gerät schreiben würde.Python Multithreading mit PySerial Objekt
Mein Programm liest meine Anweisungen, zeigt aber keine Daten an, die aus dem Gerät kommen sollten - ich weiß, dass es auf dem Gerät geschrieben wurde, weil es abstürzt, wenn ich eine Anweisung nicht in meinem Wörterbuch verwende. Hier ist, wie mein Code strukturiert ist:
import serial
import threading
#ser is my serial object
def writeInstruction(ser):
#reads an instruction string from stdin and writes the corresponding instruction to the device
instruction = raw_input('cmd> ')
if instr == 'disable_all': defaultMode(ser)
else: ser.write(dictionaryOfInstructions[instruction])
time.sleep(.5)
def readData(ser):
# - Reads one package from the device, calculates the checksum and outputs through stdout
# - the package content (excludes the Package head, length, and checksum) as a string
while True:
packetHead = binascii.hexlify(ser.read(2))
packetLength = binascii.hexlify(ser.read(1))
packetContent = binascii.hexlify(ser.read(int(packetLength, 16) - 1))
if checkSum(packetHead + packetLength + packetContent):
print packetContent
readThread = threading.Thread (target = readData, args = ser)
readThread.start()
while True:
writeInstr(ser)
Was ist der richtige Weg, serielle Objekte in Multithread-Programmierung zu behandeln?
Es würde helfen zu wissen, was Sie in 'readdata (ser) zu tun versuchen,'. Ich frage mich, ob Ihr Thread fertig ist, bevor Sie irgendwelche Daten erhalten. und 'writeInstruction (ser)' können Sie mehr Code von diesen Funktionen zur Verfügung stellen? –
writeInstruction (ser) schaltet die Datenerfassung des Geräts ein (medizinisches Gerät) readData (ser) liest einzelne Pakete vom Gerät und überprüft sie. –
Der angegebene Code reicht zur Diagnose des Problems nicht aus. Versuchen Sie, möglichst einen [MCVE] (http://stackoverflow.com/help/mcve) zu veröffentlichen. – Aya