IOT

Arduino pompbesturing + STONE HMI-display

Het intelligente regelsysteem van het blad is een gepatenteerde technologie die wordt gebruikt in het reguliere besturingssysteem van verschillende grote, middelgrote en kleine waterkrachtcentrales en pompstations. Dit project gebruikt het betrouwbare seriële industriële aanraakscherm als mens-machine-interface om dagelijkse parameters en realtime bladdosering, uitgangsvermogen, onmiddellijke stroom en andere informatie weer te geven, als weergave van het bedieningseffect. Daarnaast zijn ook het werkconditielogboek en het storingsalarmformulier gepland en is de standby-knop gereserveerd. Het project maakt gebruik van het seriële aanraakscherm voor gegevensweergave en weergave van dia-indicaties. De accessoires zijn als volgt:  

  1. STVI056WT-01 serieel touchscreen en STONE-adapterkaart V1.2;  
  2. Bijpassende Arduino-besturingskaart;  

Korte beschrijving van de interfacefunctie van intelligent bladregelend controlesysteem.  

Er zijn drie knoppen op de startpagina, die kunnen worden ingedrukt om het bijbehorende waterkrachtcentralesysteem, pompstationbesturingssysteem en de gebruikersgidsinterface (met reserveknoppen) te openen. De interface van de gebruikershandleiding toont het raamwerk van het demosysteem, zoals weergegeven in de volgende afbeelding:

(Home-interface van Enlegi Blade Intelligent Adjustment Control Demonstration Software)

Op de interface van het besturingssysteem van de waterkrachtcentrale zijn er start- en stopknoppen en weergave van status, nominale waarde (inclusief nominale spanning, nominaal vermogen en nominale snelheid) en regelwaarde (inclusief hellingshoek van propellerblad en uitgangsvermogen). Daarnaast kunnen er ook andere knoppen voor het springen van pagina's zijn (zoals startpagina, werkconditielogboek, storingsalarm en andere standby-knoppen). Op de werkconditielog en storingsalarmpagina kan er een terugknop zijn om naar deze pagina terug te keren. Het onderstaande schema:

           (Intelligente bedieningsdisplay-interface van waterkrachtcentrale)

Functiebeschrijving van de interface van het pompstationbesturingssysteem. Het onderstaande schema:

                            (Functie-interface van het besturingssysteem van het pompstation)

In de functionele interface van het pompstation kan de modus worden gewijzigd en kan de voeding van het hele systeem worden in- en uitgeschakeld om de werkelijke gesimuleerde parameters weer te geven (zoals bladdosering, onmiddellijk debiet, uitgangsvermogen) en andere interfaces kunnen worden geschakeld (zoals werkconditielogboek, storingsalarmrapport). Tegelijkertijd kunnen ook systeemwaarden (totaal aantal schoepen, nominaal vermogen, ingesteld debiet) worden weergegeven. Andere interfaces kunnen ook zijn, zoals een werkconditielogboek (inhoud kan worden besteld, nummer, tijd van optreden, gebeurtenisdetails, notities), storingsalarm (inhoud kan worden besteldnummer, tijd van optreden, alarmdetails, alarmcode, enz.), de twee interfaces kunnen een retourknop hebben, kunnen terugkeren naar de functionele interface van het pompstation.  

Werkend idee:  

Het seriële poortscherm dient als mens-machine-interface en communiceert met het Arduino-ontwikkelbord. Het bord accepteert knopopdrachten van het aanraakscherm en verzendt gegevens naar het aanraakscherm van de seriële poort voor synchrone weergave. Schuifschaal is ontworpen om vermogensveranderingen dynamisch weer te geven. Pictogrammen van aan / uit-schakelaar, stroommes, modusschakelaar en modusmes zijn ontworpen om ICON-bestanden te genereren en de actie-effecten van voeding en modus te animeren. Bovendien wordt in het Arduino-demoprogramma variabel geheugen gebruikt om instructies te lezen om de toestand van de voeding en modus te verkrijgen, om de simulatie van uitvoergegevens te besturen en het werkelijke hoeveelheidvenster naar het seriële poortscherm uit te voeren.  

Werkstappen:  

  1. Hardware instellen;  
  2. A) Sluit het Arduino-ontwikkelbord en USB aan op het conversiebord van de seriële poort;  
  3. B) Sluit de aan STEEN touchscreen met de USB seriële poort downloadkaart en de USB naar seriële poort adapterkaart;  
  4. C) Sluit het scherm van de seriële poort en de voeding van de Arduino-ontwikkelkaart aan;  
  • 3 interfaces gemaakt van het seriële poortscherm, geanimeerd pictogrambestand en schuifregelaarschaal en geïmporteerd in het STONE-schermontwikkelingsplatform STONE TOOL BOX (GUI Design-software);  

3, door middel van seriële commando-foutopsporing en vervolgens programmeren om de demonstratiefuncties van de pompstationbesturing en de waterkrachtcentralebesturing te bereiken.  

 Documenteer vervolgens het specifieke ontwikkelingsproces.

Stel eerst de hardwareverbinding in.  

Sluit alle onderdelen goed aan volgens de werkprocedures:

Maak vervolgens de ICON-indicatorafbeelding.  

De knoppen en mes-ICONS die in dit project worden gebruikt, zijn als volgt gemaakt:  

(Pompstationbedieningsschakelaar, mesanimatie ICON-bestand 8. ICO-lijst bladerdiagram)

Klik in de menubalk van STONE TOOL BOX (GUI Design-software) op Tool voor het genereren van pictogrammen onder het menu Tool (T) om het dialoogvenster Icon Tool te openen. Klik op "kies afbeeldingspad" onderaan het dialoogvenster om het pictogramafbeeldingspad te selecteren. Klik op de knop "ICON-bestand genereren" om de BMP-bestanden in het pad te verpakken om het ".ico"-bestand te genereren dat wordt herkend door het STONE TOOL BOX-platform (GUI Design-software). Klik op de knop "Preview" om de ICON-lijst in het geïmporteerde.ico "gecomprimeerde bestand te bekijken.  

Knop om BMP-pictogram te animeren, pixel zoals hierboven (geproduceerde variabele pictogrambesturing, de grootte van dezelfde positie moet hetzelfde zijn), pompstationbesturing 8 foto's in dezelfde map knippen. Selecteer vervolgens aan de linkerkant van het scherm STONE TOOL BOX (GUI Design-software) de Icon-paginakaart en voeg deze toe aan het gecomprimeerde 7. Ico-bestand met behulp van de knop "Icoon toevoegen" onder "Icon List". Plaats alle 6 foto's van de toestand van de bedieningsschakelaar van de waterkrachtcentrale in een andere map en rangschik ze in de volgorde 1-6. Maak de "6. Ico” bestand, en dan aan de linkerkant van de STONE TOOL BOX (GUI Design-software) scherm, selecteer de pictogrampaginakaart en voeg het gezipte "6. Ico"-bestand met behulp van de knop "Pictogram toevoegen" onder "Iconenlijst".  

Importeer nu het afbeeldingspictogram in STONE TOOL BOX (GUI Design-software) en maak de functieknop.  

De methode van 9-variabele-animatie icon.wmv wordt in dit project nog steeds toegepast om de animatiefunctie te realiseren. Het screenshot van de parameterinstelling is als volgt:  

            (Attribuutdiagram van variabel ICOON van waterkrachtcentrale)

Van links naar rechts zijn de ICON-parameter Instellingen van de drie variabelen van de waterkrachtcentrale-functiepagina: start, stop en status. Hun geheugenadressen zijn hetzelfde (0x0039) en hun gegevensbereiken zijn hetzelfde, dus hun wijzigingen worden gesynchroniseerd. Icon-bestanden zijn 6. Ico, en de bijbehorende Icon-serienummers zijn respectievelijk 1 en 2, 3 en 4, 6 en 5, die worden geselecteerd op basis van de werkelijke status.  

Het animatie-effect van de knopstatus wordt bereikt door middel van incrementele knoppen. De volgende afbeelding toont de parameters van de increment-knop aan de linkerkant en de decriminatie-knop aan de rechterkant. Het adres is 0x0039, die beide hetzelfde zijn als dat van het variabele ICOON.

(Attributendiagram van incrementele knop met hetzelfde geheugenadres)

(Variabele ICON-attribuutdiagram van knopmesstatus van pompstation)

Van links naar rechts zijn de ICON-parameterinstellingen van de vier variabelen van de functiepagina van het pompstation: aan / uit-knop, aan / uit-mes, modusmes en modusknop. Hier zijn beide Icon-bestanden 8.ICO en hun gegevensbereik is hetzelfde, waarbij het geheugenadres van hetzelfde synchroon wordt gewijzigd.  

Animaties van de knopstatus worden ook geïmplementeerd met incrementele knoppen. In de volgende afbeelding zijn de linkerkant van de knop voor het verminderen van de voeding en de rechterkant van de knop voor het verhogen van de modus de parameters van de knop voor het verminderen van de voeding. De adressen zijn hetzelfde als het bovenstaande variabele ICOON, respectievelijk 0x0009 en 0x000A. Dit is meer dan de limietverwerkingsmodus van een pingpongknop.

(Incrementeel knopattribuutdiagram van de status van de pompstationknop Variabele ICOON Variabele met hetzelfde geheugenadres)

Bovendien wordt het uitgangsvermogen van het pompstation weergegeven met een schuifpictogram, zoals weergegeven in de onderstaande afbeelding:

De parameterkenmerken zijn:

(Glijdend pictogram van uitgangsvermogen van pompstation - eigenschappenvak van schuifregelaar)

Het icoon van deze Slider schaalbesturing heet in de officiële DEMO 24.ico. De methode om het 24.ico-bestand toe te voegen is hetzelfde als hierboven. Het geheugenadres van deze Slider Scale-besturing is 0x0180, dat kan worden geschreven in het MCU-programma met 82-instructie (zoals weergegeven in de bovenstaande afbeelding, het bereik is ingesteld op 0-100) om de positie van het pictogram te wijzigen.  

In het bijzonder wordt de status van de voedings- en modusknoppen in dit project uitgelezen van het geheugenadres 0x0009, 0x000A en 0x0039 van het seriële poortscherm via 83-instructies. 

De gebruikte instructies zijn als volgt:  

A5 5A 04 83 00 09 02  

De feedback van het seriële poortscherm is als volgt:  

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

De volgende 00 01 is 2-byte-gegevens van 0x0009, 00 02 is 2-byte-gegevens van 0x000A.  

Lees instructie 0x0039 als:  

A5 5A 04 83 00 39 01  

De feedback van het seriële poortscherm is:  

A5 5A 06 83 00 39 01 00 01 of  

A5 5A 06 83 00 39 01 00 02  

Er zijn vijf dataadressen om naar te schrijven: 0x0020, 0x0160, 0x0180, 0x0260, 0x0280.  

Waarin het bladdoseringsadres 0x0020 is, een 2-bits geheel getal van 2 bytes. Het kan via de seriële poort naar het aanraakscherm worden verzonden.  

Om 11 door te geven aan het touchscreen datavariabele display, gebruik de volgende opdracht:  

A5 5A 05 82 00 20 00 0B  

Foutopsporing programmeren.  

De code is als volgt:  

