私はリレーのシリアル ポート制御を必要とする小規模なプロジェクトに参加したため、過去 2 日間で基本的なシリアル ポート プログラミングを学びました。同僚は JAVA シリアル通信パッケージを持っていますが、これはインターネットからダウンロードしたもので、非常に複雑で、シリアル通信のプロセスと内容を正確に把握するのは困難です。そのため、私はオンラインの専門家の手法を学び、C# を使用した基本的なシリアル通信プログラミングを個人的に実装しました。以下に学習結果をまとめますので、皆様のお役に立てれば幸いです。
1. シリアルポート通信の概要
シリアルインターフェイス(シリアルポート)は、CPUから受信したパラレルデータ文字を連続シリアルデータストリームに変換して送信すると同時に、受信したシリアル データ ストリームは、デバイスでパラレル データ文字に変換され、CPU に供給されます。一般に、この機能を実現する回路をシリアルインターフェース回路と呼びます。
シリアル通信の概念は非常に単純です。シリアル ポートはバイトを少しずつ送受信します。バイト単位のパラレル通信よりも遅いですが、シリアル ポートは、あるワイヤでデータを送信しながら、別のワイヤでデータを受信できます。シリアル通信の最も重要なパラメータは、ボー レート、データ ビット、ストップ ビット、パリティです。 2 つのポートが通信するには、これらのパラメータが一致する必要があります。
1. ボーレート: これは、シンボルの送信速度を測定するパラメータです。これは、信号が変調された後の単位時間の変化、つまり、単位時間あたりのキャリア パラメータの変化の数を指します。たとえば、1 秒あたり 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 ビットです。データは伝送路上で計時され、各デバイスには独自のクロックがあるため、通信中に 2 つのデバイス間でわずかな非同期が発生する可能性があります。したがって、ストップ ビットは転送の終了を示すだけでなく、コンピュータにクロック同期を修正する機会を提供します。
4. チェックデジット: シリアル通信における簡単なエラー検出方法。偶数、奇数、高、低の 4 つのエラー検出モードがあります。もちろん、チェックデジットを持たないことも可能です。
2. C# シリアル ポート プログラミング クラス
.NET Framework 2.0 以降、C# はシリアル ポート制御用の SerialPort クラスを提供します。 名前空間:System.IO.Ports。メンバーの詳細な紹介については、MSDN ドキュメントを参照してください。以下に、一般的に使用されるフィールド、メソッド、イベントを紹介します。
1. よく使用されるフィールド:
Name | Description |
PortName | 通信ポートを取得または設定します |
BaudRate | 取得またはset string Line Baud Rate |
DataBits | バイトあたりの標準データビット長を取得または設定します |
Parity | パリティチェックプロトコルを取得または設定します |
StopBits | バイトあたりの標準のストップビット数を取得または設定します |
2. よく使用されるメソッド:
名前 | 説明 |
Close | ポート接続を閉じて、IsOpenを設定しますプロパティを false に設定し、内部 Stream オブジェクトを解放します |
GetPortNames | 現在のコンピューターのシリアル ポート名の配列を取得します |
Open | 新しいシリアル ポートを開きます接続 |
Read | SerialPort入力バッファから読み取り |
Write | シリアルポート出力バッファにデータを書き込む |
3. 一般的なイベント:
Name | Description |
DataReceived | のデータ受信イベントを処理するメソッドを示します。 シリアルポートオブジェクト |
3. 基本的な使い方
既存のリレーを参考に、シリアル通信の基本的な使い方を以下に示します。
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
ソフトウェアは基本的なインターフェイスを実装します
以上がC# シリアル通信サンプル チュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

C#.NET開発を開始するには、次のことが必要です。1。C#の基本的な知識と.NETフレームワークのコア概念を理解する。 2。変数、データ型、制御構造、関数、クラスの基本概念をマスターします。 3。LINQや非同期プログラミングなど、C#の高度な機能を学習します。 4.一般的なエラーのためのデバッグテクニックとパフォーマンス最適化方法に精通してください。これらの手順を使用すると、C#.NETの世界に徐々に浸透し、効率的なアプリケーションを書き込むことができます。

C#と.NETの関係は切り離せませんが、同じものではありません。 C#はプログラミング言語であり、.NETは開発プラットフォームです。 C#は、コードの書き込み、.NETの中間言語(IL)にコンパイルされ、.NET Runtime(CLR)によって実行されるために使用されます。

C#.NETは、複数のアプリケーション開発をサポートする強力なツールとライブラリを提供するため、依然として重要です。 1)C#は.NETフレームワークを組み合わせて、開発を効率的かつ便利にします。 2)C#のタイプの安全性とゴミ収集メカニズムは、その利点を高めます。 3).NETは、クロスプラットフォームの実行環境とリッチAPIを提供し、開発の柔軟性を向上させます。

c#.netisversatileforbothwebanddesktopdevelopment.1)forweb、useasp.netfordynamicapplications.2)fordesktop、equindowsorwpfforrichinterfaces.3)usexamarinforcross-platformdeveliment、enabling deshacrosswindows、

C#と.NETは、継続的な更新と最適化を通じて、新しいテクノロジーのニーズに適応します。 1)C#9.0および.NET5は、レコードタイプとパフォーマンスの最適化を導入します。 2).Netcoreは、クラウドネイティブおよびコンテナ化されたサポートを強化します。 3)ASP.Netcoreは、最新のWebテクノロジーと統合されています。 4)ML.NETは、機械学習と人工知能をサポートしています。 5)非同期プログラミングとベストプラクティスはパフォーマンスを改善します。

c#.netissuitableforenterprise-levelApplicationsとsystemduetoitsSystemdutyping、richlibraries、androbustperformance.

.NETでのC#のプログラミングプロセスには、次の手順が含まれます。1)C#コードの作成、2)中間言語(IL)にコンパイルし、3).NETランタイム(CLR)によって実行される。 .NETのC#の利点は、デスクトップアプリケーションからWebサービスまでのさまざまな開発シナリオに適した、最新の構文、強力なタイプシステム、および.NETフレームワークとの緊密な統合です。

C#は、Microsoftによって開発された最新のオブジェクト指向プログラミング言語であり、.NETフレームワークの一部として開発されています。 1.C#は、カプセル化、継承、多型を含むオブジェクト指向プログラミング(OOP)をサポートしています。 2。C#の非同期プログラミングは非同期を通じて実装され、適用応答性を向上させるためにキーワードを待ちます。 3. LINQを使用してデータ収集を簡潔に処理します。 4.一般的なエラーには、null参照の例外と、範囲外の例外インデックスが含まれます。デバッグスキルには、デバッガーと例外処理の使用が含まれます。 5.パフォーマンスの最適化には、StringBuilderの使用と、不必要な梱包とボクシングの回避が含まれます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。
