使用 Ruby 从串行端口读取数据
我正在尝试使用 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
但脚本运行时会挂起。
I'm trying to use ruby to do a simple read + write operation to a serial port.
This is the code I've got so far. I'm using the serialport
gem.
require 'rubygems'
require 'serialport'
ser = SerialPort.new("/dev/ttyACM0", 9600, 8, 1, SerialPort::NONE)
ser.write "ab\r\n"
puts ser.read
But the script hangs when it is run.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我有问题。这是因为使用 ser.read 告诉 Ruby 永远继续读取,而 Ruby 永远不会停止读取,从而挂起脚本。解决方案是仅读取特定数量的字符。
例如:
I had the problem to. It's because using ser.read tells Ruby to keep reading forever and Ruby never stops reading and thus hangs the script. The solution is to only read a particular amount of characters.
So for example:
为了回应 user968243 所说的,该 ser.read 调用将等待 EOF。如果您的设备没有发送 EOF,您将永远等待。您只能按照建议读取一定数量的字符。
您的设备可能会以行尾字符结束每个响应。尝试读取到下一个回车符:
To echo what user968243 said, that ser.read call is going to wait for EOF. If your device is not sending EOF, you will wait forever. You can read only a certain number of characters as suggested.
Your device may be ending every response with an end of line character. Try reading up to the next carriage return:
我遇到了同样的问题并找到了解决方案。使用 Ruby IO 方法 readlines。
I ran into this same problem and found a solution. Use the Ruby IO method readlines.
也许您的设备正在等待一些输入。检查此答案并查看是否有帮助:https://stackoverflow.com/a/10534407/1006863
Maybe your device is waiting for some input. Check this answer and see if it helps: https://stackoverflow.com/a/10534407/1006863
尝试设置串行端口的#read_timeout 值。请注意,使用 #write_timeout 值可以对写入操作执行相同的操作。
Try setting the #read_timeout value for the serial port. Note that the same thing can be done for a write operation using the #write_timeout value.