2011-03-16 4 views
2

데이터를 내 응용 프로그램에 스트리밍하는 두 개의 장치가 있습니다. 하나의 장치는 연속적으로 '\ r \ n'으로 끝나는 9 바이트 데이터 패킷을 COM1의 각 50ms마다 1 패킷 씩 스트림합니다. 두 번째 장치는 '\ r \ n'으로 종료 된 38 바이트 패킷을 장치가 트리거 될 때 COM3으로 보냅니다.SerialDataReceivedEventHandler를 사용하여 여러 직렬 포트를 읽는 중 문제가 발생했습니다.

각각은 완전히 다른 SerialDataReceivedEventHandler를 가지며 각각은 다른 스레드에 넣는 자체 dll에서 실행됩니다.

COM1 SerialDataReceivedEventHandler는 항상 정상적으로 작동합니다.

COM1 SerialDataReceivedEventHandler는 데이터가 COM1로 스트리밍되지 않으면 잘 수행됩니다. COM1 SerialDataReceivedEventHandler가 작동하고 COM3 SerialDataReceivedEventHandler가 작동 할 때 데이터를 사용할 수 있지만, COM3 SerialDataReceivedEventHandler이 데이터를 사용할 수있을 때 발사 12 초 정도 걸리는 경우

는 그러나 COM1 SerialDataReceivedEventHandler 즉시 발생합니다.

COM1 SerialDataReceivedEventHandler가 COM3 SerialDataReceivedEventHandler를 실행하지 않게합니까? 아니면 뭔가 SerialDataReceivedEventHandler 두건에서 일어나는거야? 어떤 아이디어?

+0

USB 버전을 사용하고 계십니까? 차를 가지고 달리면서 다른 공급 업체의 다른 차를 가져 오십시오. –

답변

3

기본적으로 COM1과 COM3은 실제 직렬 포트라고 가정 할 때 데이터가 나타날 때 신호에 동일한 인터럽트 라인을 사용합니다. 포트 중 하나를 COM2 또는 COM4로 구성 할 수 있습니까? COM1 & COM3 당신은 (당신이 그것을 시작하는 데 devmgmt.msc를 실행할 수 있습니다) 장치 관리자와이 볼 수 있습니다 COM2 & COM4 공유 IRQ 3.

동안 모두 공유 IRQ 4.

+0

+1 좋은 대답 –

+0

COM1은 척도 데이터 입력이고, COM2는 라벨 인쇄 출력용이며 COM3 및 COM4는 스캐너 데이터 입력입니다. – Rich

+0

장치 관리자에서 COM3 및 COM4의 인터럽트를 변경하려고했지만 아무 것도 만들지 않았습니다. 차. COM1에서 하이퍼 터미널 하나의 읽기 인스턴스 두 개를 실행하고 COM3에서 다른 인스턴스를 읽으면 데이터가 지연되지 않습니다. 문제는 SerialDataReceivedEventHandlers에 있다고 생각됩니다. – Rich

관련 문제