Я борюсь с установлением связи с периферийным устройством через USB-порт на моем Linux здесь (fedora 20/64bit), и я, вероятно, пропускаю какой-то шаг:

Я подключаю устройство, правильно отображается порт /dev /ttyUSBx. Я использую python /pySerial do, чтобы управлять им, и вместо ответов, которые устройство должно дать мне, все, что я могу прочитать с последовательного порта, это один нулевой байт ("\x00") каждый раз, когда соединение сбрасывается.

Я пробовал разные адаптеры последовательного интерфейса к USB, разные последовательные кабели и даже разные периферийные устройства (и модели) на другом конце. С программами с закрытым исходным кодом на базе Windows, которые взаимодействуют с периферийным устройством, все, кажется, работает хорошо.

Вот типичный сеанс того, что я пытаюсь:

>>> import serial
>>> s = serial.Serial("/dev/ttyUSB0", timeout=.1)
>>> 
>>> s.flush()
>>> s.write("(&S)")
4
>>> s.read()
'\x00'
>>> 

(вместо «\x00» здесь я должен получить в качестве ответа строку длиной в несколько символов. (Устройство правильно отвечает на тот же протокол по TCP/IP).

Я пропустил какой-то шаг настройки последовательного порта? Вот мой setserial выход для него:

/dev/ttyUSB0, UART: unknown, Port: 0x0000, IRQ: 0, Flags: low_latency

И конфигурация Pyserial:

Serial<id=0x7f525c5daf10, open=True>(port='/dev/ttyUSB0', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=0.1, xonxoff=False, rtscts=False, dsrdtr=False)

(эти параметры те же, что показаны на последовательном порте, настроенном в Windows, где работает устройство, - но на время ожидания)

1 ответ1

1

Исправлено - я должен был уточнить у поставщика устройства - и дело в настройках устройства по протоколу - нужно использовать последовательный порт с активным DTR и бездействующим RTS - это может быть очевидной попыткой для одного используемого с аппаратной стороны, но не так для разработчиков, привыкших к кодированию более высокого уровня.

Меня обманул тот факт, что из-за небольшой документации о том, что к чему, я ошибочно принял параметры rtsdtr и rtscts объекта PySerial Serial в Python с фактической настройкой выводов DTR и RTS - и изменение этих двух значений ничего не дало.

Вызов методов

serial_.setDTR(True)
serial_.setRTS(False)  

это то, что на самом деле устанавливает контакты на порт и делает возможной связь с этим устройством.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .