MSCOMM 컨트롤에 대한 몇 가지 참고 사항
VB5.0/6의 MSComm 통신 제어는 직렬 포트 연결을 설정하고 다른 통신 장치(예: 모뎀)에 연결할 수 있는 일련의 표준 통신 명령 인터페이스를 제공합니다.
또한 명령을 보내고, 데이터를 교환하고, 통신 과정에서 발생할 수 있는 다양한 오류와 이벤트를 모니터링하고 대응할 수 있어 전이중, 이벤트 중심의 환경을 만들 수 있습니다.
역동적이고 효율적이며 실용적인 커뮤니케이션 프로그램입니다. 그러나 실제 통신 소프트웨어 설계 과정에서 MSComm 제어는 생각만큼 완벽하지도, 제어하기도 쉽지 않습니다. 특히 중국 Wln에서는
95/98에서 통신할 때 더 많은 문제가 발생합니다. 다음은 기본 소개부터 시작하여 MSComm 제어 프로그래밍 및 프로그래밍 기술에서 발생하는 문제를 점차적으로 논의합니다.
1. MSComm 컨트롤과 통신
1. 직렬 통신에 대한 기본 지식
일반적으로 컴퓨터에는 com1, com2 등 하나 이상의 직렬 포트가 있습니다. 이러한 직렬 포트는 데이터 전송 및 데이터 전송을 위한 외부 장치와 PC도 제공합니다.
편지의 통과. 이러한 직렬 포트는 CPU와 주변 장치 간의 인터프리터 역할을 합니다. 문자 데이터가 CPU에서 주변 장치로 전송되면 이러한 문자 데이터는 직렬 비트로 변환됩니다.
스트림 데이터; 데이터를 수신할 때 비트 스트림 데이터를 문자 데이터로 변환하여 CPU에 전달합니다. 또한 Windows는 운영 체제 측면에서 통신 드라이버를 사용합니다.
(COMM.DRV)는 API 함수를 호출하여 데이터를 보내고 받습니다. API 함수가 통신 제어 또는 선언과 함께 호출되면 COMM.DRV에 의해 해석되어 장치 드라이버에 전달됩니다.
vB 프로그래머로서 당신은 통신 프로그램을 작성해야 합니다. Windows 통신 AP1 기능에 대한 통신 제어에서 제공하는 인터페이스만 알면 됩니다. 즉, 그냥 설정하고 모니터링하면 됩니다.
컨트롤의 속성과 이벤트를 신뢰하십시오.
2. Mscomm 컨트롤 사용
MSComm 컨트롤을 사용하기 전에. 먼저 해당 속성, 이벤트 또는 오류를 이해해야 합니다.
속성 설명
CommPort는 통신 포트 번호를 설정하거나 반환합니다.
설정은 전송 속도, 패리티, 데이터 비트 및 정지 비트를 문자열로 설정하거나 반환합니다.
PortOpen은 통신 포트의 상태를 설정하거나 반환합니다. 포트를 열고 닫을 수도 있습니다.
입력은 수신 버퍼의 문자를 반환하고 삭제합니다.
출력은 문자열을 전송 버퍼에 씁니다.
CommEvent 속성은 통신 이벤트 또는 오류에 대해 다음 값 중 하나를 반환합니다. 이러한 상수는 컨트롤의 개체 라이브러리에서도 찾을 수 있습니다.
상수 값 설명
ComEventBreak1001이 중단 신호를 받았습니다.
ComEventCTSTO1002ClearToSendTimeout. 문자를 보낼 때 시스템이 지정한 이벤트 내에서 CTS(ClearToSend) 라인이 낮은 레벨입니다.
ComEventDSRTO1003DataSetReadyTimeout. 문자를 보낼 때 시스템이 지정한 이벤트 내에서 DSR(DataSetReady) 라인이 로우 레벨입니다.
ComEventFrame1004 데이터 프레임 오류입니다. 하드웨어가 데이터 프레임 오류를 감지했습니다.
ComEventOverrun1006 포트 오버플로. 하드웨어의 문자가 아직 읽혀지지 않은 경우 다음 문자가 도착하고 손실됩니다.
ComEventCDTO1007CarrierDetectTime. 문자를 보낼 때 CD(CarrierDetect) 라인은 시스템에서 지정한 이벤트 내에서 낮은 수준입니다. CD
RLSD(ReceiveLineSingalDetect, 수신 라인 신호 감지)라고도 함
ComEventRxOver1008 수신 버퍼 오버플로. 수신 버퍼에 공간이 없습니다
ComEventRxParity1009 패리티 오류입니다. 하드웨어에서 패리티 오류 7이 감지되었습니다.
ComEventTxFull1010 송신 버퍼가 가득 찼습니다. 전송 문자를 대기열에 넣는 동안 전송 버퍼가 가득 찼습니다.
ComEventDCB1011 포트 DCB(DeviceControlBlick)를 검색하는 동안 예기치 않은 오류가 발생했습니다.
통신 이벤트에는 다음 설정이 포함됩니다.
상수 값 설명
ComEvSend1 송신 버퍼의 문자 수가 Sthreshold 값보다 낮습니다.
ComEvReceive2는 Rthreshold 문자를 받았습니다. 이 이벤트는 입력 속성을 사용하여 수신 버퍼의 데이터가 삭제될 때까지 계속 생성됩니다.
ComEvCTS3CTS(ClearToSend) 줄이 변경되었습니다.
ComEvDSR4DSR(DataSetReady) 라인이 변경되었습니다. 이 이벤트는 DSR이 1에서 0으로 변경될 때 발생합니다.
ComEvRing6이 링 신호를 감지하면 ComEvCD5CD(CarrierDetect) 라인이 변경됩니다. 일부 URAT(UniversalAsynchronousReceiver-
-송신기, 범용 비동기식 수신기-송신기)는 이 이벤트를 지원하지 않습니다.
ComEvEOF7이 EOF 문자(ASCII 문자 26)를 받았습니다.
오류 메시지(MSComm 컨트롤) 다음 표에는 MSComm 컨트롤이 캡처할 수 있는 오류 메시지가 나열되어 있습니다.
상수 값 설명
ComInvalidPropertyValue380 잘못된 속성 값
ComSetNotSupported383 속성 읽기 전용
ComGetNotSupported394 속성 읽기 전용
ComPortOpen8000 포트가 열려 있으면 이 존재는 유효하지 않습니다.
8001 시간 초과 설정은 0보다 커야 합니다.
ComPortInvalid8002 잘못된 포트 번호
8003 속성은 런타임에만 유효합니다.
8004 속성은 런타임 시 읽기 전용입니다.
ComPortAleadyOpen8005 포트가 열렸습니다.
8006 장치 식별자가 유효하지 않거나 지원되지 않습니다.
8007 장치의 전송 속도가 지원되지 않습니다.
8008 지정한 바이트 크기가 잘못되었습니다.
8009 기본 매개변수 오류
8010 하드웨어를 사용할 수 없음(다른 장치에 의해 잠겨 있음)
8011 함수가 대기열을 할당할 수 없습니다.
ComNoOpen8012 장치가 열려 있지 않습니다.
8013 장치가 이미 열려 있습니다.
8014 통신 알림을 사용할 수 없습니다.
ComSetCommStateFailed8015는 통신 상태를 설정할 수 없습니다.
8016 통신 이벤트 보호를 설정할 수 없습니다.
ComPortNotOpen8018 이 존재는 포트가 열려 있을 때만 유효합니다.
8019 장치 사용 중
ComReadError8020 통신 장치 읽기 오류
ComDCBError8021 포트 장치 제어 블록을 검색하는 동안 내부 오류가 발생했습니다.
위의 기본 속성을 이해한 후에는 통신 권한 프로그램 작성을 시작할 수 있습니다. VB5.0/6.0에서 새 프로젝트 파일을 만듭니다. MicrosoftCommControl5.0 그룹 추가
파일을 클릭하고 Simplified Form1에 명령 단추를 추가하고 이름을 CmdTest로 지정하고 MSComm 컨트롤의 이름을 MSComm1로 지정하고 다음 프로그램 코드를 추가합니다.
PrivateSubcmdTestClick()'직렬 포트 열기
MSComml.CommPort=2'Com2 설정
IfMSComml.PortOpen=FalseThen
MSComm1.Settings="9600,n,8,1"'9600 전송 속도, 패리티 없음, 8 데이터 비트, 1 정지 비트
MSComm1.PortOpen=True'직렬 포트 열기
엔디프
MSComm1.OutBufferCount=0'전송 버퍼 지우기
MSComm1.InBufferCount=0'수신 버퍼 슬립
'문자 데이터를 보낼 때는 반드시 캐리지 리턴(vbcr)으로 끝나야 합니다.
MSComm1.Output="Thisisaqoodbook!"&vbCr
'전화번호를 입력하거나 AT 명령을 보내세요.
MSComm1.Output="ATDT05778191898,&vbCr
'문자 배열 데이터를 보낼 때 ByteArray에 미리 값을 할당해야 한다는 점에 유의하세요.
DimByteArrayasbyte()
'동적 배열 정의
ReDimByteArray(1)
'배열 크기를 재정의
바이트Array(0)=0
바이트Array(1)=1
MSComm1.Output=ByteArray
EndSub
개인SubMScommEvent()
SelectCaseMSComm1.CommEvent
CasecomEv수신
DimBufferAsVariant
MSComm1.InputLen=0
'바이너리 데이터 수신
MSComm1.InputMode=ComInputModeBinary
버퍼=MSComm1.Input
'문자 데이터 받기
MSComm1.InputMode=comInputModeText
버퍼=MSComml.Input
카셀스
선택 종료
엔드서브
(순서 1)
1 2다음 페이지의 전문을 읽어보세요