使用Ruby读取串行端口

时间:2011-06-15 10:50:50

标签: ruby serial-port

我正在尝试使用ruby对串口进行简单的读写操作。

这是我到目前为止的代码。我正在使用serialport gem。

require 'rubygems'
require 'serialport'

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

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

但是脚本在运行时会挂起。

5 个答案:

答案 0 :(得分:9)

我遇到了问题。这是因为使用ser.read告诉Ruby永远继续阅读,Ruby永远不会停止阅读,从而挂起脚本。解决方案是只读取特定数量的字符。

例如:

ser.readline(5)

答案 1 :(得分:4)

要回应user968243所说的内容,该ser.read呼叫将等待EOF。如果您的设备没有发送EOF,您将永远等待。您只能按照建议阅读一定数量的字符。

您的设备可能会以一行结束字符结束每个回复。尝试阅读下一个回车:

response = ser.readline("\r")
response.chomp!
print "#{response}\n"

答案 2 :(得分:2)

我遇到了同样的问题并找到了解决方案。使用Ruby IO方法readlines。

puts ser.readlines

答案 3 :(得分:1)

也许你的设备正在等待一些输入。检查此答案,看看是否有帮助:https://stackoverflow.com/a/10534407/1006863

答案 4 :(得分:1)

尝试设置串口的#read_timeout值。请注意,使用#write_timeout值可以对写入操作执行相同的操作。