시리얼 통신 카드
(Serial Communication Board)

   
업데이트:2017년 2월


1. 시리얼 통신이란 무엇입니까?

직렬 통신은 하나 또는 두 개의 전송 라인을 사용하여 데이터를 송수신하는 통신 방법으로, 한 번에 한 비트 씩 데이터를 지속적으로 주고 받습니다.

적은 신호선으로 연결이 가능하기 때문에 선재와 중계 장치의 비용이 억제되는 등의 장점이 있습니다.








2. 시리얼 통신 규격

RS-232C / RS-422A / RS-485는 EIA (전자 산업 협회) 통신 표준입니다.

이러한 통신 표준 중 RS-232C는 다양한 응용 분야에서 널리 채택되어 왔으며 컴퓨터의 표준 장비이기도합니다.

모뎀 및 마우스 연결에 사용됩니다. 센서 및 액추에이터에는 이러한 인터페이스가 포함되어 있으며 대부분이 직렬 통신을 통해 제어 할 수 있습니다.


RS-232C


이 직렬 통신 표준은 널리 사용되며 종종 표준으로 컴퓨터에 장착됩니다."EIA-232"라고도합니다.

신호선과 커넥터의 목적과 타이밍이 정의되었습니다 (D-sub 25 핀 또는 D- sub 9 핀).

현재 표준은 신호선을 추가하여 개정되었으며 정식으로 "ANSI / EIA-232-E"라고합니다. 그러나 지금은 일반적으로 "RS-232C"라고도합니다.


RS-422A

이 표준은 짧은 전송 거리 및 느린 전송 속도와 같은 RS-232C 문제를 수정합니다. "EIA-422A"라고도합니다.

신호선의 목적과 타이밍은 정의되었지만 커넥터는 아닙니다. 많은 호환 제품 주로 D-sub 25 핀 및 D-sub 9 핀 커넥터를 사용합니다.


RS-485
이 표준은 RS-422A에서 몇 가지 연결 장치의 문제점을 수정합니다. "EIA-485"라고도합니다.

RS-485는 RS-422A와 호환 가능한 표준입니다.

신호선의 목적과 타이밍이 정의되지만 커넥터 대부분의 호환 제품은 주로 D-sub 25 핀 및 D-sub 9 핀 커넥터를 채택합니다.


매개변수
RS-232C
RS-422A
RS-485
전송 모드
단면
멀티포인트, 심플렉스
멀티포인트, 멀티플렉스
최대 접속 대수
1 드라이버, 1수신기
1개의 드라이버, 10개의 수신기
32 드라이버, 32 수신기
최대 전송 속도
20kbps
10Mbps
10Mbps
최대 케이블 길이
15m
1,200m
1,200m
동작 모드
단일 종단 형 (불균형)
차동 (균형 유형)
차동 (균형 유형)
연결 이미지
특징
단거리, 전이중, 1:1 연결
장거리, 전이중, 반이중, 1:N 연결
장거리, 전이중, 반이중, N:N연결





3. 신호 배치 및 커넥터

RS-232C에서는 사용할 커넥터와 신호 할당이 정의되고 표준화되었습니다.

그림은 D-sub 9 핀 신호 지정과 신호 라인을 나타냅니다.






1. DCD : Data Carrier Detect, 반송파 감지

2. RXD : Receive Data, 수신 데이터

3. TXD : Transmit Data, 전송 데이터

4. DTR : Data Terminal Ready, 데이터 터미널 준비

5. SG : Signal Ground, 신호 접지 또는 공통 리턴

6. DSR : Data Set Ready, 데이터 세트 준비

7. RTS : Request To Send, 송신 요구

8. CTS : Clear to Send, 송신 허가

9. RI : Ring Indicator, 착신 표시

CASE FG : Frame Ground, 접지





4. 연결 방법

RS-232C에서는 커넥터와 신호 할당이 표준화되어 많은 표준 호환 케이블이 상업적으로 제공됩니다.

