RS-232Cはいまだに現役ですよね。
コマンド&レスポンス(コマレス)したいことがあります。
出回っているツールでできればいいのですが、ハードが特殊でちょっと一工夫が要ることもあります。
どうしたものかとお悩みの方に、C#でRS-232Cでコマレスするサンプルをご紹介したいと思います。
やること
・COMの設定
・COMオープン
・コマンド送信
・レスポンス受信
・COMクローズ
それでは順番に見ていきましょう!
順番にみていく
COMの設定
COMポートを使って受信するには、ハードによってプロトコルが決まっています。
ドライバがインストール済みの想定です。
事前にデバイスマネージャなどからCOM番号を調べておきます。
using System.IO.Ports;
COM.PortName = "COM8";//COMポートのポート番号
COM.BaudRate = 19200;
COM.DataBits = 8;
「COM8」に「ボーレート19200」で通信する設定です。
必要に応じてパリティも設定します。
COMオープン
コマンド送信する前に、まずCOMをオープンします。
COM.Open();
COMオープンに失敗する場合は、
そもそものドライバインストールができていなかったり、接続できていなかったりといった事前段階のミスも考えられます。COM設定も要注意です。
コマンド送信
コマンド送信します。個々のハード仕様によりけりです。
string Command = "WR0009";
string Com_str = Command + Fcs + delimiter;
概ねコマンド+FCS+デリミタでないかと思います。
Com_str、Fcs、delimiterは、それぞれのプロトコルに合わせて設定が必要です。
レスポンス受信
設定したCOMポートへのレスポンスを受信するには次を使います。
receive_str += COM.ReadExisting();
ハードに依りけりと思いますが、例えば次のようにします。
string receive_str = "";
if (COM.IsOpen)
{
COM.Write(Com_str);
while (true)
{
receive_str += COM.ReadExisting();
if (receive_str != "")//レスポンスあり
{
while (true)
{
receive_str += COM.ReadExisting();
if (receive_str.Contains(delimiter)) { break; }//デリミタ受信
}
break;
}
}
}
コマンドを送信し、レスポンスを待ちます。
デリミタを受信したら完了とします。
もう少し高度には、イベント受信という方法もあるようです。
COMクローズ
さいごにCOMをクローズします。
COM.Close();
これを忘れると、次のコマレス時にエラーになります。
サンプルコード
これらを合体したものがこちらです。
using System.IO.Ports;
//COM設定
COM.PortName = "COM8";
COM.BaudRate = 19200;
COM.DataBits = 8;
COM.Open();
//コマンド生成
string Command = "WR0009";
string Com_str = Command + Fcs + delimiter;
//コマレス
string receive_str = "";
if (COM.IsOpen)
{
COM.Write(Com_str);
while (true)
{
receive_str += COM.ReadExisting();
if (receive_str != "")
{
while (true)
{
receive_str += COM.ReadExisting();
if (receive_str.Contains(delimiter)) { break; }
}
break;
}
}
}
COM.Close();
※ほかに必要なusingがある場合があります。
※コマンドやCOM設定などはお使いのハードに合わせた設定が必要です。
以上です。
この記事が少しでもお役に立てれば幸いです。
それでは、読んで頂きありがとうございました!