Уведомления

Группа в Telegram: @pythonsu

#1 Март 14, 2021 10:22:17

staxbel
Зарегистрирован: 2021-03-13
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с pyserial

Всем доброго дня. Начал изучать 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")
Подскажите пожалуйста, что не так?

Офлайн

#2 Март 14, 2021 11:54:13

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Помогите разобраться с pyserial

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
там приведены вполне себе рабочие и простые примеры.




==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Март 14, 2021 12:03:41)

Офлайн

#3 Март 14, 2021 11:54:41

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9880
Репутация: +  853  -
Профиль   Отправить e-mail  

Помогите разобраться с pyserial

Попробуй такой код

  
import serial
 
ser = serial.Serial('COM4')
ser.write(b'01\r')
out = ser.read(10)
print(out)
ser.close()



Отредактировано py.user.next (Март 14, 2021 11:54:48)

Офлайн

#4 Март 14, 2021 12:07:11

staxbel
Зарегистрирован: 2021-03-13
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с pyserial

PEHDOM
У меня должны вернуться данные размером 22 байта в ASCII, read(64) менял на 22, никаких данных вообще не приходит.

Офлайн

#5 Март 14, 2021 12:07:28

staxbel
Зарегистрирован: 2021-03-13
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с pyserial

py.user.next
Попробуй такой код
Так ничего не происходит вообще, такое ощущение что ждет данные и все.

Отредактировано staxbel (Март 14, 2021 12:18:11)

Офлайн

#6 Март 14, 2021 12:36:11

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Помогите разобраться с pyserial

staxbel
такое ощущение что ждет данные и
и их не отправляют?



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Офлайн

#7 Март 14, 2021 12:39:44

staxbel
Зарегистрирован: 2021-03-13
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с pyserial

AD0DE412
Вот хотел посмотреть, так закончился триал Advanced Serial Port Monitor :-( может подскажите чем еще можно мониторить com порт?

Офлайн

#8 Март 14, 2021 12:58:39

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Помогите разобраться с pyserial

staxbel
чем еще можно мониторить com порт?
:) А разьве его мониторят чемто кроме осциллографа?



Офлайн

#9 Март 14, 2021 13:13:58

staxbel
Зарегистрирован: 2021-03-13
Сообщения: 48
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите разобраться с pyserial

doza_and
Вы поняли о чем я. :-)

Офлайн

#10 Март 14, 2021 13:59:07

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Помогите разобраться с pyserial

staxbel putty умеет сом порты, попробуйте для начала через нее чтобы посмотреть передается ли вообще чтото. А так вам и бесплатной версии Serial Port Monitor должно хватить.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Март 14, 2021 14:02:55)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version