릴레이의 직렬 포트 제어가 필요한 소규모 프로젝트에 참여했기 때문에 지난 이틀 동안 기본적인 직렬 포트 프로그래밍을 배웠습니다. 동료가 JAVA 직렬 통신 패키지를 가지고 있는데 인터넷에서 다운로드한 것인데 상당히 지저분하고 직렬 통신의 과정과 내용을 정확하게 파악하기 어렵습니다. 그래서 온라인 전문가들의 방법을 배우며 직접 C#을 활용한 기본적인 직렬통신 프로그래밍을 구현해보았습니다. 학습 결과는 아래와 같습니다. 모든 분들께 도움이 되기를 바랍니다.
1. 직렬 통신 소개
직렬 인터페이스(직렬 포트)는 CPU에서 받은 병렬 데이터 문자를 연속적인 직렬 데이터 스트림으로 변환하여 동시에 전송할 수 있는 유형입니다. , 수신된 직렬 데이터 스트림은 장치가 병렬 데이터 문자로 변환되어 CPU에 공급될 수 있습니다. 일반적으로 이 기능을 완성하는 회로를 직렬 인터페이스 회로라고 합니다.
직렬 통신의 개념은 매우 간단합니다. 직렬 포트는 비트 단위로 바이트를 보내고 받습니다. 바이트별 병렬 통신보다 속도는 느리지만 직렬 포트는 한 회선에서 데이터를 보내고 다른 회선에서 데이터를 수신할 수 있습니다. 직렬 통신의 가장 중요한 매개변수는 전송 속도, 데이터 비트, 정지 비트 및 패리티입니다. 두 포트가 통신하려면 이러한 매개변수가 일치해야 합니다.
1. 전송 속도(Baud rate): 기호 전송 속도를 측정하는 매개변수입니다. 신호가 변조된 후 단위 시간의 변화, 즉 단위 시간당 반송파 매개 변수 변경 수를 나타냅니다. 예를 들어 초당 960개의 문자가 전송되고 각 문자 형식에는 10비트(1개 시작 비트, 1개)가 포함됩니다. 정지 비트, 8 데이터 비트), 이때 전송 속도는 960Bd, 비트 속도는 10비트 * 960비트/초 = 9600bps입니다.
2. 데이터 비트: 통신 시 실제 데이터 비트를 측정하는 매개변수입니다. 컴퓨터가 정보 패킷을 보낼 때 실제 데이터는 8비트가 아닌 경우가 많습니다. 표준 값은 6, 7, 8비트입니다. 표준 ASCII 코드는 0~127(7비트)이고, 확장 ASCII 코드는 0~255(8비트)입니다.
3. 정지 비트: 단일 패킷의 마지막 몇 비트를 나타내는 데 사용됩니다. 일반적인 값은 1, 1.5, 2비트입니다. 데이터는 전송 라인에서 시간이 측정되고 각 장치에는 자체 시계가 있으므로 통신 중에 두 장치 간에 작은 비동기화가 발생할 수 있습니다. 따라서 정지 비트는 전송의 끝을 나타낼 뿐만 아니라 컴퓨터에 시계 동기화를 수정할 수 있는 기회도 제공합니다.
4. 체크 디지트 : 시리얼 통신에서의 간단한 에러 검출 방식. 오류 감지 모드에는 짝수, 홀수, 높음, 낮음의 네 가지가 있습니다. 물론 체크 숫자가 없을 수도 있습니다.
2. C# 직렬 포트 프로그래밍 클래스
.NET Framework 2.0부터 C#에서는 직렬 포트 제어를 위한 SerialPort 클래스를 제공합니다. 네임스페이스:System.IO.Ports. 자세한 회원 소개는 MSDN 문서를 참고하세요. 다음은 일반적으로 사용되는 필드, 메소드 및 이벤트를 소개합니다.
1. 공통 필드:
Name | Description |
PortName | 통신 포트 가져오기 또는 설정 |
BaudRate | 가져오기 또는 설정 string Line Baud Rate |
DataBits | 바이트당 표준 데이터 비트 길이 가져오기 또는 설정 |
Parity | 패리티 검사 프로토콜 가져오기 또는 설정 |
StopBits | 바이트당 표준 정지 비트 수를 가져오거나 설정합니다 |
2. 일반적으로 사용되는 방법:
Name | Description |
Close | 포트 연결을 닫고 IsOpen을 설정합니다. 속성 false에 대한 속성 및 내부 스트림 객체를 릴리스 |
getportNames | 현재 컴퓨터의 직렬 포트 이름 배열 가져옵니다. |
Read | Read from SerialPort | 입력 버퍼
Write | 직렬 포트 출력 버퍼 |
3. 일반 이벤트:
Name
Description
DataReceived | 데이터 수신 이벤트를 처리할 방법을 나타냅니다. SerialPort | 개체
1 using System; 2 using System.Windows.Forms; 3 using System.IO.Ports; 4 using System.Text; 5 6 namespace Traveller_SerialPortControl 7 { 8 public partial class Form1 : Form 9 { 10 //定义端口类 11 private SerialPort ComDevice = new SerialPort(); 12 public Form1() 13 { 14 InitializeComponent(); 15 InitralConfig(); 16 } 17 /// <summary> 18 /// 配置初始化 19 /// </summary> 20 private void InitralConfig() 21 { 22 //查询主机上存在的串口 23 comboBox_Port.Items.AddRange(SerialPort.GetPortNames()); 24 25 if (comboBox_Port.Items.Count > 0) 26 { 27 comboBox_Port.SelectedIndex = 0; 28 } 29 else 30 { 31 comboBox_Port.Text = "未检测到串口"; 32 } 33 comboBox_BaudRate.SelectedIndex = 5; 34 comboBox_DataBits.SelectedIndex = 0; 35 comboBox_StopBits.SelectedIndex = 0; 36 comboBox_CheckBits.SelectedIndex = 0; 37 pictureBox_Status.BackgroundImage = Properties.Resources.red; 38 39 //向ComDevice.DataReceived(是一个事件)注册一个方法Com_DataReceived,当端口类接收到信息时时会自动调用Com_DataReceived方法 40 ComDevice.DataReceived += new SerialDataReceivedEventHandler(Com_DataReceived); 41 } 42 43 /// <summary> 44 /// 一旦ComDevice.DataReceived事件发生,就将从串口接收到的数据显示到接收端对话框 45 /// </summary> 46 /// <param> 47 /// <param> 48 private void Com_DataReceived(object sender, SerialDataReceivedEventArgs e) 49 { 50 //开辟接收缓冲区 51 byte[] ReDatas = new byte[ComDevice.BytesToRead]; 52 //从串口读取数据 53 ComDevice.Read(ReDatas, 0, ReDatas.Length); 54 //实现数据的解码与显示 55 AddData(ReDatas); 56 } 57 58 /// <summary> 59 /// 解码过程 60 /// </summary> 61 /// <param>串口通信的数据编码方式因串口而异,需要查询串口相关信息以获取 62 public void AddData(byte[] data) 63 { 64 if (radioButton_Hex.Checked) 65 { 66 StringBuilder sb = new StringBuilder(); 67 for (int i = 0; i 97 /// 接收端对话框显示消息 98 /// 99 /// <param>100 private void AddContent(string content)101 {102 BeginInvoke(new MethodInvoker(delegate103 { 104 textBox_Receive.AppendText(content); 105 }));106 }107 108 /// <summary>109 /// 串口开关110 /// </summary>111 /// <param>112 /// <param>113 private void button_Switch_Click(object sender, EventArgs e)114 {115 if (comboBox_Port.Items.Count 168 /// 将消息编码并发送169 /// 170 /// <param>171 /// <param>172 private void button_Send_Click(object sender, EventArgs e)173 {174 if (textBox_Receive.Text.Length > 0)175 {176 textBox_Receive.AppendText("\n");177 }178 179 byte[] sendData = null;180 181 if (radioButton_Hex.Checked)182 {183 sendData = strToHexByte(textBox_Send.Text.Trim());184 }185 else if (radioButton_ASCII.Checked)186 {187 sendData = Encoding.ASCII.GetBytes(textBox_Send.Text.Trim());188 }189 else if (radioButton_UTF8.Checked)190 {191 sendData = Encoding.UTF8.GetBytes(textBox_Send.Text.Trim());192 }193 else if (radioButton_Unicode.Checked)194 {195 sendData = Encoding.Unicode.GetBytes(textBox_Send.Text.Trim());196 }197 else198 {199 sendData = strToHexByte(textBox_Send.Text.Trim());200 }201 202 SendData(sendData);203 }204 205 /// <summary>206 /// 此函数将编码后的消息传递给串口207 /// </summary>208 /// <param>209 /// <returns></returns>210 public bool SendData(byte[] data)211 {212 if (ComDevice.IsOpen)213 {214 try215 {216 //将消息传递给串口217 ComDevice.Write(data, 0, data.Length);218 return true;219 }220 catch (Exception ex)221 {222 MessageBox.Show(ex.Message, "发送失败", MessageBoxButtons.OK, MessageBoxIcon.Error);223 }224 }225 else226 {227 MessageBox.Show("串口未开启", "错误", MessageBoxButtons.OK, MessageBoxIcon.Error);228 }229 return false;230 }231 232 /// <summary>233 /// 16进制编码234 /// </summary>235 /// <param>236 /// <returns></returns>237 private byte[] strToHexByte(string hexString)238 {239 hexString = hexString.Replace(" ", "");240 if ((hexString.Length % 2) != 0) hexString += " ";241 byte[] returnBytes = new byte[hexString.Length / 2];242 for (int i = 0; i <p>소프트웨어는 기본 인터페이스를 구현합니다<span style="font-size: 18px"></span></p><p><span style="font-size: 14px"></span></p>
위 내용은 C# 직렬 통신 예제 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

C# .NET 개발을 시작하려면 다음과 같은 것이 필요합니다. 1. C#의 기본 지식과 .NET 프레임 워크의 핵심 개념을 이해하십시오. 2. 변수, 데이터 유형, 제어 구조, 기능 및 클래스의 기본 개념을 마스터하십시오. 3. LINQ 및 비동기 프로그래밍과 같은 C#의 고급 기능을 배우십시오. 4. 일반적인 오류에 대한 디버깅 기술 및 성능 최적화 방법에 익숙해 지십시오. 이러한 단계를 통해 C#.NET의 세계를 점차적으로 침투하고 효율적인 응용 프로그램을 작성할 수 있습니다.

C#과 .NET의 관계는 분리 할 수 없지만 같은 것은 아닙니다. C#은 프로그래밍 언어이며 .NET은 개발 플랫폼입니다. C#은 코드를 작성하고 .NET의 중간 언어 (IL)로 컴파일하고 .NET 런타임 (CLR)에 의해 실행되는 데 사용됩니다.

C#.NET은 여러 응용 프로그램 개발을 지원하는 강력한 도구 및 라이브러리를 제공하기 때문에 여전히 중요합니다. 1) C#은 .NET 프레임 워크를 결합하여 개발 효율적이고 편리하게 만듭니다. 2) C#의 타입 안전 및 쓰레기 수집 메커니즘은 장점을 향상시킵니다. 3) .NET은 크로스 플랫폼 실행 환경과 풍부한 API를 제공하여 개발 유연성을 향상시킵니다.

C#.NETISVERSATILEFORBOTHWEBBANDDESKTOPDEVENTROMMENT.1) FORWEB, useASP.NETFORRICHINTERFACES.3) FORDESKTOP.3) USEXAMARINFORCROSS-PLATFORMDEEVENTRIMMENT, LINABILEDEV, MACODEDEV, and MACODEDOWS, 및 MACODEDOWS.

C# 및 .NET는 지속적인 업데이트 및 최적화를 통해 신흥 기술의 요구에 적응합니다. 1) C# 9.0 및 .NET5는 레코드 유형 및 성능 최적화를 소개합니다. 2) .NETCORE는 클라우드 네이티브 및 컨테이너화 된 지원을 향상시킵니다. 3) ASP.NETCORE는 최신 웹 기술과 통합됩니다. 4) ML.NET는 기계 학습 및 인공 지능을 지원합니다. 5) 비동기 프로그래밍 및 모범 사례는 성능을 향상시킵니다.

C#.netissuitable forenterprise-levelapplications는 richlibraries, androbustperformance, 그러나 itmaynotbeidealforcross-platformdevelopmentorwhenrawspeediscritical, wherelanguagesslikerustorthightordogrordogrognegrognegrognegrognecross-platformdevelopmentor.

.NET에서 C#의 프로그래밍 프로세스에는 다음 단계가 포함됩니다. 1) C# 코드 작성, 2) 중간 언어 (IL)로 컴파일하고 .NET 런타임 (CLR)에 의해 실행됩니다. .NET에서 C#의 장점은 현대적인 구문, 강력한 유형 시스템 및 .NET 프레임 워크와의 긴밀한 통합으로 데스크탑 응용 프로그램에서 웹 서비스에 이르기까지 다양한 개발 시나리오에 적합합니다.

C#은 Microsoft가 개발 한 최신 객체 지향 프로그래밍 언어이며 .NET 프레임 워크의 일부로 개발되었습니다. 1.C#은 캡슐화, 상속 및 다형성을 포함한 객체 지향 프로그래밍 (OOP)을 지원합니다. 2. C#의 비동기 프로그래밍은 응용 프로그램 응답 성을 향상시키기 위해 비동기 및 키워드를 기다리는 키워드를 통해 구현됩니다. 3. LINQ를 사용하여 데이터 컬렉션을 간결하게 처리하십시오. 4. 일반적인 오류에는 NULL 참조 예외 및 인덱스 외 예외가 포함됩니다. 디버깅 기술에는 디버거 사용 및 예외 처리가 포함됩니다. 5. 성능 최적화에는 StringBuilder 사용 및 불필요한 포장 및 Unboxing을 피하는 것이 포함됩니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

VSCode Windows 64비트 다운로드
Microsoft에서 출시한 강력한 무료 IDE 편집기

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

Dreamweaver Mac版
시각적 웹 개발 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.
