메뉴 건너뛰기

OBG

Programming

API/MFC
2011.08.25 10:53

Serial Communication in MFC

조회 수 846 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

NI의 시리얼 통신 설명

http://zone.ni.com/devzone/cda/tut/p/id/5862


개인블로그, 시리얼통신 설명

http://jsaver.tistory.com/tag/serial%20%ED%86%B5%EC%8B%A0


시리얼 통신 질문, 답

http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/9ac38c01-b5cb-4d64-99e1-869af7a18400/


중요내용 요약


MSCOMM ist an OCX that is a COM Interface to the serial communication port.

Using a HANDLE is the direct communication to the OS and the serail port.

I would never use MSCOMM, you sometimes don't know what its doing. Its slower, you don't have the direct access

Use the class from PJ Naughter!

http://www.naughter.com/serialport.html


i am providing some links that would be helfull for the answer:

http://msdn2.microsoft.com/en-us/library/aa363194(VS.85).aspx

http://www.codeproject.com/KB/system/cserialcom.aspx

http://msdn2.microsoft.com/en-us/library/ms810467.aspx

http://ontrak.net/mfc.htm



시리얼 통신 설명, 라이브러리


http://www.codeproject.com/KB/system/serial.aspx

라이브러리는 여기서 받을 것 : http://blog.daum.net/hdongle/79084

이 라이브러리를 이용한 강좌

http://www.constructor.co.kr/board/board.php?act=READ&content_idx=23&board_idx=2&category_idx=2

http://www.constructor.co.kr/board/board.php?act=READ&content_idx=27&board_idx=2&category_idx=2


요약


[소개]


시리얼 통신이 왜 어려운지 설명하겠다. 다른 응용프로그램에 쓰이는 클래스는 견고하지도, 확장이 용이하지도, non-MFC 프로그램에 적절치도 않다. 내가 만든 클래스는 안그렇다 ㅋㅋ


[왜 시리얼 통신이 어려울까?]


Baudrates, parity, databits, handshaking, etc...


시리얼 통신을 하려면 baudrates, parity, databits, stopbits 설정이 필요하다. 포트 양쪽의 이들 설정을 잘 매치시키면 큰 문제는 없다. 하지만 handshaking은 이보다 어렵다. Handshaking에 생긴 문제가 생기면 파악하기 어렵기 때문이다. 만약 송신측에서 data 보내는 속도가 수신측이 data를 처리할 수 있는 속도보다 빠르면 수신측의 버퍼에 data가 쌓이게 된다. 결국 어느 시간이 지나면 overflow가 발생한다. 만약 수신측이 overflow가 발생하기전 송신측에 data를 잠시동안 그만보내라는 신호를 보낼 수 있다면 overflow를 막을 수 있을 것이다. 이렇게 data 송신을 조절하는 것을 handshaking이라 부르고 기본적으로 세종류가 있다.


1. No handshaking

Handshaking을 사용하지 않는다. 즉, data를 계속 보낸다. 앞서 말한 이유로 비추. 적은 양의 data를 보낼 때 쓰일 수 있다.


2. Hardware handshaking

RTS/CTS 라인을 통해 data를 보낼 수 있는지 체크한다. 이를 위해선 양쪽 포트와 케이블 모두가 hardware handshaking을 지원해야한다. 견고하고 효율적이나 하드웨어 의존성이 강하다는 단점이 있다.


3. Software handshaking

XOFF/XON신호를 통해 data 송신을 제어한다. 이 방법의 단점은 XOFF/XON 신호(Ctrl + S / Ctrl + Q)를 data로 사용할 수 없다는 것이다. 그러므로 Binary data (ex : 16진수를 통한 통신. Instrutech사의 IGM-402)로 통신하는 경우에는 문제가 발생할 수 있다. 하지마 아스키 data를 보내는 경우엔 유용하다.


Win32 API는 더 많은 handshaking 옵션을 제공한다. 하지만 거의 쓰이지 않고 코드를 복잡하게만 한다.


비동기 I/O는 문제를 더욱 복잡하게 한다


