메뉴 건너뛰기

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
286 JAVA/Android XML 파싱하기 MoA 2013.08.06 7062
285 API/MFC Visual C++ 시리얼 통신(RS-232) 강좌 (1) MoA 2013.07.28 6716
284 Library AS3 Code Library MoA 2013.10.11 5027
283 API/MFC Sleep() 함수 대신 프로그램 딜레이 시키기 (Wait) MoA 2013.07.28 4718
282 API/MFC Visual C++ 시리얼 통신(RS-232) 강좌 (2) 1 MoA 2013.07.28 4461
281 API/MFC MFC 리본 사용하기 (아이콘 제작 포함) 너울 2012.02.09 4345
280 JAVA/Android logcat 사용법 MoA 2013.05.28 3486
279 API/MFC 프린터 출력하기 MoA 2013.10.16 3437
278 Deeplearning 직접 보고 추천하는 머신러닝 & 딥러닝 & 수학 총정리(2022) OBG 2022.07.24 3315
277 Python [액션게임 만들기] 3. 클래스 다이어그램 기초 file OBG 2014.05.07 2772
276 API/MFC DLL 생성 시 주의 MoA 2013.08.22 2684
275 Python [농장게임 만들기] 10. 상점을 추가하자 file MoA 2014.05.01 2671
274 API/MFC Thread와 SendMessage를 통해 DeadLock을 만드는 방법 MoA 2013.07.28 2625
273 API/MFC 다국어를 위한 StringTable, LoadString 1 MoA 2013.12.22 2410
272 C/C++ C 언어의 문자형 변수 char - 8비트 정수형 변수 MoA 2013.07.28 2239
271 Python [농장게임 만들기] 3. 배경을 그리자 6 file MoA 2014.04.28 2067
270 Python 파이썬에서 C모듈 사용하기 MoA 2014.02.10 1919
269 API/MFC 프로세스 - 생성과 종료 그리고 이것 저것 너울 2011.10.12 1834
268 Site 졸업작품 및 각종 과제물 프로그램은 어떻게 만들어야 하나? (윈도우즈 응용프로그램) MoA 2013.09.10 1644
267 API/MFC 다른 스레드에서 메인다이얼로그 포인터 받아오기 AfxGetMainWnd() 1 MoA 2013.07.28 1615
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 15 Next
/ 15
위로