頼まれ趣味プロで、シリアルポートの制御Appを作ることになった。
以前MFCで書いたときには、各IOピンを直接たたく必要があったため、Windows2000以降で直接I/Oにアクセスすることができないの壁にぶつかったりと、なかなか苦労した。
今回はただのシリアルコンソールなので、C#のSerialPortクラスを適用することにした。
ポートのセッティング
ToolboxからFormに"SerialPort"コントロールを貼り付け、SerialPortクラスをフォームのメンバーとして追加する。
初期化は以下の通り。
System.IO.Ports名前空間に既にパリティ、ストップビット、ハンドシェークのenumが存在しているので、これらを使って設定すればよい。
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;
ポート名はstringで、ボーレートとデータビットはintでそのまま書いてよい。
ポートの接続
serialPort.Open();
ポートの切断
serialPort.Close();
ポートへの書き込み
serialPort.write("(書き込む文字列)";
ポートからの読み出し
これでstringRXMsgに読み出した文字列がShift JISエンコードで収納される。
int ReadByteSize = serialPortTest.BytesToRead;
byte[] ReadBuffer = new byte[4096];
serialPort.Read(ReadBuffer, 0, ReadByteSize);
string stringRXMsg = Encoding.GetEncoding("Shift-JIS").GetString(ReadBuffer, 0, ReadByteSize);
それぞれのメソッドが例外を投げるので、うまくいかない場合にはcatch(Exception ex)でエラーの内容を確認する。