개발 노트

기기 통신 방식 본문

프로그래밍/C#

기기 통신 방식

알 수 없는 사용자 2022. 3. 29. 12:26

[c# 시리얼 통신 클래스 만들기]

시리얼 포트 열기

	private void buttonserialPort_Click(object sender, EventArgs e)
		{
			// 1. SerialPort 클래스 객체 생성  (COM5 포트를 사용)
			SerialPort sp = new SerialPort("COM5");

			// 2. 시리얼포트 오픈
			sp.Open();

			// 3. 시리얼포트에서 한 라인 읽기
			string data = sp.ReadLine();

			Console.WriteLine(data);

			// 4. 시리얼포트 닫기
			sp.Close();

			Console.WriteLine("Press Enter to Quit");
			Console.ReadLine();
		}

시리얼포트 쓰기

	private void buttonSerialWrite_Click(object sender, EventArgs e)
		{
			// 1. SerialPort 클래스 객체 생성  (COM6 포트를 사용)
			SerialPort sp = new SerialPort("COM6");

			// 2. SerialPort 포트 셋팅 설정
			sp.PortName = "COM6";
			sp.BaudRate = 9600;
			sp.DataBits = 8;
			sp.Parity = Parity.None;
			sp.StopBits = StopBits.One;


			// 2. 시리얼포트 오픈
			sp.Open();

			// 3. 시리얼포트에서 한 라인 쓰기
			sp.WriteLine("Hello World");

			// 4. 시리얼포트 닫기
			sp.Close();
		}

시리얼포트 비동기처리

private void button1_Click(object sender, EventArgs e)
		{
		
			string portName = "COM6";

			// 시리얼포트 열기
			SerialPort sp = new SerialPort(portName);
			sp.Open();

			// 읽기 작업쓰레드: Read from serial port
			var cancel = new CancellationTokenSource();
			var readTask = Task.Factory.StartNew(() =>
			{
				while (!cancel.IsCancellationRequested)
				{
					string readMsg = sp.ReadLine();
					if (readMsg.ToLower() == "quit")
					{
						Environment.Exit(0);
					}
					Console.WriteLine(readMsg);
				}
			}, cancel.Token);

			// 메인쓰레드: Write to serial port
			while (true)
			{
				string sendMsg = Console.ReadLine();
				if (sendMsg.ToLower() == "quit")
				{
					sp.WriteLine(sendMsg);
					cancel.Cancel();
					break;
				}

				sp.WriteLine(sendMsg);
			}

			// 시리얼포트 닫기
			sp.Close();
		}

시리얼포트 클래스

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.Ports;
using System.Collections;
namespace serialConnect
{
	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;

			}

		}
	}
}

https://github.com/zakigaebal/serialConnect

 

시리얼프로그램

https://unininu.tistory.com/304

 

C# 시리얼통신을 뚫어보자(송신/수신, SerialPort, ReceiveData, Invoke)

C# 시리얼통신을 뚫어보자(송신/수신, SerialPort, ReceiveData, Invoke) PC와 외부 장치를 연결하기 위해 GUI를 만드는 중에 시리얼통신 수신 부분이 막혀서 인터넷을 검색하고 검색하여 이해한 내용을 정

unininu.tistory.com

 

RS485

https://developer-depot.tistory.com/13

 

[시리얼 통신] RS485 통신 분석

1. RS485 통신 이란? RS-232, RS-422의 확장 버전으로, 홈 네트워크를 지원하는 일종의 직렬 통신 프로토콜 표준. RS-232는 전송 속도가 낮고 전송 거리가 짧다. 이를 보완하기 위해 개발된 RS-422는 한

developer-depot.tistory.com

 

LORA통신이란

https://blog.naver.com/milkysc/221920748769

 

[포스팅]기기 통신 방식
[포스팅]SERIAL 통신
[포스팅]485 통신
[포스팅]LORA 통신

 

IOT는 그야말로 통신으로 모두가 연결되어 있는 개념입니다.

IOT에서 고려하고 있는 통신 시스템은 일반적으로 다음과 같습니다.

유선: 광, 유선이더넷, 전화모뎀, 케이블모템,PLC(전력선통신)

