IDO

Contrôle de la pompe Arduino + affichage STONE HMI

Le système de régulation intelligent des pales est une technologie brevetée, qui est utilisée dans le système de contrôle grand public de diverses grandes, moyennes et petites stations hydroélectriques et stations de pompage. Ce projet utilise l'écran tactile industriel série fiable comme interface homme-machine pour afficher les paramètres quotidiens et le dosage de la lame en temps réel, la puissance de sortie, le débit instantané et d'autres informations, comme affichage de l'effet de fonctionnement. De plus, le journal des conditions de fonctionnement et le formulaire d'alarme de défaut sont également prévus, et le bouton de veille est réservé. Le projet utilise l'écran tactile série pour l'affichage des données et l'affichage de l'indication des diapositives. Les accessoires sont les suivants :  

  1. STVI056WT-01 écran tactile série et carte adaptateur STONE V1.2;  
  2. Carte de contrôle Arduino assortie;  

Brève description de la fonction d'interface du système de contrôle de régulation de lame intelligent.  

Il y a trois boutons sur la page d'accueil, qui peuvent être enfoncés pour entrer dans le système de centrale hydroélectrique correspondant, le système de contrôle de la station de pompage et l'interface du guide de l'utilisateur (avec des boutons de rechange). L'interface du guide de l'utilisateur montre le cadre du système de démonstration, comme illustré dans la figure suivante :

(Interface d'accueil du logiciel de démonstration de contrôle de réglage intelligent Enlegi Blade)

À l'interface du système de contrôle de la centrale hydroélectrique, il y a des boutons de démarrage et d'arrêt et l'affichage de l'état, de la valeur nominale (y compris la tension nominale, la puissance nominale et la vitesse nominale) et la valeur de contrôle (y compris l'angle de pas de la pale d'hélice et la puissance de sortie). En outre, il peut également y avoir d'autres boutons de saut de page (tels que la page d'accueil, le journal des conditions de travail, l'alarme de panne et d'autres boutons de veille). Dans le journal des conditions de fonctionnement et la page d'alarme de défaut, il peut y avoir un bouton de retour pour revenir à cette page. Le schéma ci-dessous :

           (Interface d'affichage de contrôle intelligent de la centrale hydroélectrique)

Description de la fonction de l'interface du système de contrôle de la station de pompage. Le schéma ci-dessous :

                            (Interface de fonction du système de contrôle de la station de pompage)

Dans l'interface fonctionnelle de la station de pompage, le mode peut être modifié et l'alimentation électrique de l'ensemble du système peut être allumée et éteinte pour afficher les paramètres simulés réels (tels que le dosage de la lame, le débit immédiat, la puissance de sortie) et d'autres les interfaces peuvent être commutées (telles que le journal des conditions de travail, le rapport d'alarme de défaut). En même temps, les valeurs du système (nombre total de pales, puissance nominale, débit réglé) peuvent également être affichées. D'autres interfaces peuvent également avoir, telles que le journal des conditions de fonctionnement (le contenu peut être un numéro commandé, l'heure d'occurrence, les détails de l'événement, des notes), une alarme de défaut (le contenu peut être un numéro commandé, l'heure d'occurrence, les détails de l'alarme, le code d'alarme, etc.), le deux interfaces peuvent avoir un bouton de retour, peuvent revenir à l'interface fonctionnelle de la station de pompage.  

Idée de travail:  

L'écran du port série sert d'interface homme-machine et communique avec la carte de développement Arduino. La carte accepte les commandes de bouton de l'écran tactile et transmet les données à l'écran tactile du port série pour un affichage synchrone. L'échelle de curseur est conçue pour afficher les changements de puissance de manière dynamique. Les icônes de l'interrupteur d'alimentation, du couteau d'alimentation, du commutateur de mode et du couteau de mode sont conçues pour générer des fichiers ICON et animer les effets d'action de l'alimentation et du mode. De plus, dans le programme de démonstration Arduino, la mémoire variable est utilisée pour lire les instructions permettant d'obtenir l'état de l'alimentation et du mode, afin de contrôler la simulation des données de sortie et de sortir la fenêtre de quantité réelle sur l'écran du port série.  

Étapes de travail :  

  1. Configuration du matériel ;  
  2. A) Connectez la carte de développement Arduino et l'USB à la carte de conversion de port série ;  
  3. B) Connectez le Écran tactile PIERRE avec la carte de téléchargement du port série USB et la carte adaptateur USB vers port série ;  
  4. C) Connectez l'écran du port série et l'alimentation de la carte de développement Arduino ;  

3, via le débogage de la commande série, puis la programmation pour obtenir des fonctions de démonstration de contrôle de station de pompage et de contrôle de station hydroélectrique.  

 Ensuite, documentez le processus de développement spécifique.

