Разрывы строк (CRLF) в начале строки, считанной из последовательного порта через PySerialPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Разрывы строк (CRLF) в начале строки, считанной из последовательного порта через PySerial

Сообщение Anonymous »

Я пытаюсь записывать команды и считывать ответы через последовательный порт (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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Разрывы строк (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
  • Ошибка Pyserial «Доступ запрещен» при использовании общего COM-порта
    Anonymous » » в форуме Python
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»