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 (1) | trackback (0) |このエントリーを含むはてなブックマーク このエントリーをはてなブックマークする
コメント
世界一流のスーパーコピーブランド時計 N級バッグ、財布 専門サイト問屋
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
トラックバック

  
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
<<   11 - 2024   >>
TRACBACK
PROFILE
LOGIN
現在のモード: ゲストモード
USER ID:
PASS:
OTHERS
LINK
POWERED BY
POWERED BY
ぶろぐん
SKIN BY
ゲットネット...¥