Show 소개글MFC 의 기초부터 고급기능까지 체계적으로 정리 요약되어 있습니다. 발표자료로도 좋으며 개인 공부시에도 많은 도움이 됩니다. 목차 1. 시리얼 통신 프로그래밍 본문내용 시리얼 통신 프로그래밍 태그이 자료와 함께 구매한 자료데브피아에서 퍼온글입니다. Source 자료실의 Serial통신VC소스.zip 를 참고 하세요 ----------------------------- 작성자 박주학 ------------------------------ E-mail : or ( 10 쪽 참조 하면서 볼 것 ... ) 시리얼 통신의 하드웨어 내용(USB도 시리얼 통신임..단 디바이스 드라이버 차원에서 1. RS 232 통신 최대 거리 15 미터 통신 방법 직렬 4. RS 232 -> RS 422 RS 422 -> RS 232 거리가 멀 때에는 이런식으로 컨버터를 이
프로그래머 관점에서의 RS - 232 물론 RS - 232 인터페이스 사이의 제어 기능은 하드웨어를 통해 제어된다. 일반적으 9핀 짜리 시리얼 커넥터 ( EIA/TIA 574의 9핀 커넥터 ) 핀 1 ( DATA CARRIER DETECT : 데이터 반송자 검출 ) 핀 2 ( Receive Data : 수신 데이터 일명
RX 혹은 RD 라고도 함 ) 핀 3 ( Transmitted Data : 송신 데이터 일명 TX 혹은 TD 라고도 함 ) 핀 4 ( DATA TERMINAL READY : 데이터 단말기 대기 ) 핀 5 ( PROTECTIVE GROUND : 안전 접지선 ) 핀 6 ( DATA SET READY : 데이터 세트 대기 ) 핀 7 ( RTS REQUEST TO SEND : 송신요구 ) 핀 8 ( CTS CLEAR TO SEND : 송신허가 ) 전이중 연결은 양방향 채널이므로, RTS/CTS 핸드쉐이킹은 불필요하다. 따라서, 전이 핀 9 여분.. 25 핀 ( EIA/TIE-E의 25핀 커넥터 ) 핀 1 ( PROTECTIVE GROUND : 안전 접지선 ) 핀 2( Transmitted Data : 송신 데이터 일명 TX 혹은 TD 라고도 함 ) 핀 3( Receive Data : 수신 데이터 일명 RX 혹은 RD 라고도 함 ) 핀 4 ( RTS REQUEST TO SEND : 송신요구 ) 핀 5 ( CTS CLEAR TO SEND :
송신허가 ) 전이중 연결은 양방향
채널이므로, RTS/CTS 핸드쉐이킹은 불필요하다. 따라서, 전이 핀 6 ( DATA SET READY : 데이터 세트 대기 ) 핀 7 ( Signal Ground or Common : 신호접지선 또는 공통선 ) 핀 8 ( DATA CARRIER DETECT : 데이터 반송자 검출 ) 핀 9 예비 검사용 핀 10 예비 검사용 핀 11 예비 검사용 핀 12 ( Secondary Received Line Signal Detect : 수신 회선신호검출 - 2차 ) 핀 13 ( Secondary Clear to Send : 송신 허가 - 2차 ) 핀 14 ( Secondary Transmitted Data : 송신 데이터 - 2차 ) 핀 15 ( Transmission Signal Element Timing : 신호 소자 타이밍 전송 ) 핀 16 ( Secondary Received Data : 수신 데이터 - 2차 ) 핀 17 ( Receiver Signal Element Timing : 신호 소자 타이밍 수신기 ) 핀 18 ( Local Loopback : 지역 복귀루프 ) 핀 19 ( Secondary Request to Send : 송신 요구 - 2차 ) 핀 20 ( Data
Terminal Ready : 데이터 단말기 대기 ) 핀 21 ( Signal Quality Detect : 신호 품질 검출기 ) 핀 22 ( Ring Indicator : 링 지시기 ) 핀 23 ( Data Signal Rate Detector : 데이터 신호 전송율 검출기 ) 핀 24 ( Transmit Signal Element Timing : 신호 소자 타이밍 송신 ) 핀 25 ( Test mode : 시험 모드 ) ---------------------- 프로그램 ( 비주얼 씨++ 6.0 ) ----------------------- // SCom.h: interface for the CSCom class. #if !defined(AFX_SCOM_H__5A71548F_CE4C_11D4_A6B3_00E09833FB7C__INCLUDED_) #if _MSC_VER > 1000 class CSCom
DCB dcb; #endif // !defined(AFX_SCOM_H__5A71548F_CE4C_11D4_A6B3_00E09833FB7C__INCLUDED_) CPP 파일 // SCom.cpp: implementation of the CSCom class. #include "stdafx.h" #ifdef _DEBUG ////////////////////////////////////////////////////////////////////// CSCom::CSCom() } CSCom::~CSCom() } void CSCom::ComStart() if((idCom = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, CommTimeOuts.ReadIntervalTimeout = 5000;//0xFFFFFFFF; dcb.BaudRate = CBR_9600; if(SetCommState(idCom,&dcb) != TRUE) //////////////////////////////////////////////////// osWrite.Offset = 0; } void
CSCom::ComEnd() } void CSCom::WriteCmd(CString write_str) WriteFile(idCom,write_str,nToWrite,&dwWrite,&osWrite); } CString CSCom::ReadCmd() memset(&pBuff,"\0",40); BufIndex = 0; CString RtnMsg; return RtnMsg; 4. 시리얼 통신시 계속해서 데이터를 체크 해야 하는 경우에는 이벤트 쓰레드를 가동 이벤트쓰레드로 큐를 체크하는 방식으로 작성을 하면 됨.. ( 위에 방법은 일반적으로 통신 프로그램에서 쓰임.. ) 예 ) 이야기 7.0 , 새롬 데이 5 쓰레드 동기화 관련 .. 5 - 1 criticalsection 내용 : 공유 데이터나 리소스(메모리나 파일) 에 대한 접근을 하나의 스레드로 제한 특징 : 동일한 프로세스 내의 스레드간 동기화에 사용한다. 5 - 2 mutex 내용 : 크리티컬 섹션과 동일한 기능을 가지지만 차이가 있다면 다른 프로세스에 속 특징 : 다른 프로세스 내의 스레드간에 사용가능 5 - 3 semaphore 내용 : 뮤텍스와 유사하지만 동시에 수행할 수 있는 스레드를 여러 개로 제한할 수 있 특징 : 다른 프로세스 내의 스레드간에 사용가능 5 - 4 event 내용 : 스레드간 동기화 방법 중 가장 널리 사용되는 것으로 하나의 스레드가 다른 스 특징 : 다른 프로세스 내의 스레드간에 사용가능 시리얼 통신에서 염두할 것은.. 데이터에 신빙성과..( 깨진 데이터를 가지고 장난 하 도스에서는 인터럽트를 직접 건드려서 시리얼 통신을 하지만.. 윈도우에서는 핸들이라 ( 공장 자동제어 쪽에서는 특성상 크리티컬 섹션이 용이함.. ) <= DLL 이나 ACTIVE X 어떤 스레드를 사용할지는 그 상황에 맏게 적절히 선택해야 한다.. 델파이에서는 시리얼 통신을 컴포넌트야 장난 이고.... 위에 개념만 알면.. API 함수 하면 돼겠쥐영.. 참고.. 시리얼 통신할때에는 아스키코드 테이블 필수입니다... --------------------------
이 다음 부분은 퍼온 것 임 --------------------------- 통신 프로그램 만들기 제1장 통신 프로그램 만들기 본 장에서는 RS232C 포트 즉 직렬(serial) 포트를 통해서 데이터를 전송하는 방법에 본 장에서는 모뎀을 직접 컨트롤하는 명령어는 사용하지 않고 단순히 직렬 포트에 데 따라서 모뎀 제어까지 하지 않아도 전화를 이용한 통신 프로그램을 작성할 수 있습니 보통 공장자동화에서 많은 제어 장치 중 컴퓨터가 로봇을 제어하기 위한 명령문을 받 q 통신을 하는 함수 전체 보기 1.RS232C에 사용되는 신호 본장에서 사용하는 함수들은 Win32API에서 RS232C를 사용합니다. 이때 나오는 신호 용 2.RS232C 포트에 접속하기 통신을 하기 위한 방식이 윈도 95로 넘어가면서 파일 개념으로 변화되었습니다. 즉 통 포트를 파일처럼 여는 함수가 CreateFile입니다. HANDLE CreateFile( 위 함수는 포트만 여는 데 사용하는 함수가 아닌 일반적인 파일이나 또는 디바이스를 이 곳에서 파일이 열리면 열려진 핸들이 바로 idComDev에 설정됩니다. 이 핸들러는 계 이벤트 설정과 체크 통신 포트를 통해서 들어오는 데이터는 많은 종류가 있습니다. 글자가 들어오는 경우 BOOL SetCommMask(HANDLE hFile,DWORD dwEvent); 예를 들어서 문자가
수신되었다는 것을 마스크로 설정하고자 한다면 다음과 같습니 SetCommMask(idComDev, EV_RXCHAR); WaitCommEvent(idComDev, &dwEvtMask, NULL ); 위의 함수의 2번째 인자는 OVERLAPPED구조체 입니다. 보통 통신을 할 경우 동기화를 SetCommMask(idComDev, EV_RXCHAR|EV_TXEMPTY); 통신 버퍼 초기화 input, output 버퍼를 모두 4096이라고 설정하려 한다면 다음과 같이 하면 됩니다. PurgeComm( idComDev, PURGE_TXABORT | PURGE_RXABORT | 이렇게 함으로써 실질적인 컴포트가 열렸는데 컴포트를 통해서 데이터를 교환하려면 윈도의 컴포트 통신도 마찬가지로 위와 같은 내용을 설정해 주어야 합니다. 그럼 이 typedef struct _DCB { // dcb DWORD fErrorChar: 1; // enable error replacement 위의 것을 전부 설정한다기보다 우리가 필요한 부분만 설정하면 나머지는 기본적으로 DCB dcb; 다음 이 DCB를 idComDev에 연결시킵니다. SetCommState( idComDev, &dcb ) ; 포트에서 데이터를 읽고 있을 경우 다른 작업을 하는 것이 좋습니다. 이런 것을 비동 이런 구조체가 바로 OVERLAPPED입니다. 이벤트를 설정합니다. 이렇게 함으로써 COM 포트에의 접속이 끝났습니다. 데이터 쓰기 첫번째 인자는 파일 핸들러이고, 두 번째 인자는 써야 할 데이터, 세 번째 인자는 써 데이터 읽기 ReadFile( idComDev, lpszBlock,dwLength, &dwLength, &osRead ) ; 컴포트 닫기 데이터 큐 컴포트에서는 데이터가 어쩔 때는 1개씩, 어쩔 때는 수십 개씩 한꺼번에 들어옵니다. "안녕하세요 이곳은 천리안입니다" 이렇게 표시를 해주어야 합니다. 그런데 들어오는 대로 화면에 표시하면 위와 같이 표 0x11다음 0x13이 안 오고 0x44가 올 수도 있지 않습니까? 즉 들어오는 뒤의 데이터를 본 장의 예제에서는 큐를 사용하지 않고 그냥 에디터 상자에 데이터를 들어오는 대로 w COMM 클래스 만들기 통신은 매우 많이 쓰이는 분야 중 하나입니다. 또한 많이 쓰지 않아도 클래스로 만들 CComm 헤더 // ascii definitions // global stuff // Construction // Attributes // Operations CComm::CComm( ) //BEGIN_MESSAGE_MAP(CComm, CObject) //에러 리턴 NULL ) ; // no
name if (!SetCommMask(npComm->idComDev, EV_RXCHAR )) //이곳에서 데이터를 받는다. CloseHandle( os.hEvent ) ; //이벤트 창구 설정 CommEx 프로그램은 위에서 만든 CComm 클래스를 사용하여 통신을 하는 아주 간단한 통 콤보 상자에서 "Atz"를 치고 "Atdt 36792000"하여 천리안에 접속을 했을 때 출력되 이 부분은 독자 여러분들이 수정하여 새로운 프로그램으로 만들어 보기 바랍니다. 본 프로그램을 제작한 부분에 대해서는 뷰
부분의 소스만 기재합니다. 전에 모두 다 프로그램 소스 // CommExView.h : interface of the CCommExView class |