RS232C 메모

2007.08.27 17:23
동작모드 Single-Ended
최대도달거리 약15m
최고통신속도 20kb/s
지원전송방식 Full Duplex
최대출력전압 ±25V
최대입력전압 ±15V

RS232C

데이터 단말기(DTE: Data Terminal Equipment)와 데이터 통신기(DCE: Data Communication Equipment)사이의 인터페이스에 대한 전기적인 인수, 컨트롤 핸드쉐이킹, 전송속도, 신호 대기시간, 임피던스 인수등를 정의되어 있으며 전송되는 데이터의 포맷과 내용에 대해서는 정의되어 있지않고 DTE간의 인터페이스에 대한 내용도 포함하지 않는다.



 
사용자 삽입 이미지
RS232 9pin 커넥터

핀번호 기능 신호명 방향
1 케리어 검출 CD 입력
2 데이터 수신 RXD 입력
3 데이터 송신 TXD 출력
4 데이터 단말 Ready DTR 출력
5 시그널 그라운도 GND
6 데이터 셋 Ready DSR 입력
7 송신 요구 RTS 출력
8 송신 가능 CTS 입력
9 링 인디케이터 RI 입력


사용자 삽입 이미지
RS232 25pin 커넥터

핀번호 기능 신호명 방향
2 데이터 송신 TXD 출력
3 데이터 수신タ RXD 입력
4 송신 요구 RTS 출력
5 송신 가능 CTS 입력
6 데이터 셋 Ready DSR 입력
7 시그널 그라운드 GND
8 케리어 검출 CD 입력
20 데이터 단말 Ready DTR 출력
22 링 인디케이터 RI 입력


RS232C 신호

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  
상대편 모뎀이 통신을 하기위해서 먼저 전화를 걸어오면 전화 벨이 울리게 된다.
이때 이신호를 모뎀이 인식하여 컴퓨터 또는 터미널에 알려준다.
일반적으로 컴퓨터가 이신호를 받게되면 전화벨 신호에 응답하는 프로그램을 인터럽터등을 통해서 호출하게 된다.

GND - Ground
RX-XXX방식은 전압으로 신호를 전송한다.
그러므로 기분이 되는 접지가 있어야 한다.

DTR 제어를 할 때, DTR과 상대의 DSR에 접속
DTR 제어를 하지 않을 때, 자신의 DTR과 자신의 DSR에 접속

RTS 제어를 할 때, RTS과 상대의 CTS에 접속
RTS 제어를 하지 않을 때, 자신의 RTS과 자신의 CTS에 접속


≡     ≡     ≡     ≡     ≡     ≡     ≡     ≡     ≡     ≡     ≡     ≡     ≡     ≡     ≡    

시리얼 통신을 하기위해서는 최소한 위에
파랑색으로 바꾸어 놓은 세가지는 연결해야 되는 것같다. ^^;

≡     ≡     ≡     ≡     ≡     ≡     ≡     ≡     ≡     ≡     ≡     ≡     ≡     ≡     ≡    

시리얼 통신의 동기/비동기

   ▶ 동기
각 장치들이 같은 클럭 주기를 가지고 동작한다.
어떤 장치에서 다른 장치에 데이터를 보내고 일정시간 대기한 후 데이터를 받는다.

   ▶ 비동기
각 장치별로 다른 클럭 주기를 가지고 동작한다.
클럭 주기가 장치별로 틀리기 때문에 Start bit와 Stop bit을 추가하여 데이터가 어디부터 시작해서 어디서 끝나는지 받는 쪽에 알려주어야 된다.
하나의 데이터를 보낼 때 부가적으로 아래와 같은 비트를 보내야 된다.

   <Start bit + Data bit + Parity bit + Stop bit>

시리얼 통신과 패럴렐 통신

 

시리얼 (직렬)  

패럴렐 (병렬)

데이터
전송 방식

하나의 전선에 1비트식 차례로 전송

여러 개의 전선에 동시에 전송

특징

통신이 간단하지만 속도가 느림

속도가 빠름

사용예

키보드, 마우스, 모뎀, LAN, RS232

프린터, HDD, FDD, 비디오 카드



시리얼 통신 조건

    스타트 비트
    데이터의 시작을 나타내는 비트, 일반적으로 1비트

    데이터 비트
    데이터의 한 문자를 구성하는 비트 수

    패리티 비트
    맞는 데이터인지 체크하기 위해 데이터에 덧붙이는 비트

    스톱 비트
    데이터 열의 마지막에 붙여서 다음 스타트 비트가 검출할 수 있게 함

    보레이트 (baud rate)
    1초간에 몇 비트 정산할 것인지를 지정

    X파라미터
    플로 제어용 파라미터
    수신 버퍼 안에 데이터가 일정량을 넘었을 때 Xon을 송신하고
    일정량 이하일 때 Xoff를 송신. Xon, Xoff일 때, 송신하는 문자열을 지정할 수 있음

Posted by 띠리

VB.NET에서 시리얼 통신하는 정말 간단한 예제
VB.NET은 해본적이 없어서 아직 아는게 별로 없다.
오늘 처음으로 Delgate라는 것을 봤다.
Invoke도 그렇고...

잘은 모르겠지만 예전에 VB6에서는 메세지 박스가 떠있으면
컨트롤은 다른 이벤트가 발생하지 않았다.
그런데 Delgate와 Invoke를 쓰면 메세지 박스가 떠있더라도
메세지를 받을 수 있다.


