我正在编写一个连接到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()
字符串
2条答案
按热度按时间vatpfxk51#
port.readline()
将读取串行端口,直到它接收到\n
。因此,响应将包含字符串“Command executed successfully. \n”。由于该字符串中没有“#”,代码将再次遇到port.readline()
语句。这次它将读取“#”,但由于没有“\n”,代码将卡在那里,导致无限循环。Pyserial提供了一个名为
read():
的方法read(size=1)
个主要参数:size -要读取的字节数。返回值:从端口读取的字节数。返回类型:bytes从串行端口读取大小字节。如果设置了超时,它可能会根据请求返回较少的字符。如果没有超时,它将阻塞,直到读取请求的字节数。
read()提供了一个参数size(默认值为1),它指定了要读取的字节数。因此,您可以将PIC发送的字符串中的字节数指定为参数。您也可以使用以下替代方法:
字符串
iih3973s2#
如果你发送一些白色空间到设备,就好像它是一个终端命令,它会刺激它成为一个响应与您的“#”在它。我已经成功地使用这种方法。具体来说,我发送一个单一的空间““加上终端行结束(即“\n”或“\r\n”取决于设备)。