【C#】RS-232Cでシリアル通信でコマレスするサンプル

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設定などはお使いのハードに合わせた設定が必要です。

以上です。
この記事が少しでもお役に立てれば幸いです。
それでは、読んで頂きありがとうございました!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次