시리얼 통신이란?
직렬로 된 통신 케이블을 하나 또는 두개를 사용하여 데이터를 송수신 하는 방법.
한번에 한 비트씩만 전송이 가능하여 통신 속도는 비교적 느린 편이나 훨씬 간단하며 장거리에도 사용할 수 있다.
시리얼 통신 규격
RS-232 - 원래는 터미널 단말기와 모뎀의 접속용으로 쓰였다. CCITT(현재 ITU-T)가 V.24, V.28을 권고로 하고 있던 것을 미국 EIA(The Electronic Industries Alliance)가 통신용으로 규격화한 것으로, 텔레타이프 라이터, PC 등의 DTE (Data Terminal Equipment : 데이터 단말장치), 모뎀 등의 데이터 회선 종단 장치 (DCE: Data Circuit-Terminating Equipment)를 접속해 데이터를 전송하기 위한 전기적, 기계적인 특성을 정의한 것이다.
( 출처 및 자세한 내용 : https://ko.wikipedia.org/wiki/RS-232 )
RS-422 - EIA-422(RS-422의 공식적인 명칭, 지금은 TIA-422로 되어 있다.)는 '평형 디지털 인터페이스 회로의 전기적 특성'을 규정하는 기술 규격이다.
(출처 및 자세한 내용 : https://ko.wikipedia.org/wiki/RS-422 )
RS-485 - EIA-485(이전에는 TIA/EIA-485 또는 RS-485)는 2선식 반이중 다중점 직렬 연결에 대한 OSI 모델의 물리 계층 명세이다. EIA-485 표준은 차분 신호를 정의하는데, 두 선 사이의 전압차로 데이터를 표현한다. 전압의 한쪽이 「1」레벨이면, 다른 한쪽은 「0」레벨을 나타낸다. 올바른 신호로 인식하려면 적어도 전압의 차이가 0.2V 이상 이어야 한다. 수신측은 +12V 으로부터 -7V까지의 전압이면 올바른 것이라고 인식한다.
(출처 및 자세한 내용 : https://ko.wikipedia.org/wiki/EIA-485 )
C#으로 통신 방법
폼을 생성 한 후 네임스페이스에 아래 코드를 입력using System.IO.Ports; |
시리얼 통신에 필요한 함수를 불러오는 코드다.
아래의 코드를 사용하면 폼이 실행 되면서 포트를 선언하고 오픈하는 코드이다.
private SerialPort serialPort = new SerialPort(); // 시리얼 포트를 serialPort로 선언 private void Form1_Load(object sender, EventArgs e) // Form이 실행 될때 실행 하라 { serialPort.PortName = "COM1"; // 열결 되는 시리얼 포트는 "COM1"이다. 포트 번호가 다르면 다른걸로 지정해도 됨 serialPort.BaudRate = 9600; // 데이터 전송 속도 serialPort.Open(); // 포트 오픈 }
이렇게 사용해도 상관이 없고, 콤보박스를 생성하여 아래의 코드를 작성하여도 상관이 없다.
private void Form1_Load(object sender, EventArgs e) // Form이 실행 될때 실행 하라 { string[] ports = SerialPort.GetPortNames(); comboBox1.Items.AddRange(ports); comboBox1.SelectedIndex = 0; } // 연결 되어 있는 포트들을 comboBox1에 메뉴로 불러와 주는 코드이다.
위의 코드들은 자동으로 연결 해 주는 코드이고
버튼에다가 포트 온오프 기능을 넣어도 상관이 없다.
이 코드를 버튼을 생성 한 후 필요한 부분만 적으면 된다.
if (!serialPort.IsOpen) // 시리얼 포트가 열려 있지 않을 경우 실행 { try { serialPort.PortName = comboBox1.Text; // comboBox1에 연결된 포트들이 뜨는데 이것을 클릭한 상태이다. serialPort.Open();// serialPort 오픈 serialPort2 = new SerialPort("COM4", 9600); // serialPort2를 COM4로 선언 serialPort2.Open(); // serialPort2 오픈 listBox1.Items.Add("Port On Success"); // 리슽트 박스에 메시지 출력 } catch (Exception err) { MessageBox.Show(err.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } else { serialPort.Close(); // serialPort 닫기 serialPort2.Close(); // serialPort2 닫기
listBox1.Items.Add("Port Off Success"); }
통신하는 코드는 여기서 끝.
나는 조명 장치와 아두이노에 연결을 했기 때문에 그에 대한 코드를 사용했다.
코드는 저기로..
http://jjungwooo.tistory.com/80
그럼 여기서 이만.. 부족한건 말해주면 채우거나 내가 필요할때 채운다...
'휴지통 > 실습' 카테고리의 다른 글
C#, OpenCV를 이용하여 출력한 화면을 캡쳐해서 저장해보자. (0) | 2018.07.18 |
---|---|
C#, OpenCV를 이용하여 웹캠을 작동시켜 화면을 출력하자. (0) | 2018.07.18 |
템플릿 이미지 / 매칭 이미지 유사도 찾기 (0) | 2018.07.17 |
C# OpenCVSharp Blur(블러) (0) | 2018.07.13 |
C# 코드 작성하기 전에 해야할것 (0) | 2018.07.12 |