광: 국내에서는 가장 빠르고 안정적이지만 해외시장을 고려한 제품이라면 이러한 연결방식은 신중히 판단해야 합니다고속 인터넷 보급에서 한국이 전세계 1위이기에 광통신이 가정에까지 들어올 수 있는 것이지 이는 한국 이외의 대부분의 국가에서는 꿈도 꿀 수 없는 상황입니다.

 

시리얼 통신이란

병렬 데이터의 형태를 직렬방식으로 전환하여 데이터를 전송하는 컴퓨터 하드웨어의 일종

시리얼이라는 것은 직렬이라는 뜻으로 패러럴과 반대되는 단어이다.

직렬통신과 병렬통신의 2가지 방식이 존재한다

직렬통신은 데이터를 보낼때 한 데이터 선에서 데이터를 보내는 방식이고

병렬통신은 여러 개의 선에서 보내고자 하는 데이터를 나눠서 보내는 것이다.

예를 들어 1010데이터를 보내려고 할때 상황은 아래와 같다

- 시리얼 통신에서는 1개의 LANE으로 데이터를 모두 보낸다

- 병렬통신에서는 4개의  LANE이라고 가정할때 각 LANE(0~3번 LANE)에 1, 0, 1, 0 을 나눠서 보낸다

 

아두이노를 사용하면 가장 자주 접하는 통신방법이 Serial 통신이다 일단 PC와 연결되는 것 자체가 아두이노 입장에서는 Serial 통신을 사용하는 것이다

 

http://winnerspowerup.cafe24.com/archives/309

 

[IOT] 어떤 통신방식을 사용하는 것이 좋을 지 장단점을 알려주세요. « 스마트콘텐츠센터 컨설팅

IOT는 그야말로 통신으로 모두가 연결되어 있는 개념입니다. IOT에서 고려하고 있는 통신 시스템은 일반적으로 다음과 같습니다. 유선: 광, 유선이더넷, 전화모뎀, 케이블모템,PLC(전력선통신) 광:

winnerspowerup.cafe24.com

http://melonicedlatte.com/2021/03/25/113400.html

 

시리얼 통신의 종류(Uart/Usart, I2C, SPI)와 개념 및 차이점 정리 - Easy is Perfect

 

melonicedlatte.com

https://www.hardcopyworld.com/?p=2080 

 

시리얼 통신 기초 (Serial Communication)

아두이노를 사용하면 가장 자주 접하는 통신 방법이 Serial 통신입니다. 일단 PC와 연결되는것 자체가 아두이노 입장에서는 Serial 통신을 사용하는 것이니까요. 그에 반해 Serial 통신의 세부 내용

www.hardcopyworld.com

https://medium.com/newworld-kim/%EC%8B%9C%EB%A6%AC%EC%96%BC-serial-%ED%86%B5%EC%8B%A0%EC%9D%B4-%EB%AD%98%EA%B9%8C-bdf991a300b1

 

시리얼(Serial) 통신이 뭘까?

시리얼 통신이 뭔데?…

medium.com

https://developer-depot.tistory.com/13

 

[시리얼 통신] RS485 통신 분석

1. RS485 통신 이란? RS-232, RS-422의 확장 버전으로, 홈 네트워크를 지원하는 일종의 직렬 통신 프로토콜 표준. RS-232는 전송 속도가 낮고 전송 거리가 짧다. 이를 보완하기 위해 개발된 RS-422는 한

developer-depot.tistory.com

https://developer-depot.tistory.com/entry/C-%EC%8B%9C%EB%A6%AC%EC%96%BC-%ED%86%B5%EC%8B%A0-%ED%81%B4%EB%9E%98%EC%8A%A4-%EB%A7%8C%EB%93%A4%EA%B8%B0

 

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

안녕하세요. 오늘은 시리얼 통신 모니터링 프로그램 클래스를 포스팅하겠습니다. 이 클래스 예제를 활용하면 시리얼 통신은 기본적으로 만들어 쓸수 있습니다. 시리얼 통신관련 설명은 아래 링

developer-depot.tistory.com

 

'프로그래밍 > C#' 카테고리의 다른 글

바이너리파일저장  (0) 2022.03.29
텍스트파일저장  (0) 2022.03.29
테이블체크  (0) 2022.03.28
C# 로또 조합번호 전부 가져오기  (0) 2022.03.24
2022.03.21_발정데이터_farm3797_09시&17시  (0) 2022.03.21