System.IO.Ports.SerialPort - IOCTL_SERIAL_SET_WAIT_MASK를 구성할 수 있습니까?

StackOverflow https://stackoverflow.com/questions/628161

  •  06-07-2019
  •  | 
  •  

문제

나는 .Net(3.5)이 직렬 포트와 상호 작용하는 방법에 대해 조금 배우려고 노력해 왔습니다. System.IO.Ports.SerialPorts 기존 외부 모뎀에서 발신자 표시 데이터를 수집하기 위해 작은 Windows Forms 응용 프로그램을 작성하여 클래스를 만듭니다.

모뎀이 발신자 표시를 지원하는지 테스트했습니다.Putty 또는 하이퍼터미널을 사용하여 발신자 표시 데이터를 수집하도록 모뎀을 구성할 수 있습니다(명령 사용). AT#CID=1, 내가 찾은 것 여기), 전화벨이 울리면 데이터가 표시됩니다.터미널 창에는 다음과 같이 표시됩니다.

RING

DATE = 0308
TIME = 2045
NMBR = 01234567890

RING

내 C# 응용 프로그램이 모뎀을 성공적으로 구성한 것으로 나타나고 RING전화벨이 울리면 메시지를 보내세요.그러나 발신자 ID 데이터는 표시되지 않습니다.

그 이유를 이해하기 위해 Sysinternals를 사용하는 여러 클라이언트가 취한 조치를 비교했습니다. 포트몬.

주요 차이점은 연결 구성에 나타납니다.내 C# 응용 프로그램에는 Putty와 Hyperterminal에는 없는 다음 줄이 포함되어 있습니다.

0.00000307  callerID.exe    IOCTL_SERIAL_SET_WAIT_MASK  Serial0 SUCCESS Mask: RXCHAR RXFLAG CTS DSR RLSD BRK ERR RING   

제가 이해한 바에 따르면, IOCTL_SERIAL_SET_WAIT_MASK 필터링할 메시지 유형의 포괄적인 목록입니다.

따라서 세 가지 질문이 있습니다.

발신자 ID 정보가 표시되지 않을 가능성이 있습니까? IOCTL_SERIAL_SET_WAIT_MASK?

그렇다면 발신자 ID 정보를 표시하도록 어떻게 구성할 수 있나요?클래스 속성에서는 액세스할 수 없는 것 같습니다.

구성할 수 없는 경우 직렬 포트를 제어하는 ​​하위 수준 시스템 기능에 자체 래퍼를 작성하여 이 문제를 해결할 수 있는 유일한 옵션이 있습니까?

직렬 포트 통신에 대한 나의 이해는 매우 기본적이므로 진단이 많이 부족할 것으로 예상됩니다.모든 안내를 감사히 받았습니다.

도움이 되었습니까?

해결책

나는 내 진단에서 한참 벗어났어요.

그것은 것 같다 WriteLine 메서드는 모뎀이 예상하는 회선 종결자와 함께 보내는 명령을 종료하지 않습니다.

내가 해야 할 일은 보내는 명령에 캐리지 리턴을 추가하고 Write 방법.

누군가의 시간을 낭비한 것에 대해 사과드립니다.

다른 팁

나는 찾았다 이것 MSDN에서는 시스템 dll의 P/Invoke를 통해 직렬 포트에 액세스하는 방법에 대한 적절한 예처럼 보입니다.

.Net 클래스와 관련된 문제를 해결할 수 있는지 알고 싶습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top