2016-11-15 2 views
1

Я пытаюсь установить связь с моим модулем с помощью файла Python. Я создаю точку прерывания линии, чтобы быть уверенным, что у меня будет прерывание при записи в модуле.Как читать из порта связи?

Но у меня нет никаких результатов для чтения из порта. Мне нужно, чтобы отобразить все данные в моей cmd.exe и что уже отображаемый на COM4, ​​используя мой питон файл

import serial 
ser = serial.Serial(
    port='COM4',\ 
    baudrate= 230400,\ 
    parity=serial.PARITY_NONE,\ 
    stopbits=serial.STOPBITS_ONE,\ 
    bytesize=serial.EIGHTBITS,\ 
     timeout=0) # open serial port 
print(ser.name)   # check which port was really used 
ser.write(b'hello')  # write a string 
str=ser.readline() 
print str 
ser.close()    # close ports 

Это означает, что эти две линии:

str=ser.readline() 
print str 

не дают мне никаких результатов ,

+0

С какого устройства вы пытаетесь читать? Это ОС Windows (я так думаю)? Если вы используете метод ser.readline(), он будет ждать, пока не будет введена разделительная линия ('\ n'). Используйте метод ser.read(). Кроме того, вам не нужно использовать обратную косую черту (\) в команде * ser *. – Jalo

+2

['' 'str'''] (https://docs.python.org/3/library/stdtypes.html#str) является типом/классом Python - присваивание чего-то еще этому имени может привести вас к заблуждению позже, если вы пытаетесь использовать '' 'str''', и это уже не тип данных/класс, а просто имя переменной. – wwii

+0

Уважаемый Jalo, \t Мне нужно отобразить все данные, уже подключенные к COM4 в моем cmd.exe, используя мой файл python. Я использую Windows, мой UART включен в FPGA-устройство. – user7161303

ответ

1

Скорее всего, происходит то, что ser.readline() ждет символа новой строки (\n), который будет принят на последовательном порту, но не получает его, чтобы он зависал. Если ваш последовательный порт настроен на эхо, что вы отправляете его, вы, вероятно, необходимо включить символ новой строки символ с данными, вы отправляете его, т.е.

ser.write(b'Hello\n') 

или, если последовательное устройство ожидает новой строки в стиле Windows:

ser.write(b'Hello\r\n') 

Если вы stilll не получает никакого ответа, вы можете попробовать отладки после ser.write заявления с

while True: 
    print(ser.read(1).decode()) 

, чтобы отобразить каждый байт, как она взаимодействует mes back Примечание: используйте только вышеприведенное для отладки, оно будет зависать, пока устройство не будет закрыто за пределами вашего сценария.

Если вы ничего не видите, возможно, что-то более фундаментальное, например, установка последовательного порта. Я заметил, что ваша скорость в бодах не standard baud rate, вы уверены, что это верно?

Сторона примечания: нет необходимости в обратном слешках после каждого аргумента в вашем объявлении serial.Serial, тот факт, что текст заключен в круглые скобки, делает код действительным. Кроме того, вы подаете аргументы по умолчанию для большинства параметров, поэтому нет необходимости включать их вообще.

Другой стороне: работа с устройствами ввода/вывода, которые блокируют на read с может быть сложно, и это может быть полезным создание читатель поток, который проталкивает данные, полученные в queue.Queue объект, как то, что описано here. Или, если вы чувствуете себя взволнованными, попробуйте использовать модуль asyncio.

+0

Мне нужно отобразить все данные, уже подключенные к COM4 в моем cmd.exe, используя мой файл python – user7161303

+0

Дорогой @Bill, я пробую то, что вы просите меня сделать, Не понимаю это примечание: Примечание: используйте только вышеприведенное для отладки, оно будет зависать, пока устройство не будет закрыто вне вашего скрипта. – user7161303

+0

импорт серийных серы = serial.Serial ( порта = 'COM4', \ бод = 230400) # открыта последовательный порт печать (ser.name) # проверки, какой порт был действительно используется ser.write (b'hello») # записать строку # Str = ser.readline() в то время как True: печати (ser.read (1) .decode()) ser.close() # закрывать порты – user7161303

Смежные вопросы