SerialPort를 사용하는 장치와 통신 중입니다. 장치에는 RS-485가 있고 반대쪽 (PC)에는 RS-232 (가상 포트)가 있습니다. 장치가 올바르게 작동하고 데이터를주고받습니다.때때로 DataReceived 이벤트가 실행되지 않습니다.
문제는 DataReceived 이벤트가 발생하지 않는 것입니다. System.Timer를 사용하여 10 초마다 한 번씩 장치에 데이터를 보냅니다. 대부분의 경우에는 정상적으로 작동하지만 1 ~ 10 분마다 응답을 얻지 못하고 2-4 번이 지나면 DataReceived 이벤트가 마비되고 데이터 클러스터가 생깁니다 (이전에 "요청한 모든 것" for가 버퍼에 있음).
내 질문 : 어떻게 가능합니까?
여기에 코드 예를 넣을 수 없지만 미안하지만 내 응용 프로그램에는 다중 스레드가 없습니다 (주 스레드와 Timer_Elapsed 및 DataReceived 이벤트가있는 스레드 만 별도 스레드에서 발생시킨 것 같습니다). 내 DataReceived 이벤트가 빠르게 처리되고 병렬로 발생해서는 안됩니다 (10 초가 길어서 장치 응답 시간이 1 초 미만 임). Thread.Sleep을 사용하면, 그 곳과 아무런 관계가 없을 것이라고 확신합니다.
COM 포트가 다른 응용 프로그램을 사용하여 테스트 할 때 COM 포트가 비슷한 방식으로 손상되기 때문에 하드웨어 문제 일 수 있습니다 (그 중 하나는 연결 테스트를 위해 제공된 장치 제조업체가 C#으로 작성된 것처럼 보이지 않음). 하지만 하드웨어가 그렇게 좋지는 않습니다. 어쩌면 PC 나 COM 포트에 문제가있을 수 있습니다 (외부에 내장되어 있지는 않습니다). 또는 운영 체제와 관련 될 수 있습니까 (내 응용 프로그램은 Windows Server 2003에서 실행되는 Windows 서비스 임).
그에게 upvote를주는 이유는 무엇입니까? – jgauffin
문제 없습니다, @Arie. 다행스럽게 생각 했어. –