본문 바로가기
코스웨어/14년 스마트컨트롤러

2014.09.03 업무보고 출번 21 이재우

by 알 수 없는 사용자 2014. 9. 3.
728x90
반응형

데이터 통신(직렬,병렬)의 종류-RS232,RS422,RS485

 

마이크로프로세서는 주변장치를 통해서 외부와 정보를 교환 할 수 있으며 일반적으로 정보를 교환하는 방법으로는 병렬통신과 직렬통신 2가지로 나눌 수 있다.
 일반적으로 컴퓨터내의 장치와 정보를 교환 할 때는 통상적으로 고속의 통신속도를 필요로 하기 때문에 한번에 많은 양의 데이터를 처리 할 수 있는 병렬 통신 방식을 주로 쓴다. 이는 대량의 정보를 빠른 시간에 한꺼번에 처리함으로써 컴퓨터의 성능을 향상 시킬 수 있기 때문인데 이것은 데이터 비트수로 나타나게 된다.( 16bit,32bit, 64bit ). HDD, FDD, CD-ROM등이 대표적인 병렬통신 방식을 사용하는 장치라 하겠다.
 하지만 모든 경우에 병렬 통신 방식을 사용하는 것은 아니다. 병렬통신은 장비를 구현함에 있어서의 어려움과 거리의 제한성, 많은 비용이 든다는 단점을 갖는다. 또한 많은 양의 데이터 전송을 필요로 하지 않는 곳에 있어서 병렬통신은 비효율 적이라 할 수 있다. 이러한 이유로 컴퓨터가 외부와의 통신을 할 때는 직렬 통신 방식을 많이 사용하게 된다.
 직렬통신 방식이란 데이터비트를 1개의 비트단위로 외부로 송수신 하는 방식으로써 구현하기가 쉽고, 멀리 갈 수 있으며 기존의 통신선로 등을 활용할 수 있어서 비용절감이 크다는 장점을 갖고 있다. 대표적인 직렬통신 방식으로는 LAN , RS232 , X.25등이 있다.
 현재 시스템베이스에서 생산하는 시리얼 포트의 종류로는 RS232, RS422, RS485이 있다. 이것은 UART에서 나오는 신호를(TTL 레벨)  현장 특성에 따라 통신 방식을 변환해줌으로써 원하는 통신환경에 적용 가능하게 만들어 준다. 
 

 

기본적인 시리얼 통신 장비의 block diagram 을 보면 PC등에서 나오는 병렬 신호를 직렬 신호로 바꿔주는 UART가 존재하게 된다. 여기서 나오는 직렬 신호는 TTL 레벨 값을 갖기 때문에 노이즈에 약하고 통신거리에 제약을 받게 된다. 이를 극복하기 위해 Drive IC를 사용하며 이를 통하여 통신 방식이 구분되게 된다. 각각의 통신 방식은 고유의 특성이 있으며 통신환경에 맞게 선택하여 적용하게 된다.

  
RS-232C
 
RS-232C는 「 Recommend Standard number 232 」의 약어이고,「 C 」는 표준 규격의 최신판을 나타내는 것이다.거의 대부분의 PC의 시리얼 포트는 RS-232C의 서브 세트(9핀)가 표준 장비되어 있다.풀 규격은 25-pin의 "D"형태 커넥터로,이 중 22핀을 통신에 사용한다. 그러나,보통의 PC 통신에서는 이들 대부분의 핀은 사용되지 않는다.대부분의 최신 PC에는 통상 수컷(male)의 9핀 "D" 타입 커넥터가 장비되고 있다.
 

  

위쪽 그림은 RS 232C 신호 레벨을 나타낸것으로 3V 이상의 신호 논리적으로 0 나타내며 3V이하의 전기적 신호가 들어오면 논리적으로 1을 나타내게 된다. 이를 이용하여 디지털 데이터를 전송 할 수 있다.
 
 
RS232 통신에서 가장 중요한 점은 기준이 필요하다는 것이다. 위에서 말한 3V, -3V등은 기준 값으로 부터 얼마만큼의 에너지를 갖느냐는 말인데 만약 통신하는 두 장비의 기준점이 틀리 다면 정상적인 통신을 할 수 없다는 말이 된다. 양단에 기준점을 맞춰주는 작업이 Gnd 선을 연결 하는 것인데 RS232 통신은 최소한 3가닥(Tx, Rx, Gnd)이 연결되어야 정상적인 송수신 작업이 이루어 질 수 있다.
 
 

 

TXD - Transmit Data  

비동기식 직렬통신 장치가 외부 장치로 정보를 보낼 때 직렬통신 데이터가 나오는 신호선이다.  
RXD - Receive Data  
외부 장치에서 들어오는 직렬통신 데이터를 입력 받는 신호선이다  
RTS Ready To Send  
컴퓨터와 같은 DTE장치가 모뎀 또는 프린터와 같은 DCE장치에게 데이터를 받을 준비가 됐음을 나타내는 신호선이다.  
CTS - Clear To Send  
모뎀 또는 프린터와 같은 DCE장치가 컴퓨터와 같은 DTE장치에게 데이터를 받을 준비가 됐음을 나타내는 신호선이다.
 DTR - Data Terminal Ready  
