Чтение из последовательного порта с Ruby - PullRequest
10 голосов
/ 15 июня 2011

Я пытаюсь использовать ruby, чтобы выполнить простую операцию чтения + записи на последовательный порт.

Это код, который я получил до сих пор. Я использую камень serialport.

require 'rubygems'
require 'serialport'

ser = SerialPort.new("/dev/ttyACM0", 9600, 8, 1, SerialPort::NONE)

ser.write "ab\r\n"
puts ser.read

Но скрипт зависает при запуске.

Ответы [ 5 ]

9 голосов
/ 06 ноября 2012

У меня была проблема с. Это потому, что использование ser.read говорит Ruby о том, что чтение должно продолжаться вечно, а Ruby никогда не прекращает чтение и, таким образом, вешает скрипт. Решение состоит в том, чтобы читать только определенное количество символов.

Так, например:

ser.readline(5)
4 голосов
/ 24 февраля 2013

Чтобы повторить то, что сказал пользователь 968243, этот вызов ser.read будет ожидать EOF.Если ваше устройство не отправляет EOF, вы будете ждать вечно.Вы можете прочитать только определенное количество символов, как предлагается.

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

response = ser.readline("\r")
response.chomp!
print "#{response}\n"
2 голосов
/ 27 марта 2013

Я столкнулся с этой же проблемой и нашел решение.Используйте метод Ruby IO readlines.

puts ser.readlines
1 голос
/ 13 марта 2015

Попробуйте установить значение #read_timeout для последовательного порта. Обратите внимание, что то же самое можно сделать для операции записи, используя значение #write_timeout.

1 голос
/ 10 мая 2012

Возможно, ваше устройство ожидает какой-либо ввод. Проверьте этот ответ и посмотрите, поможет ли он: https://stackoverflow.com/a/10534407/1006863

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...