C#でシリアル通信を行う
(その2)

シリアルポートのオープン/クローズを行う

ダイアログの[接続]ボタンを押されたときに、シリアルポートをオープンします。

シリアルポートのオープンを行う前に、接続するシリアルポートの通信条件を設定します。

ダイアログの[切断]ボタンを押されたときに、オープン中のシリアルポートをクローズします。

サンプルプログラムでは、[接続]ボタンと[切断]ボタンが共有のボタンなので、SerialPortクラスのIsOpen()プロパティでシリアルポートがオープンされていた場合、Close()メソッドを呼び出しています。

サンプルコードを以下に示します。


/****************************************************************************/
/*!
 *  @brief  [接続]/[切断]ボタンを押したときにシリアルポートのオープン/クローズを行う.
 *
 *  @param  [in]    sender  イベントの送信元のオブジェクト.
 *  @param  [in]    e       イベント情報.
 *
 *  @retval なし.
 */
private void connectButton_Click(object sender, EventArgs e)
{

    if( serialPort1.IsOpen == true ){
        //! シリアルポートをクローズする.
        serialPort1.Close();

        //! ボタンの表示を[切断]から[接続]に変える.
        connectButton.Text = "接続";
    }else{
        //! オープンするシリアルポートをコンボボックスから取り出す.
        serialPort1.PortName = cmbPortName.SelectedItem.ToString();

        //! ボーレートをコンボボックスから取り出す.
        BuadRateItem baud    = (BuadRateItem)cmbBaudRate.SelectedItem;
        serialPort1.BaudRate = baud.BAUDRATE;

        //! データビットをセットする. (データビット = 8ビット)
        serialPort1.DataBits = 8;

        //! パリティビットをセットする. (パリティビット = なし)
        serialPort1.Parity = Parity.None;

        //! ストップビットをセットする. (ストップビット = 1ビット)
        serialPort1.StopBits = StopBits.One;

        //! フロー制御をコンボボックスから取り出す.
        HandShakeItem ctrl    = (HandShakeItem)cmbHandShake.SelectedItem;
        serialPort1.Handshake = ctrl.HANDSHAKE;

        //! 文字コードをセットする.
        serialPort1.Encoding = Encoding.Unicode;

        try {
            //! シリアルポートをオープンする.
            serialPort1.Open();

            //! ボタンの表示を[接続]から[切断]に変える.
            connectButton.Text = "切断";
        }
        catch ( Exception ex ){
            MessageBox.Show(ex.Message);
        }
    }
}
    

シリアルポートの通信条件を設定する

パリティビットの設定値は以下のとおりです。

データ名Parity
説明
None

パリティチェックをを行いません。

Even

バイトデータの「1」の個数が偶数になるようにパリティビットをセットします。

Odd

バイトデータの「1」の個数が奇数になるようにパリティビットをセットします。

Mark

パリティビットが常に「1」になるようにします。

Space

パリティビットが常に「0」になるようにします。

ストップビットの設定値は以下のとおりです。

データ名StopBits
説明
None

ストップビットなし。

One

ストップビット = 1ビット。

OnePointFive

ストップビット = 1.5ビット。

Two

ストップビット = 2ビット。

フロー制御の設定値は以下のとおりです。

データ名Handshake
説明
None

フロー制御を行いません。

RequestToSend

RTS/CTSによるハードウェア制御を行います。
(通常バイナリデータの送受信を行う場合、ハードウェア制御を使用します。)

XOnXOff

XON(&H11)/XOFF(&H13)によるソフトウェア制御を行います。

RequestToSendXOnXOff

XON/XOFFによるソフトウェア制御とRTS/CTSによるハードウェア制御の両方を行います。

シリアルポートをオープンする

SerialPortクラスのOpen()メソッドを呼び出して、シリアルポートの通信を接続します。


    public void Open()
	

Open()は、常に成功するとは限らないので、trycatchでオープンエラーを捕捉するようにしておく方がよいでしょう。

シリアルポートをクローズする

SerialPortクラスのClose()メソッドを呼び出して、現在接続中のシリアルポートの通信を切断します。


    public void Close()
	

※サンプルプログラムでは考慮していませんが、Close()メソッドから制御が戻ってきても、すぐにはポートが閉じていないこともあるようなので、再度Open()する場合、少し待機した方が良いそうです。



Windowsは米国Microsoft Corporationの登録商標です。