PySerial-回车(\ r)不能按预期运行

时间:2018-10-17 12:13:37

标签: python serial-port pyserial

我正在尝试使用PySerial通过串行(rs232)端口与板进行通信。

板子是瑞萨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)才能使用任何终端应用程序执行命令。即超级终端或Mac上的Serial

因此,上面的代码不会返回任何输出,而只会返回一个空字符串(这是您在按回车键(\ r)时在终端中看到的内容)。该设备的行为就像它得到了返回(\ r)并且该命令被完全忽略了。

为确保PySerial没问题,我尝试使用PySerial的miniterm来获得此终端行为,并且我能够成功执行命令

这里再次要注意的是将CR设置为EOL,以使命令成功执行。

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

因此,我对代码的问题以及为什么它不执行命令感到困惑。

0 个答案:

没有答案