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()は、常に成功するとは限らないので、try ~ catchでオープンエラーを捕捉するようにしておく方がよいでしょう。
SerialPortクラスのClose()メソッドを呼び出して、現在接続中のシリアルポートの通信を切断します。
public void Close()
※サンプルプログラムでは考慮していませんが、Close()メソッドから制御が戻ってきても、すぐにはポートが閉じていないこともあるようなので、再度Open()する場合、少し待機した方が良いそうです。