C# 시리얼 통신 클래스 만들기
본문 바로가기
프로그래밍

C# 시리얼 통신 클래스 만들기

by 124578 2021. 2. 17.

안녕하세요.

 

오늘은 시리얼 통신 모니터링 프로그램 클래스를 포스팅하겠습니다.

 

이 클래스 예제를 활용하면 시리얼 통신은 기본적으로 만들어 쓸수 있습니다.

 

시리얼 통신관련 설명은 아래 링크를 따라 가시면 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();  

    }    

 

}

 

프로그램 코드는 시리얼 통신의 연결, 데이터 송신, 수신,연결해제로 구성되어 있습니다. 우선 프로그램의 연결을 통해 통신에 대한 설정을 할 수 있으며 연결이 완료된 후 데이터를 송수신 할 수 있도록 구성 됩니다.

 

자세한 사항은 주석을 참조해 주세요.

 

오늘 포스팅은 여기 까지 입니다.

 

 

감사합니다.

 

 

댓글


TOP

TEL. 02.1234.5678 / 경기 성남시 분당구 판교역로