2010-07-12 4 views
0

배경 : Windows Server 2003 R2, RealPort 소프트웨어로 작성된 와이어 서비스 가상 직렬 포트, 직렬 포트는 COM5, 9600 보오드, 8 데이터 비트, 패리티 비트, 1 정지 비트, 흐름 없음으로 구성됨 제어, RXTX 사용 2.1-7.RXTX 가상 직렬 포트 읽기 문제

포트 COM5가 발견되면 직렬 포트는 portId.open 메서드를 사용하여 만들어지고 포트 매개 변수와 흐름 제어는 위의 장치 드라이버 설정과 일치하도록 설정됩니다. serialPort IntupStream을 가져 와서 입력 인코딩을 제어 할 수 있도록 InputStreamReader에 래핑합니다. 기본 인코딩은 물론 Cp1252입니다. 8 데이터 비트를 사용하는 경우 인코딩은 ISO-8859-1 즉 Latin1이어야합니다. 이고 InputStreamReader 메서드를 사용하고 있습니다. int c = isr.read(); SerialPort.Event.DATA_AVAILABLE의 경우 while 루프에서 정수 C를 출력하면 문자 ((char) c)로 캐스팅됩니다. 문제는 숫자와 결과 문자가 너무 높게 (범위는 135-250) 메시지가 모두 "All Rights Reserved."로 끝나고 각 메시지의 마지막 문자가 동일합니다. 그러나 문자 간에는 이동이 일관되지 않습니다. 다른 인코딩을 시도했습니다 : UTF8/UTF-8은 숫자를 더 높게 이동시킵니다. ascii/us-ascii도 그렇습니다. Cp1252는 65533, 8222 및 8240으로 이동되는 3 개의 문자를 제외하고 130-350 범위로 숫자를 이동합니다. 참고 : InputStreamReader.getEncoding() UTF8 및 UTF-8은 UTF8이고 ascii 및 us-ascii는 ASCII .

다른 인코딩을 시도해야합니까? 다른 사람이 이런 종류의 것을 보았습니까?

답변

1

나는 거의 똑같은 일을하고 있습니다. 9600 보오, 8N1 (8 데이터 비트, 패리티 없음, 1 스톱 비트). 우리는 문자 이동에 아무런 문제가 없습니다. 어디에서나 인코딩을 설정하지 않습니다.

입력 스트림은 단순히 InputStream 유형이며 serialPort.getInputStream();

InputStreamReader에서 스테핑을 시도하고 일반 "InputStream"을 사용하십시오. 인코딩은 스스로 처리해야합니다. 어떤 식 으로든 도움이

희망, --gMale

0

와이어 서비스 포트의 두 되세요. 내가 게시 한 것은 Digi라고 불리는 TCP에서 Serial 장치의 하드웨어 구성 사이의 충돌로 밝혀졌습니다. COM5 직렬 설정을 9600,7,1,0,0으로 변경하여 해당 포트의 문제를 해결할 수있었습니다. 값의 이동은 8 개의 데이터 비트 대 7을 사용했기 때문에 가능합니다. 물론 코드의 포트 매개 변수를 일치시켜야한다는 것을 의미했습니다. 독자가 불필요하다는 점에서 올바른 점은, 인코딩으로 변화를 관찰하여 솔루션에 도달하는 데 도움이되었으므로 데이터 비트 수가 줄어들 때까지 동일한 효과를 얻을 수 있습니다.

이제 두 번째 포트에서 마법을 찾고 있습니다.

두 번째 포트 설정은 1,200,8,1,0,0이며 9600을 사용하면 스트림이 대부분 0s이고 일부 128s가 발생합니다.