シリアルポートの制御

頼まれ趣味プロで、シリアルポートの制御Appを作ることになった。
以前MFCで書いたときには、各IOピンを直接たたく必要があったため、Windows2000以降で直接I/Oにアクセスすることができないの壁にぶつかったりと、なかなか苦労した。
今回はただのシリアルコンソールなので、C#のSerialPortクラスを適用することにした。

ポートのセッティング

ToolboxからFormに"SerialPort"コントロールを貼り付け、SerialPortクラスをフォームのメンバーとして追加する。
初期化は以下の通り。


serialPort.PortName = "COM6";
serialPort.BaudRate = 9600;
serialPort.DataBits = 8;
serialPort.Parity = System.IO.Ports.Parity.None;
serialPort.StopBits = System.IO.Ports.StopBits.One;
serialPort.Handshake = System.IO.Ports.Handshake.None;
System.IO.Ports名前空間に既にパリティ、ストップビット、ハンドシェークのenumが存在しているので、これらを使って設定すればよい。
ポート名はstringで、ボーレートとデータビットはintでそのまま書いてよい。

ポートの接続


serialPort.Open();

ポートの切断


serialPort.Close();

ポートへの書き込み


serialPort.write("(書き込む文字列)";

ポートからの読み出し


int ReadByteSize = serialPortTest.BytesToRead;
byte[] ReadBuffer = new byte[4096];
serialPort.Read(ReadBuffer, 0, ReadByteSize);
string stringRXMsg = Encoding.GetEncoding("Shift-JIS").GetString(ReadBuffer, 0, ReadByteSize);
これでstringRXMsgに読み出した文字列がShift JISエンコードで収納される。
それぞれのメソッドが例外を投げるので、うまくいかない場合にはcatch(Exception ex)でエラーの内容を確認する。