2011-08-04 3 views
1

굿데이의 모두를 수신와에 정지 :하여 SerialPort는</p> <p>내 문제는 다음입니다, 초기

(문자열은 "0023000D6F000076CF27431e"입니다 (그림에서() 그림에서 창을 읽을

나는 장치에서 해답의 일부를 얻을)를 두 번 보내

난 보내면 51,515,

send the string twice with different answer

그러나 단말이 포트에 "0023000D6F000076CF27431e"직접 나 장치가이 대답을 얻을 : By therminal

이 정답 EN 완전한이다.

그리고 물론 마지막 줄이 (그 안에 0024 부분으로) 필요합니다.

private void port_DataReceived(object sender, SerialDataReceivedEventArgs e) 
    {// Event for receiving data 


     string txt = port.ReadExisting(); 
     Thread.Sleep(10); 
     List<PlugwiseMessage> msg = reader.Read(Regex.Split(txt, "\r\n")); 
     DataReceived(sender, new System.EventArgs(), msg); 

내가 ReadExisting에 대해 검색 좀하지만이 갈 테 올바른 방법 인 것처럼 보일 ???? :

나는 데이터를 받게되며있어이 부분 (나는 아직 프로그래밍에서 아주 좋은 아니에요) 생각 아니면 그렇지 않습니까 ??

다른 사람이 나에게이 동작을 설명 할 수 있습니까?

+0

좋아요, 무엇입니까? 그 프로그램에 screendump가 있습니까? 아니면 표준 터미널? 당신은 (뿐만 아니라) 보내는 코드를 작성합니까? –

+0

안녕 Henk, screendumps는 직렬 포트 모니터에서 왔습니다. – Plumbum7

답변

1

이것은 의도적으로 설계된 것입니다. ReadExisting()은 말한대로 직렬 포트 읽기 버퍼에있는 문자 만 반환합니다. 직렬 포트는 매우 느린 장치이므로 일반적으로 각 ReadExisting() 호출에 대해 2 개의 문자 만 가져옵니다. 디버거를 사용하면 시리얼 포트 드라이버에 추가 문자를받을 수있는 시간을 줄여 프로그램을 느리게하는 경우가 특히 까다 롭습니다.

대신 ReadLine()을 사용할 수 있습니다. 각 호출에 대해 직렬 터미널 출력에서 ​​한 줄의 텍스트가 표시됩니다. 장치가 라인 종결 자 (16 진 덤프의 0x0a)로 라인 피드를 보내므로 작동합니다. 상황을 악화시키는 Sleep() 호출을 제거하십시오.

+0

한스 너 맞아 !! 그러나 나는 지금 또 다른 질문이 : te 장치의 대답 4 "0d0a"줄 종결자가 있습니다. 네 번째에 어떻게 도달 할 수 있습니까? – Plumbum7

+2

당신은 그 해답을 이해하지 못했습니다. 네 번째 터미네이터는 아직 전송되지 않았습니다. SerialPort.NewLine = "\ r \ n"으로 설정하고 ReadLine()을 사용하면 문제가 없습니다. –

+0

그것은 예외 오류 (whitch 나는 didn (내 잘못) 문자열을받은 프로그램에 대한 기대하지 않았다. 지금은 ReadExisting 여전히 작동합니다. – Plumbum7