2013-06-16 2 views
0

이 질문은 새로운 것이 아니라 rs232 통신을 수행하는 몇 가지 예제 코드/클래스에 대해 Google이 가능하다는 것을 알고 있습니다. 그러나 이제는 이미 클래스를 사용하고 있습니다. 그러나 때때로 작동하지만 아주 자주하지 않습니다. 통신이 막 중단됩니다 모든 직렬 통신 개념을 읽고이 코드를 디버깅하는 데 많은 시간이 걸립니다.rs232 통신이 자주 오류를 만듭니다

그래도 도움이 될만한가요?

덕분에,

PS : 그런데, 내 프로젝트에, 나는 자주 연속적으로 또는 어떤 정의 된 인스턴스에서 다른 RS232 터미널에 문자열 (문자 배열)를 보내야합니다. 통신 할 때마다 RS232/COM 핸들을 닫지 않고 다시 열면 오류가 발생할 수 있습니까?

RS232_client 반대편에 작성된 코드입니다 :

, 내 코드

RS232.cpp에게 RS232.hpp RS232_client

Edit01을 포함 시켰습니다하시기 바랍니다. 내 편이 win7을 사용하는 PC이고, 프로젝트가 MSVS2008과 함께 컴파일됩니다.

내 코드의 오류에 대해 "int RS232 :: Write (double * joints)"를 호출 할 때 가끔 오류가 발생하고 전송이 중지됩니다. , PC의 측면

Edit02에 아무것도를 보여주는 것은 :

@ 크리스 스트래튼에서 알 수 있듯이, 내 문제는 필요한 검사없이 나쁜 기록 RS232 클래스에서 수 있습니다. 그래서 나는 CodeProject CSerial에서 다운로드 한 다른 클래스로 프로젝트를 테스트했다. ,

my adaptation

그래서, PC 측의 프로세스는 동일합니다 : 나는 참조

Serial.cpp Serial.h

여기 코드를 넣어 그리고 이것은 내 코드에이 클래스를 적용하는 방법입니다 즉, 문자열을 보내고, 's'또는 'S'를 읽을 때까지 기다리고, 끝내기 위해 "q \ r"를 보냅니다. 더 (읽기) 이벤트가 유발되지 않은 경우로이 새로운 코드로, I 단계 1 확인을 할 수 있지만, 2 단계에 대한 수 위의 3 단계에 대한

, 그것은 거기에 달려

 // Wait for an event 
     lLastError = serialPort.WaitEvent(); // it waits here forever!!!! 
     if (lLastError != ERROR_SUCCESS) 
      ShowError(serialPort.GetLastError(), _T("Unable to wait for a COM-port event.")); 
+0

나는 작품에서 많은 개념을 가지고 있지 않기 때문에. 정말 문제가 무엇인지 정의 할 수 없습니다. –

+0

'GetCommState'를 사용하는 FYI는 거의 항상 잘못되었습니다. 포트를 사용하기위한 마지막 프로그램의 설정을 상속 받기를 원하지 않는다면, 모두 변경하고 싶을 것입니다.'GetCommState'만이 좋은 것은 연결 중에가 아니라 문제 해결을 위해 구성을 검사하는 것입니다. –

+0

나는 두 가지 경우를 모두 테스트하고, 모든 통신 (당신이 말한 것과 비슷한 - 통신 중에 GetCommState)에서 포트를 닫았다가 다시 열어보고 한 번만 열면 모두 실패합니다. –

답변

0

나는 마침내를 가질 수 있습니다 이상한 갑자기 멈추는 RS232 모듈. 여기에 RS232.cpp의 새 버전을 업로드

두 버전 사이의 유일한 차이점은 새 RS232_open()입니다. GetCommState는 사용하지 않습니다. 대신 설정은 Baudr 설정 문자열을 사용하여 BuildCommDCBA로 설정됩니다.

SO!

관련 문제