[VC++] 시리얼 통신 프로그램 만들기[2-1]

이제부터 시리얼 통신 프로그램 만들기에 대해 본격적이고 보다 구체적인 내용으로 들어가겠습니다.

시리얼 통신 프로그램을 만들것이니 컴퓨터의 시리얼 포트(COM 포트) 의 콘트롤 부분에 대한 부분이 일단 확보되어야 할 것입니다.

대부분의 VC++ 책자들을 보면 COM 포트를 읽고 쓰는 방법과 원리에 대해 잘 나와있습니다. 그리고 예제로서 시리얼 동작에 관련한 간단한 클래스도 제공해 줍니다.

서적이나 기타 문서들을 참고하여 시리얼 포트를 제어하는 것에 대해 학습한 후 이에 대한 제어를 하는 클래스를 자신이 처음부터 직접 만들어 사용는 방법도 있겠지만 이런 예제 클래스를 사용한다면 우리의 시리얼 통신 프로그램 제작시 시리얼 제어 관련 부분은 이 클래스를 VC++ 프로젝트에 포함하는 것으로 간단히 해결되게 됩니다.

그리고 아주 기본적인 기능만 지원하는 책자의 예제보다는 여러 부가기능을 지원하며 많은 사람들이 사용해본 동작상 검증된 클래스를 구해서 적용해 보도록 하겠습니다.

그렇게 해서 찾은것이 아래 링크에 소개된 시리얼 클래스 입니다.
https://www.codeproject.com/Articles/992/Serial-library-for-C

www.codeproject.com 과 www.codeguru.com 이 두곳 사이트는 마이크로 소프트의 MSDN 사이트 를 비롯하여 VC++ 프로그래머가 자주 참조하는 사이트들 입니다.
VC++ API 및 MFC 에 대한 항목별 튜터가 아주잘 정리돼 있고 여러 프로그래머들이 자신이 만든 클래스들이나 예제의 소스를 공개하고 사용법도 자세히 정리하여 소개하고 있습니다.
지금 사용하려는 시리얼 클래스 뿐만 아니라 기능적으로나 시각적으로 보완, 향상시킨 윈도우 컨트롤 클래스(버튼, 프로그래스 등 비주얼 컨트롤 클래스) 들의 소스도 많이 구할수 있으며 대부분 소스단위의 공개를 하고 있으니 자신의 입맛에 맞는 클래스를 만드는데 참조한다면 많은 도움이 될 것입니다.

아래링크는 시리얼 통신부분을 소스가 아닌 컴파일된 DLL 형태의 API 로 제공해주는 사이트입니다.
http://www.sysbas.com/korean/html/data_01.htm

위에 소개한 시리얼 클래스들 말고도 위 사이트나 다른 VC++ 관련 사이트들 혹은 윈도우에서의 시리얼 통신을 다루는 서적에서 제공해 주는 클래스를 사용하거나 이것도 싫다면 자신이 직접 시리얼 통신을 제어하는 클래스들을 직접 만들어 사용할 수도 있을 것입니다.

그럼 처음 소개한 시리얼 클래스 예제에 대해 살펴보도록 하겠습니다.
처음 제시한 링크로 가서 가장 윗부분에 보시면 이 클래스와 이를 사용한 예제의 소스를 다운받을 수 있는 링크를 찾을 수 있습니다.
우선 이 예제를 다운받아 적당한 폴더에 압축을 풀고 VC++ 프로젝트 파일을 읽어들입니다. 그러면 아래와 같이 클래스 구조를 VC++ 의 ClassView 화면으로 볼 수 있을것입니다.

Serial_Class_ClassView

 

시리얼 포트를 감시해서 입력을 받고 컨트롤하거나 출력을 지원해주는 Serial classes 프로젝트 부분과 이 클래스를 사용하여 콘솔 및 윈도우 환경에서의 시리얼 통신을 하는 예제 프로젝트가 포함돼 있는것을 볼 수 있습니다.

각 예제를 컴파일 해서 실행을 시켜봅니다. SerialTestMFC 프로젝트의 경우 아래 그림과 같은 시리얼 통신프로그램 실행해 볼 수 있습니다.

Serial_Class_Example

 

위 그림은 COM 포트중 하나에 접속시키고 포트 설정 박스를 띄운 화면입니다.

이 예제는 윈도우 MDI (다중 다큐먼트 인터페이스) 로 만들어진 VC++ 프로젝트이며 COM 포트중 하나에 접속을 하면 새로운 뷰 클래스인 CChildView 를 가진 자식 프레임 윈도우 CChildFrame 가 생성됩니다. ChildView 에서 CSerial 클래스로 부터 상속된 CSerialMFC 클래스가 변수선언에 의해 메모리에 실체화된 객체(오브젝트 인스턴스 : 클래스가 메모리에 생성된 객체) 를 가지고 사용자의 키 입력이나 Serial 클래스가 COM 포트에서 메세지를 받았을때 이에 반응하여 CChildeView 클래스가 가진 리치에디트 컨트롤 화면에 통신하고 있는 정보를 표시하여 주게끔 만들어졌습니다.

이 예제처럼 우리도 CSerial 클래스와 이를 상속받은 클래스들을 우리가 만드는 시리얼 통신프로그램에 가져와 사용하여 시리얼 통신 부분을 담당시키게 할 것입니다.

아마도 이것이 OOP 의 큰 장점이랄수 있습니다. 이미 기능이 구현된 소스가 있다면 이렇게 클래스를 가져다 포함시키는 것 만으로 소스의 재사용성을 높이는 것이지요. 이렇게 소스단위의 기능별 독립적으로 부품화가 이루어지므로 만든것 또 만들고 할 일이 줄어드니 소프트웨어 생산성 향상에 큰 잇점이 있습니다..

이 CSeial 및 이를 상속받은 CSerialEx, CSerialWnd, CSerialMFC 를 사용하다 기능적 보완이 필요하다면 위 네가지중 적절한 것을 선택해 이를 상속받은 클래스를 만들어주고 새로운 기능을 넣기위해 새로운 멤버함수를 덧붙이거나 재정의, 중복정의를 통해 이전 기능에 대한 추가 및 보완을 해줌으로서 소스의 유지,보완적 측면에서의 잇점이 있습니다.
이 또한 OOP 가 소프트웨어 생산성 향상을 위해 설계된 프로그래밍 방식이라는 것을 잘 나타내 줍니다.

 

이 글을 공유하기:

2 Comments

Leave a Reply