문제

배경 : Windows Server 2003 R2, Windows Service Software로 생성 된 Windows Service Virtual Serial 포트, COM5, 9600 보드, 8 개의 데이터 비트, 패리티 비트 없음, 1 정지 비트, 흐름 제어 없음으로 구성된 직렬 포트 rxtx 2.1-7을 사용합니다

포트 COM5가 발견되면 portid.open 메소드 및 포트 매개 변수를 사용하여 생성 된 직렬 포트가 만들어지고 위의 장치 드라이버 설정과 일치하도록 설정됩니다. serialport intupstream을 가져 와서 INPUTSTREAMREADER에서 INPUTSTREAMREADER에서 랩핑하여 입력 인코딩을 제어 할 수 있습니다. 기본 인코딩은 물론 CP1252입니다 8 개의 데이터 비트를 사용하는 경우 인코딩이 ISO-8859-1 일명 LATIN1이어야 함을 읽었습니다. InputStreamReader 메서드를 사용하여 AM : int c= isr.read (); serialport.event.data_available의 경우 while 루프에서 정수 C를 인쇄하고 캐릭터 ((char) C); 문제는 숫자와 결과 문자가 너무 높아지는 것입니다 (범위는 135 - 250) 메시지는 모두 "모든 권리 보유.)"로 끝나고 각 메시지의 마지막 문자는 동일합니다. 그러나 시프트는 문자에서 문자까지 일관되지 않습니다. 다른 인코딩을 시도했습니다. UTF8 / UTF-8 숫자를 더 높게 이동하십시오. ASCII / US-ASCII. CP1252는 65533, 8222 및 8240으로 시프트 된 3자를 제외하고는 130-350 범위로 숫자를 이동합니다. 참고 : inputStreamReader.getEncoding () UTF8 및 UTF-8을 사용하면 UTF8이고 ASCII는 ASCII입니다.

다른 인코딩이 있습니까? 다른 누구도 이런 종류의 일을 보았습니까?

도움이 되었습니까?

해결책

나는 거의 똑같은 일을하고 있습니다.9600 Baud, 8N1 (8 개의 데이터 비트, 패리티 없음, 1 정지 비트) 및 캐릭터 시프 팅에 문제가 없습니다.우리는 어디서나 인코딩을 설정하지 않습니다.

초기화 스트림은 입력 스트림 유형이며 serialport.getInputStream ()으로 설정됩니다.

InputStreamReader에서 다시 스테핑 해보고 일반 "InputStream"을 사용하여 사용하십시오.인코딩은 그 자체를 처리해야합니다.

어떤 식 으로든 도움이되는 희망,

- Gmale

다른 팁

두 개의 와이어 서비스 포트가 있습니다.나는 TCP의 하드웨어 구성 간의 하드웨어 구성 간의 충돌이 Digi라는 직렬 장치 간의 충돌로 밝혀졌습니다.COM5 시리얼 설정을 9600,7,1,0,0으로 변경하여 해당 포트에서 문제를 해결할 수있었습니다.값의 변화는 8 개의 데이터 비트 VS 7을 사용하기 때문입니다. 이는 물론 코드에서 포트 매개 변수를 변경해야합니다.독자가 불필요 했음에도 불구하고 당신의 정확하지만, 인코딩과의 시프트 변화를 보면서 솔루션에 도착하는 데 도움이되었습니다.

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

두 번째 포트 설정은 1200,8,1,0,0이었습니다. 9600은 128 대의 스트림이 0입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top