Tout d'abord, configurez la connexion matérielle.  

Faites un bon travail de connexion de toutes les pièces selon les procédures de travail :

Ensuite, créez l'image de l'indicateur ICON.  

Les boutons et ICNES de couteau utilisés dans ce projet sont fabriqués comme suit :  

(Interrupteur de commande de station de pompage, fichier ICNE d'animation de couteau 8. Diagramme de navigation de la liste ICO)

Dans la barre de menu de STONE TOOL BOX (logiciel GUI Design), cliquez sur Outil de génération d'icônes dans le menu Outil (T) pour faire apparaître la boîte de dialogue Outil d'icône. Cliquez sur "choisir le chemin de l'image" au bas de la boîte de dialogue pour sélectionner le chemin de l'image de l'icône. Cliquez sur le bouton « Générer le fichier ICON » pour regrouper les fichiers BMP dans le chemin pour générer le fichier « .ico » reconnu par la plate-forme STONE TOOL BOX (logiciel de conception GUI). Cliquez sur le bouton « Aperçu » pour afficher la liste des ICON dans le fichier compressé « ico » importé.  

Bouton pour animer l'icône BMP, pixel comme ci-dessus (contrôle de l'icône variable produite, la taille de la même position doit être la même), contrôle de la station de pompage 8 images coupées dans le même dossier. Ensuite, sur le côté gauche de l'écran STONE TOOL BOX (logiciel GUI Design), sélectionnez la carte de page d'icônes et ajoutez-la au fichier 7. Ico compressé à l'aide du bouton « Ajouter une icône » sous « Liste d'icônes ». Mettez toutes les 6 images de l'état de l'interrupteur de commande de la centrale hydroélectrique dans un autre dossier et organisez-les dans l'ordre 1-6. Créez le « 6. Ico", puis sur le côté gauche du BOÎTE À OUTILS EN PIERRE (logiciel GUI Design) écran, sélectionnez la carte de la page d'icônes et ajoutez le fichier « 6. Ico" en utilisant le bouton "Ajouter une icône" sous "Liste d'icônes".  

Importez maintenant l'icône de l'image dans STONE TOOL BOX (logiciel GUI Design) et créez le bouton de fonction.  

La méthode de 9-variable-animation icon.wmv est toujours adoptée dans ce projet pour réaliser la fonction d'animation. La capture d'écran du paramétrage est la suivante :  

            (Schéma d'attributs de l'ICNE variable de la centrale hydroélectrique)

De gauche à droite se trouvent les paramètres ICNE Réglages des trois variables de la page de fonction de la centrale hydroélectrique : démarrage, arrêt et état. Leurs adresses mémoire sont définies sur les mêmes (0x0039) et leurs plages de données sont les mêmes, de sorte que leurs modifications sont synchronisées. Les fichiers d'icônes sont 6. Ico, et les numéros de série d'icônes correspondants sont respectivement 1 et 2, 3 et 4, 6 et 5, qui sont sélectionnés en fonction de l'état réel.  

L'effet d'animation de l'état du bouton est obtenu grâce à des boutons incrémentiels. La figure suivante montre les paramètres du bouton d'incrémentation à gauche et du bouton de décrimination à droite. L'adresse est 0x0039, les deux étant identiques à celle de l'ICNE de la variable.

