C#講座 RS405CBのシリアル通信を設定しよう

雨が降り続いてますが、皆さん、お元気ですか?
梅雨がうっとうしいですね。
雨の日は髪の毛がまとまらないですねぇ。雨の日はライオン頭のyukiです。


先週は、フォームの整形とサービスの登録まで終わったので、今日はシリアルの実装をしていきます。

RS405CBの詳細は、双葉電子工業のページで、マニュアルを確認してください。今日はまだざっとでいいので、目を通してください。

まずは、先週作ったプログラムを出してください。
すでにフォームはできていますので、シリアルポートを設定するために、comboBoxにそれぞれ、COMポート番号とボーレートを設定します。

comboBox1から設定していきます。

しかし、関数にプログラムを書く前に、シリアルポートを使う設定をします。
[css]
//Added
using System.IO.Ports;
using System.ServiceProcess;
[/css]

書くところは画面中の上のほうにあります。
20130626blog003
これが書けたら、下記のプログラムを追加します。

さて、ではcomboBox1を実装していきます。
デザインタブに戻って、①の稲妻マークをクリックし、②のDropDownをダブルクリックします。
別のタブが開いて、comboBox1_DropDownという空の関数ができています。ここには、PCに接続されているシリアルデバイスのポート番号を表示するプログラムを書いていきます。

20130626blog001
[css]
private void comboBox1_DropDown(object sender, EventArgs e)
{
// すべてのシリアル・ポート名を取得する
string[] ports = SerialPort.GetPortNames();

// シリアルポートを毎回取得して表示するために表示の度にリストをクリアする
comboBox1.Items.Clear();

foreach (string port in ports)
{
// 取得したシリアル・ポート名を出力する
comboBox1.Items.Add(port);
}
}
[/css]

次に、ボーレートの設定をします。マニュアルのP26を確認してください。
comboBox2のイベントでcomboBox1のときと同様に、comboBox2_DropDownの空の関数を用意します。
ここに、RS405CBで使えるボーレートを表示します。デフォルトは115200なので、それが一番最初に表示されるように設定します。

[css]
private void comboBox2_DropDown(object sender, EventArgs e)
{
// ボーレートを毎回取得して表示するために表示の度にリストをクリアする
comboBox2.Items.Clear();

// ボーレートを出力する
comboBox2.Items.Add("115200"); //デフォルトなのでこれを最初にもってくる

comboBox2.Items.Add("9600");
comboBox2.Items.Add("14400");
comboBox2.Items.Add("19200");
comboBox2.Items.Add("28800");
comboBox2.Items.Add("38400");
comboBox2.Items.Add("57600");
comboBox2.Items.Add("76800");
comboBox2.Items.Add("153600");
comboBox2.Items.Add("230400");
comboBox2.Items.Add("460800");
}
[/css]

次に、setボタンを実装します。
デザイン画面に戻って、setボタンをダブルクリックして空の関数を作ります。
20130626blog002

書き込めるプログラムタブで下記を追加します。
[css]
private void button1_Click(object sender, EventArgs e)
{
//comboBox1とcomboBox2に設定があればシリアルポートを開く
if (comboBox1.Text != "" && comboBox2.Text != "")
{
serialPort1.PortName = comboBox1.Text;

serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text);

if (serialPort1.IsOpen == true)
{
serialPort1.Close();
}

if (serialPort1.IsOpen == false)
{
serialPort1.Open();

if (serialPort1.IsOpen == true)
{
MessageBox.Show("Open Success\n" + serialPort1.PortName.ToString() + " " + serialPort1.BaudRate.ToString());
}
else
{
MessageBox.Show("COM Port error");
}
}
}
else
{
MessageBox.Show("COM Port error");
}
}
[/css]

ここまでできたらシリアルポートは使えるようになります。
今回は、ここまで。

来週は、サーボを動かす実装をします。