Ruby SerialPort似乎没有初始化

Ruby SerialPort似乎没有初始化,ruby,Ruby,我正在使用Ruby 1.8.7 SerialPort gem,通过FTDI232 USB到串行转换器与AVR通信。我似乎在SerialPort初始化新的SerialPort时遇到问题 我发现,当我在Windows上打开PuTTY连接或在Linux上打开Minicom连接并以这种方式发送命令时,一切都正常工作 我还注意到,在关闭PuTTY/Minicom之后,我的代码运行良好。因此,我认为SerialPort gem初始化串行连接的方式有问题 有没有其他人遇到过这个问题,或者对如何解决这个问题有什

我正在使用Ruby 1.8.7 SerialPort gem,通过FTDI232 USB到串行转换器与AVR通信。我似乎在SerialPort初始化新的SerialPort时遇到问题

我发现,当我在Windows上打开PuTTY连接或在Linux上打开Minicom连接并以这种方式发送命令时,一切都正常工作

我还注意到,在关闭PuTTY/Minicom之后,我的代码运行良好。因此,我认为SerialPort gem初始化串行连接的方式有问题

有没有其他人遇到过这个问题,或者对如何解决这个问题有什么想法

编辑: 这是一个代码示例。 需要“rubygems” 需要“串行端口”

sp = SerialPort.new("COM5", 115200)
sp.print("A\r")
data = sp.readline("\r\n")
puts data
sp.close
此代码应打开一个连接并发送一个字符,指示需要从我的AVR获取的数据类型。然后,它等待数据传回,并将其打印到屏幕上


当我的设备最初连接时,代码只是挂起读取,但在停止脚本、打开PuTTY连接、关闭PuTTY连接后,脚本会完全按照预期执行。

在Windows中,一次只能有一个进程连接到串行端口。我不确定Linux

确保在代码中正确设置波特率


如果您仍然遇到问题,请发布一些非常简单的示例代码,以及预期行为和实际行为的描述。

在Windows中,一次只能有一个进程连接到串行端口。我不确定Linux

确保在代码中正确设置波特率


如果您仍然遇到问题,请发布一些非常简单的示例代码,以及预期行为和实际行为的描述。

我很确定我已经解决了问题。添加读取超时似乎已经解决了这个问题

sp = SerialPort.new("COM5", 115200)
sp.read_timeout = 1500

使用PuTTY/Minicom必须有一些设置方法,并在关闭后将其保留。

我确信我已经解决了我的问题。添加读取超时似乎已经解决了这个问题

sp = SerialPort.new("COM5", 115200)
sp.read_timeout = 1500

使用PuTTY/Minicom必须有一些设置方法,并在关闭后将其保留。

我在Linux debian 3.1.0-1-amd64上也遇到过同样的问题

该问题与ftdi_sio内核模块google中引入的一个bug有关,该bug用于修复USB ftdi驱动程序ftdi_sio.c中的损坏问题

我已经应用了补丁,请参见重建模块ftdi_sio.ko,现在问题已经解决

获取内核源代码linux-3.1.10.tar.bz2我的实际内核是3.1.0-1-amd64

应用补丁

如何在中重新编译模块示例

备份中的原始模块 /lib/modules/3.1.0-1-amd64/kernel/drivers/usb/serial/ftdi_sio.ko 换上新的

重新启动

一个快速而肮脏的解决方法是强制更改波特率,而不需要重新编译内核模块:


sp.

我在Linux debian 3.1.0-1-amd64上也遇到过同样的问题

该问题与ftdi_sio内核模块google中引入的一个bug有关,该bug用于修复USB ftdi驱动程序ftdi_sio.c中的损坏问题

我已经应用了补丁,请参见重建模块ftdi_sio.ko,现在问题已经解决

获取内核源代码linux-3.1.10.tar.bz2我的实际内核是3.1.0-1-amd64

应用补丁

如何在中重新编译模块示例

备份中的原始模块 /lib/modules/3.1.0-1-amd64/kernel/drivers/usb/serial/ftdi_sio.ko 换上新的

重新启动

一个快速而肮脏的解决方法是强制更改波特率,而不需要重新编译内核模块:


sp.

一次可能只有一个进程可以控制串行端口?我不会同时打开它们。如果我拔下电缆,然后重新连接,我的代码将无法工作。如果我使用PuTTY/Minicom打开一个连接,然后关闭连接,然后再次运行我的ruby代码,我的ruby代码将完全按照它应该的方式工作。抱歉,我重新阅读了我的帖子,理解了其中的混乱。也许一次只能有一个进程控制串行端口?我不会同时打开它们。如果我拔下电缆,然后重新连接,我的代码将无法工作。如果我使用PuTTY/Minicom打开一个连接,然后关闭连接,然后再次运行我的ruby代码,我的ruby代码将完全按照它应该的方式工作。很抱歉,我重新阅读了我的帖子,理解了其中的混乱。我并没有试图用多个进程来控制串行端口。如果我断开电缆,重新连接并运行Ruby代码,它将挂起。如果我停止我的代码,用PuTTY打开一个连接,关闭PuTTY连接,然后再次运行我的Ruby代码,我的Ruby代码完全按照它应该的方式工作。我还仔细检查了波特率是否设置正确。然后发布一些非常简单的示例代码,以及对预期行为和实际行为的描述。我添加了一些示例代码,如果您有机会看一下,我将不胜感激。
谢谢我不想用多个进程控制串行端口。如果我断开电缆,重新连接并运行Ruby代码,它将挂起。如果我停止我的代码,用PuTTY打开一个连接,关闭PuTTY连接,然后再次运行我的Ruby代码,我的Ruby代码完全按照它应该的方式工作。我还仔细检查了波特率是否设置正确。然后发布一些非常简单的示例代码,以及对预期行为和实际行为的描述。我添加了一些示例代码,如果您有机会看一下,我将不胜感激。谢谢