1

我已经坚持了一段时间了。我需要向 python 中的设备发送串行命令。以下是格式示例:

ser = serial.Serial('/dev/ttyO1',baudrate=115200)
ser.write('\xAA\x04\x05\x00\x00\x00')

如果我使用 .write(~hex bytes~) 格式进行交流,我就可以正常交流

但是,当我需要接收更大的数据块时,设备的通信协议会将内容拆分为数据包,我必须确认接收到每个数据包。为了避免在为每个数据包输入单独的 ser.write() 命令时出现腕管综合症,我想编写一个循环来为我进行数据包计数/确认。这就是我所拥有的:

for n in range(0,num_packets,1):

    x = '\\x'"%0.2x"%(n)    
    print('Picture Ready Host Ack')
    ser.write('\xAA\x0E\x00\x00' + x + '\x00')
    time.sleep(.1)
    response = ser.read(ser.inWaiting())
    image_write(response,base_path, filename)        

但是,双斜杠 ('\x'..) 给了我两个斜杠:

'\xaa\x0e\x00\x00\\x05\x00'

当我定义变量 x 时,单个斜杠 ('\x'...) 会返回问题:

ValueError: invalid \x escape

...帮助?

4

2 回答 2

2

如果不是定义x'\\x'"%0.2x"%(n),而是定义,那么x = chr(n)一切都应该正常工作。

于 2012-08-03T18:56:22.033 回答
0

\xij只是扩展到字符chr(int(ij, 16)) 因为无论如何您都在发送字节,所以我会说在一个循环中发送您的第一个块。不要添加任何东西,然后发送你的分隔符,然后发送chr(int(n),16)下一个块。这应该可以解决您的问题。

于 2012-08-03T19:07:32.000 回答