그러나 장비는 다음 유형으로 제공되며 연결되는 장비에 따라 직선 케이블 또는 크로스 오버 케이블 필요합니다.


DCE

데이터 통신장비. 이 용어는 모뎀, 프린터 및 플로터와 같이 수동적으로 작동하는 장비를 나타냅니다.


DTE

데이터 터미널 장비. 이 용어는 컴퓨터와 같이 능동적으로 작동하는 장비를 나타냅니다.

크로스 오버 케이블 연결(1)
크로스 오버 케이블 연결(2)
직선 케이블 연결






5. 반이중 통신 및 전이중 통신

전이중 통신 : 송수신 모두 자체 전송 회선이 있어 동시에 데이터를 송수신 할 수 있는 방법입니다.

반이중 통신 : 하나의 전송 회선을 사용하여 송수신을 전환하면서 통신하는 방식입니다. 이때문에 동시 통신이 불가능합니다.







6. 비동기 통신 및 동기식 통신

직렬 통신에서 데이터는 하나의 신호선을 사용하여 한번에 한비트 씩 전송되므로, 수신측에서 데이터를 정확하게 수신하려면 송신측에서

각 비트를 전송할 속도를 알아야 합니다.

RS-232C에서 동기식 통신 및 비동기 통신 표준이 정의 되었습니다.

측정 또는 제어에 사용되는 주변 장치의 경우, 일반적으로 앞서 언급한 전이중 통신과 비동기 통신이 일반적으로 사용됩니다.


동기식 통신

이 방법은 다른 장비에서 생성된 클럭 또는 자체 생선된 클럭에 동기된 데이터를 송수신 합니다.

송신은 송신측에서 각 비트에 추가된 동기 신호를 기반으로 수행됩니다.

이는 데이터 전송 효율이 좋지만 전송 절차가 복잡해진다는 단점이 있습니다.


비동기 통신

이 방법은 각 측의 자체 생성 클록에 동기화 된 데이터를 송수신합니다.

전송 속도 설정이 일치하지 않으면 정상적인 통신이 불가능합니다. 즉, 송신 측과 수신 측 모두 초기에 전송할 비트 수에 대해 각 초,

그리고 나서 각각은 그 전송 속도와 일치하는 주파수의 동기화 신호를 생성한다. 비동기 통신의 경우 한 번에 한 비트 씩 데이터를 송수신하므로

각 측의 통신 조건이 초기에 일치하지 않으면 정상적인 통신이 불가능합니다.

컴퓨터 (컨트롤러) 측 설정을 주변 기기 측에 일치 시키면 설정은 일반적인 설정 방법입니다.


전송 속도

초당 보낼 비트 수를 지정합니다.

단위는 bps (초당 비트 수)이며 300, 600, 1200, 2400, 4800, 9600, 19200 등에서 선택됩니다.

설정과 타이밍이 일치하면 데이터 구분 기호가 일치하고 데이터를 정상적으로 송수신 할 수 있습니다.

이 때문에 올바른 타이밍을 얻기 위해 각 데이터 항목 (1 바이트)에 시작 비트가 추가됩니다.







정지 비트 길이


이 값은 데이터의 끝을 나타내는 비트의 길이를 설정합니다.

이것은 일반적으로 1 비트, 1.5 비트 또는 2 비트로 선택됩니다. 시작 비트 길이는 1 비트로 고정되어 있으므로이 설정이 필요하지 않습니다.



데이터 비트 길이

이것은 각 데이터 항목이 구성되는 비트 수를 지정합니다.

사용되는 장치에 따라 다르지만 일반적으로 영숫자 및 기호에는 7 비트를 지정하고 1 바이트 이진 데이터에는 8 비트를 지정합니다.



패리티 체크 설정

데이터에서 오류를 찾는 기능이며 "짝수 패리티 검사 (EVEN)", "홀수 패리티 검사 (ODD)"또는 "패리티 없음 검사 (없음)"중에서 선택됩니다.



패리티 검사 세부 정보


