2011-04-29 45 views
2

有人使用串行端口庫注意到,或者它只是我?我發現(很)很少有人處於相同的情況,但我沒有找到解決辦法。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 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 0℃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 36 00

我正在使用FTDI中斷和具有uart接口的設備。這似乎是隨機:(它的SerialPort-1.0.4,我用「sudo的創業板安裝的SerialPort」。安裝

謝謝!

回答

0

不知道,如果你在你的研究,偶然發現了這一點,但這篇文章提到了修改serialport.c,修復的bug:Ruby, Ruby-SerialPort and the missing bytes

下面是在情況下,鏈接文本以往任何時候都下降:

所以我做了什麼,使之與紅寶石的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)) { 
+0

好的,謝謝,讓我知道如果有人找到一種方法來避免這種情況。無論如何,我會稍後嘗試並給出結果。 – Emilien 2011-04-30 23:47:31

+0

Yay它的工作!事實上,這並沒有多大的痛苦:你只需要: – Emilien 2011-05-02 14:29:47

+0

$ unpack serialport $做修改 $ gem build serialport.gemspec $ gem install ./serialport.gem 就這樣!我不明白的是,它只有在我重新啓動計算機後才起作用,這意味着在安裝gem後可能會丟失一些東西。如果您知道,請留下評論! 感謝您的幫助 – Emilien 2011-05-02 14:36:09

0

我有這個確切同樣的問題 - 缺少一致的相同字節。我把它縮小到0x110x13,我注意到這也是你缺少的。

問題是這些ASCII字符用於軟件流量控制。 SerialPort實例在默認情況下啓用了軟件流量控制,它可以過濾掉這些字節。你必須手動禁用它:

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