C# を利用したシリアル通信
NET Framework 2.0 から標準サポートされたシリアルポートのコンポーネントをC#で利用するためのサンプルです。
サンプルコード download (C#)
動作には .NET Framework 2.0 のインストールが必要。
利用手順の要点は下記の通りです。詳細はサンプルコードを参照してください。
1. ツールボックスから SerialPort を選択し、フォームへドラッグする。
2. シリアルポートのオープン処理を記述する。
3. シリアルポートのクローズ処理を記述する
4. データ送信コードを記述する
5. データ受信コードを記述する
シリアルポートからの受信はフォームの描画処理とは別スレッドで実行される。そこで、意図通り動作させるために delegateを利用して Form側のスレッドで処理させるようにする。
なお、有効なシリアルポート名一覧は、
で取得できます。
参考
Microsoft: シリアル通信機能 (VB 2005利用)
浅草ギ研: Visual C# 2005 のシリアル通信機能を使ってみる
サンプルコード download (C#)
動作には .NET Framework 2.0 のインストールが必要。
利用手順の要点は下記の通りです。詳細はサンプルコードを参照してください。
1. ツールボックスから SerialPort を選択し、フォームへドラッグする。
2. シリアルポートのオープン処理を記述する。
private void buttonCOMOpen_Click(object sender, EventArgs e)
{
try
{
if (serialPort1.IsOpen)
{
MessageBox.Show(this.textBox1.Text + " はすでに開かれています。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
// ポート番号文字列=this.textBox1.Text, 115200bps/N81/ハードウェアフロー/UTF8/改行=CR
this.serialPort1.PortName = this.textBox1.Text;
this.serialPort1.BaudRate = 115200;
this.serialPort1.Parity = System.IO.Ports.Parity.None;
this.serialPort1.DataBits = 8;
this.serialPort1.StopBits = System.IO.Ports.StopBits.One;
this.serialPort1.Handshake = System.IO.Ports.Handshake.RequestToSend;
this.serialPort1.Encoding = Encoding.UTF8;
this.serialPort1.NewLine = "\r";
serialPort1.Open();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
{
try
{
if (serialPort1.IsOpen)
{
MessageBox.Show(this.textBox1.Text + " はすでに開かれています。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
else
{
// ポート番号文字列=this.textBox1.Text, 115200bps/N81/ハードウェアフロー/UTF8/改行=CR
this.serialPort1.PortName = this.textBox1.Text;
this.serialPort1.BaudRate = 115200;
this.serialPort1.Parity = System.IO.Ports.Parity.None;
this.serialPort1.DataBits = 8;
this.serialPort1.StopBits = System.IO.Ports.StopBits.One;
this.serialPort1.Handshake = System.IO.Ports.Handshake.RequestToSend;
this.serialPort1.Encoding = Encoding.UTF8;
this.serialPort1.NewLine = "\r";
serialPort1.Open();
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
3. シリアルポートのクローズ処理を記述する
if (serialPort1.IsOpen)
{
serialPort1.Close();
}
{
serialPort1.Close();
}
4. データ送信コードを記述する
private void SendString(string text)
{
try
{
this.serialPort1.Write(text);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
{
try
{
this.serialPort1.Write(text);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
5. データ受信コードを記述する
シリアルポートからの受信はフォームの描画処理とは別スレッドで実行される。そこで、意図通り動作させるために delegateを利用して Form側のスレッドで処理させるようにする。
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
// 受信文字列の取得
string receivedData;
try{
receivedData = this.serialPort1.ReadExisting();
receivedData = receivedData.Replace(this.serialPort1.NewLine, "\r\n");
}catch(Exception ex){
receivedData = ex.Message;
}
// richTextBox側のスレッドに AddRecievedDataメソッドのポインタを渡して、
// 受信文字列を追加させる
AddRecievedDataDelegate add = new AddRecievedDataDelegate(AddRecievedData);
this.richTextBox1.Invoke(add, receivedData);
}
private delegate void AddRecievedDataDelegate(string data);
private void AddRecievedData(string data)
{
this.richTextBox1.Text += data;
}
{
// 受信文字列の取得
string receivedData;
try{
receivedData = this.serialPort1.ReadExisting();
receivedData = receivedData.Replace(this.serialPort1.NewLine, "\r\n");
}catch(Exception ex){
receivedData = ex.Message;
}
// richTextBox側のスレッドに AddRecievedDataメソッドのポインタを渡して、
// 受信文字列を追加させる
AddRecievedDataDelegate add = new AddRecievedDataDelegate(AddRecievedData);
this.richTextBox1.Invoke(add, receivedData);
}
private delegate void AddRecievedDataDelegate(string data);
private void AddRecievedData(string data)
{
this.richTextBox1.Text += data;
}
なお、有効なシリアルポート名一覧は、
string[] ports = System.IO.Ports.SerialPort.GetPortNames();
で取得できます。
参考
Microsoft: シリアル通信機能 (VB 2005利用)
浅草ギ研: Visual C# 2005 のシリアル通信機能を使ってみる
コメント
世界一流のスーパーコピーブランド時計 N級バッグ、財布 専門サイト問屋
http://bit.ly/2HOBv4K
最高品質のロレックス時計コピー、カルティエ時計コピー、IWC時計コピー、
ブライトリング時計コピー、パネライ時計コピー激安販売中
弊社は販売バッグ、財布、 小物、靴類などでございます。
1.当社の目標は品質第一、信用第一、ユーザー第一の原則を守り、心地よい親切で最高のインターネットサービスご提供することです。
2.品質を重視、納期も厳守、信用第一は当社の方針です。
3.弊社長年の豊富な経験と実績があり。輸入手続も一切は弊社におまかせてください。質が一番、最も合理的な価格の商品をお届けいたします。
4.お届け商品がご注文内容と異なっていたり、欠陥があった場合には、全額ご返金、もしくはお取替えを
http://bit.ly/2HOBv4K
最高品質のロレックス時計コピー、カルティエ時計コピー、IWC時計コピー、
ブライトリング時計コピー、パネライ時計コピー激安販売中
弊社は販売バッグ、財布、 小物、靴類などでございます。
1.当社の目標は品質第一、信用第一、ユーザー第一の原則を守り、心地よい親切で最高のインターネットサービスご提供することです。
2.品質を重視、納期も厳守、信用第一は当社の方針です。
3.弊社長年の豊富な経験と実績があり。輸入手続も一切は弊社におまかせてください。質が一番、最も合理的な価格の商品をお届けいたします。
4.お届け商品がご注文内容と異なっていたり、欠陥があった場合には、全額ご返金、もしくはお取替えを
| Titus Dixson | EMAIL | URL | 19/10/27 05:37 | uFYLFK3s |
コメントする
この記事のトラックバックURL
http://tmp.junkbox.info/tb.php/14
トラックバック
TOP PAGE △