【C#】Modbus TCP クライアントサンプルを作成してみた

こんにちは。とぉらぁといいます。
最近 Modbus TCP 通信のクライアント側を業務で実装する機会があり、勉強中だったため本記事にまとめがてら C# でサンプルを作成して実際に通信をしてみようと思います。

Modbus について軽く説明すると、Modbus とは通信プロトコルでマスタ・スレーブ方式によって通信します。また Modbus TCP とは Modbus プロトコルを TCP/IP 上で通信するためのプロトコルになります。

このサンプルでは Input Registers の読み出しを実装します。
サンプルの実行には Modbus TCP サーバのシミュレータが必要になるので後述するフリーソフトを使用します。

環境

  • Visual Studio 2019
  • .NET Framework 4.8
  • 言語:C#
  • Modbus TCP サーバシミュレータ:EasyModbusTCPServerSimulator

シミュレータをインストールし起動する

サーバ側になるシミュレータを用意します。上記 URL のホームページから「Download」の項目を選択し、「EasyModbusTCP.NET」をクリックするとダウンロードページに飛ぶので、そこでシミュレータをダウンロードします。

下がシミュレータの画面です。

シミュレータでは各データ領域のアドレスに対して値を直接入力することができます。
今回のサンプルでは、Input Registers の読み出しを行うので上のように Input Registers のアドレスの先頭にテスト用の値を入力しました。

シミュレータの起動については開いた時点で起動するのでサーバ側の準備はこれでOKです。

サンプルアプリの作成

次にクライアント側になるサンプルアプリを作成します。新しくプロジェクトを作成し、C# の「コンソールアプリケーション」を選択します。

プロジェクト名と保存場所を決めます。

ターゲットフレームワークは業務で使用している「.NET 5.0」を選択しています。

下がソースコードになります。

サーバとの接続は、ソケットによる TCP/IP 通信と手順は変わりません。

接続した後は、Modbus TCP プロトコルに準拠したリクエストをサーバに送信すれば、リクエストに沿ったデータを受信できます。今回のサンプルでは Input Registers の先頭アドレスから 3アドレス分のデータをリクエストし、受信したデータをコンソールに出力します。

実行結果

下が実行後の結果です。

サーバ側で設定した値をサンプルのコンソールで出力することができました。

おわりに

今回は Modbus TCP 通信の一例として Input Registers の読み出しを行いましたが、ファンクションコード次第でその他のデータ領域に対して読み書きなどの操作が可能です。

私もより Modbus TCP を理解するためにほかの操作にも挑戦しようと思います。

もしこの記事がだれかの参考になったのであれば幸いです。

関連記事

  1. BLEAD-TSHで遊ぼう!【作例集 サイコロ型IoTデバイス編】

  2. ASP.NET MVC で Wijmo を使う – 7

  3. 【2019年度版】BLEの基礎技術と活用例コンテンツ 12 選

  4. 所変われば品変わる〜WEB開発と組み込み開発〜

  5. Flutter と Product と Replace と

  6. 知識ゼロで Unity をはじめてみた【その2 -キューブを配置-】