컴퓨터 또는 터미널이 모뎀에게 자신이 송수신 가능한 상태임을 알리는 신호선이며 일반적으로 컴퓨터 등이 전원 인가 후 통신 포트를 초기화한 후 이 신호를 출력시킨다.
  DSR - Data Set Ready  
모뎀이 컴퓨터 또는 터미널에게 자신이 송수신 가능한 상태임을 알려주는 신호선이며 일반적으로 모뎀에 전원 인가 후 모뎀이 자신의 상태를 파악 한 후 이상이 없을 때 이 신호를 출력시킨다.  
DCD - Data Carrier Detect  
모뎀이 상대편 모뎀과 전화선 등을 통해서 접속이 완료되었을 때 상대편 모뎀이 캐리어신호를 보내오며 이 신호를 검출하였음을 컴퓨터 또는 터미널에 알려주는 신호선이다.  
RI - Ring Indicator  
상대편 모뎀이 통신을 하기위해서 먼저 전화를 걸어오면 전화 벨이 울리게 된다. 이때 이 신호를 모뎀이 인식하여 컴퓨터 또는 터미널에 알려주는 신호선이며 일반적으로 컴퓨터가 이 신호를 받게 되면 전화벨 신호에 응답하는 프로그램을 인터럽터 등을 통해서 호출하게 된다.
 
 
RS485

 

EAI에 의해 전기적인 사양이 규정 되어 있음

EIA에 의해 물리적인 코넥터 및 핀에 대한 사양은 규정되어 있지 않음

RS485에서는 'Non-Echo Mode'와 'Echo Mode' 두 가지 mode통신 방식

Half Duplex

1.2km통신 거리

 

 
RS485 통신은 전기적 특성에 있어서 RS422 통신 방식과 동일합니다. RS485 역시 + 선과 선 두가닥의 전위차 (differential)를 사용하여 데이터를 전송하게 됩니다. 다만 RS485와 RS422 통신 방식의 가장 큰 차이는 RS422통신은 전이중 방식을 사용하여 통신 시 필요한 회선이 4가닥이지만 이와는 달리 RS485 통신은 반 이중 방식의 통신이기 때문에 2가닥의 회선만을 이용하게 됩니다. RS485는 "TRXD+", "TRXD-" 라는 각각의 회선에서 모두 송신과 수신을 수행 한다는 것입니다.

 

Connector 사양

 

 

 

RS422

 

기본적으로 RS422 은 differential mode로 송수신하게 된다. Differential 이라는 것은 말뜻 그대로 두 선의 전위차이를 이용하여 데이터를 보내는 것을 말한다. 즉 두 라인의 전위차가 0.2V이상이 되면 논리적으로 1 ,-0.2V이하가되면 논리적으로 0을 의미하게 되는 것이다.  

 

 
RS422 통신방식에서 가장 중요한 점은 Differential mode 로데이터를 전송한다는 것이다. 이점 때문에 RS232 통신에 비해 거리 확장이 가능하며 노이즈에 강할 수 있는 것이다. 또한 Gnd 선 연결 없이도 통신이 가능할 수 있다.
 

 

예를 들어 통신선로 중간에 노이즈가 발생한다면 line A, line B에 동시에 영향을 주게 된다. 하지만 받는 입장에서 보았을 때 두 선이 동시에 영향을 받았다는 것은 보낼 때의 전위차는 유지된다는 얘기가 된다. 그러므로 수신측에서는 line에서 노이즈가 발생되었건 말건 동일한 전위 차이를 수신하므로 아무런 문제 없이 데이터 수신이 가능한 것이다.

 

 

Multi-Drop(RS422)

 

RS232방식에 비해 RS422 과 RS485 통신의 큰 차이점은 통신거리 및 노이즈에 강하다는 것이다. 이에 부가적으로 RS422 및 RS485 통신 방식은 멀티드롭이라는 기능을 지원하는데 이것은 한번에 여러 대의 장비와 동시 통신이 가능하게 만들어 주는 것이다.

 

  RS422과 RS485 각각에서 지원하는 멀티드롭은 약간의 차이를 갖게 되는데 먼저 RS422을 알아보면 RS422 방식은 1대의 마스터와 여러 대의 슬레이브로 구성된다는 것이다.
 마스터에서는 일종의 브로드캐스트(broadcast) 방식으로 데이터를 전송하며 모든 슬레이브는 마스터에서 보내지는 데이터를 수신하게 된다.
 방법에 차이는 있겠지만 대부분의 경우 마스터에서 보내져 오는 데이터는 슬레이브의 ID를 담게 되어있다. 각각의 슬레이브는 수신된 데이터의 ID의 값을 보고 이에 따라 응답을 하게 된다.
 슬레이브에서 가장 주의 깊게 보아야 할 것은 공통 TXD 라인을 이룬다는 것이다. 모든 슬레이브의 TXD라인은 마스터의 RXD라이으로 묶이게 되는데 이는 곳 슬레이브가 동시에 데이터를 보내고자 할 경우 충돌을 일으키게 된다는 것을 의미한다. 즉 슬레이브에서 마스터로 데이터를 보내고자 할 경우 반드시 한대만 통신을 해야 한다는 것이다.
                                 ( 입출력 개폐기능 필요 )
                                주의사항 :슬레이브 간에 통신 안됨

 

