직렬 통신이란 무엇입니까?
Delphi로 직렬 통신 소프트웨어를 개발하는 방법에는 일반적으로 두 가지 방법이 있습니다. 하나는 Windows 통신 API 기능을 사용하는 것이고, 다른 하나는 Microsoft의 MSComm 컨트롤을 사용하는 것입니다. API를 사용하여 직렬 통신 프로그램을 작성하는 것은 더 복잡하고 많은 통신 지식이 필요합니다. 장점은 더 강력한 기능을 달성할 수 있고 적용 범위가 더 넓기 때문에 더 복잡한 하위 수준 통신 프로그램을 작성하는 데 더 적합하다는 것입니다. MSComm 컨트롤을 사용하는 것은 비교적 간단합니다. 이 컨트롤은 직렬 포트 통신과 밀접하게 관련된 풍부한 속성과 이벤트를 가지며 직렬 포트에 대한 다양한 작업을 제공합니다.
1. MSComm 컨트롤의 주요 속성 및 이벤트
(1) CommPort: 직렬 포트 번호를 설정하거나 반환하며 기본값은 1입니다.
(2) 설정: 직렬 통신 매개변수를 설정하거나 반환합니다. 형식은 "전송 속도, 패리티 비트, 데이터 비트, 정지 비트"입니다. 예: MSComm1.Setting:='9600,n,8,1'
(3) PortOpen: 직렬 포트를 열거나 닫습니다. 형식은 다음과 같습니다: MSComm1.PortOpen:=
(4) InBufferSize: 수신 버퍼의 크기를 설정하거나 반환합니다. 기본값은 1024바이트입니다.
(5) InBufferCount: 수신 버퍼에서 읽기를 기다리는 바이트 수를 반환합니다. 이 속성을 0으로 설정하면 수신 버퍼를 지울 수 있습니다.
(6) RThreshold: 이 속성은 수신 버퍼의 바이트 수가 이 값에 도달하거나 초과할 때 ComEvReceive 코드가 포함된 OnComm 이벤트가 생성되도록 결정하는 임계값입니다.
(7) SThreshold: 이 속성은 전송 버퍼의 바이트 수가 이 값보다 작을 때 ComEvSend 코드가 포함된 OnComm 이벤트가 생성되도록 결정하는 임계값입니다.
(8) 입력Len: 수신 버퍼에서 입력이 읽은 바이트 수를 설정하거나 반환합니다. 이 속성을 0으로 설정하면 입력이 전체 버퍼의 내용을 읽는다는 의미입니다.
(9) 입력: 수신 버퍼에서 문자열을 읽습니다.
(10) OutBufferSize: 전송 버퍼의 크기를 설정하거나 반환합니다. 기본값은 512바이트입니다.
(11) OutBufferCount: 전송 버퍼에서 전송을 기다리는 바이트 수를 반환합니다. 이 속성을 0으로 설정하면 버퍼를 지울 수 있습니다.
(12) OutPut: 문자열을 전송 버퍼로 보냅니다.
통신 과정에서 오류나 이벤트가 발생하면 OnComm 이벤트가 발생하고 CommEvent 속성 코드는 오류 유형을 반영하여 통신 프로그램 설계에 따라 다양한 작업을 수행할 수 있습니다. 속성 값에. CommEvent 속성 값과 그 의미는 다음과 같습니다.
(1) ComEvSend: 값은 1이며, 전송 버퍼의 내용은 SThreshold에서 지정한 값보다 작습니다.
(2) ComEvReceive: 값은 2이고, 수신 버퍼의 문자 수가 RThreshold에서 지정한 값에 도달합니다.
(3) ComEvFrame: 값은 1004이며 하드웨어가 프레임 오류를 감지합니다.
(4) ComEvRxOver: 값이 1008이면 수신 버퍼가 오버플로됩니다.
(5) ComEvTxFull: 값이 1010이고 송신 버퍼가 오버플로됩니다.
(6) ComEvRxParity: 값은 1009, 패리티 오류입니다.
(7) ComEvEOF: 값은 7이며, 수신된 데이터에 파일 끝(ASCII 코드는 26) 문자가 나타납니다.
2. 프로그램 샘플
Delphi3.0에서는 MSComm 컨트롤을 사용할 수 없습니다. 작성자는 Delphi5.0을 사용하고 있습니다. MSComm 컨트롤은 VB의 OCX 컨트롤입니다. 먼저 Delphi에 추가하고 "Component" → "ActiveX 컨트롤 가져오기" 메뉴를 선택한 다음 "ActiveX 가져오기" 페이지에서 "Microsoft Comm Control"을 선택하고 " 설치"를 선택하여 설치합니다. 설치 후 "ActiveX" 구성 요소 패널에 MSComm 아이콘이 나타나며 사용할 수 있습니다. 한 가지 주목할 점은 MSComm 컨트롤의 입력 및 출력 속성이 개체 검사기에는 표시되지 않지만 이 두 속성의 유형은 OleVariant(Ole 범용 변수)라는 것입니다.
아래는 실제 필요에 따라 개선할 수 있는 수신 프로그램의 샘플(주요 부분)입니다.
양식에 메모 컨트롤을 배치하여 수신된 데이터를 표시합니다. Combobox1은 통신 매개변수(속성 값 설정)를 선택하고, Combobox2는 직렬 포트(CommPort 속성 값)를 선택하고, Button1을 눌러 데이터 수신을 시작합니다. 수신을 중지하려면 Button2를 누르세요.
절차 TForm1.FormCreate(Sender: TObject);
시작
Mscomm1.InBufferCount:=0; // 수신 버퍼 지우기
Mscomm1.InputLen:=0; // 입력은 전체 버퍼 내용을 읽습니다.
Mscomm1.RThreshold:=1; // 문자가 수신될 때마다 OnComm 이벤트가 생성됩니다. end;
절차 TForm1.Button1Click(Sender: TObject)
시작
Mscomm1.Settings:=ComboBox1.Text; if ComboBox2.Text ='com1' then // com1과 com2만 고려한다고 가정합니다.
Mscomm1.CommPort:=1
else
Mscomm1. :=2;
Mscomm1.PortOpen:=true; // 직렬 포트를 엽니다.
Mscomm1.DTREnable:=true; // 데이터 터미널이 준비되었습니다. p> Mscomm1.RTSEnable:=true; //전송 요청
end;
프로시저 TForm1.Button2Click(Sender: TObject)
시작
p>Mscomm1.PortOpen:=false; // 직렬 포트를 닫습니다.
Mscomm1.DTREnable:=false;
Mscomm1.RTSEnable:=false;
end;
프로시저 TForm1.MSComm1Comm(Sender: TObject)
var
recstr:
시작
Mscomm1.CommEvent = 2이면
시작
recstr := Mscomm1.Input;
Memo1.text := Memo1.Text +
p>끝
끝;