(Diagramme d'attributs du bouton incrémental avec la même adresse mémoire)

(Diagramme d'attribut d'ICNE variable de l'état du couteau à bouton de la station de pompage)

De gauche à droite se trouvent les paramètres ICNE Réglages des quatre variables de la page de fonction de la station de pompage : bouton d'alimentation, couteau d'alimentation, couteau de mode et bouton de mode. Ici, les deux fichiers Icon sont 8.ICO, et leur plage de données est la même, dans laquelle l'adresse mémoire du même sera modifiée de manière synchrone.  

Les animations d'état des boutons sont également implémentées avec des boutons incrémentiels. Dans la figure suivante, le côté gauche du bouton de réduction de l'alimentation et le côté droit du bouton d'incrémentation de mode sont les paramètres du bouton de réduction de l'alimentation. Les adresses sont les mêmes que celles de l'ICÔNE de variable ci-dessus, respectivement 0x0009 et 0x000A. C'est plus que le mode de traitement limite d'un bouton de ping-pong.

(Diagramme d'attributs de bouton incrémentiel de l'état du bouton de la station de pompage Variable ICNE Variable avec la même adresse mémoire)

De plus, la puissance de sortie de la station de pompage est affichée à l'aide d'une icône coulissante, comme le montre la figure ci-dessous :

Ses attributs de paramètre sont :

(Icône coulissante de la puissance de sortie de la station de pompage - zone de propriété de l'échelle Slider)

L'icône de ce contrôle d'échelle Slider est appelée dans la DEMO officielle 24.ico. La méthode pour ajouter le fichier 24.ico est la même que ci-dessus. L'adresse mémoire de ce contrôle Slider Scale est 0x0180, qui peut être écrite dans le programme MCU avec 82 instructions (comme indiqué dans l'image ci-dessus, la plage est définie sur 0-100) pour modifier la position de l'icône.  

En particulier, l'état des boutons d'alimentation et de mode dans ce projet est lu à partir de l'adresse mémoire 0x0009, 0x000A et 0x0039 de l'écran du port série via l'instruction 83. 

Les instructions utilisées sont les suivantes :  

A5 5A 04 83 00 09 02  

Le retour de l'écran du port série est le suivant :  

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

Les 00 01 suivants sont des données à 2 octets de 0x0009, 00 02 sont des données à 2 octets de 0x000A.  

Lire l'instruction 0x0039 comme :  

A5 5A 04 83 00 39 01  

Le retour de l'écran du port série est :  

A5 5A 06 83 00 39 01 00 01 ou  

A5 5A 06 83 00 39 01 00 02  

Il existe cinq adresses de données sur lesquelles écrire : 0x0020, 0x0160, 0x0180, 0x0260, 0x0280.  

Dans lequel, l'adresse de dosage de la feuille est 0x0020, un nombre entier de 2 bits de 2 octets. Il peut être transmis à l'écran tactile via le port série.  

Pour passer 11 à l'affichage des variables de données de l'écran tactile, utilisez la commande suivante:  

A5 5A 05 82 00 20 00 0B  

Débogage de programmation.  

Le code est comme suit:  

/*

  frank8

  PIERRE et arduino COMM, système enlaiji yepian.

  Allume une LED pendant une seconde, puis s'éteint pendant une seconde, à plusieurs reprises.

  L'adresse 0x0020 est l'adresse du numéro de YePian ;

  L'adresse 0x0160 est l'adresse de maintenant LiuLiang ;

  L'adresse 0x0180 est l'adresse de la puissance de sortie de Bengzhan ;

  L'adresse 0x0260 est l'adresse de Jiejujiao ;

  L'adresse 0x0280 est l'adresse de la sortie d'eau ;

  L'adresse 0x0009 est la clé d'alimentation bengzhan;

  L'adresse 0x000A est la clé du mode bengzhan ;

  L'adresse 0x0039 est la clé d'alimentation hydraulique.

  Cet exemple de code se trouve dans le fichier de frank. 20210611

 */

// La broche 13 a une LED connectée sur la plupart des cartes Arduino.

// donne lui un nom:

led int = 13;

int iYePian = 0; //0x0020 pour Le numéro de YePian !

int iGongLu = 0; //x0 pour le GongLu !

int iLiuLiang = 0; //0x0160 pour le maintenant LiuLiang !

entier iJiao = 0; // 0x0260 pour le JieJuJiao !

int iGongLuEau = 0; //0x0280 pour The Water GongLu! la valeur est 0-50000 !

int iled = 1; //délai num.

entier iNum = 0 ; //lire dans char num.

entier iNum2 = 0 ; // lire dans le caractère num2 pour ShuiDianZhan !

int iPuissance = 2; //statue clé 0x0009

int iMode = 2; //statue clé 0x000A

int iPowerWater = 2; //statue clé 0x0039

// la routine de configuration s'exécute une fois lorsque vous appuyez sur reset:

void setup() {                

  // initialise la broche numérique en tant que sortie.

  pinMode (led, SORTIE);     

  Serial.begin(115200); // Ouvrir la fonction de communication série et attendre que le port série s'ouvre  

tandis que (!Série) {

    ; // attend que le port série se connecte. Nécessaire pour Leonardo seulement

  }  

}

// la routine de boucle s'exécute encore et encore pour toujours:

boucle vide () {

  int inChar ;

    si (iLed == 900) {     

//——- lire la valeur 0x0009 et 0x000A———- 

            Serial.write (0xA5) ; //"A5" vaut 165

            Serial.write (0x5A); //"5A" vaut 90

            Serial.write(0x04); //longueur

            Serial.write (0x83); // lire!

            Serial.write(0x00); // adresse de la clé d'alimentation bengzhan !

            Serial.write(0x09); // adresse de la clé d'alimentation bengzhan !

            Serial.write(0x02); // 0x0009(puissance) et 0x000A(mode)

//———La valeur de retour de PIERRE sera "A5 5A 08 83 00 09 02 00 01 00 02"——

     }

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

    si (iLed == 800) {     

//——- lire la valeur 0x0039———- 

            Serial.write (0xA5) ; //"A5" vaut 165

            Serial.write (0x5A); //"5A" vaut 90

            Serial.write(0x04); //longueur

            Serial.write (0x83); // lire!

            Serial.write(0x00); // adresse de la clé d'alimentation ShuiDianZhan !

            Serial.write (0x39); // adresse de la clé d'alimentation ShuiDianZhan !

            Serial.write(0x01); // 0x0039 (touche d'alimentation) 

//———La valeur de retour de PIERRE sera "A5 5A 06 83 00 39 01 00 01"——

     }

  // Lecture du message envoyé par le port série :

  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(iPuissance != 1){

          iPuissance = 1 ; //allumer!

          iLiuLiang = 10 ;

          iGongLu = 50 ;

          iOuiPian = 10 ;         

      }

   }

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

      iNum = 4 ;

      iPuissance = 2 ; //éteindre!

      iLiuLiang = 0 ;

      iGongLu = 0 ;

      iOuiPian = 0 ;

   }

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

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

      iNum = 0 ;

      iMode = 1 ; //Le mode est bon !

   }

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

      iNum = 0 ;

      iMode = 2 ; //Le mode est désactivé !

      if(iPower == 1)iGongLu = 60 ; //GongLu est réglé à 60 % !

   }

  //—————— Clé 0x0009 et 0x000A lue 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 ;

      si(iPowerWater != 1){

          iPowerWater = 1 ; //allumer!       

          iJiao = 0 ;

          iGongLuEau = 0 ;

      }

   }

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

      iNum2 = 0 ;

      iPowerWater = 2 ; //éteindre!

   }

  //—————— 0x0039 clé lecture ok! iPowerWater ok!—————————-

  délai (1); 

  LED += 1 ;   

  si (iLed == 500) {  

      digitalWrite (led, HAUT); // allume la LED (HIGH est le niveau de tension)

                  //délai (500); // attendez une seconde, Plage : 200-2000

           if(iPower == 1) { 

               iYePian += 1; //plage:1-20

               iLiuLiang += 1; //plage:1-20

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

           }   

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

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

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

           if(iPowerWater == 2) { 

               iJiao += 1; //plage:1-20

               iGongLuWater += 2; //plage:1-20

           }   

           si(iJiao >= 60 ) { 

               iJiao = 0 ; 

               iGongLuEau = 0 ; 

           }   

  }    

  si (iLed >= 1000) {    

      digitalWrite(led, LOW); // éteint la LED en rendant la tension FAIBLE

                  //délai (500); // attend une seconde, plage : 200-2000

      iLed = 1 ;

            Serial.write (0xA5) ; //"A5" vaut 165

            Serial.write (0x5A); //"5A" vaut 90

            Serial.write (0x05);

            Serial.write (0x82);

            Serial.write(0x00); // adresse de YePian

            Serial.write(0x20); // adresse de YePian

            Serial.write (0x00);

            Serial.write(iYePian);

            Serial.write (0xA5) ; //"A5" vaut 165

            Serial.write (0x5A); //"5A" vaut 90

            Serial.write (0x05);

            Serial.write (0x82);

            Serial.write(0x01); // adresse de GongLu

            Serial.write(0x80); // adresse de GongLu

            Serial.write (0x00);

            Serial.write(iGongLu);

            Serial.write (0xA5) ; //"A5" vaut 165

            Serial.write (0x5A); //"5A" vaut 90

            Serial.write (0x05);

            Serial.write (0x82);

            Serial.write(0x01); // adresse de LiuLiang

            Serial.write(0x60); // adresse de LiuLiang

            Serial.write(iLiuLiang); //LiuLiang est 2800-3200

            Serial.write (0x80);            

            Serial.write (0xA5) ; //"A5" vaut 165

            Serial.write (0x5A); //"5A" vaut 90

            Serial.write (0x05);

            Serial.write (0x82);

            Serial.write(0x02); // adresse de ShuiDianZhan JieJuJiao

            Serial.write(0x60); // adresse de ShuiDianZhan JieJuJiao

            Serial.write (0x00);

            Série.write(iJiao);

            Serial.write (0xA5) ; //"A5" vaut 165

            Serial.write (0x5A); //"5A" vaut 90

            Serial.write (0x05);

            Serial.write (0x82);

            Serial.write(0x02); // adresse de ShuiDianZhan hors Power

            Serial.write (0x80); // adresse de ShuiDianZhan out Power;

            Serial.write(iGongLuWater); //ShuiDianZhan sur Powe est 0-32000

            Serial.write (0x00);            

  }    

Enfin, enregistrez la vidéo en ligne. 

Connectez l'alimentation et la communication, connectez la carte de développement Arduino à la communication du port série, observez l'interface fonctionnelle de la station hydroélectrique et de la station de pompage sur l'écran du port série, touchez l'interrupteur pour vérifier l'effet, et faites glisser l'icône et les données sont normales .  

Source : Platon Data Intelligence