Ruby serialport随机错过字节

时间:2011-04-29 23:08:11

标签: ruby serial-port

有人使用serialport库注意到它或仅仅是我?我发现(很少)人处于相同的情况但我没有解决方案。

以下是我使用ruby serialport获得的一个示例:

ff d8 ff e0 00 4a 46 49 46 00 01 02 03 04 05 06 07 08 09 0a ff db 00 43 00 10 0c 0c 0e 0c 0a 10 0e 0e 0e 12 12 10 14 18 28 1a 18 16 16 18 32 24 26 1e 28 3a 34 3e 3c 3a 34 38 38 40 48 5c 4e 40 44 58 46 38 38 50 6e 52 58 60 62 68 68 68 3e 4e 72 7a 70 64 78 5c 66 68 64 ff db 00 43 01 12 12 12 16 16 16 30 1a 1a 30 64 42 38 42 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 36 00

这是我用gtkterm同时获得的一个例子!

ff d8 ff e0 00 11 4a 46 49 46 00 01 02 03 04 05 06 07 08 09 0a ff db 00 43 00 10 0c 0c 0e 0c 0a 10 0e 0e 0e 12 12 10 14 18 28 1a 18 16 16 18 32 24 26 1e 28 3a 34 3e 3c 3a 34 38 38 40 48 5c 4e 40 44 58 46 38 38 50 6e 52 58 60 62 68 68 68 3e 4e 72 7a 70 64 78 5c 66 68 64 ff db 00 43 01 12 12 12 16 16 16 30 1a 1a 30 64 42 38 42 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 36 00

我正在使用FTDI突破和带有uart接口的设备。它似乎是随机的:(它是我用“sudo gem install serialport”安装的serialport-1.0.4。

谢谢!

2 个答案:

答案 0 :(得分:0)

不确定您是否在研究中偶然发现了这一点,但是本文提到修改了错误的serialport.c:Ruby, Ruby-SerialPort and the missing bytes

以下是链接中的文字,以防万一:

  

那么我怎么做才能使它与ruby-serialport一起工作?我做了一个小   更改为serialport.c文件:

--- ruby-serialport-0.6/serialport.c    2003-02-13 20:55:48.000000000 +0100
+++ ruby-serialport-0.6-new/serialport.c        2006-11-22 17:04:37.000000000 +0100
@@ -608,7 +608,7 @@ static VALUE sp_create(class, _port)
   break;
   }
-  fd = open(port, O_RDWR | O_NOCTTY | O_NDELAY);
+  fd = open(port, O_RDWR | O_NOCTTY | O_NDELAY | O_NONBLOCK);
   if (fd == -1)
   rb_sys_fail(port);
   if (!isatty(fd)) {

答案 1 :(得分:0)

我有这个完全相同的问题 - 始终缺少相同的字节。我把它缩小到0x110x13,我注意到这也是你所缺少的。

问题是这些ASCII字符用于软件流控制。 SerialPort实例默认启用软件流控制,用于过滤掉这些字节。您必须手动禁用它:

    @serial = SerialPort.new(port, :baudrate => baud)
    @serial.flow_control = SerialPort::NONE