2009-12-03 3 views
1

C# 프로그램이 직렬 포트 인터페이스로 작동하려면 "ENQ"를 보내고 "ACK"를 다시 보내야합니다.C# 프로그램에서 ASCII 문자를 보내려면 어떻게해야합니까?

이 포럼의 이전 질문에 대한 답으로 이해할 수 있듯이 시스템에서 '5'를 보내고 '6'(ENQ 및 ACK에 해당하는 ASCII)을 돌려 줄 것으로 예상합니다.
"ENQ"문자열을 보내는 대신 '5'문자를 보낼 수 있습니까?

'5'는 C#에서 ASCII 5가 아니라는 모든 답변 주셔서 감사합니다.
내가 지금 의견을 읽고 좋아, 나는 시도 할 것이다 :

serialPort.Write(new byte[]{5},0,1); 

답변

1

당신이하여 SerialPort 개체와 WriteLine 메서드를 사용하는 경우,이 시도 :

SerialPort serialPort = ...;  
...  
string message = ((char) 5).ToString(); 
serialPort.WriteLine(message); 

이 코멘트를 해결하기 위해, 당신은 당신의 "최종 전송"문자가되도록 SerialPort.NewLine 속성을 변경할 수있는,이에 case, char 5 일 수 있습니다. ETX를 "메시지 끝"문자로 사용한 몇 대의 컴퓨터에 대해 개발했습니다. Write을 계속 사용하고 메시지 5를 작성하기 위해 char 5를 작성해야하는 경우이 경로를 고려하십시오.

+0

그런 식으로 그는 2 바이트를 보내고 하나는 보내지 않을 것입니다. – EricSchaefer

+0

및 WriteLine은 원하는대로되지 않을 수도있는 CRLF를 보냅니다. – tjmoore

+0

실제로이 상태. SerialPort는 기본적으로 ASCIIEncoding으로 인코딩되며 127보다 큰 값은 63 값으로 인코딩됩니다 (http://msdn.microsoft.com/en-us/library/y2sxhat8.aspx). CRLF는 여전히 유효하지만 어쩌면 그것이 당신이 원하는 것일 수도 있습니다. 확인해 봐야 겠어. – tjmoore

3

이 확인하는 확인하기 위해 당신이 필요합니다 5.

의 값으로, 직렬 포트를 통해 부호없는 바이트를 전송하지만, 모든 아마도 부호가 없으므로 값으로 0-255를 얻을 수 있습니다.

+0

같은 것 serialPort.Write (새 바이트 [] {5}, 0,1); .Net에서 SerialPort 클래스를 사용하는 경우 –

+0

'새 바이트'가 서명 될 것임을 제외하고 대부분 서명되지 않아야합니다. 나는 드라이버가 바이트와 ints를 사용하는 SPI 구현에 문제가 있었고, 서명이 매우 나쁠 수 있다는 것을 추적하기 위해 약간의 시간이 걸렸다. –

+0

바이트가 서명되지 않았습니다. 그러나 –

0

5 문자는 C# chars 보류 유니 코드 16 비트 문자로 보낼 수 없습니다.

값이 5 인 n 개의 부호없는 바이트를 보낼 수 있습니다.

관련 문제