HOST は Modbus 経由で SmartDisplay と通信する方法(物理スイッチおよび仮想スイッチ経由の LED およびインジケーター制御)
序文
SmartDisplayの汎用性を促進するために、さまざまな操作シナリオを紹介しました。この記事では、別のデモコードを提示して、初心者と経験豊富な開発者の両方が基礎を理解するのに役立つことを期待しています。
説明
Modbusプロトコルは数多いデバイスやセンサーを制御するために産業オートメーションで広く使用されています。この場合、Arduinoボードはシステム統合とホスト制御に役立つツールとなります。Modbus プロトコルを通じて、Arduino ボードはセンサーやスイッチボタンを使用してスマートディスプレイ、測定器、インジケーター、LEDなど制御できます。この記事では、Arduino-2560とRS485キャリアボードを使用してModbusプロトコルを通じてSmartDisplay を制御する方法を説明します。このプログラムは、Modbusレジスタを使用してセンサー値を読み取って表示ページを変更して、さらにセンサーの読み取り値に基づいて LED を制御する方法を示します。
システムブロック図
このアプリケーションには次のコンポーネントが必要です。
- スマート ディスプレイ Modbus 7 インチ
- ARDUINOメガ2560
- ARDUINO Mega 2560用RS485 Modbusキャリアボード
- Arduino 開発環境 v2.0.4
- Modbus RS485 コネクタ
- 物理ボタン
- ノブ
- LED
- GUIビルダー v0.4.2以降
このデモは 3 つの部分に分かれています。
- GUI ビルダーでプロジェクトを設計する
- プロジェクトを作成してアップロードする
- Arduinoホストをプログラムする
GUI ビルダーでプロジェクトを設計する
まず、新しいプロジェクトを作成します。プロジェクト名を入力して、デバイス カテゴリを選択します (このアプリケーションの場合は 7 インチ デバイスを選択)。 通信プロトコルはModbus、表示方向は横型です。下図のように、UI テンプレートでBlankを選択し、最後に [作成] ボタンをクリックします。
プロジェクト作成後、下のようなページは開かれます。
デモシナリオに従って、さらに1ページを追加する場合、ページボタンをクリックしてからプラスボタンをクリックします。(下図)
背景のスタイルは、[リソース(resource)] メニューで変更できます。
ページ(page)領域では、背景のスタイルを選択できます。
最初のページのワークスペースに戻ります。デモシナリオに従って、切り替えボタンを選択してからページデザイン領域にドラッグアンドドロップします。スピードメーターもインジケーターライトも同じように行います。
プロジェクトを作成してアップロードする
上記の手順を完了したら、2 つの異なるページは作成されました。続いて、プロジェクトのセットアップを開始します。 「ページ情報」ページに切り替えます。 「デバイス(Device)」をクリックして「デバイスのプロパティ(Device Properties)」を選択します。 次に、COMポートを選択します。デバイスと同じボーレートを設定してから、最後に [プロジェクトのアップロード] をクリックしてプロジェクトをアップロードします。
プロジェクトのアップロードが完了したら、「OK」をクリックします。
アップロードが完了すると、以下のような開始画面が表示されます。
スタート画面の後、最初のページへ切り替えます。
Arduinoホストをプログラムする
次の図のように、この例で必要なレジスタ アドレスはすべて Arduino IDE プログラムで定義されています。プログラムは物理ボタンセンサー、可変抵抗センサー、LED のピンを定義します。 それから、ModbusMaster ライブラリを使用してModbus通信を初期化します。 プログラムは、コントロール表示ページ、ライト、スピードメーター、トグル ボタンのModbusレジスタ アドレスを設定します。
この通信プロセスを詳しく確認したい場合は、GUI ビルダー通信ログのテストデバイス(Test Device)またはシミュレーターセクション(Simulator section)をご参照ください。ホストデバイスとスマートディスプレイ間の通信は Modbus RS485を通してどう行われるかを確認できます。
ここで「トグルボタン」のログメッセージデータは以下の画像のように示されています。これはスマートディスプレイのトグルボタンのデータにアクセスする方法を示しています。データバイトの2番目のバイトは 00 06 の 16 進値です。これはトグルボタンのアドレスを表して、この値を 10 進数値に変換すると6になります。これはボタンにデータを書き込んだり挿入したりするために使用されます。この場合、トグルボタンはスマートディスプレイからデータを読み取ったり取得したりする機能として使用されます。 ここでは登録アドレス「7」を使用してトグルボタンからデータを読み出します。
ここで、なぜトグルボタンからのデータを受信するために登録アドレス「7」を使用するのでしょうか。詳細については、SmartDisplay Modbus 仕様書をご確認願います。下の図は仕様書の部分的な内容で、最初のオブジェクト:トグルボタンで使用されるアドレスを示しています。
下図はスピードメーターの信号データを示しています。 このデータは、スピードメーターのアドレスにアクセスする方法を示します。データバイトの 2 番目のバイトは 00 6A 16 進値で、この値を10進数に変換すると106となります。これを生かせば速度計オブジェクトにデータを書き込んだり挿入したりできます。
ここで「Indicator」のログメッセージデータは下の画像のようです。このログメッセージ データは、インジケーターのアドレスにアクセスする方法を示しています。データバイトの2番目のバイトは、00 CEの16 進値で、この値を10進数値に変換すると 206 になります。これは、インジケーター ウィジェットにデータを書き込んだりデータを挿入したりするために使用できます。
ADC_REF:定数は5Vに設定されます。これは ADC (analog-to-digital converter)の基準電圧で、物理ボタンの感度を調整するために使用されます。GROVE_VCC:定数は5に設定されて、Groveインターフェイスの VCC 電圧を示します。FULL_ANGLE:に設定された定数は300で、回路で使用される回転角度の完全な値を示します。注釈:値が度で測定されること。
ここでは、多くの必要な変数が設定されてデータ型が宣言されてゼロに初期化されます。
すべてのピンモードと物理ボタンや LED などの外部アクセサリのセットアップを定義します。 また、以下のようにシリアル通信のボーレートを設定します。
以下は「ChangePageFunction」が定義されている様子を示しています。 データの書き込みには「writeSingleRegister」関数を使用します。
次は、Arduinoホストが可変抵抗 (Rotary Angle) センサーの値の変化を読み取ると、その値を Modbus通信プロトコルを通じてスマートディスプレイに送信してゲージ値を変更する、ということを示しています。ゲージ値が 120 未満の場合、ピン 13 の LED はオフモードになってインジケータは緑色になります。ゲージ値が 120 以上になるとLED が点灯してインジケーターが赤色に変わります。
次の図は、Arduino ホストが物理ボタンセンサーの値の変化を読み取ると、その値を Modbus 通信プロトコルを通じてスマートディスプレイに送信してページを変更することを示しています。
次の画像は、Arduinoホストが Modbus通信プロトコルを介してスマートディスプレイから値を受信してからトグルボタンの値の変更を読み取ってピン12のLEDを点灯することを示しています。
これは非常に重要なセクションです。スマートディスプレイとの通信のためにデータの書き込みまたは挿入に「writeSingleRegister」関数を使用しました。また、スマートディスプレイからのデータの読み取りまたは受信に「readHoldingRegisters」関数を使用しました。ゲージなどのアクティブなウィジェットと通信するには、遅延関数によく注意する必要はあります。Modbus プロトコルでは、データを送信して確認応答を取得すると、再度データを送信できます。そのため、Modbusプロトコルによるデータの送受信の間に遅延機能を使用する必要はあります。
ArduinoIDEを介してこのプログラムを検証してアップロードした後、デモシナリオを実行できるようになりました。トグルボタンがオフ状態の場合、外部に取り付けられたLEDもオフの状態になります。トグルボタンがオンモードの場合、外部に取り付けられたLEDがすぐに点灯します。
ゲージはデモシナリオに従って可変レジスタセンサーによって制御されます。ゲージ値が0~ 120の場合、インジケーターは緑色で表示されてピン13のLEDは消灯します。そして、ゲージの値が120を超えると、下図のように、インジケーターが赤になってLEDが点灯します。
このデモシナリオでは、物理ボタンを押せばページを切り替えることができます。下図のように、物理ボタンセンサーが押されると、2ページ目に切り替わって、もう一度押すと1ページ目に戻ります。
SmartDisplay 7 インチでの実装例はようやく完了しました。関連プログラムと詳細については、GitHub (https://bit.ly/3oT0o5M) をご参照ください。
このプロジェクトで使用されている Modbus RS485 シールドの詳細については、このリンク (https://media.digikey.com/pdf/Data%20Sheets/DFRobot%20PDFs/DFR0259_Web.pdf )をご参照ください。また、実際のハードウェア設定は次のとおりです。
結論
このプログラムは、ArduinoボードとModbusプロトコルを使用してセンサーとインジケーターを制御する方法を勉強します。Modbusレジスターでセンサー値を読み取ったり表示ページを変更したり、センサー読み取り値に基づいてLEDを制御する方法を実演してみました。スマートディスプレイの制御について詳しく知りたい初心者と経験豊富な開発者の両方にとって有益です。
追記:この技術文書の原文は中国語で、和訳の内容に疑問がある場合は、原文をご参考願います。