로그인

검색

API/MFC
2011.08.25 10:53

Serial Communication in MFC

조회 수 1651 추천 수 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 5345
288 LLM Comparing Replit and Cursor for AI-Powered Coding OBG 2024.09.21 445
287 Tool/etc Synology: Top Best Apps For Docker OBG 2024.07.01 360
286 Graphic ASCII 3D 렌더러 만들기 OBG 2024.06.03 379
285 LLM Anthropic, LLM의 내부를 이해하는데 있어 상당한 진전을 보임 OBG 2024.06.03 334
284 LLM llama3 implemented from scratch OBG 2024.05.24 306
283 Tool/etc HuggingFace 공동창업자가 추천하는 AI 분야 입문 서적 OBG 2024.05.24 378
282 LLM [VESSL AI] 뉴욕주민의 프로젝트플루토 — LLM, LLMOps를 활용한 금융 미디어의 혁신 OBG 2024.04.21 717
281 LLM PEFT: Parameter-Efficient Fine-Tuning of Billion-Scale Models on Low-Resource Hardware OBG 2024.04.15 287
280 LLM The difference between quantization methods for the same bits OBG 2024.04.14 341
279 LLM Mixture of Experts - Part 2 OBG 2024.04.14 331
278 LLM ChatGPT의 강력한 경쟁 언어모델 등장!, Mixtral 8x7B OBG 2024.04.14 511
277 LLM Real-Time Stock News Sentiment Prediction with Python OBG 2024.04.11 583
276 LLM Getting Started with Sentiment Analysis using Python OBG 2024.04.11 350
275 LLM How LLMs Work ? Explained in 9 Steps — Transformer Architecture OBG 2024.04.11 351
274 LLM 만능 프롬프트 OBG 2024.04.07 725
273 LLM A Beginner's Guide to Prompt Engineering with GitHub Copilot OBG 2024.04.04 338
272 LLM [12월 1주] 떠오르는 '미스트랄 7B'...'라마 2' 이어 한국어 모델 세대교체 주도 OBG 2024.03.05 496
271 Deeplearning Using Machine Learning to Predict Customers’ Next Purchase Day OBG 2024.02.27 346
270 서버 멀티-플레이어 게임 서버와 레이턴시 보상 테크닉 OBG 2024.01.16 442
269 Deeplearning [ifkakao] 추천 시스템: 맥락과 취향 사이 줄타 OBG 2024.01.10 378
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 15 Next
/ 15