이 질문은 새로운 것이 아니라 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에서 다운로드 한 다른 클래스로 프로젝트를 테스트했다. ,
그래서, PC 측의 프로세스는 동일합니다 : 나는 참조
여기 코드를 넣어 그리고 이것은 내 코드에이 클래스를 적용하는 방법입니다 즉, 문자열을 보내고, '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."));
나는 작품에서 많은 개념을 가지고 있지 않기 때문에. 정말 문제가 무엇인지 정의 할 수 없습니다. –
'GetCommState'를 사용하는 FYI는 거의 항상 잘못되었습니다. 포트를 사용하기위한 마지막 프로그램의 설정을 상속 받기를 원하지 않는다면, 모두 변경하고 싶을 것입니다.'GetCommState'만이 좋은 것은 연결 중에가 아니라 문제 해결을 위해 구성을 검사하는 것입니다. –
나는 두 가지 경우를 모두 테스트하고, 모든 통신 (당신이 말한 것과 비슷한 - 통신 중에 GetCommState)에서 포트를 닫았다가 다시 열어보고 한 번만 열면 모두 실패합니다. –