Visual FoxPro에서 MScomm32를 사용 하 여 직렬 포트에서 수신 하는 방법


요약


이 문서에서는 Mscomm32 컨트롤을 사용 하 여 직렬 포트에서 데이터를 받는 데 사용할 수 있는 두 가지 방법에 대해 설명 합니다. 첫 번째는 이벤트 기반 메서드를 사용 하며, 수신 된 문자가 있는지 확인 하기 위해 직렬 포트를 폴링할 필요가 없습니다. 이 방법을 사용 하면 유연성을 최대한 활용할 수 있으며, 버퍼를 과도 하 게 실행 하지 못하도록 하는 데 광범위 한 코딩이 필요 하지 않습니다. 두 번째 방법에서는 입력 버퍼를 주기적으로 폴링하여 수신 된 문자가 있는지 확인 해야 합니다. 이 문서에서는 이러한 두 가지 기술에 대해 설명 하 고 각각에 대 한 예제를 제공 합니다.

추가 정보


사용 하는 방법에 관계 없이 다음 속성을 설정 합니다.
  • 주석 포트 속성:이 숫자 속성을 원하는 통신 포트로 설정 합니다. 유효한 값은 사용 가능한 직렬 포트 및 개별 컴퓨터의 구성에 따라 1, 2, 3, 4입니다. 이러한 값은 각각 Com1, Com2, Com3 및 Com4에 해당 합니다.
  • Settings 속성:이 문자 속성을 직렬 포트에 연결 된 장치에서 요구 하는 전송 속도, 패리티, 데이터 비트, 정지 비트로 설정 합니다. 이 속성은 문자의 쉼표로 구분 된 목록입니다. 예를 들어 직렬 포트를 14400 전송, 패리티, 7 데이터 비트, 1 정지 비트를 설정 하려면 다음과 같이 문자열을 설정 합니다.
       14400,E,7,1
  • PortOpen 속성: 직렬 포트에 대 한 통신을 열려면이 logical 속성을 true로 설정 합니다. 이 속성을 확인 하 여 포트가 올바르게 열렸는지 확인할 수도 있습니다.

방법 1: 이벤트 구동 수신

이벤트 기반 기술은 입력 버퍼에 대기 중인 문자가 있는 경우 OnComm 이벤트를 생성 합니다. 또한 CommEvent 속성에는 숫자 2가 포함 됩니다. OnComm 이벤트를 트리거 하려면 Rthreshold 속성을 0이 아닌 값 (기본값)으로 설정 해야 합니다. Rthreshold 속성의 가장 일반적인 설정은 입력 버퍼에서 하나 이상의 문자가 대기 중인 경우 OnComm 이벤트가 트리거되는 것을 의미 하는 1입니다. 예를 들어 OnComm 이벤트에 다음 코드를 배치 하 여 mybuffer 라는 폼의 속성에 수신 된 데이터를 추가할 수 있습니다.
   Procedure MyCom.OnComm     IF This.CommEvent = 2       ThisForm.mybuffer = ThisForm.mybuffer + This.Input     ENDIF   ENDPROC

기술 2: 입력 버퍼 폴링

입력 버퍼를 폴링하는 경우 프로그램이 수행 하는 작업을 주기적으로 중지 하 고 입력 버퍼에 대기 중인 문자가 있는지 확인 합니다. 이 방법을 사용 하는 경우 Rthreshold 속성을 0 (기본값)으로 유지 하 고 InBufferCount 속성을 검사 하 여이 값이 0 보다 큰지 확인 하 여 버퍼에 대기 중인 문자가 있음을 나타냅니다.참고 입력 속성에 액세스 하는 즉시 입력 속성의 길이를 확인 하는 등의 기술을 사용 하면 입력 버퍼가 비워지지 때문에 문자가 손실 됩니다. 대신 InBufferCount 속성을 사용 합니다. Mscomm 컨트롤이 폼에 있고 이름이 MyCom이 고 mycom 라는 폼 속성이 있는 경우 다음 코드에서는 대기 문자를 폴링하는 방법을 보여 줍니다.
   Procedure myform.myproc     IF Thisform.MyCom.InBufferCount > 0       Thisform.mybuffer = Thisform.mybuffer + Thisform.MyCom.Input     ENDIF   ENDPROC
프로시저 코드는 정기적으로 문자를 쉽게 확인할 수 있도록 timer 메서드에서 호출 될 수 있습니다. 그러나 직렬 포트에서 많은 양의 데이터를 수신 해야 하는 경우 기술 하나에서 입력 버퍼를 과도 하 게 실행 하는 기회가 줄어듭니다.