Я подключаюсь к устройству, используя удар кода в MacOS, и из 100 раз этот код будет устанавливать соединение только 1 или 2 раза и не отвечает (поскольку нет таймаута) времена.Чтение последовательного выхода из Pyserial не работает надежно
ser = serial.Serial(port="/dev/xyz",timeout = None, baudrate=115200, parity = serial.PARITY_NONE, bytesize = serial.EIGHTBITS, stopbits = serial.STOPBITS_ONE)
def exitSer(ser):
print("Closing")
ser.close()
atexit.register(exitSer, ser)
if ser.is_open:
time.sleep(2)
while(1):
print(ser.readline().decode("utf-8"))
Не могли бы вы сказать мне, как использовать такие программы, как Fcntl и т.д., чтобы найти, если этот порт является полностью бесплатным и доступным для использования и как установить флаги TTY порта, чтобы освободить после создания порта бесплатно принудительно.
Как только это работает, я должен запустить эту многопоточность, где в каждом потоке работают разные устройства, ожидающие вывода в строках. Любые предложения для этого на всякий случай, если это работает.
Другое приложение, к которому вы обращаетесь, имеет разную скорость и использует 1 стоповый бит. Не могли бы вы опубликовать код, который вы используете для чтения данных из последовательного порта? –
Просто обновил вопрос. Спасибо за ответ. –
Я стараюсь избегать использования readline() на последовательных устройствах, поскольку он сначала пишет что-то, когда вы получаете новый символ строки. Поэтому, если что-то еще получено, вы не увидите этого. Вместо этого вы можете использовать что-то вроде: sys.stdout.write (ser.read (1)) sys.stdout.flush() –