Я пытаюсь записывать команды и считывать ответы через последовательный порт (RS232) лабораторного насоса. У меня помпа подключена к компьютеру через адаптер USB-последовательный порт, и я могу нормально отправлять команды, но мне трудно прочитать все строки ответа помпы.
Я отправляю команду
ser.write(b'ver\r\n')
на который насос должен ответить номером версии прошивки, за которым следует символ, обозначающий его состояние (остановлено (:), перекачивание (>), остановлено (*)); Я читаю ответ в PySerial со следующим кодом:
time.sleep(1)
while True:
line = ser.readline()
print(line)
Я отслеживаю контакт TX на порту помпы с помощью осциллографа и использую функцию автоматического декодирования; область показывает это как ответ:
CR LF SP SP 1 1 . 0 6 2 CR LF CR LF :
тогда как мой скрипт Python читает ответ как
b'\r\n'
b' 11.062\r\n'
b'\r\n'
Очевидно, что двоеточие в конце не читается, поскольку оно идет после символов CR LF, и я считаю, что насос отправляет символы EoL в начале строки, т. е. то, что мне следует читать, это
b'\r\n 11.062'
b'\r\n'
b'\r\n:'
Есть ли способ заставить PySerial искать символы EoL в начальных строках или заставить его продолжать чтение порта, даже если символы EoL отсутствуют?Я не особо разбираюсь в последовательной связи, поэтому прошу простить за наивность.
Полный сценарий см. ниже:
import time
import serial
import traceback
print('Libraries imported')
# configure the serial connections
ser = serial.Serial(
port='COM12',
baudrate=9600,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_TWO,
bytesize=serial.EIGHTBITS
)
ser.isOpen()
try:
print('Querying...')
#\r is the CR (carriage return) character
#\n is the LF (line feed) character
#'b' makes it a bytearray (required type of serial.Serial.write() argument)
ser.write(b'ver\r\n')
time.sleep(1)
while True:
line = ser.readline()
print(line)
except Exception:
traceback.print_exc()
while True:
entry = input("Press x to close terminal: ")
if entry == 'x':
break
else:
continue
Подробнее здесь: https://stackoverflow.com/questions/790 ... a-pyserial
Разрывы строк (CRLF) в начале строки, считанной из последовательного порта через PySerial ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Разрывы строк (CRLF) в начале строки, считанной из последовательного порта через PySerial
Anonymous » » в форуме Python - 0 Ответы
- 22 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Неспособность получить ответ от последовательного порта с помощью Pyserial
Anonymous » » в форуме Python - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-
-
-
PySerial ждет символа «#» для печати вывода с последовательного USB-устройства
Anonymous » » в форуме Python - 0 Ответы
- 19 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Pyserial ожидание «#» символа печатает вывод с USB -последовательного устройства
Anonymous » » в форуме Python - 0 Ответы
- 5 Просмотры
-
Последнее сообщение Anonymous
-