C# を利用したシリアル通信

NET Framework 2.0 から標準サポートされたシリアルポートのコンポーネントをC#で利用するためのサンプルです。

シリアルポート利用サンプルアプリケーション動作画面
ボックス2 サンプルコード download (C#)
! 動作には .NET Framework 2.0 のインストールが必要。

利用手順の要点は下記の通りです。詳細はサンプルコードを参照してください。
1. ツールボックスから SerialPort を選択し、フォームへドラッグする。
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);
    }
}


3. シリアルポートのクローズ処理を記述する
if (serialPort1.IsOpen)
{
    serialPort1.Close();
}


4. データ送信コードを記述する
private void SendString(string text)
{
    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[] ports = System.IO.Ports.SerialPort.GetPortNames();

で取得できます。
ダイヤ 参考
Microsoft: シリアル通信機能 (VB 2005利用)
浅草ギ研: Visual C# 2005 のシリアル通信機能を使ってみる
 初出: 2006/05/06 18:43 ささお * 内容は随時追記・更新しています。
| 技術メモ::ソフトウェア | comments (0) | trackback (0) |このエントリーを含むはてなブックマーク このエントリーをはてなブックマークする
コメント
コメントする








この記事のトラックバックURL
http://tmp.junkbox.info/tb.php/14
トラックバック

  
AMAZON
CALENDAR
S M T W T F S
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31   
<<   08 - 2017   >>
COMMENTS
TRACBACK
PROFILE
LOGIN
現在のモード: ゲストモード
USER ID:
PASS:
OTHERS
LINK
POWERED BY
POWERED BY
ぶろぐん
SKIN BY
ゲットネット...¥