Найти - Пользователи
Полная версия: Помогите разобраться с pyserial
Начало » Python для новичков » Помогите разобраться с pyserial
1 2
staxbel
Всем доброго дня. Начал изучать Python и решил сразу пытаться сделать что-то полезное. Имеется прибор, работающий через порт rs232. У прибора есть свой id, при отправке id в порт, он отвечает данными. Отправить у меня получается, а вот получить ответ - нет.
 import time
import serial
ser = serial.Serial(
    port='\\\\.\\COM4',
    baudrate=9600,
    parity=serial.PARITY_ODD,
    stopbits=serial.STOPBITS_ONE,
    bytesize=serial.EIGHTBITS
)
if ser.isOpen():
    ser.close()
ser.open()
ser.isOpen()
ser.write("01\r".encode())
out = ''
# let's wait one second before reading output (let's give device time to answer)
time.sleep(1)
while ser.inWaiting() > 0:
    out += ser.read(64)
if out != '':
    print(">>" + out)
ser.close()
k=input("press close to exit")
Подскажите пожалуйста, что не так?
PEHDOM
staxbel
Отправить у меня получается, а вот получить ответ - нет.
в смсле? вы не получаете ничего или получаете но непонятно что.
я давно не работал с pyserial, так что по памяти:
time.sleep(1)ИМХО там лишнее, не нужно ждать секунду, нужно сразу читать.
read(64) без таймаута это дичь, read(64) блокирующая функция, она будет ждать пока не не прочитает свои 64 байта, если ничего не поступает или поступило меньше она будет ждать вечно.
while ser.inWaiting() и ser.read(64) не самый лучший вариант, Если вы знаете, что ваш вход всегда правильно завершен символами EOL, лучше использовать ser.readline()
if out != '' никогда не сработает будет срабатывать всегда потому как вам приходят байты а вы стравниваете с строкой
 >>> b''==''
False
Ну и общий совет не брезгуйте документацией https://pyserial.readthedocs.io/en/latest/index.html
там приведены вполне себе рабочие и простые примеры.


py.user.next
Попробуй такой код
  
import serial
 
ser = serial.Serial('COM4')
ser.write(b'01\r')
out = ser.read(10)
print(out)
ser.close()
staxbel
PEHDOM
У меня должны вернуться данные размером 22 байта в ASCII, read(64) менял на 22, никаких данных вообще не приходит.
staxbel
py.user.next
Попробуй такой код
Так ничего не происходит вообще, такое ощущение что ждет данные и все.
AD0DE412
staxbel
такое ощущение что ждет данные и
и их не отправляют?
staxbel
AD0DE412
Вот хотел посмотреть, так закончился триал Advanced Serial Port Monitor :-( может подскажите чем еще можно мониторить com порт?
doza_and
staxbel
чем еще можно мониторить com порт?
:) А разьве его мониторят чемто кроме осциллографа?
staxbel
doza_and
Вы поняли о чем я. :-)
PEHDOM
staxbel putty умеет сом порты, попробуйте для начала через нее чтобы посмотреть передается ли вообще чтото. А так вам и бесплатной версии Serial Port Monitor должно хватить.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB