IoT

Arduinoポンプコントロール+ STONEHMIディスプレイ

ブレードインテリジェント調整システムは特許技術であり、さまざまな大、中、小の水力発電所およびポンプ場の主流の制御システムで使用されています。 このプロジェクトでは、信頼性の高いシリアル産業用タッチスクリーンをマンマシンインターフェースとして使用し、毎日のパラメータとリアルタイムのブレード投与量、出力電力、瞬時流量、その他の情報を操作効果の表示として表示します。 さらに、作業状態ログと障害アラームフォームも計画されており、スタンバイボタンが予約されています。 プロジェクトは、データ表示とスライド表示表示にシリアルタッチスクリーンを使用しています。 付属品は以下の通りです。  

  1. STVI056WT-01 シリアルタッチスクリーンとSTONEアダプターボードV1.2;  
  2. マッチングArduinoコントロールボード;  

インテリジェントブレード調整制御システムのインターフェース機能の簡単な説明。  

ホームページにはXNUMXつのボタンがあり、これらを押すと、対応する水力発電所システム、ポンプ場制御システム、およびユーザーガイドインターフェイス(予備のボタン付き)に入ることができます。 次の図に示すように、ユーザーガイドインターフェイスにデモシステムのフレームワークが表示されます。

(Enlegi Bladeインテリジェント調整制御デモンストレーションソフトウェアのホームインターフェース)

水力発電所の制御システムのインターフェースには、開始ボタンと停止ボタンがあり、ステータス、定格(定格電圧、定格電力、定格速度を含む)、制御値(プロペラブレードのピッチ角と出力電力を含む)が表示されます。 さらに、他のページジャンプボタン(ホームページ、作業状態ログ、障害アラーム、その他のスタンバイボタンなど)もあります。 動作状態ログと故障アラームページには、このページに戻るための戻るボタンがあります。 次の図:

           (水力発電所のインテリジェント制御表示インターフェース)

ポンプ場制御システムインターフェース機能の説明。 次の図:

                            (ポンプ場制御システムの機能インターフェース)

ポンプステーションの機能インターフェースでは、モードを変更したり、システム全体の電源をオン/オフしたりして、実際にシミュレートされたパラメーター(ブレードの投与量、即時流量、出力電力など)などを表示できます。インターフェイスを切り替えることができます(動作状態ログ、障害アラームレポートなど)。 同時に、システム値(ブレードの総数、定格電力、設定流量)も表示できます。 動作条件ログ(コンテンツの注文番号、発生時間、イベントの詳細、メモ)、障害アラーム(コンテンツの注文番号、発生時間、アラームの詳細、アラームコードなど)、 XNUMXつのインターフェースには戻るボタンがあり、ポンプステーションの機能インターフェースに戻ることができます。  

実用的なアイデア:  

シリアルポート画面はマンマシンインターフェースとして機能し、Arduino開発ボードと通信します。 ボードはタッチスクリーンのボタンコマンドを受け入れ、同期表示のためにデータをシリアルポートタッチスクリーンに送信します。 スライダースケールは、電力の変化を動的に表示するように設計されています。 電源スイッチ、電源ナイフ、モードスイッチ、モードナイフのアイコンは、ICONファイルを生成し、電源とモードのアクション効果をアニメーション化するように設計されています。 さらに、Arduinoデモプログラムでは、可変メモリを使用して命令を読み取り、電源とモードの状態を取得して、出力データのシミュレーションを制御し、実際の数量ウィンドウをシリアルポート画面に出力します。  

作業手順:  

  1. ハードウェアのセットアップ。  
  2. A)Arduino開発ボードとUSBをシリアルポート変換ボードに接続します。  
  3. B)を接続します STONEタッチスクリーン USBシリアルポートダウンロードボードとUSB-シリアルポートアダプタボードを使用。  
  4. C)シリアルポート画面とArduino開発ボードの電源を接続します。  
  • シリアルポート画面、アニメーションアイコンファイル、スライダースケールの3つのインターフェースを作成し、STONE画面開発プラットフォームにインポートしました STONE TOOL BOX(GUIデザインソフトウェア);  

3、シリアルコマンドのデバッグ、およびポンプ場制御と水力発電所制御のデモンストレーション機能を実現するためのプログラミング。  

 次に、特定の開発プロセスを文書化します。

まず、ハードウェア接続を設定します。  

作業手順に従って、すべての部品を適切に接続します。

次に、ICONインジケーター画像を作成します。  

このプロジェクトで使用されるボタンとナイフのアイコンは次のように作られています。  

(ポンプ場制御スイッチ、ナイフアニメーションICONファイル8。ICOリスト参照図)

STONE TOOL BOX(GUIデザインソフトウェア)のメニューバーで、[ツール(T)]メニューの[アイコン生成ツール]をクリックして、[アイコンツール]ダイアログボックスをポップアップします。 ダイアログボックスの下部にある[画像パスの選択]をクリックして、アイコン画像パスを選択します。 「アイコンファイルの生成」ボタンをクリックして、STONE TOOL BOX(GUIデザインソフトウェア)プラットフォームによって認識される「.ico」ファイルを生成するパスにBMPファイルをパッケージ化します。 「プレビュー」ボタンをクリックして、インポートされた「.ico」圧縮ファイルのICONリストを表示します。  

BMPアイコンをアニメーション化するボタン、上記のピクセル(生成された可変アイコンコントロール、同じ位置のサイズは同じである必要があります)、ポンプステーションコントロール8枚の写真を同じフォルダーにカットします。 次に、STONE TOOL BOX(GUIデザインソフトウェア)画面の左側で、アイコンページカードを選択し、「アイコンリスト」の下の「アイコンの追加」ボタンを使用して、圧縮された7.Icoファイルに追加します。 水力発電所の制御スイッチ状態の6枚の写真をすべて別のフォルダーに入れ、1〜6の順序で並べます。 「6。 Ico」ファイル、そして左側に STONE TOOL BOX(GUIデザインソフトウェア) 画面で、アイコンページカードを選択し、zip形式の「6。 「アイコンリスト」の下の「アイコンの追加」ボタンを使用した「Ico」ファイル。  

次に、画像アイコンをSTONE TOOL BOX(GUIデザインソフトウェア)にインポートし、機能ボタンを作成します。  

このプロジェクトでは、アニメーション機能を実現するために、9変数アニメーションicon.wmvの方法が引き続き採用されています。 パラメータ設定のスクリーンショットは次のとおりです。  

            (水力発電所の可変ICONの属性図)

左から右に、水力発電所の機能ページの0つの変数(開始、停止、状態)のICONパラメーター設定があります。 それらのメモリアドレスは同じ(0039x6)に設定され、それらのデータ範囲は同じであるため、それらの変更は同期されます。 アイコンファイルは1です。Ico、対応するアイコンのシリアル番号はそれぞれ2と3、4と6、5とXNUMXで、実際の状態に応じて選択されます。  

ボタン状態のアニメーション効果は、インクリメンタルボタンによって実現されます。 次の図は、左側の増分ボタンと右側の識別ボタンのパラメーターを示しています。 アドレスは0x0039で、どちらも変数ICONのアドレスと同じです。

(同じメモリアドレスを持つインクリメンタルボタンの属性図)

(ポンプ場のボタンナイフ状態の可変ICON属性図)

左から右に、ポンプステーション機能ページの8つの変数(電源ボタン、電源ナイフ、モードナイフ、モードボタン)のICONパラメータ設定があります。 ここでは、両方のアイコンファイルがXNUMX.ICOであり、それらのデータ範囲は同じであり、同じもののメモリアドレスが同期的に変更されます。  

ボタン状態のアニメーションもインクリメンタル ボタンで実装されます。 次の図では、電源削減ボタンの左側とモード増加ボタンの右側が電源削減ボタンのパラメーターです。 アドレスは上記の Variable ICON と同じで、それぞれ 0x0009 と 0x000A です。 ピンポンボタンの限界以上の処理モードです。

(ポンプステーションボタン状態のインクリメンタルボタン属性図変数ICON同じメモリアドレスを持つ変数)

さらに、ポンプステーションの出力電力は、次の図に示すように、スライドアイコンを使用して表示されます。

そのパラメータ属性は次のとおりです。

(ポンプ場の出力のスライドアイコン—スライダースケールのプロパティボックス)

このスライダースケールコントロールのアイコンは、公式のDEMO24.icoで呼び出されます。 24.icoファイルを追加する方法は上記と同じです。 このスライダースケールコントロールのメモリアドレスは0x0180で、アイコンの位置を変更するために82命令(上の図に示すように、範囲は0〜100に設定されています)を使用してMCUプログラムに書き込むことができます。  

特に、このプロジェクトの電源ボタンとモードボタンのステータスは、シリアルポート画面のメモリアドレス0x0009、0x000A、0x0039から83命令で読み取られます。 

使用する手順は次のとおりです。  

A5 5A 04 83 00 09 02  

シリアルポート画面のフィードバックは次のとおりです。  

A5 5A 08 83 00 09 02 00 01 00 02  

次の00は01x2の0バイトデータ、0009は00x02Aの2バイトデータです。  

命令0x0039を次のように読み取ります。  

A5 5A 04 83 00 39 01  

シリアルポート画面のフィードバックは次のとおりです。  

