私たちはあなたのプライバシーを大切にします
「すべてのクッキーを許可」をクリックすると、サイトのナビゲーションを向上させ、サイト使用状況を分析し、マーケティングおよびパフォーマンスの取り組みを支援するために、クッキーをデバイスに保存することに同意したことになります。この件に関する詳細情報は、ポリシーをご覧ください。プライバシーポリシー
WINSTAR Smart Display をよりスムーズに導入いただけるよう、さまざまな用途を想定した実践的なデモプロジェクトを紹介しています。本記事では、Modbus 通信の基本的な仕組みを理解するためのデモ例を紹介します。
Modbus は、各種機器やセンサーとの通信・制御に広く使用されている産業用通信プロトコルです。本アプリケーションでは、Arduino ボードをホストコントローラとして使用します。Arduino は各種センサーや Toggle Button と連携し、Modbus を介して Smart Display の Gauge(ゲージ)や Indicator(インジケーター)、LED を制御します。本デモでは、Arduino Mega 2560 と RS485 Shield を使用して Smart Display と Modbus 通信を行います。
このプログラムでは、Modbus レジスタを使用してセンサー値を読み取り、表示ページを切り替えるほか、センサーの値に応じて LED を制御する方法を紹介します。

システム構成図
まず、GUI Builder を起動して新しいプロジェクトを作成します。プロジェクト名を入力し、デフォルトで自動選択されているプロジェクトフォルダを確認します。次にデバイスタイプを選択します。本デモでは 7 インチを選択します。続いて通信プロトコルを選択し、表示方向はデフォルトの横向き(Landscape)のままにします。UI Template で Blank を選択し、最後に Create ボタンをクリックして新しいプロジェクトを作成します。

プロジェクトを作成すると、以下の画面が表示されます。

本デモでは、もう1ページ追加する必要があります。Page ボタンをクリックし、続いて「+」ボタンをクリックしてページを追加します。

Resource パネルでは、カスタマイズした背景を選択できます。

背景は Page セクションから選択することもできます。

次に、最初のページに戻り、Controls セクションを開きます。本デモでは Toggle Button を選択し、ページのレイアウト領域にドラッグ&ドロップします。Gauge と Indicator も同じ手順で配置します。

ここまでの手順で2つのページを作成し、最初のページに Toggle Button、Gauge、Indicator の各 Widget を配置したら、プロジェクトをビルドしてアップロードします。Page Info セクションを開き、Device をクリックして Device Properties を選択します。Protocol の設定を確認した後、COM ポートを選択してボーレートを設定します。次に、Connect to device ボタンをクリックしてデバイスに接続します。最後に Upload ボタンをクリックしてプロジェクトをアップロードし、完了するまで待ちます。

プロジェクトのアップロードが完了したら、OK ボタンをクリックします。

アップロードが完了すると、以下のスタート画面が表示されます。

スタート画面の後、最初のページが表示されます。以上で、GUI Builder でのプロジェクトのビルドとアップロードは完了です。

以下の図に示すように、本デモで使用するレジスタアドレスは Arduino IDE のプログラム内で定義されています。プログラムでは、物理ボタンセンサー、可変抵抗センサー、LED の各ピンを定義した後、ModbusMaster ライブラリを使用して Modbus 通信を初期化します。また、表示ページ、Indicator、Gauge、Toggle Button を制御するための Modbus レジスタアドレスも設定します。

ホストデバイスと Smart Display が Modbus RS485 を介してどのように通信するかを確認するには、GUI Builder の通信ログにある Test Device または Simulator セクションを参照してください。
以下の図は、Toggle Button のログメッセージデータを示しています。このデータから、Smart Display 上の Toggle Button のデータにアクセスする方法を確認できます。Data Byte の2番目のバイトは 00 06 の16進値で、Toggle Button のアドレスを表します。10進数に変換すると 6 となり、このアドレスを使用して Toggle Button にデータを書き込むことができます。ただし、本デモでは Toggle Button から Smart Display のデータを読み取るため、レジスタアドレス「7」を使用して Toggle Button のデータを読み出します。

では、なぜ Toggle Button のデータを読み取る際にレジスタアドレス「7」を使用するのでしょうか。詳細については、Smart Display の Modbus 仕様書を参照してください。以下は仕様書の一部で、1番目のオブジェクト(Widget)である Toggle Button に使用されるアドレスを示しています。