Multi-Drop(RS485)

 
RS485 의 가장 큰 특징은 N : N 통신이 가능하며 최대 32개의 노드 연결이 가능하다는 것이다. RS422의 경우 1대의 마스터와 N대의 슬레이브(10대 이하) 구조로 구어야 하지만 RS485의 경우 어떠한 장비도 마스터가 될 수 있으며 또한 슬레이브도 될 수 있다.
 

 

 하나의 장비에서 보내지는 데이터는 모든 장비에서 수신하게 되며 수신 데이터를 판별하여 자신의 동작을 결정하게 된다. RS485역시 RS422과 마찬가지로 항상 선로에 접근하는 것은 1대의 장비 만이어야 하며 만약 1대 이상 선로에 접근 시 데이터 충돌이 발생하여 정상 통신을 할 수 없다.

 

Echo Mode

-수신단은 항상 ON 상태

-송신단은 데이터 전송시만 ON

-TXD데이터가 RXD로 Loop Back됨(Echo)

-네트워크 상의 데이터 Callision 개폐

-Callision 발생 시 랜덤 Wait 후 재 송신

 

Non Echo Mode

-송신단과 수신단은 항상 반대로 개폐

 송신 ON-수신 OFF, 송신 OFF-수신 ON

-TXD데이터가 RXD로 Loop Back 되지 않음(Non Echo)

-네트워크사으이 데이터 Callision 개폐 불가

-수신단으로부터 ACK를 받음으로

 

 

종단 저항과 Isolation

Termination

종단저항을 붙이는 목적은

네트워크 상에서 신호를 흡수함으로써 다시 반향 되지 않도록 함.

RS422/485 네트워크에서는 버스 양단에 120오옴 저항을 붙여 줌

 

 

opto isolation

물리적으로 절연되게 하는 소자로 구성하여 절연간에 빛으로 신호를 전달

 

 

 

1 WIN API

공부 순서

1. Win32 + c++

2. MFC 기초 책 이름: MFC 구조와 원리 / 한빛 미디어

3. MFC 숙달: MFC 예제 / 한빛 미디어

카메라 드라이버 설치

첫번째 예제

 

1.1   첫번째 예제 실행해 보기

VB 실행

파일/새로 만들기/프로젝트 실행

 

프로젝트 이름 입력: 20140903 

 

다음 클릭

 

 

 

  

 

First.ccp 예제 파일을 메모장에서 열어서 main.c 붙여 넣기

 

 

 

단축키 ctrl+F5 디버그 않고 시작하기 -> First.exe 아래 실행 파일 실행

 

 

 

Main.c 함수 설명

단어 찿기 단축키: 해당단어 클릭 후 F12 누름. 해당 단어를 찿아줌 

#include <windows.h>

 

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); //WndProc 함수

HINSTANCE g_hInst;

LPCTSTR lpszClass=TEXT("안녕하세요");                                        //창 제목 

 

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance

                             ,LPSTR lpszCmdParam,int nCmdShow) //함수 본진 윈도우는 Winmain으로 시작

{

             HWND hWnd;

             MSG Message;

             WNDCLASS WndClass;                         // WndClass구초체 : 창의 모양을 좌우

             g_hInst=hInstance;

            

             WndClass.cbClsExtra=0;

             WndClass.cbWndExtra=0;

             WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);

             WndClass.hCursor=LoadCursor(NULL,IDC_WAIT);   //p50 참조 마우스 모양 설정

             WndClass.hIcon=LoadIcon(NULL,IDI_ASTERISK);  //P51 참조 창 타이틀 맨 왼쪽 아이콘 설정

             WndClass.hInstance=hInstance;

             WndClass.lpfnWndProc=WndProc;

             WndClass.lpszClassName=lpszClass;

             WndClass.lpszMenuName=NULL;

             WndClass.style=CS_HREDRAW | CS_VREDRAW;

             RegisterClass(&WndClass);

 

             hWnd=CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,

                          CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,

                           NULL,(HMENU)NULL,hInstance,NULL);

             ShowWindow(hWnd,nCmdShow);

            

             while (GetMessage(&Message,NULL,0,0)) {

                           TranslateMessage(&Message);

                           DispatchMessage(&Message);

             }

             return (int)Message.wParam;

}

 

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) //함수 본진

{

             switch (iMessage) {

             case WM_DESTROY:

                           PostQuitMessage(0);

                           return 0;

             }

             return(DefWindowProc(hWnd,iMessage,wParam,lParam));

}

 

 

728x90