2011-04-29 7 views
2

누군가가 시리얼 포트 라이브러리를 사용하고 있다는 것을 알게 되었는가? 나는 같은 상황에 (매우) 소수의 사람들을 발견했지만 해결책이 없다.루비 시리얼 포트가 무작위로 바이트를 놓친다

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 0 ℃ 0C 0E 0C : 여기

내가 루비하여 SerialPort으로 얻는 것의 예는 0a 10 0e 0e 0e 12 12 10 14 18 28 1a 18 16 16 18 32 32 26 1e 28 3a 34 3e 3c 3a 34 38 38 48 48 38c 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 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 0 ℃ 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

저는 FTDI 브레이크 아웃과 유어 인터페이스가있는 장치를 사용하고 있습니다. 무작위 것 같다 :(그건하여 SerialPort-1.0.4 내가 "sudo는 보석하여 SerialPort를 설치"로. 설치

감사합니다! 당신이 당신의 연구에서이 우연히, 그러나이 기사는 언급 경우

답변

0

확실하지 않음 버그 수정 serialport.c에 수정 :

그래서 나는 그것이 루비하여 SerialPort와 함께 작동하도록 짓을 내가 만든 : 여기 Ruby, Ruby-SerialPort and the missing bytes

는 지금까지 다운 될 경우 링크의 텍스트입니다 작은 직렬 포트로 변경 이 .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

+0

예, 작동했습니다! 실제로 그게 그리 고통스럽지 않다. : – Emilien

+0

$ unpack serialport $ 수정하기 $ gem 빌드 serialport.gemspec $ gem install ./serialport.gem 그게 다야! 내가 이해하지 못했던 점은 컴퓨터를 다시 시작한 후에 만 ​​작동한다는 것입니다. 즉, 보석 설치 후 뭔가가 누락되었다는 것을 의미합니다. 아시다시피 의견을 남기십시오! 도움을 주셔서 감사합니다. – Emilien

0

나는이 정확한 같은 문제가 있었다 - 지속적으로 같은 바이트 누락. 내가 좁혀진 0x110x13으로 내가 누락 된 부분이있다.

문제는 이러한 ASCII 문자가 소프트웨어 흐름 제어에 사용된다는 것입니다. SerialPort 인스턴스에는 기본적으로이 바이트를 걸러내는 소프트웨어 흐름 제어가 있습니다. 수동으로 사용 중지해야합니다.

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