IOT

Arduino pump control+ STONE HMI display

Bladets intelligenta reglersystem är en patenterad teknologi som används i det vanliga styrsystemet för olika stora, medelstora och små vattenkraftverk och pumpstationer. Detta projekt använder den tillförlitliga seriella industriella pekskärmen som människa-maskin-gränssnitt för att visa dagliga parametrar och knivdosering i realtid, uteffekt, omedelbart flöde och annan information, som operationseffektdisplay. Dessutom planeras även arbetstillståndsloggen och fellarmformuläret och standbyknappen är reserverad. Projektet använder den seriella pekskärmen för datavisning och bildvisning. Tillbehören är följande:  

  1. STVI056WT-01 seriell pekskärm och STONE-adapterkort V1.2;  
  2. Matchande Arduino styrkort;  

Kort beskrivning av gränssnittsfunktionen hos intelligent bladreglerande styrsystem.  

Det finns tre knappar på hemsidan, som kan tryckas in för att komma in i motsvarande vattenkraftstationssystem, pumpstationsstyrsystem och användarguidens gränssnitt (med reservknappar). Användarhandbokens gränssnitt visar ramverket för demosystemet, som visas i följande figur:

(Hemgränssnitt för Enlegi Blade Intelligent Adjustment Control Demonstration Software)

Vid gränssnittet för vattenkraftverkets kontrollsystem finns start- och stoppknappar och visning av status, klassificering (inklusive märkspänning, märkeffekt och märkhastighet) och kontrollvärde (inklusive stigningsvinkel på propellerblad och uteffekt). Dessutom kan det också finnas andra sidhoppsknappar (som startsida, arbetstillståndslogg, felalarm och andra standbyknappar). I arbetstillståndslogg och fellarmsida kan det finnas en bakåtknapp för att återgå till denna sida. Diagrammet nedan:

           (Intelligent kontrollskärmsgränssnitt för vattenkraftverket)

Beskrivning av funktionsbeskrivning för pumpstationsstyrsystem. Diagrammet nedan:

                            (Funktionsgränssnitt för pumpstationsstyrsystem)

I pumpstationens funktionella gränssnitt kan läget ändras och hela systemets strömförsörjning kan slås på och av för att visa de faktiska simulerade parametrarna (såsom bladdosering, omedelbar flödeshastighet, uteffekt) och andra gränssnitt kan bytas (såsom arbetstillståndslogg, fellarmrapport). Samtidigt kan systemvärden (totalt antal blad, märkeffekt, inställt flöde) också visas. Andra gränssnitt kan också ha, såsom arbetstillståndslogg (innehåll kan beställas nummer, händelsetid, händelsedetaljer, anteckningar), fellarm (innehåll kan beställas nummer, tidpunkt för händelse, larmdetaljer, larmkod, etc.), två gränssnitt kan ha en returknapp, kan återgå till pumpstationens funktionella gränssnitt.  

Arbetsidé:  

Serieportskärmen fungerar som människa-maskin-gränssnitt och kommunicerar med Arduinos utvecklingskort. Kortet accepterar knappkommandon från pekskärmen och överför data till serieportens pekskärm för synkron visning. Skjutskala är utformad för att visa effektförändringar dynamiskt. Ikoner för strömbrytare, kraftkniv, lägesomkopplare och lägeskniv är designade för att generera ICON-filer och animera actioneffekterna av strömförsörjning och läge. Dessutom, i Arduino-demoprogrammet, används variabelt minne för att läsa instruktioner för att erhålla tillståndet för strömförsörjning och läge, för att styra simuleringen av utdata och mata ut det faktiska kvantitetsfönstret till serieportens skärm.  

Arbetssteg:  

  1. Installation av hårdvara;  
  2. A) Anslut Arduino-utvecklingskortet och USB till serieportens omvandlingskort;  
  3. B) Anslut STONE pekskärm med USB-serieportens nedladdningskort och USB-till-serieportens adapterkort;  
  4. C) Anslut serieportens skärm och Arduino-utvecklingskortets strömförsörjning;  

3, genom seriell kommandofelsökning och sedan programmering för att uppnå pumpstationskontroll och demonstrationsfunktioner för vattenkraftstationkontroll.  

 Dokumentera sedan den specifika utvecklingsprocessen.

Konfigurera först hårdvaruanslutningen.  

