python pySerial等待“#”字符打印USB串行设备的输出

laawzig2  于 12个月前  发布在  Python
关注(0)|答案(2)|浏览(112)

我正在编写一个连接到USB串行设备的Python脚本。每当发送和执行命令时,PIC都会返回一个hashtag。即“命令执行成功。\n#“
我希望我的python脚本在输出数据之前等待hashtag。我如何才能做到这一点?这是我所拥有的。它似乎并没有实际打印从PIC接收的文本。任何帮助都是感激的

if port.isOpen():    
    try:
        for x in range(0,100):
            time.sleep(0.05)
            port.write("command 1" + "\r\n")
            numLines = 0
            // wait for "#" to print output
            while True:
                response = port.readline()
                if "#" in response:
                    print(response)
                    numLines = numLines + 1
                if(numLines >= 1):
                    break

            time.sleep(0.05)
            port.write("command 2" + "\r\n")
            numLines = 0
            // wait for "#" to print output
            while True:
                response = port.readline()
                if "#" in response:
                    print(response)
                    numLines = numLines + 1
                if(numLines >= 1):
                    break

            time.sleep(0.05)
            port.write("command 3" + "\r\n")
            numLines = 0
            // wait for "#" to print output
            while True:
                response = port.readline()
                if "#" in response:
                    print(response)
                    numLines = numLines + 1
                if(numLines >= 1):
                    break

    except Exception, e1:
        print("An error occured: " + str(e1))
    port.close()

字符串

vatpfxk5

vatpfxk51#

port.readline()将读取串行端口,直到它接收到\n。因此,响应将包含字符串“Command executed successfully. \n”。由于该字符串中没有“#”,代码将再次遇到port.readline()语句。这次它将读取“#”,但由于没有“\n”,代码将卡在那里,导致无限循环。
Pyserial提供了一个名为read():的方法
read(size=1)
主要参数:size -要读取的字节数。返回值:从端口读取的字节数。返回类型:bytes从串行端口读取大小字节。如果设置了超时,它可能会根据请求返回较少的字符。如果没有超时,它将阻塞,直到读取请求的字节数。
read()提供了一个参数size(默认值为1),它指定了要读取的字节数。因此,您可以将PIC发送的字符串中的字节数指定为参数。您也可以使用以下替代方法:

// wait for "#" to print output
while True:
    response += port.read()
    if "#" in response:
        print(response)
        numLines = numLines + 1
    if(numLines >= 1):
         break

字符串

iih3973s

iih3973s2#

如果你发送一些白色空间到设备,就好像它是一个终端命令,它会刺激它成为一个响应与您的“#”在它。我已经成功地使用这种方法。具体来说,我发送一个单一的空间““加上终端行结束(即“\n”或“\r\n”取决于设备)。

相关问题