首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中测试串口的十六进制输出

如何在python中测试串口的十六进制输出
EN

Stack Overflow用户
提问于 2012-10-17 15:51:20
回答 1查看 8.4K关注 0票数 0

当我通过串口发送命令时,从机以十六进制序列响应,即:

本系列:

代码语言:javascript
复制
05 06 40 00 02 05 F6 5C

给了我

代码语言:javascript
复制
05 07 40 05 02 05 71 37 FF

响应始终以FF字节结束。所以我想把字节读到一个缓冲区中,直到我遇到FF。则应打印缓冲区,并且函数应返回。

代码语言:javascript
复制
import serial

s_port = 'COM1'
b_rate = 2400

#method for reading incoming bytes on serial
def read_serial(ser):
    buf = ''
    while True:
        inp = ser.read(size=1) #read a byte
        print inp.encode("hex") #gives me the correct bytes, each on a newline
        buf = buf + inp #accumalate the response
        if 0xff == inp.encode("hex"): #if the incoming byte is 0xff
            print inp.encode("hex") # never here
            break
    return buf   

#open serial
ser = serial.Serial(
    port=s_port,
    baudrate=b_rate,
    timeout=0.1
)

while True:

    command = '\x05\x06\x40\x00\x02\x05\xF6\x5C' #should come from user input
    print "TX: "
    ser.write(command)
    rx = read_serial(ser)
    print "RX: " + str(rx)

给了我:

代码语言:javascript
复制
TX: 
05
07
40
05
02
05
71
37
ff

为什么条件永远不会满足?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-17 15:58:49

这是因为你在比较苹果和橙子。inp.encode("hex")返回一个字符串。假设你读了"A"这封信。"A".encode("hex")返回字符串"41"0x41 != "41"。您应该这样做:

代码语言:javascript
复制
if '\xff' == inp:
    ....

或者,使用ord()inp转换为数字

代码语言:javascript
复制
if 0xff == ord(inp):
    ....

那么它应该会像预期的那样工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12929593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档