송신 측에서는 EVEN에 대해서도 "1"데이터 비트의 수를, ODD에 대해서는 홀수가되도록 데이터에 "1"또는 "0"의 패리티 비트를 추가합니다.

수신 측에서는 " 1 "데이터 비트가 카운트되고 EVEN 일 때도 숫자가 ODD 인 경우 데이터가 올바른 것으로 판단됩니다.

예 : 짝수 패리티 검사







핸드 셰이크 (흐름 제어)

장치간에 데이터를 송수신 할 때 수신 측이 수신 상태가 아닌 경우 데이터를 전송할 때 데이터가 손실 될 수 있으므로 상대측의 상태를 확인하는

것이 통신에서 중요합니다.

핸드 셰이크 (흐름 제어)는 통신의 신뢰성을 유지합니다. 송신 측에서 "데이터를 송신 중"이라고하는 수신 측으로 신호가 보내지고 수신 측에서

그 신호를 수신하여 신호선에서 데이터를 읽습니다. 그러면 송신 측에 응답을 보냅니다. "데이터가 수신되었습니다."즉, 각 측면에서 데이터

송수신을 확인하면서 데이터를 전송할 수 있습니다.



소프트웨어 핸드 셰이크 (XON / XOFF 흐름 제어)


이는 "XOFF 코드"가 수신 측에서 수신 버퍼의 남아있는 여유 공간이 적어지면 송신이 일시적으로 중단되도록 요청하기 위해 송신 측으로 전송되는

제어 방법입니다. 충분한 여유 공간
이있는 경우, "XON 코드"는 송신 측이 송신을 다시 시작하도록 요청하기 위해 전송됩니다.



하드웨어 악수

제어 흐름 (RTS 또는 DTR)은 소프트웨어 흐름 제어에서 XON / XOFF 코드를 전송하는 대신 자동으로 켜지거나 꺼집니다.

RTS 신호와 CTS 신호 또는 DTR 신호와 DSR 신호는 서로 연결되어야합니다.







7. 프로그래밍 (Visual Basic)


7-1. Visual Basic에서 직렬 포트 제어


Visual Basic에서 직렬 포트를 제어하려면 .NET Framework SerialPort 클래스를 사용하는 메서드와 Win32 API를 사용하는 메서드가 있습니다.

여기에서는 상대적으로 간단한 SerialPort 클래스를 사용하여 데이터를 보내고받는 프로그래밍 예제를 소개합니다.



7-2. .NET Framework SerialPort (SerialPort 클래스)


COM 포트 클래스 (SerialPort 구성 요소)가 .NET Framework에 Ver. 2.0. Visual Basic 2005 이상에서는 COM 포트를 비교적 간단하게 제어 할 수있는

.NET Framework SerialPort 구성 요소를 사용할 수 있습니다.

Visual Basic 6과 같은 이전 버전에서 자주 사용되었던 MSComm 컨트롤을 더 이상 사용할 수 없습니다.

.NET Framework SerialPort 기능

. 직렬 포트에 연결하기위한 설정

. 명령 전송 (RTS 및 CTS와 같은 다양한 직렬 인터페이스 제어 신호 및 상태 입력 제어)

. 데이터 전송

. 직렬 연결 및 오류 모니터링 및 처리 중 다양한 이벤트 (제어 신호에 상태 변화가있을 때 및 통신 중 오류가 발생할 때 이벤트가 생성 될 수 있음)

. 직렬 포트에 연결하기위한 설정




7-3. .NET Framework SerialPort 프로그래밍 포인트

- NewLine (편의상 "구분자 코드"(종결 자, 구분 기호)로 표시됨)를 포함하는 데이터를 쓰고 읽을 수 있습니다.

  구분 기호 코드를 추가하면 연속 데이터의 구분 기호로 자동 판단됩니다.

  송신시 "WriteLine"을 사용하면 지정된 구분 기호 코드가 자동으로 데이터 문자열에 추가됩니다.


