Рубиновый последовательный порт случайным образом пропускает байты - PullRequest
2 голосов
/ 30 апреля 2011

Кто-то, использующий библиотеку serialport, заметил это или это только я?Я нашел (очень) мало людей в такой же ситуации, но у меня не было решения.

Вот пример того, что я получаю с помощью ruby ​​serialport:

ff d8 ff e0 00 4a 46 49 4600 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 3840 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 6464 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 64 64 64 64 36 00

Вот пример того, что я получаю одновременно с gtkterm!

ff d8 ff e0 00 11 4a 46 49 46 00 01 02 03 04 05 06 0708 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 4638 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 64 64 64 6464 64 64 64 64 64 64 64 64 64 64 36 00

Я использую прорыв FTDI и устройство с интерфейсом UART.Кажется, это случайно :( это serialport-1.0.4, который я установил с помощью "sudo gem install serialport".

Спасибо!

Ответы [ 2 ]

0 голосов
/ 27 января 2015

У меня была эта ТОЧНАЯ та же проблема - постоянно отсутствовали одни и те же байты.Я сократил его до 0x11 и 0x13, что, как я заметил, также является тем, чего вам не хватает.

Проблема в том, что эти символы ASCII используются для программного управления потоком.Экземпляр SerialPort имеет программное управление потоком по умолчанию, которое отфильтровывает эти байты.Вы должны вручную отключить его:

    @serial = SerialPort.new(port, :baudrate => baud)
    @serial.flow_control = SerialPort::NONE
0 голосов
/ 30 апреля 2011

Не уверен, что вы наткнулись на это в своих исследованиях, но в этой статье упоминается модификация serialport.c, которая исправляет ошибку: Ruby, Ruby-SerialPort и отсутствующие байты

Вот текст ссылки на случай, если она когда-нибудь выйдет из строя:

Так что же я сделал, чтобы она работала с 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)) {
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...