Я использую Python 3.x и библиотеку pyserial для того, чтобы пытаться читать с последовательного порта и записывать в него.
Как это работает, так что есть последовательный тайм-аут, который определен в инициализации, но есть другой тайм-аут, который является тайм-аутом процесса, который передается как параметр в функцию для тайм-аута, если в течение определенного времени, если мы не получить любые данные из последовательного порта.
Кажется, проблема в этом тайм-ауте процесса , который не работает, когда я использую time.process_time () , но работает, если я использую время .clock () вместо. Поскольку time.clock () в апреле будет объявлено устаревшим, какое решение лучше для этой ситуации и почему time.process_time () не работает должным образом.
class Uart:
uart = serial.Serial()
process_timeout = 0
file_name = 'results.txt'
result_file = open(file_name,'w')
def __init__(self,port_name):
print("init called")
self.uart.baudrate= 115200
self.uart.port = port_name # COM9 for NP and COM8 for AP
self.uart.parity= serial.PARITY_NONE
self.uart.bytesize= serial.EIGHTBITS
self.uart.stopbits= serial.STOPBITS_ONE
self.uart.timeout = 10
#reads data on Uart
def start_uart_read(self,timeout):
self.process_timeout = timeout
start_comm = 'a'
start_time =time.process_time()
decoded_data=''
time_diff=0
if(self.uart.is_open!=1):
self.uart.open()
print(self.uart.is_open)
while (start_comm!='*') and (time_diff<timeout):
time_diff=time.process_time() -start_time
data= self.uart.read(size=1)
if(data):
decoded_data= data.decode("utf-8")
if (decoded_data=='*'):
start_comm='*'
if(time.process_time() -start_time>timeout):
self.result_file.write('StartupTimeout\n')
# print("timeout called")
else:
self.result_file.write('SuccessfulStartup\n')