- 양방향 처리는 인터럽트 (이벤트 구동) 처리로 가능합니다. "DataReceived"및 "PinChanged"이벤트를 사용하면 제어 신호선의 변경 및 데이터

  수신과 같은 이벤트가 발생할 때 알림을 수신 할 수 있습니다. 인터럽트는 이벤트가 발생할 때 발생하므로 필요한 처리를 즉시 수행 할 수 있습니다.

SerialPort 구성 요소 붙여 넣기

Visual Basic "도구 상자"에서 SerialPort 구성 요소를 선택하고 구성 요소를 마우스 왼쪽 단추로 끌어서 끌어다 놓아 폼에 붙여 넣습니다.

구성 요소의 붙여 넣기가 끝나면 구성 요소가 양식 아래에 붙여 넣어집니다.







속성 구성

구성 요소의 등록 정보 창으로 전환 한 것으로 보이는 구성 요소를 클릭하십시오.

"PortName"속성으로 통신에 사용될 포트 번호를 설정하십시오. 초기 값은 "COM1"입니다.

"BaudRate"속성으로 전송 속도를 설정하십시오. 초기 값은 "9600"입니다. RTS 사용 여부와 같은 기타 속성을 구성 할 수도 있습니다.





이벤트 설정도 구성 할 수 있습니다.






속성 창의 이벤트 버튼을 클릭하여 구성 요소의 이벤트 목록을 표시합니다.

사용할 이벤트를 선택하고 두 번 클릭하면 해당 이벤트 루틴이 추가됩니다. 이 위치에서 이벤트가 발생했을 때 처리 코드를 작성하십시오.

이벤트 유형

DataReceived 이벤트

Chars : 문자가 수신되고 데이터가 수신 버퍼에 저장되면

Eof : EOF (파일 끝)가 수신되고 이것이 수신 버퍼에 저장되면




ErrorReceived 이벤트


Frame : 프레이밍 오류가 감지되었습니다.

Overrun : 오버런 오류가 감지되었습니다.

RxOver : 버퍼 오버플로가 감지되었습니다.

RxParity : 패리티 오류가 감지되었습니다.

TxFull : 송신 버퍼가 가득 차서 버퍼에 데이터를 저장할 수없는 경우



핀 체인지 이벤트

Break : 중단 신호가 감지되었습니다.

CDChanged : CD (Carrier Detect) 상태 변경됨

CtsChanged : CTS (Clear to Send) 상태 변경됨

DsrChanged : DSR (데이터 세트 준비) 상태 변경됨

Ring : 링 표시기가 감지되었습니다.




7.4 Win32 API를 사용하여 직렬 포트 제어

직렬 포트 프로그래밍의 경우 Wind32 API (응용 프로그래밍 인터페이스)를 호출하는 메소드도 있습니다.

Win32 API 및 프로그래밍 언어에 대한 광범위한 지식이 필요하지만보다 고급이고 유연한 프로그래밍이 가능합니다.

Win32 API는 Windows가 표준으로 제공하는 기능 (함수)입니다. DLL로 제공되며 Windows에서 실행되는 모든 응용 프로그램은이를 공유하고

사용할 수 있습니다.

Windows는 약 1000 가지 유형의 API 기능으로 기본 기능을 제공하며 응용 프로그램 소프트웨어는이 기능을 결합하여 빌드됩니다.

Visual Basic 및 Visual C에는 많은 명령이 있지만 이는 모든 Windows 기능을 사용할 수 있다는 것을 의미하지 않으므로 필요에 따라 API 함수를

호출하고 사용해야합니다. 직렬 포트를 제어하려면 다음 API 함수를 사용하십시오.



직렬 포트를 제어하는 데 사용되는 Win32 API

포트 열기 : CreateFile

포트 구성 : SetCommState, SetCommTimeouts

데이터 전송 : WriteFile

데이터 수신 : ReadFile




8. 직렬 포트 열기 / 닫기 - Visual Basic 2005 직렬 통신 프로그램 -


이 예제 프로그램은 USB 연결을 통해 COM1에 할당 된 COM-1(USB)H보드에 RS-232C 1 포트 유형을 사용하고 COM 포트를 열고 닫아 예외 처리를

