Question

J'utilise pyserial pour communiquer avec un legs intégré.

ser = serial.Serial(PORT, BAUD, timeout = TOUT)
ser.write(CMD)
z = ser.readline(eol='\n')

Nous envoyons CMD à l'appareil et il répond avec une chaîne de longueur varing se terminant par un '\n'

si le replay ne peux pas concevoir alors readline() fois-out et z=''

si le legs est interrompu ou tombe en panne se il est d'envoyer les données puis-temps sur readline() et z sera une chaîne sans '\n' à la fin.

Y at-il un bon moyen de vérifier si readline() a dépassé le délai de sortie autre que de vérifier l'état de z.

Était-ce utile?

La solution

Je pense que ce que vous aimeriez faire est ..

import re
import time
import serial

def doRead(ser,term):
    matcher = re.compile(term)    #gives you the ability to search for anything
    tic     = time.time()
    buff    = ser.read(128)
    # you can use if not ('\n' in buff) too if you don't like re
    while ((time.time() - tic) < tout) and (not matcher.search(buff)):
       buff += ser.read(128)

    return buff

if __name__ == "__main__":
    ser = serial.Serial(PORT, BAUD, timeout = TOUT)
    ser.write(CMD)
    print doRead(ser,term='\n')
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top