Не удалось повторить операцию записи из pyserial после истечения времени ожидания. Просто повторите попытку чтения. - PullRequest
0 голосов
/ 28 марта 2019

Повтор тайм-аута, который я реализовал, чтобы читать каждый раз через 5 секунд, но он не выполняет то, что я ожидаю.Я просто тайм-ауты от операции чтения в последовательном и линейном и продолжаю ждать чтения.На самом деле, я хочу полностью выйти и написать еще раз и дождаться чтения.

Может кто-нибудь сказать мне, как повторить попытку записи и чтения три раза и выйти из операции?

timeout = x: установить тайм-аут равным x секундам (с плавающей запятой). Возвращается немедленно, когда запрошенное количество байтов доступно, в противном случае дождитесь истечения времени ожидания и верните все байты, которые были получены до тех пор.

Myлогика повторов неверна.


Мой вывод: я хочу повторить попытку записи и чтения три раза и выйти из операций, но он просто повторяет операцию чтения, а не записи.

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()
...