首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pyserial readline():SerialException

pyserial readline():SerialException
EN

Stack Overflow用户
提问于 2012-03-11 03:27:55
回答 2查看 8.6K关注 0票数 4

我正在写一个代码,用来向自动取款机发送订单。我发送了几个信息,但在每次写入之间,我必须等待答案(我必须等待机器人到达坐标系上的一点)。正如我在文档中所读到的,readline()至少应该一直读到超时,但只要我发送第一个坐标,readline()就会自动返回:

代码语言:javascript
复制
SerialException: device reports readiness to read but returned no data (device disconnected?)

当我在for循环中的每个write()之间放置一个sleep()时,一切都很正常。我试着使用inWaiting(),但它仍然不能工作。下面是我如何使用它的一个示例:

代码语言:javascript
复制
for i in chemin_python:

     self.serieInstance.ecrire("goto\n" + str(float(i.x)) + '\n' + str(float(-i.y)) + '\n')

     while self.serieInstance.inWaiting():
         pass

     lu = self.serieInstance.readline()
     lu = lu.split("\r\n")[0]
     reponse = self.serieInstance.file_attente.get(lu)
     if reponse != "FIN_GOTO":
          log.logger.debug("Erreur asservissement (goto) : " + reponse)
EN

回答 2

Stack Overflow用户

发布于 2012-03-16 00:34:06

下面是如何在python中使用串行命令的代码片段

代码语言:javascript
复制
s.write(command); 
st = ''
initTime = time.time()
while True:
  st +=  s.readline()
  if timeout and (time.time() - initTime > t) : return TIMEOUT
if st != ERROR: return OK
else:           return ERROR
票数 1
EN

Stack Overflow用户

发布于 2013-03-22 21:28:11

此方法允许您分别控制为每行收集所有数据的超时,以及等待其他行的不同超时。

代码语言:javascript
复制
def serial_com(self, cmd):
    '''Serial communications: send a command; get a response'''

    # open serial port
    try:
        serial_port = serial.Serial(com_port, baudrate=115200, timeout=1)
    except serial.SerialException as e:
        print("could not open serial port '{}': {}".format(com_port, e))

    # write to serial port
    cmd += '\r'
    serial_port.write(cmd.encode('utf-8'))

    # read response from serial port
    lines = []
    while True:
        line = serial_port.readline()
        lines.append(line.decode('utf-8').rstrip())

        # wait for new data after each line
        timeout = time.time() + 0.1
        while not serial_port.inWaiting() and timeout > time.time():
            pass
        if not serial_port.inWaiting():
            break 

    #close the serial port
    serial_port.close()   
    return lines
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9649482

复制
相关文章

相似问题

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