Gör ett bra jobb med att ansluta alla delar enligt arbetsprocedurerna:

Gör sedan ICON-indikatorbilden.  

Knapparna och knivikonerna som används i detta projekt är gjorda enligt följande:  

(Pumpstationskontrollbrytare, knivanimation ICON-fil 8. ICO-lista bläddringsdiagram)

I menyraden i STONE TOOL BOX (GUI Design-mjukvara), klicka på Icon Generation Tool under Tool (T)-menyn för att öppna dialogrutan Icon Tool. Klicka på "välj bildsökväg" längst ned i dialogrutan för att välja Ikonbildsökväg. Klicka på knappen "Generera ICON-fil" för att paketera BMP-filerna i sökvägen till Generera ".ico"-filen som känns igen av STONE TOOL BOX (GUI Design-programvara) plattformen. Klicka på knappen" Förhandsgranska "för att visa ICON-listan i den importerade".ico "komprimerade filen.  

Knapp för att animera BMP-ikon, pixel enligt ovan (Producerad variabel ikonkontroll, storleken på samma position ska vara densamma), pumpstationskontroll 8 klippta bilder i samma mapp. Välj sedan ikonsidans kort på vänster sida av STONE TOOL BOX (GUI Design-programvara) och lägg till det i den komprimerade 7. Ico-filen med knappen "Add Icon" under "Icon List". Lägg alla de 6 bilderna av vattenkraftverkets kontrollomkopplarstatus i en annan mapp och ordna dem i ordning 1-6. Skapa "6. Ico”-filen och sedan på vänster sida av STONE VERKTYGSLÅDA (GUI Design programvara) skärm, välj ikonsidans kort och Lägg till den zippade "6. Ico"-fil med knappen "Lägg till ikon" under "Ikonlista".  

Importera nu bildikonen till STONE TOOL BOX (GUI Design programvara) och gör funktionsknappen.  

Metoden med 9-variable-animation icon.wmv används fortfarande i detta projekt för att realisera animeringsfunktionen. Skärmdumpen av parameterinställningen är som följer:  

            (Attributdiagram för variabel ICON för vattenkraftverket)

Från vänster till höger är ICON-parametern Inställningar för de tre variablerna på funktionssidan för vattenkraftverk: start, stopp och tillstånd. Deras minnesadresser är inställda på samma (0x0039) och deras dataintervall är desamma, så deras ändringar synkroniseras. Ikonfiler är 6. Ico, och motsvarande ikonserienummer är 1 och 2, 3 respektive 4, 6 och 5, vilka väljs enligt det faktiska tillståndet.  

Knapptillståndsanimeringseffekten uppnås genom inkrementella knappar. Följande bild visar parametrarna för inkrementknappen till vänster och dekrimineringsknappen till höger. Adressen är 0x0039, som båda är desamma som den för Variable ICON.

(Attributdiagram av inkrementell knapp med samma minnesadress)

(Variabel ICON-attributdiagram över knappknivsstatus för pumpstationen)

Från vänster till höger är ICON-parametern Inställningar för de fyra variablerna på pumpstationens funktionssida: strömknapp, strömkniv, lägeskniv och lägesknapp. Här är båda ikonfilerna 8.ICO, och deras dataområde är detsamma, där minnesadressen för densamma kommer att ändras synkront.  

Knapptillståndsanimationer implementeras också med inkrementella knappar. I följande figur är den vänstra sidan av knappen för minskning av strömförsörjningen och den högra sidan av knappen för lägesökning parametrarna för knappen för minskning av strömförsörjningen. Adresserna är desamma som ovanstående variabelikon, respektive 0x0009 och 0x000A. Detta är mer än gränsbearbetningsläget för en pingisknapp.

(Inkrementellt knappattributdiagram för pumpstationens knapptillstånd Variabel ICON Variabel med samma minnesadress)

Dessutom visas pumpstationens uteffekt med hjälp av en glidande ikon, som visas i bilden nedan:

Dess parameterattribut är:

(Glidande ikon för pumpstationens uteffekt — egenskapslåda i skjutskala)

Ikonen för denna Slider-skalkontroll kallas i den officiella DEMO 24.ico. Metoden för att lägga till 24.ico-fil är densamma som ovan. Minnesadressen för denna Slider Scale-kontroll är 0x0180, vilket kan skrivas i MCU-programmet med 82-instruktioner (som visas i bilden ovan, intervallet är satt till 0-100) för att ändra ikonens position.  