수행합니다.

사용된 COM 포트
COM1
전송 속도
9600 bps
패리티 설정
없음
데이터 비트 길이
8 비트
정지 비트
1 비트
핸드쉐이킹
사용하지 마세요
RTS 라인
무효




8. 1 화면의 생성과 속성 설정

Visual Basic 2005를 시작하고 새 프로젝트를 만들고 아래에 표시된 것과 같은 양식을 만듭니다.

SerialPort 구성 요소를 양식에 붙여 넣습니다. 직렬 포트 구성 요소 속성 (전송 속도와 같은 통신 설정)을 확인하십시오.



객체
TextBox1
COM1
객체
버튼 1
연결
객체
버튼 2
연결 끊기





8. 2 오류 처리 (예외 처리)


프로그램이 예외 처리를 수행하지 않을 때 예외 오류가 발생하면 응용 프로그램이 강제 종료됩니다.

이를 피하기 위해 프로그램은 예외 처리를 수행합니다. 예외가 처리되면 응용 프로그램이 강제 종료되지 않습니다.

아래의 이미지 예외가 처리 될 때 메시지 상자를 표시하여 사용자에게 경고하는 예제입니다.






8.3 프로그램 코드 예제

연결 단추 및 연결 끊기 단추를 클릭 할 때 처리를 추가하십시오. Form1.vb에서 다음 코드를 작성하십시오.

각 오브젝트 (단추 등)를 두 번 누르면, 오브젝트가 단추 인 경우 다음 코드를 작성하십시오. 버튼을 눌렀을 때 처리가 열립니다.

여기에서 수행하려는 처리를위한 코드를 작성하십시오.

포트 열기