A5 5A 06 83 00 39 01 00 01 または  

A5 5A 06 83 00 39 01 00 02  

書き込むデータ アドレスは、0x0020、0x0160、0x0180、0x0260、0x0280 の XNUMX つです。  

ここで、リーフ投与アドレスは 0x0020 で、2 バイトの 2 ビット整数です。 シリアルポートを介してタッチスクリーンディスプレイに送信できます。  

タッチスクリーンデータ変数ディスプレイに11を渡すには、 次のコマンドを使用します。  

A5 5A 05 82 00 20 00 0B  

プログラミングのデバッグ。  

コードは次のとおりです。  

/*

  frank8

  STONEとarduinoCOMM、enlaijiyepianシステム。

  LEDをXNUMX秒間オンにしてから、XNUMX秒間オフを繰り返します。

  アドレス0x0020は、YePianのnumのアドレスです。

  アドレス0x0160は現在の柳梁のアドレスです。

  アドレス0x0180は、Bengzhanアウトパワーのアドレスです。

  アドレス0x0260はJiejujiaoのアドレスです。

  アドレス0x0280は、水の出力のアドレスです。

  アドレス0x0009はbengzhan電源キーです。

  アドレス0x000Aはベンザンモードキーです。

  アドレス0x0039は水力キーです。

  このサンプルコードはfrankのファイルにあります。 20210611

 */

//ピン13には、ほとんどのArduinoボードに接続されたLEDがあります。

//名前を付けます:

int LED = 13;

int iYePian = 0; // 0x0020 for YePian!

int iGongLu = 0; // 0x0180 for the GongLu!

int iLiuLiang = 0; // 0x0160 for the now LiuLiang!

int iJiao = 0; // JieJuJiaoの場合は0x0260!

int iGongLuWater = 0; // 0x0280 for the Water GongLu! 値は0-50000です!

int iLed = 1; //遅延時間num。

int iNum = 0; //文字番号を読み込みます。

int iNum2 = 0; // ShuiDianZhanのcharnum2を読み込みます!

int iPower = 2; //キースタチュー0x0009

int iMode = 2; //キースタチュー0x000A

int iPowerWater = 2; //キースタチュー0x0039

//リセットを押すと、セットアップルーチンがXNUMX回実行されます。

voidセットアップ(){                

  //デジタルピンを出力として初期化します。

  pinMode(led、OUTPUT);     

  Serial.begin(115200); //シリアル通信機能を開き、シリアルポートが開くのを待ちます  

while(!Serial){

    ; //シリアルポートが接続するのを待ちます。 レオナルドにのみ必要

  }  

}

//ループルーチンは永遠に何度も何度も実行されます:

voidループ(){

  inChar;

    if(iLed == 900){     

// ——- 0x0009および0x000Aの値を読み取ります———- 

            Serial.write(0xA5); //「A5」は165です

            Serial.write(0x5A); //「5A」は90です

            Serial.write(0x04); //長さ

            Serial.write(0x83); // 読んだ!

            Serial.write(0x00); // bengzhan電源キーのアドレス!

            Serial.write(0x09); // bengzhan電源キーのアドレス!

            Serial.write(0x02); // 0x0009(電源)および0x000A(モード)

// ——— STONEの戻り値は「A5A5 08 83 00 09 02 00 01」になります-

     }

/ * ——————————————————————————- * /     

    if(iLed == 800){     

// ——- 0x0039値を読み取ります———- 

            Serial.write(0xA5); //「A5」は165です

            Serial.write(0x5A); //「5A」は90です

            Serial.write(0x04); //長さ

            Serial.write(0x83); // 読んだ!

            Serial.write(0x00); // ShuiDianZhan電源キーのアドレス!

            Serial.write(0x39); // ShuiDianZhan電源キーのアドレス!

            Serial.write(0x01); // 0x0039(電源キー) 

// ——— STONEの戻り値は「A5A 5 06 83 00 39 01」になります-

     }

  //シリアルポートから送信されたメッセージを読み取ります。

  if(Serial.available()> 0){inChar = Serial.read(); }

  if(inChar == 0x09){iNum = 1; }

  if((inChar == 0x02)&&(iNum == 1)){iNum = 2; }

  if((inChar == 0x00)&&(iNum == 2)){iNum = 3; }

  if((inChar == 0x01)&&(iNum == 3)){  

      iNum = 4;

      if(iPower!= 1){

          iPower = 1; //電源オン!

          iLiuLiang = 10;

          iGongLu = 50;

          iYePian = 10;         

      }

   }

   if((inChar == 0x02)&&(iNum == 3)){  

      iNum = 4;

      iPower = 2; //電源を切る!

      iLiuLiang = 0;

      iGongLu = 0;

      iYePian = 0;

   }

   if((inChar == 0x00)&&(iNum == 4)){iNum = 5; }

   if((inChar == 0x01)&&(iNum == 5)){  

      iNum = 0;

      iMode = 1; //モードは良いです!

   }

   if((inChar == 0x02)&&(iNum == 5)){  

      iNum = 0;

      iMode = 2; //モードがオフです!

      if(iPower == 1)iGongLu = 60; // GongLuは60%に設定されています!

   }

  // —————— 0x0009および0x000Aキーの読み取りはOKです! iPower \ iMode ok!—————————-

   if(inChar == 0x39){iNum2 = 1; }

  if((inChar == 0x01)&&(iNum2 == 1)){iNum2 = 2; }

  if((inChar == 0x00)&&(iNum2 == 2)){iNum2 = 3; }

  if((inChar == 0x01)&&(iNum2 == 3)){  

      iNum2 = 0;

      if(iPowerWater!= 1){

          iPowerWater = 1; //電源オン!       

          iJiao = 0;

          iGongLuWater = 0;

      }

   }

   if((inChar == 0x02)&&(iNum2 == 3)){  

      iNum2 = 0;

      iPowerWater = 2; //電源を切る!

   }

  // —————— 0x0039キーの読み取りOK! iPowerWater ok!—————————-

  delay(1); 

  iLed + = 1;   

  if(iLed == 500){  

      digitalWrite(led、HIGH); // LEDをオンにします(HIGHは電圧レベルです)

                  // delay(500); // 200秒待ちます、範囲:2000-XNUMX

           if(iPower == 1){ 

               iYePian + = 1; //範囲:1-20

               iLiuLiang + = 1; //範囲:1-20

               if(iMode == 1)iGongLu + = 5; //範囲:1-20

           }   

           if(iYePian> = 14){iYePian = 10; }   

           if(iGongLu> = 70){iGongLu = 50; }   

           if(iLiuLiang> = 14){iLiuLiang = 10; }   

           if(iPowerWater == 2){ 

               iJiao + = 1; //範囲:1-20

               iGongLuWater + = 2; //範囲:1-20

           }   

           if(iJiao> = 60){ 

               iJiao = 0; 

               iGongLuWater = 0; 

           }   

  }    

  if(iLed> = 1000){    

      digitalWrite(led、LOW); //電圧をLOWにしてLEDをオフにします

                  // delay(500); // 200秒待つ、範囲:2000-XNUMX

      iLED = 1;

            Serial.write(0xA5); //「A5」は165です

            Serial.write(0x5A); //「5A」は90です

            Serial.write(0x05);

            Serial.write(0x82);

            Serial.write(0x00); // YePianのアドレス

            Serial.write(0x20); // YePianのアドレス

            Serial.write(0x00);

            Serial.write(iYePian);

            Serial.write(0xA5); //「A5」は165です

            Serial.write(0x5A); //「5A」は90です

            Serial.write(0x05);

            Serial.write(0x82);

            Serial.write(0x01); // GongLuのアドレス

            Serial.write(0x80); // GongLuのアドレス

            Serial.write(0x00);

            Serial.write(iGongLu);

            Serial.write(0xA5); //「A5」は165です

            Serial.write(0x5A); //「5A」は90です

            Serial.write(0x05);

            Serial.write(0x82);

            Serial.write(0x01); //柳梁の住所

            Serial.write(0x60); //柳梁の住所

            Serial.write(iLiuLiang); // LiuLiangは2800〜3200です

            Serial.write(0x80);            

            Serial.write(0xA5); //「A5」は165です

            Serial.write(0x5A); //「5A」は90です

            Serial.write(0x05);

            Serial.write(0x82);

            Serial.write(0x02); // ShuiDianZhanJieJuJiaoのアドレス

            Serial.write(0x60); // ShuiDianZhanJieJuJiaoのアドレス

            Serial.write(0x00);

            Serial.write(iJiao);

            Serial.write(0xA5); //「A5」は165です

            Serial.write(0x5A); //「5A」は90です

            Serial.write(0x05);

            Serial.write(0x82);

            Serial.write(0x02); // ShuiDianZhan outPowerのアドレス

            Serial.write(0x80); // ShuiDianZhan outPowerのアドレス;

            Serial.write(iGongLuWater); // ShuiDianZhan out Poweは0〜32000です

            Serial.write(0x00);            

  }    

最後に、ビデオをオンラインで録画します。 

電源と通信を接続し、Arduino開発ボードをシリアルポート通信に接続し、シリアルポート画面で水力発電所とポンプ場の機能インターフェイスを観察し、スイッチに触れて効果を確認し、アイコンとデータをスライドさせて正常です。  

出典:プラトンデータインテリジェンス