I synnerhet läses statusen för strömförsörjnings- och lägesknapparna i detta projekt ut från minnesadressen 0x0009, 0x000A och 0x0039 på serieportskärmen genom 83-instruktioner. 

Instruktionerna som används är följande:  

A5 5A 04 83 00 09 02  

Återkopplingen på skärmen med seriell port är som följer:  

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

Följande 00 01 är 2byte data på 0x0009, 00 02 är 2byte data på 0x000A.  

Läs instruktion 0x0039 som:  

A5 5A 04 83 00 39 01  

Feedbacken från skärmen med seriell port är:  

A5 5A 06 83 00 39 01 00 01 eller  

A5 5A 06 83 00 39 01 00 02  

Det finns fem dataadresser att skriva till: 0x0020, 0x0160, 0x0180, 0x0260, 0x0280.  

Däri är bladdoseringsadressen 0x0020, ett 2-bitars heltal på 2 byte. Det kan överföras till pekskärmen via serieporten.  

För att skicka 11 till pekskärmens datavariabeldisplay, använd följande kommando:  

A5 5A 05 82 00 20 00 0B  

Programmeringsfelsökning.  

Koden är följande:  

/*

  frank8

  STONE och arduino COMM,enlaiji Yepian system.

  Slår på en lysdiod i en sekund, sedan av i en sekund, upprepade gånger.

  Adressen 0x0020 är adressen till antalet YePian;

  Adressen 0x0160 är adressen till nu LiuLiang;

  Adressen 0x0180 är adressen till Bengzhan outpower;

  Adressen 0x0260 är adressen till Jiejujiao;

  Adressen 0x0280 är adressen till uteffekt för vatten;

  Adressen 0x0009 är bengzhan power-nyckel;

  Adressen 0x000A är bengzhan mode nyckel;

  Adressen 0x0039 är vattenströmnyckel.

  Denna exempelkod finns i frankfilen. 20210611

 */

// Pin 13 har en LED ansluten på de flesta Arduino -kort.

// ge det ett namn:

int led = 13;

int iYePian = 0; //0x0020 för The num of YePian!

int iGongLu = 0; //0x0180 för The GongLu!

int iLiuLiang = 0; //0x0160 för The now LiuLiang!

int iJiao = 0; // 0x0260 för The JieJuJiao!

int iGongLuWater = 0; //0x0280 för The Water GongLu! värdet är 0-50000!

int iLed = 1; //fördröjningstid num.

int iNum = 0 ; //läs i char num.

int iNum2 = 0; //läs i char num2 för ShuiDianZhan!

int iPower = 2; //nyckelstaty 0x0009

int iMode = 2; //nyckelstaty 0x000A

int iPowerWater = 2; //nyckelstaty 0x0039

// installationsrutinen körs en gång när du trycker på reset:

ogiltig installation () {                

  // initiera den digitala stiftet som en utgång.

  pinMode(led, OUTPUT);     

  Serial.begin(115200); // Öppna den seriella kommunikationsfunktionen och vänta tills serieporten öppnas  

while (!Serial) {

    ; // vänta på att serieporten ska anslutas. Behövs endast för Leonardo

  }  

}

// loop -rutinen går om och om igen för alltid:

ogiltig slinga () {

  int inChar;

    if (iLed == 900) {     

//——- läs 0x0009 och 0x000A värde———- 

            Serial.write(0xA5); //”A5″ är 165

            Serial.write(0x5A); //”5A” är 90

            Serial.write(0x04); //längd

            Serial.write(0x83); // läs!

            Serial.write(0x00); // adress till bengzhan strömnyckel!

            Serial.write(0x09); // adress till bengzhan strömnyckel!

            Serial.write(0x02); // 0x0009(ström) och 0x000A(läge)

//———STONE returvärde kommer att vara “A5 5A 08 83 00 09 02 00 01 00 02”——

     }

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

    if (iLed == 800) {     

//——- läs 0x0039 värde———- 

            Serial.write(0xA5); //”A5″ är 165

            Serial.write(0x5A); //”5A” är 90

            Serial.write(0x04); //längd

            Serial.write(0x83); // läs!

            Serial.write(0x00); // adress till ShuiDianZhan Power-nyckel!

            Serial.write(0x39); // adress till ShuiDianZhan strömbrytare!

            Serial.write(0x01); // 0x0039(strömbrytare) 

//———STONE returvärde kommer att vara “A5 5A 06 83 00 39 01 00 01 “——

     }

  // Läs meddelandet som skickas av serieporten:

  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 ; //ström på!

          iLiuLiang = 10;

          iGongLu = 50;

          iYePian = 10 ;         

      }

   }

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

      iNum = 4;

      iPower = 2 ; //Stäng av!

      iLiuLiang = 0;

      iGongLu = 0;

      iYePian = 0 ;

   }

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

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

      iNum = 0;

      iMode = 1 ; //Läget är bra!

   }

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

      iNum = 0;

      iMode = 2 ; //Läget är AV!

      if(iPower == 1)iGongLu = 60 ; //GongLu är satt till 60%!

   }

  //——————0x0009 och 0x000A nyckel läser 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 ; //ström på!       

          iJiao = 0 ;

          iGongLuWater = 0 ;

      }

   }

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

      iNum2 = 0 ;

      iPowerWater = 2 ; //Stäng av!

   }

  //——————0x0039 nyckel läs ok! iPowerWater ok!——————————-

  fördröjning (1); 

  iLed += 1;   

  if (iLed == 500) {  

      digitalWrite(led, HIGH); // slå på lysdioden (HÖG är spänningsnivån)

                  //delay(500); // vänta en sekund, Range:200-2000

           if(iPower == 1) { 

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

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

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

           }   

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

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

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

           if(iPowerWater == 2) { 

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

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

           }   

           if(iJiao >= 60 ) { 

               iJiao = 0; 

               iGongLuWater = 0; 

           }   

  }    

  if (iLed >= 1000) {    

      digitalWrite(led, LOW); // stäng av lysdioden genom att göra spänningen LÅG

                  //delay(500); // vänta en sekund, intervall:200-2000

      iLed = 1;

            Serial.write(0xA5); //”A5″ är 165

            Serial.write(0x5A); //”5A” är 90

            Serial.write(0x05);

            Serial.write(0x82);

            Serial.write(0x00); // adress till YePian

            Serial.write(0x20); // adress till YePian

            Serial.write(0x00);

            Serial.write(iYePian);

            Serial.write(0xA5); //”A5″ är 165

            Serial.write(0x5A); //”5A” är 90

            Serial.write(0x05);

            Serial.write(0x82);

            Serial.write(0x01); // adress till GongLu

            Serial.write(0x80); // adress till GongLu

            Serial.write(0x00);

            Serial.write(iGongLu);

            Serial.write(0xA5); //”A5″ är 165

            Serial.write(0x5A); //”5A” är 90

            Serial.write(0x05);

            Serial.write(0x82);

            Serial.write(0x01); // adress till LiuLiang

            Serial.write(0x60); // adress till LiuLiang

            Serial.write(iLiuLiang); //LiuLiang är 2800–3200

            Serial.write(0x80);            

            Serial.write(0xA5); //”A5″ är 165

            Serial.write(0x5A); //”5A” är 90

            Serial.write(0x05);

            Serial.write(0x82);

            Serial.write(0x02); // adress till ShuiDianZhan JieJuJiao

            Serial.write(0x60); // adress till ShuiDianZhan JieJuJiao

            Serial.write(0x00);

            Serial.write(iJiao);

            Serial.write(0xA5); //”A5″ är 165

            Serial.write(0x5A); //”5A” är 90

            Serial.write(0x05);

            Serial.write(0x82);

            Serial.write(0x02); // adress till ShuiDianZhan out Power

            Serial.write(0x80); // adress till ShuiDianZhan out Power;

            Serial.write(iGongLuWater); //ShuiDianZhan out Powe är 0–32000

            Serial.write(0x00);            

  }    

Slutligen, spela in videon online. 

Anslut strömförsörjningen och kommunikationen, anslut Arduino-utvecklingskortet till serieportkommunikationen, observera det funktionella gränssnittet för vattenkraftstationen och pumpstationen på skärmen med serieporten, tryck på strömbrytaren för att kontrollera effekten och skjut ikonen och data är normala .  

Källa: Plato Data Intelligence