我正在使用连接到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.反正我可以减少执行串行读取所需的时间吗?
答案 0 :(得分:0)
您说的是msec
(毫秒),但是您的代码引用了microsecond
(微秒)。请注意,由于字节被缓冲,因此写入将很快,并且0.7ms的写入和140ms的读取声音是合理的。您的读取时间包括Pi将缓冲的字节实际写到XBee,然后依次读取29字节的响应的时间。
像往常一样,对于这种情况,我建议使用115200bps而不是9600bps,这样可以减少通过串行接口发送字节的时间。我还觉得使用API模式2比使用API模式1的工作更多,但这也许只是我个人的喜好。