Private Sub Button1_Click (... : 연결 버튼을 눌렀을 때의 처리

SerialPort1.PortName = TextBox1.Text '열려는 포트의 이름을 저장합니다.

SerialPort1.Open () '포트를 엽니 다.

End Sub



포트 닫기

Private Sub Button2_Click (... : 연결 해제 버튼을 눌렀을 때의 처리

      If SerialPort1.IsOpen = True Then '포트가 열렸습니다.

           SerialPort1.Close () '포트를 닫습니다.

      End If

End Sub






예외 처리

이 코드 예제는 위 코드에 예외 처리를 추가하고 예외 오류의 세부 정보를 표시합니다.

Private Sub Button1_Click (... : 연결 버튼을 눌렀을 때의 처리
      Try '예외 처리 시작
          If SerialPort1.IsOpen = True Then '포트가 열렸습니다.
                MessageBox.Show ( "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                Exit Sub
          End If
                SerialPort1.PortName = TextBox1.Text '열려는 포트의 이름을 저장합니다.
                SerialPort1.Open () '포트를 엽니 다.
      Catch ex As Exception '예외 처리
                MessageBox.Show (예 : 메시지, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error)
      End Try
End Sub



Private Sub Button2_Click (... : 연결 해제 버튼을 눌렀을 때의 처리

           If SerialPort1.IsOpen = True Then '포트가 열렸습니다.
              SerialPort1.Close () '포트를 닫습니다.
           End If
End Sub



Try-Catch-End Try 구문의 경우 Visual Basic 2005 참조를 확인하십시오.







9. 데이터 전송 - Visual Basic 2005 시리얼 통신 프로그램

이 예제 프로그램은 USB 연결을 통해 COM1에 할당 된 COM-1(USB)H보드 RS-232C 1 포트 유형을 사용하고 기본 구분 기호를 포함하여

텍스트 상자에 입력 된 문자열 데이터를 보냅니다.



사용된 COM 포트
COM1
전송 속도
9600 bps
패리티 설정
없음
데이터 비트 길이
8 비트
정지 비트
1 비트
핸드쉐이킹
사용하지 마세요
RTS 라인
무효
구분 기호 코드
LF (줄 바꿈)


9. 1 양식 작성 및 특성 구성

Visual Basic 2005를 시작하고 새 프로젝트를 만들고 왼쪽에 표시된 것과 같은 양식을 만듭니다.

SerialPort 구성 요소를 양식에 붙여 넣습니다. 직렬 포트 구성 요소 속성 (전송 속도와 같은 통신 설정)을 확인하십시오.


객체
TextBox1
COM1
객체
버튼 1
연결
객체
버튼 2
연결 끊기
객체
TextBox2
객체
Button3
보내다




9.2 NewLine (구분 기호 코드)

구분 기호 코드는 데이터의 분리 문자 또는 분리 기호를 의미합니다.

SerialPort 클래스의 기본 구분 기호 코드는 "LF"이지만 연결될 장비에 대해 구성되어야합니다.

해당 구분 기호 코드는 다음을 참조하십시오. 연결된 장치.

. 연속 데이터의 단절은 데이터에 구분 기호 코드를 추가하여 판단합니다.

. 구분 기호 코드는 Visual Basic 도움말의 NewLine 값과 동일한 정의입니다.

.WriteLine 메서드를 사용할 때 NewLine 값이 송신 버퍼에 저장된 송신 데이터에 추가 된 다음 데이터가 전송됩니다.

 기본 NewLine 값은 LF (줄 바꿈)입니다.

. CR (캐리지 리턴), LF (줄 바꿈) 및 CR + LF가 분리 문자로 자주 사용됩니다.




9.3 프로그램 코드 예제

연결 단추 및 연결 끊기 단추를 클릭 할 때 처리를 추가하십시오. Form1.vb에서 다음 코드를 작성하십시오.

각 오브젝트 (단추 등)를 두 번 누르면, 오브젝트가 단추 인 경우 다음 코드를 작성하십시오.

버튼을 눌렀을 때 처리가 열립니다. 여기에서 수행하려는 처리를위한 코드를 작성하십시오.

Private Sub Button1_Click (... : 연결 버튼을 눌렀을 때의 처리
        Try '예외 처리 시작
             If SerialPort1.IsOpen = True Then '포트가 열렸습니다.
                   MessageBox.Show ( "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
                   Exit Sub
             End If
                   SerialPort1.PortName = TextBox1.Text '열려는 포트의 이름을 저장합니다.
                   SerialPort1.Open () '포트를 엽니 다.
        Catch ex As Exception '예외 처리
                   MessageBox.Show (ex.Message, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
End Sub




Private Sub Button2_Click (... : 연결 해제 버튼을 눌렀을 때의 처리
             If SerialPort1.IsOpen = True Then '포트가 열렸습니다.
                   SerialPort1.Close () '포트를 닫습니다.
             End If
End Sub



Private Sub Button3_Click (... : 보내기 버튼을 눌렀을 때의 처리
             If TextBox2.Text.Length = 0 Then '보내기 데이터가 없으면 오류가 발생합니다.
                    MessageBox.Show ( "문자열 입력 오류", MessageBoxButtons.OK, MessageBoxIcon.Error)
                    Exit Sub '처리 중단
             End If

             Try
                    SerialPort1.WriteLine (TextBox2.Text) '송신 버퍼에 데이터 쓰기
             Catch ex As Exception '예외 처리
                     MessageBox.Show (ex.Message,"오류", MessageBoxButtons.OK, MessageBoxIcon.Error)
             End Try
End Sub



코드의 구분 기호를 변경하고 데이터를 보내려면 다음과 같이 코드를 작성하십시오.

Dim strSend As String 'NewLine을 저장할 문자열 변수

strSend = SerialPort1.NewLine 'NewLine을 취득

strSend = strSend.Replace (vbLf, vbCr) '문자열에서 LF를 CR로 변환하려면

SerialPort1.NewLine = strSend 'NewLine에 대치 된 구분 기호 저장

Try
         SerialPort1.WriteLine (TextBox2.Text) '보낼 데이터 쓰기 버퍼
Catch ex As Exception '예외 처리
         MessageBox.Show (ex.Message, "오류", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try



Try-Catch-End Try 구문의 경우 Visual Basic 2005 참조를 확인하십시오.