Повтор тайм-аута, который я реализовал, чтобы читать каждый раз через 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()