超时后无法从pyserial重试写入操作。它只是重试读取操作

时间:2019-03-28 08:58:44

标签: python-3.x serial-port pyserial

我实现了5秒后每次读取的超时重试,但是没有达到我的期望。我只是在串行和线路读取操作中超时并一直等待读取。实际上,我想完全退出并再次写入并等待读取。

有人可以告诉我如何重试三次读写并退出操作吗?

  

timeout = x:将超时设置为x秒(允许浮动)返回   当请求的字节数可用时,立即   否则,请等待直到超时到期并返回所有   到那时为止。

我的重试逻辑不正确。


我的输出是:我想重试写入和读取3次并退出操作,但它只是在读取操作而不是在写入操作时重试。

python3 test.py 
rc:0
Writing b'Z\xa5\x01 =\xff\x01\x00\xa1\xfe'
b''
b''
b''
b''

这是我的实现。

#!/usr/bin/env python3

import os
import sys
import glob
import serial
import time
import binascii

uart1 = '/dev/cu.usbserial-AK067XIB'
TEST_END=b'test_done\n'

def serial_ops():
    retry_counter = 0
    try:
      device = serial.Serial(uart1, baudrate=115200, bytesize=8, parity='N', stopbits=1,
                  timeout=5, xonxoff=False, rtscts=False, dsrdtr=False)

      #retry logic, exit after three attempts
      retry_counter += 1
      print('rc:%s' % retry_counter)
      if retry_counter == 3:
          print("I am exciting after three attempts no answer!")
          device.flsuh()
          device.close()
          sys.exit(1)

    except serial.SerialException as e:
      print("Not able to open port")

    except TypeError as e:
      device.flush()
      device.close()
      return None

    device.reset_output_buffer()

    packet = bytearray()
    packet = b'\x5A\xA5\x01\x20\x3D\xFF\x01\x00\xA1\xFE'
    device.write(packet)
    print("Writing %s" % packet)
    time.sleep(0.5)

    device.reset_input_buffer()
    run = True
    while run:
            data=device.readline()
            print(data)
            if (data == TEST_END):
                print("TEST DONE *****")
                run = False
                device.flush()
                device.close()

serial_ops()

0 个答案:

没有答案