PySerial - возврат каретки (\ r) не работает должным образом - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь связаться с платой через последовательный (rs232) порт, используя PySerial.

Плата - это Renesas rl78, ниже приведен мой пример кода.(По сути, я пытаюсь выполнить некоторые предопределенные команды. Поэтому здесь commands - это снова команда, которая возвращает список других команд)

import serial, time, io

ser = serial.Serial()
ser.port = "/dev/cu.usbserial"
ser.baudrate = 19200 # as used for HyperTerminal
ser.timeout = 10 #non-block of 10 seconds
ser.bytesize = serial.EIGHTBITS
ser.parity=serial.PARITY_NONE
ser.stopbits=serial.STOPBITS_ONE
ser.xonoff = False
ser.rtscts = True
ser.dsrdtr = True
ser.dtr = True
ser.rts = True

try: 
    ser.open()
except Exception, e:
    print "error open serial port: " + str(e)
    exit()

if ser.is_open:

    try:
        #ser.reset_input_buffer() #flush input buffer, discarding all its contents
        #ser.reset_output_buffer() #flush output buffer, aborting current output

        #write data
        ser.write(b'commands\r')
        ser.reset_input_buffer()

        time.sleep(2)

        in_wait = ser.in_waiting

        while True:
            if in_wait != 0:
                output = ser.read(in_wait)
                print(output)
                break
            else:
                break

        ser.close()
    except Exception, e1:
        print "error communicating...: " + str(e1)

else:
    print "cannot open serial port "

И с точки зрения устройства, мынужно нажать return (возврат каретки \ r), чтобы выполнить команду, используя любое терминальное приложение.то есть HyperTerminal или Serial для Mac.

Таким образом, приведенный выше код не возвращает никакого вывода, а просто пустую строку (это то, что вы получаете в терминале, когда просто нажимаете return (\ r)).Устройство ведет себя так, как будто оно получило возврат (\ r), а команда полностью игнорируется.

Чтобы убедиться, что это не проблема с PySerial, я попытался использовать PySerial's miniterm , чтобыполучить это поведение терминала, и я смог успешно выполнить команды

Опять же, здесь выгода заключается в том, чтобы установить CR в качестве EOL для успешного выполнения команд.

python -m serial.tools.miniterm -e --eol=CR

Итак, яЯ озадачен тем, что не так с моим кодом и почему он не выполняет команды.

...