PySerial write не работает должным образом - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь записать команды на устройство и прочитать выходное сообщение, используя последовательный порт RS232.Когда я пытаюсь написать команду, она работает изначально.Иногда он посылает неправильные команды.Например, если я отправляю "PC:EXEC:MY_CMD", он записывает на устройство что-то вроде "PCPC:EXEC:MY_CMD" или "PC:EXEPC:EXEC:MY_CMD".Вот код:

import serial
import time

ser = serial.Serial()
ser.port = 'COM11'
ser.baudrate = 115200
ser.bytesize = serial.EIGHTBITS
ser.parity = serial.PARITY_NONE
ser.stopbits = serial.STOPBITS_ONE
ser.timeout = 1

time.sleep(1)
ser.open()

if ser.is_open:
    cmd = 'PC:EXEC:MY_CMD' + '\r\n'

if ser.in_waiting == 0:
    time.sleep(5)
    ser.write(cmd.encode())

if ser.in_waiting > 0:
    msg = ser.read(ser.in_waiting)
    print (msg.decode())

ser.flush()

ser.close()

У меня нет проблем с чтением последовательного выхода.

Когда я пытался отправлять команды с использованием последовательных терминалов, таких как терма или замазка, все работало нормально.Пожалуйста, помогите мне решить проблему.

1 Ответ

0 голосов
/ 26 февраля 2019

Я решил это самостоятельно.

Когда я пытаюсь отправить свою команду, python очень быстро записывает ее на устройство.Поэтому я добавил цикл для записи байтов один за другим с небольшой задержкой, и он отлично работает для меня.Вот отредактированная часть:

if ser.in_waiting == 0:
    for i in cmd:
        ser.write(i.encode())
        time.sleep(0.1)
...