Imports System.IO.Ports    ' Serial 통신용

Imports System.Threading    ' 쓰레드용


Public Class frmMain


    Private WithEvents ComPort As New System.IO.Ports.SerialPort


    ' Delegate : 대리자를 선언하는 데 사용한다.

    ' 대리자는 형식의 Shared 메서드 또는 개체의 인스턴스 메서드를

    ' 참조하는 참조 형식이다.

    ' 이 대리자 클래스의 인스턴스를 만들기 위해 매개 변수 형식 및

    ' 반환 형식이 일치하는 모든 프로시저를 사용할 수 있다.

    ' 이러한 프로시저는 대리자 인스턴스를 통해 나중에 호출될 수 있다.


    Delegate Sub AddMessageDelegate(ByVal str As String)


    ' 컴포트 열기

    Private Sub cmdConnect_Click(ByVal sender As System.Object, _

                                ByVal e As System.EventArgs) _

                                Handles btnConnect.Click


        Try

            ComPort.PortName = "COM" & Trim(txtPort.Text)

            ComPort.BaudRate = 9600

            ComPort.Parity = Parity.None

            ComPort.DataBits = 8

            ComPort.StopBits = StopBits.One


            If (ComPort.IsOpen = True) Then

                MessageBox.Show(ComPort.PortName & "는 벌써 열려져 있는데...", "에러야", _

                MessageBoxButtons.OK, MessageBoxIcon.Error)

                Exit Sub

            End If


            Call ComPort.Open()


            btnConnect.Enabled = False

            btnDisconnect.Enabled = True


        Catch ErrEx As Exception


            MessageBox.Show(ErrEx.Message, "에러야", MessageBoxButtons.OK, MessageBoxIcon.Error)


        End Try

    End Sub


    ' 데이터 수신 이벤트

    Private Sub ComPort_DataReceived(ByVal sender As Object, _

                                ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) _

                                Handles ComPort.DataReceived


        Dim addmsg As New AddMessageDelegate(AddressOf AddMessage)

        Dim strDataReceived As String


        Try

            ' 시리얼 통신으로 데이터 수신

            strDataReceived = ComPort.ReadLine


        Catch ex As Exception


            strDataReceived = ex.Message


        End Try


        ' Control.Invoke (Delegate)

        ' 컨트롤의 내부 창 핸들이 들어 있는 스레드에서

        ' 지정된 대리자를 실행한다.

        ' .NET Compact Framework에서 지원된다.


        txtRecv.Invoke(addmsg, New Object() {"RCV>" + strDataReceived})


    End Sub


    ' 텍스트박스 메시지 표시

    Private Sub AddMessage(ByVal str As String)


        txtSend.Text = ""

        txtRecv.Text = DateTime.Now.ToString("HH:mm:ss") + " " + _

                          str + ControlChars.CrLf + _

                          txtRecv.Text

    End Sub


    ' 문자열 송신

    Private Sub btnSend_Click(ByVal sender As System.Object, _

                                ByVal e As System.EventArgs) _

                                Handles btnSend.Click


        If (txtSend.Text.Length = 0) Then

            MessageBox.Show("송신 문자열을 입력해 줘", "에러야", _

                            MessageBoxButtons.OK, MessageBoxIcon.Error)

            txtSend.Focus()

            Exit Sub

        End If


        Try

            ' 시리얼 통신으로 데이터 송신

            ComPort.WriteLine(txtSend.Text)

            Call AddMessage("SND>" + txtSend.Text)


        Catch ErrEx As Exception


            MessageBox.Show(ErrEx.Message, "에러", _

                            MessageBoxButtons.OK, MessageBoxIcon.Error)

        End Try


    End Sub


    ' 컴포트 닫기

    Private Sub btnDisconnect_Click(ByVal sender As System.Object, _

                                ByVal e As System.EventArgs) _

                                Handles btnDisconnect.Click


        btnConnect.Enabled = True

        btnDisconnect.Enabled = False

        Call ComPort.Close()


    End Sub


    Private Sub lblTitle_DoubleClick(ByVal sender As Object, _

                                ByVal e As System.EventArgs) _

                                Handles lblTitle.DoubleClick


        MsgBox("나 메세지 박스야")


    End Sub


End Class



VB8 소스
Posted by 띠리
BLOG main image
프로그래밍 공부하면서 써가는 개인 노트 (따라서 여기에 씌여있는 소스의 신빙성을 보장 못함 -.-;;) 이 블로그 보면서 틀린 점이 있으면 꼬옥 알려주세요. by 띠리

공지사항

카테고리

분류 전체보기 (323)
Win32 SDK 초보 (27)
통신관련 (11)
MFC TIP (20)
C/C++ TIP (10)
개발기타 (10)
링크 (2)
견물생심 (24)
이것저것 (8)
용어메모 (3)
데이터베이스 (32)
비주얼 베이직 (10)
하드웨어 (3)
C# (42)
Xcode (3)
델파이 (82)
홈페이지 (5)
MindStorm (0)
낙서 (5)
스크래치 (0)
기타 (6)
아두이노 (1)
라즈베리파이 (2)
안드로이드 (6)
파이썬 (0)
WEB (2)
Total : 995,623
Today : 113 Yesterday : 316