IOT

Sterowanie pompą Arduino + wyświetlacz STONE HMI

Inteligentny system regulacji łopat to opatentowana technologia, która jest wykorzystywana w głównym systemie sterowania różnych dużych, średnich i małych elektrowni wodnych i przepompowni. Ten projekt wykorzystuje niezawodny seryjny przemysłowy ekran dotykowy jako interfejs człowiek-maszyna do wyświetlania dziennych parametrów i dozowania ostrzy w czasie rzeczywistym, mocy wyjściowej, natychmiastowego przepływu i innych informacji, jako wyświetlanie efektu pracy. Ponadto zaplanowano również dziennik stanu pracy i formularz alarmów usterek, a przycisk czuwania jest zarezerwowany. Projekt wykorzystuje seryjny ekran dotykowy do wyświetlania danych i wyświetlania wskaźnika slajdów. Akcesoria są następujące:  

  1. STVI056WT-01 szeregowy ekran dotykowy i płytka adaptera STONE V1.2;  
  2. Dopasowana płytka kontrolna Arduino;  

Krótki opis funkcji interfejsu inteligentnego systemu sterowania regulacją ostrza.  

Na stronie głównej znajdują się trzy przyciski, które można nacisnąć, aby przejść do odpowiedniego systemu elektrowni wodnej, systemu sterowania pompownią i interfejsu podręcznika użytkownika (z zapasowymi przyciskami). Interfejs podręcznika użytkownika przedstawia strukturę systemu demonstracyjnego, jak pokazano na poniższym rysunku:

(Interfejs domowy oprogramowania demonstracyjnego inteligentnej kontroli regulacji Enlegi Blade)

Na interfejsie systemu sterowania elektrowni wodnej znajdują się przyciski uruchamiania i zatrzymywania oraz wyświetlanie statusu, wartości znamionowej (w tym napięcia znamionowego, mocy znamionowej i prędkości znamionowej) oraz wartości kontrolnej (w tym kąta nachylenia łopat śmigła i mocy wyjściowej). Ponadto mogą istnieć również inne przyciski przechodzenia między stronami (takie jak strona główna, dziennik warunków pracy, alarm błędu i inne przyciski trybu gotowości). Na stronie dziennika warunków pracy i alarmów usterek może znajdować się przycisk powrotu, aby powrócić do tej strony. Poniższy schemat:

           (Inteligentny interfejs wyświetlacza sterowania elektrowni wodnej)

Opis funkcji interfejsu systemu sterowania przepompownią. Poniższy schemat:

                            (interfejs funkcyjny systemu sterowania pompownią)

W interfejsie funkcjonalnym przepompowni można zmieniać tryb oraz włączać i wyłączać zasilanie całego systemu w celu wyświetlenia rzeczywistych symulowanych parametrów (takich jak dozowanie łopaty, natychmiastowy przepływ, moc wyjściowa) i inne interfejsy mogą być przełączane (takie jak dziennik warunków pracy, raport o alarmie awarii). Jednocześnie mogą być również wyświetlane wartości systemowe (całkowita liczba łopatek, moc znamionowa, ustawione natężenie przepływu). Mogą również posiadać inne interfejsy, takie jak rejestr warunków pracy (zawartość może być numerem zamówienia, czasem wystąpienia, szczegółami zdarzenia, notatkami), alarm błędu (zawartość może być numerem zamówienia, czasem wystąpienia, szczegółami alarmu, kodem alarmu itp.), dwa interfejsy mogą mieć przycisk powrotu, mogą powrócić do interfejsu funkcjonalnego stacji pomp.  

Pomysł na pracę:  

