메뉴 건너뛰기

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

?

  1. Programming 게시판 관련

  2. Serial Communication in MFC

  3. SciPy and NumPy

  4. RuntimeError: CUDA error: CUBLAS_STATUS_ALLOC_FAILED ...

  5. Reinforcement Learning for Dynamic Pricing Suggestion

  6. Redmine 설치

  7. Real-Time Stock News Sentiment Prediction with Python

  8. RAND_MAX

  9. R language 사이트

  10. Quake 3 source code and review

  11. PyTorch 딥러닝 챗봇

  12. pthread

  13. Property Sheet의 버튼 속성 변경하기

  14. printf Type Field Characters

  15. PM2를 활용한 Node.js 무중단 서비스하기

  16. Play Super Mario Bros with a Double Deep Q-Network

  17. PHP: 잘못된 디자인의 프랙탈

  18. PEFT: Parameter-Efficient Fine-Tuning of Billion-Scale Models on Low-Resource Hardware

  19. PackageBroadcastReceiver 구현

  20. OpenCV 이용한 템플릿 매칭

  21. ofstream ifstream

Board Pagination Prev 1 ... 2 3 4 5 6 7 8 9 10 11 ... 15 Next
/ 15
위로