Python串行读取需要更长的时间

时间:2019-05-06 18:34:58

标签: python raspberry-pi serial-port xbee

我正在使用连接到Raspberry pi3,API-mode = 2的Xbee,并通过串行接口从xbee发送29字节的数据,并通过串行接口读取(29字节),两者均工作正常,如以下代码所示:< / p>

ser=serial.Serial(PORT, BAUDRATE)
while True:
    #SEND DATA
    wrt_time = datetime.now().microsecond
    msg=[0x10,
         0x00,
         0x00,
         0x00,
         0x00,
         0x00,
         0x00,
         0x00,
         0xFF,
         0xFF,
         0xFF,
         0xFE,
         0x00,
         0xCC,
         0x66,
         0x00,
         0x00,
         0x01,
         0x00,
         0x03,
         0xFF,
         0x01,
         0x00,
         0x01,
         0x77,
         0x00,
         0x1D]
    ser.write(chr(0x7e)+
              chr(len(msg)//256)+
              chr(len(msg)%256))
    ser.write(''.join(chr(x) for x in msg))
    check=(0xFF - ( sum(msg) & 0xFF ))
    ser.write(chr(check))
    wrt_elapsed_time = datetime.now().microsecond - wrt_time
    print("write time: ", wrt_elapsed_time)

    read_time = datetime.now().microsecond
    data = ser.read(29)
    read_elapsed_time = datetime.now().microsecond - read_time
    print("read time: ", read_elapsed_time)
ser.close()

我还在测量串行读取和写入数据所花费的时间。写入时间约为700毫秒,读取时间约为140000毫秒,这相当多。问题是ser.read需要花费很多时间。 C ++中的相同代码所花费的时间比Python所花费的时间少10倍,因此我确定这不是硬件问题。我有两个问题: 1. Python花更长的时间是什么原因? Python是否具有与C / C ++相同的UART,还是在更高级别为Python实现了另一个? 2.反正我可以减少执行串行读取所需的时间吗?

1 个答案:

答案 0 :(得分:0)

您说的是msec(毫秒),但是您的代码引用了microsecond(微秒)。请注意,由于字节被缓冲,因此写入将很快,并且0.7ms的写入和140ms的读取声音是合理的。您的读取时间包括Pi将缓冲的字节实际写到XBee,然后依次读取29字节的响应的时间。

像往常一样,对于这种情况,我建议使用115200bps而不是9600bps,这样可以减少通过串行接口发送字节的时间。我还觉得使用API​​模式2比使用API​​模式1的工作更多,但这也许只是我个人的喜好。