Ekran portu szeregowego służy jako interfejs człowiek-maszyna i komunikuje się z płytką rozwojową Arduino. Płytka akceptuje polecenia przycisków ekranu dotykowego i przesyła dane do ekranu dotykowego portu szeregowego w celu synchronicznego wyświetlania. Skala suwakowa została zaprojektowana tak, aby dynamicznie wyświetlać zmiany mocy. Ikony przełącznika zasilania, noża zasilania, przełącznika trybu i noża trybu służą do generowania plików IKON i animowania efektów działania zasilacza i trybu. Dodatkowo w programie demonstracyjnym Arduino pamięć zmienna wykorzystywana jest do odczytu instrukcji w celu uzyskania stanu zasilania i trybu, tak aby sterować symulacją danych wyjściowych i wyprowadzać okno rzeczywistej wielkości na ekran portu szeregowego.  

Etapy pracy:  

  1. Konfigurowanie sprzętu;  
  2. A) Podłącz płytkę rozwojową Arduino i USB do płytki konwersji portu szeregowego;  
  3. B) Podłącz Kamienny ekran dotykowy za pomocą karty pobierania portu szeregowego USB i karty adaptera portu USB do portu szeregowego;  
  4. C) Podłącz ekran portu szeregowego i zasilacz płytki rozwojowej Arduino;  

3, poprzez debugowanie poleceń szeregowych, a następnie programowanie w celu uzyskania funkcji kontroli stacji pomp i demonstracji sterowania elektrownią wodną.  

 Następnie udokumentuj konkretny proces rozwoju.

Najpierw skonfiguruj połączenie sprzętowe.  

Wykonaj dobrą robotę łącząc wszystkie części zgodnie z procedurami roboczymi:

Następnie zrób obraz wskaźnika ICON.  

Użyte w tym projekcie guziki i IKONY noża wykonane są w następujący sposób:  

(Przełącznik sterowania stacji pomp, plik ICON animacji noża 8. Schemat przeglądania listy ICO)

Na pasku menu STONE TOOL BOX (oprogramowanie GUI Design), kliknij Narzędzie do generowania ikon w menu Narzędzie (T), aby wyświetlić okno dialogowe Icon Tool. Kliknij „wybierz ścieżkę obrazu” u dołu okna dialogowego, aby wybrać ścieżkę obrazu ikony. Kliknij przycisk „Generuj plik ICON”, aby spakować pliki BMP w ścieżce, aby wygenerować plik „.ico” rozpoznawany przez platformę STONE TOOL BOX (oprogramowanie GUI Design). Kliknij przycisk „Podgląd”, aby wyświetlić listę IKON w zaimportowanym”.ico „skompresowanym pliku.  

Przycisk do animowania ikony BMP, piksel jak powyżej (kontrolka wytworzonej zmiennej ikony, rozmiar tej samej pozycji powinien być taki sam), sterowanie przepompownią 8 wycina obrazy do tego samego folderu. Następnie po lewej stronie ekranu STONE TOOL BOX (oprogramowanie GUI Design) wybierz kartę strony z ikonami i dodaj ją do skompresowanego 7. pliku Ico za pomocą przycisku „Dodaj ikonę” pod „Listą ikon”. Umieść wszystkie 6 zdjęć stanu przełącznika sterowania elektrowni wodnej w innym folderze i ułóż je w kolejności 1-6. Utwórz „6. Ico”, a następnie po lewej stronie STONE TOOL BOX (oprogramowanie GUI Design) ekranu, wybierz kartę strony z ikonami i dodaj spakowany „6. Ico” za pomocą przycisku „Dodaj ikonę” pod „Listą ikon”.  

Teraz zaimportuj ikonę obrazu do STONE TOOL BOX (oprogramowanie GUI Design) i utwórz przycisk funkcyjny.  

Metoda 9-zmiennej animacji icon.wmv jest nadal stosowana w tym projekcie do realizacji funkcji animacji. Zrzut ekranu ustawień parametrów jest następujący:  

            (Schemat atrybutów zmiennej ICON elektrowni wodnej)