以下の図は、Gauge のログメッセージデータを示しています。このデータから Gauge のアドレスにアクセスする方法を確認できます。Data Byte の2番目のバイトは 00 6A の16進値で、Gauge のアドレスを表します。10進数に変換すると 106 となり、このアドレスを使用して Gauge Widget にデータを書き込むことができます。

以下の図は、Indicator のログメッセージデータを示しています。このデータから Indicator のアドレスにアクセスする方法を確認できます。Data Byte の2番目のバイトは 00 CE の16進値で、Indicator のアドレスを表します。10進数に変換すると 206 となり、このアドレスを使用して Indicator Widget にデータを書き込むことができます。

ADC_REF は 5V に設定され、ADC(Analog-to-Digital Converter)の基準電圧を示します。また、物理ボタンユニットの感度調整に使用されます。GROVE_VCC は 5 に設定され、回路で使用する Grove インターフェースの VCC 電圧を示します。FULL_ANGLE は 300 に設定され、回路で使用する回転角度の最大値を表します。コード内のコメントでは、この値が度単位であることが示されています。

ここでは、プログラムで使用する各種変数とデータ型を宣言し、初期値を 0 に設定します。

物理ボタンや LED などの外部デバイスに使用する各ピンのモードを設定します。また、以下の図に示すように、シリアル通信のボーレートも設定します。

以下の図は ChangePageFunction の定義を示しています。データの書き込みには writeSingleRegister 関数を使用します。

以下の図は、Arduino ホストが可変抵抗(Rotary Angle)センサーの値の変化を読み取った際、その値を Modbus 通信で Smart Display に送信し、Gauge の値を更新する処理を示しています。Gauge の値が 120 未満の場合、13 番ピンの LED は OFF、Indicator は緑色になります。Gauge の値が 120 以上になると、LED が点灯し、Indicator は赤色に変わります。

以下の図は、Arduino ホストが物理ボタンセンサーの値の変化を読み取った際、その値を Modbus 通信で Smart Display に送信し、表示ページを切り替える処理を示しています。

以下の図は、Arduino ホストが Modbus 通信を介して Smart Display から Toggle Button の値の変化を受信し、その値に応じて 12 番ピンの LED を点灯させる処理を示しています。

ここは重要なポイントです。Smart Display へのデータ書き込みには writeSingleRegister 関数を使用し、Smart Display からのデータ読み出しには readHoldingRegisters 関数を使用します。また、Gauge などの動的な Widget と通信する際は、delay 関数の設定にも注意が必要です。Modbus では、データを送信して応答を受信した後に次のデータを送信します。そのため、Modbus でデータを送受信する際には、適切な遅延を設ける必要があります。

Arduino IDE でプログラムの検証とアップロードが完了すると、デモ動作を確認できます。Toggle Button が OFF の場合、12 番ピンに接続された外部 LED も消灯します。Toggle Button を ON にすると、外部 LED がすぐに点灯します。

本デモでは、Gauge を可変抵抗(Rotary Angle)センサーで制御します。Gauge の値が 0~120 の場合、Indicator は緑色で表示され、13 番ピンの LED は消灯します。Gauge の値が 120 を超えると、Indicator は赤色に変わり、13 番ピンの LED が点灯します。

本デモでは、物理ボタンを使用して表示ページを切り替えることができます。物理ボタンセンサーを押すと2ページ目に切り替わり、もう一度押すと1ページ目に戻ります。

以上で、7 インチ Smart Display を使用したデモプロジェクトは完了です。本デモでは、各種センサーや LED を使用し、物理ボタンによる表示ページの切り替えや、Gauge、Indicator、外部 LED の制御を行います。プログラムのダウンロードおよび本デモの詳細については、GitHub のサンプルプログラムをご参照ください。
本デモで使用している Modbus RS485 Shield の詳細については、Modbus RS485 Shield の技術資料をご参照ください。実際のハードウェア構成を以下に示します。

本デモでは、Arduino ボードと Modbus プロトコルを使用して、センサーや Indicator を制御する方法を紹介しました。Modbus レジスタを使用してセンサー値を読み取り、表示ページを切り替えるほか、センサーの読み取り値に応じて LED を制御する一連の動作を確認できます。Modbus プロトコルの基本や、Smart Display の制御への活用方法を理解したい初心者から経験豊富な開発者まで、実装の参考としてご活用いただけます。
「すべてのクッキーを許可」をクリックすると、サイトのナビゲーションを向上させ、サイト使用状況を分析し、マーケティングおよびパフォーマンスの取り組みを支援するために、クッキーをデバイスに保存することに同意したことになります。この件に関する詳細情報は、ポリシーをご覧ください。プライバシーポリシー