안녕하세요.
오늘은 시리얼 통신 모니터링 프로그램 클래스를 포스팅하겠습니다.
이 클래스 예제를 활용하면 시리얼 통신은 기본적으로 만들어 쓸수 있습니다.
시리얼 통신관련 설명은 아래 링크를 따라 가시면 RS232, RS485, RS422 통신 관련 설명을 확인 하실 수 있습니다.
developer-depot.tistory.com/13
[시리얼 통신]RS485
1. RS485 통신 이란? RS-232, RS-422의 확장 버전으로, 홈 네트워크를 지원하는 일종의 직렬 통신 프로토콜 표준. RS-232는 전송 속도가 낮고 전송 거리가 짧다. 이를 보완하기 위해 개발된 RS-422는 한
developer-depot.tistory.com
developer-depot.tistory.com/12
[시리얼 통신]RS422
1. RS422 통신 이란? 이종장치 사이에 직렬 통신 방식으로 데이터를 주고 받도록 하는 방법을 표준화한 통신 규격의 하나이다. 직렬 통신 규격으로 이미 채택하여 사용 중이던 RS-232C의 제약을
developer-depot.tistory.com
developer-depot.tistory.com/11?category=0
[시리얼 통신]RS232
1.RS232 통신 이란? RS232(Recommended Standard 232)는 직렬통신 방식 표준의 하나로 터미널 단말기와 모뎀의 접속용으로 쓰였다. 인터페이스는 직렬포트라고 한다. 장비간의 통신을 전송하기위한 전기적,
developer-depot.tistory.com
시리얼 통신은 PC와 이종장치간의 데이터 통신에 많이 사용됩니다. 한번 작성해두면 다양한 개발에 적용해 볼 수 있습니다.
아래 프로그램 예제를 보시면됩니다.
우선 클래스 구현 부분 입니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;
using System.Collections;
namespace SerialMonitor
{
class SerialComm
{
public ArrayList arrSerialbuff = new ArrayList(); // 수신용 List 버퍼 선언
private SerialPort sp = new SerialPort();// 시리얼 포트 선언
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
// Comport 열기
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
public string Comport_Open(string port, string baud, string databits, string parity, string stop)
{
try
{
// 시리얼 통신 포트, 보레이트, 데이터 비트, 패리티, 스톱 비트를 설정
sp.PortName = port;
sp.BaudRate = int.Parse(baud);
sp.DataBits = int.Parse(databits);
sp.Parity = (Parity)Enum.Parse(typeof(Parity), parity);
sp.StopBits = (StopBits)Enum.Parse(typeof(StopBits), stop);
// 이미 오픈상태인지 체크하여 아니라면
if (!sp.IsOpen)
{
// 포트 열기
sp.Open();
}
// 포트가 열린 상태이면 연결 완료
if (sp.IsOpen)
{
return "연결완료";
}
else // 포트열기가 열린상태가 아니라면 연결 실패
{
return "연결실패";
}
}
catch (Exception ex)
{
throw ex;
}
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
// 수신 처리 //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
public void RcvSerialComm()
{
try
{
// 포트가 열린 상태인지 체크
if (sp.IsOpen)
{
// 시리얼 수신 버퍼에 적재된 byte 개수를 읽어 온다.
int nbyte = sp.BytesToRead;
// 시리얼 byte개수 만큼 버퍼를 생성한다.
byte[] rbuff = new byte[nbyte];
// byte개수가 0보다 크다면
if (nbyte > 0)
{
// 수신버퍼에서 버퍼의 지정된 인덱스 부터 개수 만큼 읽어 온다.
sp.Read(rbuff, 0, nbyte);
}
// ArrayList에 적재한다.
for (int i = 0; i < nbyte; i++)
{
arrSerialbuff.Add(rbuff[i]);
}
}
}
catch (Exception ex)
{
// 수신에러 발생시
// ArrayList를 클리어한다.
arrSerialbuff.Clear();
//예외를 던지고 종료
throw ex;
}
}
//HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH // 포트 상태 체크 //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH public bool IsOpened()
{
return sp.IsOpen;
} //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH // 수신 개수 읽기 //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH public int RcvCnt()
{
return arrSerialbuff.Count;
} //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH // 수신버퍼 클리어 //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
public void RcvBuffClear()
{
arrSerialbuff.Clear();
} //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH // 송신 처리 //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
public void SendSerialComm(byte[] SendComm_Packet, int len)
{
try
{
if (sp.IsOpen)
sp.Write(SendComm_Packet, 0, len);
}
catch (Exception ex)
{
throw ex;
}
} //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH // 포트 닫기 //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH public void CloseSerialComm()
{
try
{
if (sp != null)
sp.Close();
}
catch (Exception ex)
{
throw ex;
}
} //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH // 시리얼포트 해제 //HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH public void Dispose()
{
if (arrSerialbuff.Count > 0)
{
arrSerialbuff.Clear();
}
if (sp != null)
sp.Dispose();
}
}
프로그램 코드는 시리얼 통신의 연결, 데이터 송신, 수신,연결해제로 구성되어 있습니다. 우선 프로그램의 연결을 통해 통신에 대한 설정을 할 수 있으며 연결이 완료된 후 데이터를 송수신 할 수 있도록 구성 됩니다.
자세한 사항은 주석을 참조해 주세요.
오늘 포스팅은 여기 까지 입니다.
감사합니다.
'프로그래밍' 카테고리의 다른 글
파이썬(python) 기초 프로그램 예제 (0) | 2021.07.06 |
---|---|
파이썬(python) 설치 방법 (0) | 2021.07.06 |
파이썬 문자열 사용법 (0) | 2021.07.06 |
C# Winform 버튼 애니메이션 만들기 (0) | 2021.05.13 |
삼성 갤럭시 스마트폰 개발자 모드 전환 방법 (5) | 2021.05.05 |
댓글