2010-01-15 7 views
0

.NET에서 특정 직렬 포트를 수신하고 수신중인 데이터를 처리하는 프로그램을 작성했습니다. 시리얼 포트 컨트롤을 사용하는 테스트 프로그램을 작성했고 프로그램이 정상적으로 작동했습니다. 원래 장치로 Windows Mobile에서 프로그램을 실행할 때 수신 된 데이터가 깨졌습니다. PC와 연결되었을 때 동일한 장치가 원하는 출력을 생성했습니다.SerialPort.ReadExisting()을 사용하여 직렬 포트에서 잘못된 데이터 수신

모바일에서 내 장치를 블루투스에 연결했습니다. 나는 다음과 같은 코드를 사용했다 "?09?D0??6D?
: 당신은 당신이 기대했던 입력 말을 잊었

Dim WithEvents port1 As SerialPort = _ 
    New SerialPort("Com2", 19200, Parity.Even, 7, StopBits.One) 

port1.Open() 
     port1.Open() 
     strcmd="09RD00000123" 
     port1.Write(strcmd, 0, strcmd.Length) 
     System.Threading.Thread.Sleep(70) 
     strReadSegment0 = port1.ReadExisting 

답변

1


나는 다음과 같은 잘못된 문자열을 받아 봐. 받은 데이터에 물음표가 표시되면 SerialPort.Encoding 속성이 올바르게 설정되어 있지 않음을 나타냅니다. 기본값은 ASCII이며, 128에서 255 사이의 값을 가진 바이트는 물음표로 바뀝니다. 어쩌면 실제로 문자를 받고 싶지 않을 수도 있습니다. 바이트가 필요할 수도 있습니다. Read()를 사용하십시오.

물음표에 대한 또 다른 설명은 장치의 직렬 포트 구성이 시스템의 직렬 포트 구성과 일치하지 않는다는 것입니다. 전송 속도 불일치로 인해 데이터가 깨져서 위에서 설명한 것처럼 물음표가 될 수 있습니다. 패리티가 일치하지 않으면 물음표가 생성됩니다.

스레드를 직렬 포트와 안정적으로 동기화하려면 Sleep()을 사용할 수 없습니다. 대신 DataReceived 이벤트를 사용하십시오.

관련 문제