Хобрук: Ваш путь к мастерству в программировании

питон и сериал. как отправить сообщение и получить ответ

Я должен отправить ZANE:1:00004:XX_X.X_XXXX_000XX:\r\nчерез последовательную связь с python.

вот мой код:

import serial
ser = serial.Serial('/dev/cu.usbserial-A901HOQC')
ser.baudrate = 57600

msg = 'ZANE:1:00004:XX_X.X_XXXX_000XX:\r\n'

Если я напишу:

>>> ser.write(msg)

ответ будет 33, что является длиной в байтах сообщения, которое я отправляю.

Как я могу получить ответ? Подключенное устройство ответит сразу после того, как получит сообщение, но если я наберу

>>> ser.write(msg); ser.readline()

результатом будет то, что readline вообще не получит никакого сообщения...

Любые идеи?


Ответы:


1

Возможно, ваше устройство не завершает свой ответ символом новой строки. метод .readline() ожидает строку, заканчивающуюся новой строкой. См. здесь: http://pyserial.sourceforge.net/shortintro.html#readline для больше информации.

попробуйте установить тайм-аут на вашем последовательном соединении

ser.timeout = 10

и замените ser.readline() на ser.read(n), где n — количество символов, которые вы хотите прочитать. ser.read(100) попытается прочитать 100 символов. Если 100 символов не прибудут в течение 10 секунд, он сдастся и вернет все, что получил.

22.05.2013

2

Я полагаю, что в более ранних ответах не было понятно, что вы используете один и тот же порт для записи и чтения.

У меня такая же проблема, и я решил ее с помощью функции сна. В основном:

import serial
from time import sleep
ser = serial.Serial('/dev/cu.usbserial-A901HOQC', timeout=1)
ser.baudrate = 57600

msg = 'ZANE:1:00004:XX_X.X_XXXX_000XX:\r\n'
ser.write(msg)
sleep(0.5)
ser.readline()

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

15.04.2015

3

Чтобы прочитать, вам нужно сначала открыть порт прослушивания (с тайм-аутом), например:

ser = serial.Serial('/dev/cu.usbserial-A901HOQC', 19200, timeout=5)
x = ser.read()          # read one byte
s = ser.read(10)        # read up to ten bytes (timeout)
line = ser.readline()   # read a '\n' terminated line
ser.close()

Подробнее см. здесь.

22.05.2013

4

Здесь важны две мысли. Первая - это тайм-аут, а вторая - символ EOL. Если вы собираетесь использовать тайм-аут на стороне приемника, тогда не нужно EOL на стороне передатчика. если вы собираетесь использовать символ EOL на стороне передатчика (/n,/r), тогда нет необходимости устанавливать тайм-аут на стороне приемника. Пример: serialport=serial.serial(port,baud,timeout) если вы собираетесь использовать тайм-аут входящего сигнала через последовательный порт(Пример: привет как дела? приятно познакомиться!!) Здесь новая строка cherector не отвечает ну так что можешь оставить.

Пример: serialport=Serial.serial(port,baud) если вы не собираетесь устанавливать тайм-аут в последовательном порту, тогда вам следует использовать символ конца строки (/n,/r) в передатчике. Примечание. Второй способ более эффективен, чем первый способ

14.03.2019
Новые материалы

Учебные заметки JavaScript Object Oriented Labs
Вот моя седьмая неделя обучения программированию. После ruby ​​и его фреймворка rails я начал изучать самый популярный язык интерфейса — javascript. В отличие от ruby, javascript — это более..

Разбор строк запроса в vue.js
Иногда вам нужно получить данные из строк запроса, в этой статье показано, как это сделать. В жизни каждого дизайнера/разработчика наступает момент, когда им необходимо беспрепятственно..

Предсказание моей следующей любимой книги 📚 Благодаря данным Goodreads и машинному обучению 👨‍💻
«Если вы не любите читать, значит, вы не нашли нужную книгу». - J.K. Роулинг Эта статья сильно отличается от тех, к которым вы, возможно, привыкли . Мне очень понравилось поработать над..

Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

Как настроить Selenium в проекте Angular
Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

Аргументы прогрессивного улучшения почти всегда упускают суть
В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

Введение в Джанго Фреймворк
Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..