[VC++] 시리얼 통신 프로그램 만들기[2-3] – 시리얼 통신 클래스 내장시키기

이전에 소개한 시리얼 통신 클래스를 내장시켜 이 프로그램에 시리얼 통신 기능을 부여하는 방법에 대해 설명하겠습니다.

이전글에서 시리얼 클래스의 예제를 다운로드 받아 압축을 풀었을 것입니다.
그 폴더를 찾아보면 Serial.cpp 와 Serial.h 및 Serial 관련 클래스가 들어있는 “Serial” 폴더를 찾을 수 있을것입니다.

이 폴더를 현재 프로젝트인 ComConstructor 폴더 바로밑에 통채로 복사한후
아래그림처럼 VC++ WorkSpace 화면의 FileView 탭에서 프로젝트 이름에 대고 마우스의 오른쪽버튼 클릭을 통해 “Add Files to Project” 를 통해 “Serial” 폴더내의 소스(3개의 .cpp 파일과 4개의 .h 파일) 를 추가시킵니다.

ComConstructor_AddFiles

 

그리고 VC++ 에서 Alt+F7 키를 눌러 아래 그림과 같이 Project Settings 박스를 띄운 후 C/C++ 탭의 Project Options 에디트 박스에 /I “.Serial” 라고 추가시켜 줍니다.

ComConstructor_EditOptions

 

이는 VC++ 에서 “Serial” 폴더내에 있는 소스들을 컴파일과 링킹시 참조하도록 해주는 역할을 합니다.

그리고 이 시리얼 클래스가 소개되어 있는 사이트에서 이 클래스를 자신의 프로젝트에 통합시키는 방법이 설명되어 부분을 찾으면 다음과 같은 문구가 나와있습니다.

ComConstructor_IntergratingCSerial

 

Serial.cpp 과 SerialWnd.cpp 두 파일에서 아래의 네 줄을 주석처리합니다.


#define STRICT
#include <crtdbg.h>
#include <tchar.h>
#include <windows.h>

그리고 아래의 문장을 삽입합니다.


#include “StdAfx.h”

그리고 컴파일 잘 되는지 컴파일(F7)을 실행합니다.
아마도 컴파일 중에
serialex.cpp(277) : fatal error C1010: unexpected end of file while looking for precompiled header directive
이런 컴파일 에러 메세지가 난다면 SerialEx.cpp 파일도 위와같이 수정해주고 다시 컴파일 합니다.

수정이 잘 됐다면 에러가 없어지고 컴파일이 잘 완료되었을 것입니다.

이제 CSerial 및 이를 상속받은 3개의 클래스가 우리의 VC++ 프로젝트에 내장 되었으므로 이를 사용하고 싶으면 이 클래스를 변수로 선언하고 이 시리얼 통신 클래스의 제작자가 권장하는 방식대로 사용하면 됩니다.

아래 그림은 이 부분에 대한 설명입니다.

ComConstructor_UsingCSerial

 

이 시리얼 클래스를 사용하는 방법은 여러가지가 있으나 우리는 윈도우 프로그램을 제작하기 때문에(콘솔 프로그램이 아닌) 시리얼 클래스가 COM 포트로 부터 메세지를 받았을 때 이에 대한 처리를 담당하는 윈도우에게 사용자정의 메세지를 건네주끔 동작하는 CSerialWnd 나 CSerialMFC 클래스를 사용할 수 있습니다.

이 메세지를 받는 윈도우는 CMainFrame 이 담당하게 할 것이며 MFC 를 사용하여 프로그램을 만들므로 CSerialMFC 클래스를 사용하여 CMainFrame 의 멤버변수로서 m_Serial 이 만들어지게 할 것입니다.

위 그림에서 보시는 대로 CMainFrame 의 메세지 맵에 ON_WM_SERIAL 메세지 핸들러 함수를 만들어주면 시리얼 포트로부터 받은 데이터를 처리할 수 있습니다.

시리얼 포트의 사용은 사이트에 나와있는대로
m_Serial.Open(_T(“COM1”)); 과 같이 포트를 열어주고
m_Serial.Setup(CSerial::EBaud9600,CSerial::EData8,CSerial::EParNone,CSerial::EStop1); 과 같이 통신설정을 해주며
m_Serial.SetupHandshaking(CSerial::EHandshakeHardware);과 같이 흐름제어를 설정하고
시리얼 포트를 통해 전송하고 싶을땐 m_Serial.Write(“Hello world”); 이라고 호출해주면 됩니다.

 

이 글을 공유하기:

Be the first to comment

Leave a Reply