отправить строку в сериал - PullRequest
0 голосов
/ 10 ноября 2009

Buongiorno, Я пытаюсь отправить простую строку в последовательный порт, чтобы дать команду устройству для измерения шума.
Струны очень просты:
«M 1» = прибор включен
«M 2» = прибор выключен
«М 3» = начать меру
«М 4» = остановить измерение

Я нашел эту программу:

import serial

ser = serial.Serial(0)  #Seleziona la porta seriale COM4
ser.baudrate = 9600 #Imposta il baudrate a 9600bps

ser.open() #apre la porta com
ser.close() 
#verifica se la porta e' aperta
if ser.isOpen():
   com_num = ser.portstr
   print ("Porta " + com_num + " aperta")
   #invia il comando alla seriale
   buffer = "M 3"
   ser.write(buffer)     
   #Loop d'attesa caratteri
   num = 0
   while num == 0:
       num = ser.inWaiting()
   #scarica il buffer della seriale
   buffer = ser.read(num)
   print ("Dati ricevuti dalla seriale:")
   print buffer
   ser.close()             #chiude la porta
else:
   print ("Porta seriale gia' in uso o inesistente") 
s = raw_input("digita INVIA per uscire")

ИСПОЛЬЗОВАНИЕ LINUX
Программа в порядке, и у меня есть только некоторые проблемы с типом строки. На самом деле мне пришлось вставить возврат каретки, но я не могу этого сделать.
Я сказал, что с программой все в порядке, потому что когда я сделал свое первое соединение, прибор выключается и включается, а на видео я читаю «Porta / dev / ttyS = aperta», что означает «открыть». Но это подходит для любого вида строки, которую я отправляю. На самом деле это похоже на «инициализацию» порта, а не на самом деле связь.
Тогда мне не удается правильно отправить строку, может быть из-за проблемы возврата каретки.

ИСПОЛЬЗОВАНИЕ ОКНА
Я не могу открыть порт, у меня есть ошибка Отказ в доступе к порту, это ошибка:
Traceback (most recent call last):<br> File "C:/d.py", line 9, in <br> ser.open() #apre la porta com<br> File "C:\Programmi\Python26\lib\site-packages\serial\serialwin32.py", line 53, in open raise SerialException("could not open port %s: %s" % (self.portstr, ctypes.WinError())) serial.serialutil.SerialException: could not open port COM1: [Error 5] Accesso negato.

Можете ли вы помочь мне:
1. Управлять запуском программы под windows
2. Удалось точно указать строку с возвратом каретки ???

Спасибо тебе большое.
Stefano

Ответы [ 2 ]

1 голос
/ 10 ноября 2009

К сожалению, это не работает.
В прошлом я уже пытался использовать \ r \ n с командой echo в linux через bash ... но ничего.
Сейчас я пытаюсь с Python, но ничего больше. Может быть интересно, что инструмент, когда я даю строку таким образом:

buffer = "M 3\r"
или
buffer = "M 3\r\n"

дает мне этот ответ: @

Вот и все ...
Я не знаю.
Другое дело: когда я попробовал на языке bash, инструмент начинает меру командой:
echo "M 3 " > /dev/ttyS0
то есть с бланком после 3.
Очевидно, что другая команда не работает с этим странным бланком ...

Большое спасибо!

1 голос
/ 10 ноября 2009

Чтобы добавить возврат каретки, просто добавьте \r к вашей строке, или, возможно, может потребоваться возврат каретки / перевод строки \r\n, который некоторые системы используют для обозначения конца строки. Конечно, может потребоваться только перевод строки. В этом случае вы просто используете \n.

buffer = "M 3\r"

или

buffer = "M 3\r\n"

или

buffer = "M 3\n"

Вы можете найти документацию pySerial , которая поможет вам решить проблемы с Windows.

...