Od lewej do prawej znajdują się parametry ICON Ustawienia trzech zmiennych strony funkcji elektrowni wodnej: start, stop i stan. Ich adresy pamięci są takie same (0x0039), a zakresy danych są takie same, więc ich zmiany są zsynchronizowane. Pliki ikon to 6. Ico, a odpowiadające im numery seryjne ikon to odpowiednio 1 i 2, 3 i 4, 6 i 5, które są wybierane zgodnie z aktualnym stanem.  

Efekt animacji stanu przycisku uzyskuje się za pomocą przycisków przyrostowych. Poniższy rysunek przedstawia parametry przycisku zwiększania po lewej stronie i przycisku dekryminacji po prawej stronie. Adres to 0x0039, z których oba są takie same, jak adres IKONA zmiennej.

(Schemat atrybutów przycisku przyrostowego o tym samym adresie pamięci)

(Schemat atrybutów zmiennej ICON statusu noża przycisku stacji pomp)

Od lewej do prawej znajdują się parametry ICON Ustawienia czterech zmiennych strony funkcji stacji pomp: przycisk zasilania, nóż zasilania, nóż trybu i przycisk trybu. Tutaj oba pliki Icon to 8.ICO, a ich zakres danych jest taki sam, w którym adres pamięci tego samego zostanie zmieniony synchronicznie.  

Animacje stanu przycisków są również realizowane za pomocą przycisków przyrostowych. Na poniższym rysunku lewa strona przycisku redukcji mocy i prawa strona przycisku zwiększania trybu to parametry przycisku redukcji mocy. Adresy są takie same jak powyższa IKONA zmiennej, odpowiednio 0x0009 i 0x000A. To coś więcej niż tryb przetwarzania limitu przycisku ping-ponga.

(Przyrostowy schemat atrybutów przycisku stanu przycisku stacji pomp Zmienna IKONA Zmienna o tym samym adresie pamięci)

Dodatkowo moc wyjściowa przepompowni wyświetlana jest za pomocą przesuwanej ikony, jak pokazano na poniższym rysunku:

Jego atrybuty parametrów to:

(Wysuwana ikona mocy wyjściowej przepompowni — pole właściwości skali Slider)

Ikona tej kontroli wagi Slider nazywa się w oficjalnym DEMO 24.ico. Metoda dodawania pliku 24.ico jest taka sama jak powyżej. Adres pamięci tego kontrolki Slider Scale to 0x0180, który można zapisać w programie MCU za pomocą instrukcji 82 (jak pokazano na powyższym rysunku, zakres jest ustawiony na 0-100), aby zmienić pozycję ikony.  

W szczególności stan przycisków zasilania i trybu w tym projekcie jest odczytywany z pamięci o adresach 0x0009, 0x000A i 0x0039 ekranu portu szeregowego za pomocą instrukcji 83. 

Stosowane instrukcje są następujące:  

A5 5A 04 83 00 09 02  

Informacje zwrotne na ekranie portu szeregowego są następujące:  

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

Kolejne 00 01 to 2 bajty danych 0x0009, 00 02 to 2 bajty danych 0x000A.  

Przeczytaj instrukcję 0x0039 jako:  

A5 5A 04 83 00 39 01  

Informacje zwrotne na ekranie portu szeregowego to:  

A5 5A 06 83 00 39 01 00 01 lub  

A5 5A 06 83 00 39 01 00 02  

Istnieje pięć adresów danych do zapisu: 0x0020, 0x0160, 0x0180, 0x0260, 0x0280.  

Przy czym adres dozowania liścia to 0x0020, 2-bitowa liczba całkowita o długości 2 bajtów. Można go przesłać do ekranu dotykowego poprzez port szeregowy.  

Aby przejść 11 do wyświetlacza zmiennych danych na ekranie dotykowym, użyj następującego polecenia:  

A5 5A 05 82 00 20 00 0B  

Debugowanie programowania.  

Kod wygląda następująco:  