File I/O는 시리얼 I/O보다 빠르다. 한 블럭의 코드를 실행할 때 수 ms 정도의 시간이 걸린다. 하지만 Serial I/O는 느려서 프로그램의 딜레이를 유발하곤 한다. 또 다른 문제는 data가 언제 도착할지, 얼마나 큰 data가 도착할지 알 수 없다는 것이다. Win32 API는 비동기 함수 (aka overlapped operations) 를 제공하여 이 문제를 피할 수 있다. 비동기 프로그래밍은 성능을 향상시킬 수 있는 좋은 방법이나 코드를 복잡하게 한다. 내가 제공하는 라이브러리는 비동기 I/O 문제를 어느정도 해결하였다. 사용자는 편하게 overlapped, non-overlapped operations을 적절히 섞어 프로그래밍 할 수 있을 것이다.


이벤트 기반 프로그래밍엔 적절치 않다


GUI 응용프로그램에선 문제가 더 복잡하다. 모든 이벤트는 메시지를 통해 전달된다. 그리고 메시지를 받기 위해선 적어도 하나의 윈도우가 필요하다. 일반적인 GUI 응용프로그램에서는 WM_QUIT 메시지가 오기 전까지 메시지 펌핑을 한다. 메시지큐에 메시지가 오기 전까지 다른 함수의 실행을 막으므로 시리얼 이벤트가 발생했을 때 이를 깨울 방법이 없다. 타이머를 설정하고 포트를 체크하는 방법이 있긴하나 적절치 않다. Win32 시리얼 통신 API는 이벤트 기반 프로그래밍에 적절치 않다. 시리얼 이벤트가 발생했을 때 Win32 API가 윈도우에 메시지를 전달하는 방법이 적절할 것이다.


다음 사이트에도 번역있음

http://aronze.egloos.com/877120


데이터 받는 부분 오류 해결 ( Sleep(20) 대신 )

http://www.codeproject.com/KB/system/serial.aspx?msg=1954427#xx1954427xx


또다른 Serial Communication 클래스와 설명

http://www.codeproject.com/KB/system/serial_com.aspx

?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 Tool/etc Programming 게시판 관련 2 MoA 2014.11.01 1709
166 API/MFC HWND와 HINSTANCE MoA 2013.07.28 342
165 API/MFC InvalidateRect 함수, flag성 메세지 MoA 2013.07.25 378
164 Site IT 세미나 유튜브 동영상 Naya 2012.09.10 252
163 Deeplearning Keras를 활용한 주식 가격 예측 OBG 2022.09.02 114
162 API/MFC Legacy MFC 어플리케이션을 MFC feature pack으로 포팅 MoA 2013.07.30 539
161 Deeplearning LLaMA: INT8 edition OBG 2023.03.09 78
160 LLM llama3 implemented from scratch OBG 2024.05.24 24
159 LLM LLM 출력 속도 24배 높여주는 라이브러리 등장했다 OBG 2023.06.30 65
158 JAVA/Android logcat 사용법 MoA 2013.05.28 3486
157 Deeplearning LSTM-AE를 이용한 시퀀스 데이터 이상 탐지 OBG 2023.08.14 74
156 Tool/etc Machine Learning for Video Games MoA 2015.07.27 1191
155 Library Math Library Naya 2012.08.02 312
154 C/C++ memset vs for 초기화. 속도 차이가 얼마나 날까? 2 MoA 2013.07.28 687
153 API/MFC MFC Feature Pack: An Introduction 너울 2012.02.08 953
152 API/MFC MFC TIP MoA 2013.07.28 559
151 API/MFC MFC 리본 사용하기 (아이콘 제작 포함) 너울 2012.02.09 4345
150 API/MFC MFC 클래스 멤버함수 설명서 MoA 2013.07.28 1513
149 API/MFC MFC 클래스간 통신 Naya 2012.08.02 1189
148 API/MFC MFC, CHM파일 연동 (context help) 너울 2012.04.16 735
147 API/MFC MFC기반의 CSocket 사용 방법과 예제 MoA 2013.07.28 1265
Board Pagination Prev 1 ... 2 3 4 5 6 7 8 9 10 11 ... 15 Next
/ 15
위로