2012-05-23 4 views
1

RS232 프로그래밍 문제로 내 머리가 찢어졌습니다.예기치 않은 RS232 값이 전송되었습니다.

직렬 포트에 쓰고있는 문자가있는 char [7] 버퍼가 있습니다. 직렬 포트 모니터 프로그램을 사용하여 포트에서 발생하는 입력 및 출력을 모니터링합니다.

3f 00 01 00 0b 4a 

그래서 헤더 캐릭터 중 하나입니다되는 :

I 포트에 보내고 버퍼 내가 모니터 프로그램에 도착하면

a5 00 01 00 0b 4a 

모니터 프로그램이 볼 수 있음을 나타냅니다 포함 프로그램에서 빠져 나갈 때 잘못 모니터되거나 변경되었습니다.

저는이 문제를 어떻게 해결할 수 있는지 잘 모릅니다.

이것은 버퍼를 채우는 데 사용하는 코드입니다.

 char[]cmdBuffer=createCommandBuffer(0, 4, 1); 
     cmdBuffer[4] = Convert.ToChar(what); 
     placeChecksums(cmdBuffer); 
     serialPort.Write(cmdBuffer, 0, cmdBuffer.Length); 

나는 serialPort.Write를 호출하기 전에 중단 점에서 cmdBuffer의 내용을 확인하고 그들은 정확합니다. 모니터 프로그램이 잘못되었다고 결론을 내릴 수는 있지만, 같은 BAUD 속도로 실행되는 다른 소프트웨어를 모니터링 할 때 모니터가 올바르게 모니터됩니다.

다른 누구나이 동일한 문제가 있었습니까?

답변

3

문자을 처리하고 있지만 바이트으로 값을 표현했습니다.

나는 개인적으로 일을 단순화하기 위해, 어디서나 당신이 할 수있는 바이너리 데이터를 사용하는 것이 좋습니다 것입니다 -하지만 a53f로 전환되고있는 이유는 SerialPortEncoding 재산, ASCII에 기본값으로 거의 확실하다. 값 0xA5는 ASCII로 존재하지 않으므로 '?'로 변환됩니다. 대신.

진실로이 텍스트 인 경우 인코딩을 적절히 변경하십시오. 그러나 이진 데이터로 사용되는 경우 이진 API (문자, 문자 배열 및 바이트 배열 대신 바이트 및 바이트 배열 사용)를 사용하십시오. 문자열).

+0

존 - 감사합니다. char 구조체를 사용하고 char = '\ x00a5'를 사용하여 채 웁니다. 바이트로 모두 바꿉니다 ... thx. – Mark

+0

이 트릭을 수행했습니다 .Ascii 인코딩 속성 101. 많이 감사하겠습니다. – Mark

관련 문제