/*

  frank8

  STONE i arduino COMM, system enlaiji yepian.

  Włącza diodę LED na jedną sekundę, a następnie gaśnie na jedną sekundę, wielokrotnie.

  Adres 0x0020 to adres o numerze YePian;

  Adres 0x0160 to adres obecnego LiuLiang;

  Adres 0x0180 to adres przewagi Bengzhan;

  Adres 0x0260 to adres Jiejujiao;

  Adres 0x0280 to adres mocy wody;

  Adres 0x0009 to klucz zasilania bengzhan;

  Adres 0x000A to klucz trybu bengzhan;

  Adres 0x0039 to klucz do zasilania wodą.

  Ten przykładowy kod znajduje się w pliku franka. 20210611

 */

// Pin 13 ma diodę LED podłączoną na większości płyt Arduino.

// daj temu imię:

wewnętrzna dioda = 13;

int iYePian = 0; //0x0020 dla Liczba YePian!

int iGongLu = 0; //0x0180 dla GongLu!

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

int iJiao = 0; // 0x0260 dla JieJuJiao!

int iGongLuWoda = 0; //0x0280 dla GongLu Wody! wartość to 0-50000!

wewn iLed = 1; //czas opóźnienia il.

int iNum = 0 ; //odczytaj w numerze znaku.

int iNum2 = 0; //odczytaj w char num2 dla ShuiDianZhan!

wew iMoc = 2; //klucz statua 0x0009

int iMode = 2; //klucz statua 0x000A

int iPowerWater = 2; //klucz statua 0x0039

// procedura konfiguracji uruchamia się raz po naciśnięciu resetu:

void setup () {                

  // zainicjuj pin cyfrowy jako wyjście.

  pinMode (led, WYJŚCIE);     

  Serial.początek(115200); // Otwórz funkcję komunikacji szeregowej i poczekaj na otwarcie portu szeregowego  

podczas (!Serial) {

    ; // poczekaj na połączenie portu szeregowego. Potrzebne tylko dla Leonardo

  }  

}

// procedura pętli działa w kółko w nieskończoność:

void loop () {

  int inChar;

    jeśli (iLed == 900) {     

//——- odczytaj wartość 0x0009 i 0x000A———- 

            Serial.write(0xA5); //”A5” to 165

            Serial.zapis (0x5A); // „5A” to 90

            Serial.zapis (0x04); //długość

            Serial.zapis (0x83); // czytać!

            Serial.zapis (0x00); // adres klucza zasilania bengzhan!

            Serial.zapis (0x09); // adres klucza zasilania bengzhan!

            Serial.zapis (0x02); // 0x0009(moc) i 0x000A(tryb)

//———Zwrócona wartość STONE będzie wynosić “A5 5A 08 83 00 09 02 00 01 00 02”——

     }

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

    jeśli (iLed == 800) {     

//——- odczytaj wartość 0x0039———- 

            Serial.write(0xA5); //”A5” to 165

            Serial.zapis (0x5A); // „5A” to 90

            Serial.zapis (0x04); //długość

            Serial.zapis (0x83); // czytać!

            Serial.write(0x00); // adres klucza zasilania ShuiDianZhan!

            Serial.zapis (0x39); // adres klucza zasilania ShuiDianZhan!

            Serial.zapis (0x01); // 0x0039 (klawisz zasilania) 

//———Zwrócona wartość STONE będzie wynosić „A5 5A 06 83 00 39 01 00 01” ——

     }

  // Odczytaj wiadomość wysłaną przez port szeregowy:

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

      iLiczba = 4 ;

      jeśli(iPower != 1){

          iMoc = 1 ; //zasilanie włączone!

          iLiuLiang = 10;

          iGong Lu = 50;

          iTakPian = 10 ;         

      }

   }

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

      iLiczba = 4 ;

      iMoc = 2 ; //Wyłącz!

      iLiuLiang = 0;

      iGong Lu = 0;

      iTakPian = 0 ;

   }

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

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

      iLiczba = 0 ;

      iMode = 1 ; //Tryb jest dobry!

   }

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

      iLiczba = 0 ;

      iMode = 2 ; //Tryb jest WYŁĄCZONY!

      if(iMoc == 1)iGongLu = 60 ; //GongLu jest ustawione na 60%!

   }

  //——————Odczyt kluczy 0x0009 i 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)) {  

      iLiczba2 = 0 ;

      jeśli(iPowerWater != 1){

          iPowerWater = 1 ; //zasilanie włączone!       

          iJiao = 0;

          iGongLuWoda = 0 ;

      }

   }

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

      iLiczba2 = 0 ;

      iPowerWater = 2 ; //Wyłącz!

   }

  //——————Odczyt klucza 0x0039 ok! iPowerWater ok!——————————-

  opóźnienie (1); 

  iLed += 1;   

  jeśli (iLed == 500) {  

      digitalWrite(led, HIGH); // włącz diodę LED (HIGH to poziom napięcia)

                  //opóźnienie(500); // poczekaj sekundę, Zakres: 200-2000

           jeśli(iMoc == 1) { 

               iTakPian += 1; //zakres: 1-20

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

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

           }   

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

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

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

           jeśli(iPowerWater == 2) { 

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

               iGongLuWoda += 2; //zakres: 1-20

           }   

           jeśli(iJiao >= 60 ) { 

               iJiao = 0; 

               iGongLuWoda = 0; 

           }   

  }    

  jeśli (iLed >= 1000) {    

      digitalWrite(led, LOW); // wyłącz diodę LED, obniżając napięcie

                  //opóźnienie(500); // poczekaj sekundę, zakres:200-2000

      iLed = 1;

            Serial.write(0xA5); //”A5” to 165

            Serial.zapis (0x5A); // „5A” to 90

            Serial.zapis (0x05);

            Serial.zapis (0x82);

            Serial.write(0x00); // adres YePian

            Serial.write(0x20); // adres YePian

            Serial.zapis (0x00);

            Serial.write(iYePian);

            Serial.write(0xA5); //”A5” to 165

            Serial.zapis (0x5A); // „5A” to 90

            Serial.zapis (0x05);

            Serial.zapis (0x82);

            Serial.zapis (0x01); // adres GongLu

            Serial.zapis (0x80); // adres GongLu

            Serial.zapis (0x00);

            Serial.write(iGongLu);

            Serial.write(0xA5); //”A5” to 165

            Serial.zapis (0x5A); // „5A” to 90

            Serial.zapis (0x05);

            Serial.zapis (0x82);

            Serial.zapis (0x01); // adres LiuLiang

            Serial.zapis (0x60); // adres LiuLiang

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

            Serial.zapis (0x80);            

            Serial.write(0xA5); //”A5” to 165

            Serial.zapis (0x5A); // „5A” to 90

            Serial.zapis (0x05);

            Serial.zapis (0x82);

            Serial.zapis (0x02); // adres ShuiDianZhan JieJuJiao

            Serial.zapis (0x60); // adres ShuiDianZhan JieJuJiao

            Serial.zapis (0x00);

            Serial.write(iJiao);

            Serial.write(0xA5); //”A5” to 165

            Serial.zapis (0x5A); // „5A” to 90

            Serial.zapis (0x05);

            Serial.zapis (0x82);

            Serial.zapis (0x02); // adres ShuiDianZhan out Power

            Serial.zapis (0x80); // adres ShuiDianZhan out Power;

            Serial.write(iGongLuWater); //ShuiDianZhan poza Powe wynosi 0–32000

            Serial.zapis (0x00);            

  }    

Na koniec nagraj wideo online. 

Podłącz zasilanie i komunikację, podłącz płytkę rozwojową Arduino do komunikacji portu szeregowego, obserwuj interfejs funkcjonalny elektrowni wodnej i przepompowni na ekranie portu szeregowego, dotknij przełącznika, aby sprawdzić efekt i przesuń ikonę, a dane są normalne .  

Źródło: Plato Data Intelligence