/*

  frank8

  STEEN en arduino COMM, enlaiji yepian systeem.

  Schakelt een LED één seconde in en vervolgens herhaaldelijk uit voor één seconde.

  Het adres 0x0020 is het adres van het aantal YePian;

  Het adres 0x0160 is het adres van nu LiuLiang;

  Het adres 0x0180 is het adres van Bengzhan outpower;

  Het adres 0x0260 is het adres van Jiejujiao;

  Het adres 0x0280 is het adres van de waterkrachtcentrale;

  Het adres 0x0009 is bengzhan power key;

  Het adres 0x000A is de Bengzhan-modussleutel;

  Het adres 0x0039 is de waterkrachtsleutel.

  Deze voorbeeldcode staat in het bestand van frank. 20210611

 */

// Op pin 13 is een LED aangesloten op de meeste Arduino-kaarten.

// geef het een naam:

int-led = 13;

int iYePian = 0; //0x0020 voor The num of YePian!

int iGongLu = 0; //0x0180 voor The GongLu!

int iLiuLiang = 0; //0x0160 voor The now LiuLiang!

int iJiao = 0; // 0x0260 voor The JieJuJiao!

int iGongLuWater = 0; //0x0280 voor The Water GongLu! waarde is 0-50000!

int iLed = 1; // vertragingstijd num.

int iNum = 0 ; // lees in char num.

int iNum2 = 0; // lees in char num2 voor ShuiDianZhan!

int iPower = 2; // sleutelbeeld 0x0009

int iMode = 2; // sleutelbeeld 0x000A

int iPowerWater = 2; // sleutelbeeld 0x0039

// de setup-routine wordt één keer uitgevoerd wanneer u op reset drukt:

void setup () {                

  // initialiseer de digitale pin als uitvoer.

  pinMode (led, UITGANG);     

  Serieel.begin(115200); // Open de seriële communicatiefunctie en wacht tot de seriële poort wordt geopend  

terwijl (! Serieel) {

    ; // wacht tot de seriële poort verbinding maakt. Alleen nodig voor Leonardo

  }  

}

// de lusroutine wordt voor altijd herhaald:

leegte lus () {

  int inChar;

    als (iLed == 900) {     

//——- lees 0x0009 en 0x000A waarde———- 

            Serieel.schrijven (0xA5); //”A5″ is 165

            Serieel.schrijven (0x5A); //”5A” is 90

            Serieel.schrijven (0x04); //lengte

            Serieel.schrijven (0x83); // lezen!

            Serieel.schrijven (0x00); // adres van bengzhan power key!

            Serieel.schrijven (0x09); // adres van bengzhan power key!

            Serieel.schrijven (0x02); // 0x0009 (vermogen) en 0x000A (modus)

//———STONE-retourwaarde is "A5 5A 08 83 00 09 02 00 01 00 02"——

     }

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

    als (iLed == 800) {     

//——- lees 0x0039 waarde———- 

            Serieel.schrijven (0xA5); //”A5″ is 165

            Serieel.schrijven (0x5A); //”5A” is 90

            Serieel.schrijven (0x04); //lengte

            Serieel.schrijven (0x83); // lezen!

            Serieel.schrijven (0x00); // adres van ShuiDianZhan Power-toets!

            Serieel.schrijven (0x39); // adres van ShuiDianZhan power key!

            Serieel.schrijven (0x01); // 0x0039 (aan/uit-toets) 

//———STONE-retourwaarde is "A5 5A 06 83 00 39 01 00 01"——

     }

  // Lees het bericht verzonden door de seriële poort:

  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)) {  

      iGetal = 4 ;

      if(iPower !=1){

          iPower = 1 ; // AAN!

          iLiuLiang = 10;

          iGongLu = 50;

          iYePian = 10;         

      }

   }

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

      iGetal = 4 ;

      iPower = 2 ; // stroom UIT!

      iLiuLiang = 0;

      iGongLu = 0;

      iYePian = 0;

   }

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

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

      iGetal = 0 ;

      iMode = 1 ; //Modus is goed!

   }

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

      iGetal = 0 ;

      iMode = 2 ; //Modus is UIT!

      if(iPower == 1)iGongLu = 60; //GongLu is ingesteld op 60%!

   }

  //——————0x0009 en 0x000A sleutel lezen 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)) {  

      iGetal2 = 0 ;

      if(iPowerWater! = 1){

          iPowerWater = 1 ; // AAN!       

          iJiao = 0;

          iGongLuWater = 0;

      }

   }

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

      iGetal2 = 0 ;

      iPowerWater = 2 ; // stroom UIT!

   }

  //——————0x0039 sleutel lezen ok! iPowerWater ok!—————————-

  vertraging (1); 

  iLed += 1;   

  als (iLed == 500) {  

      digitalWrite (led, HOOG); // zet de LED aan (HOOG is het spanningsniveau)

                  //vertraging (500); // wacht even, bereik: 200-2000

           if(iPower == 1) { 

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

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

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

           }   

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

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

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

           if(iPowerWater == 2) { 

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

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

           }   

           als (iJiao >= 60 ) { 

               iJiao = 0; 

               iGongLuWater = 0; 

           }   

  }    

  if (iLed >= 1000) {    

      digitalWrite (led, LAAG); // schakel de LED uit door de spanning LAAG te maken

                  //vertraging (500); // wacht even, bereik: 200-2000

      iLed = 1;

            Serieel.schrijven (0xA5); //”A5″ is 165

            Serieel.schrijven (0x5A); //”5A” is 90

            Serieel.schrijven (0x05);

            Serieel.schrijven (0x82);

            Serieel.schrijven (0x00); // adres van YePian

            Serieel.schrijven (0x20); // adres van YePian

            Serieel.schrijven (0x00);

            Serieel.schrijven(iYePian);

            Serieel.schrijven (0xA5); //”A5″ is 165

            Serieel.schrijven (0x5A); //”5A” is 90

            Serieel.schrijven (0x05);

            Serieel.schrijven (0x82);

            Serieel.schrijven (0x01); // adres van GongLu

            Serieel.schrijven (0x80); // adres van GongLu

            Serieel.schrijven (0x00);

            Serieel.schrijven(iGongLu);

            Serieel.schrijven (0xA5); //”A5″ is 165

            Serieel.schrijven (0x5A); //”5A” is 90

            Serieel.schrijven (0x05);

            Serieel.schrijven (0x82);

            Serieel.schrijven (0x01); // adres van LiuLiang

            Serieel.schrijven (0x60); // adres van LiuLiang

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

            Serieel.schrijven (0x80);            

            Serieel.schrijven (0xA5); //”A5″ is 165

            Serieel.schrijven (0x5A); //”5A” is 90

            Serieel.schrijven (0x05);

            Serieel.schrijven (0x82);

            Serieel.schrijven (0x02); // adres van ShuiDianZhan JieJuJiao

            Serieel.schrijven (0x60); // adres van ShuiDianZhan JieJuJiao

            Serieel.schrijven (0x00);

            Serieel.schrijven(iJiao);

            Serieel.schrijven (0xA5); //”A5″ is 165

            Serieel.schrijven (0x5A); //”5A” is 90

            Serieel.schrijven (0x05);

            Serieel.schrijven (0x82);

            Serieel.schrijven (0x02); // adres van ShuiDianZhan uit Power

            Serieel.schrijven (0x80); // adres van ShuiDianZhan uit Power;

            Serial.write(iGongLuWater); // ShuiDianZhan uit Powe is 0-32000

            Serieel.schrijven (0x00);            

  }    

Neem ten slotte de video online op. 

Sluit de voeding en communicatie aan, sluit het Arduino-ontwikkelbord aan op de seriële poortcommunicatie, observeer de functionele interface van het waterkrachtstation en het pompstation op het seriële poortscherm, raak de schakelaar aan om het effect te controleren en schuif het pictogram en de gegevens zijn normaal .  

Bron: Plato Data Intelligence