IOT

Керування насосом Arduino + дисплей STONE HMI

Лопатева інтелектуальна система регулювання - це запатентована технологія, яка використовується в основній системі керування різними великими, середніми та малими гідроелектростанціями та насосними станціями. У цьому проекті використовується надійний серійний промисловий сенсорний екран як інтерфейс «людина-машина» для відображення щоденних параметрів і дозування леза в режимі реального часу, вихідної потужності, миттєвого потоку та іншої інформації як відображення ефекту роботи. Крім того, також планується журнал робочих умов і форма сигналізації про несправності, а кнопка режиму очікування зарезервована. У проекті використовується серійний сенсорний екран для відображення даних і відображення слайдів. Аксесуари наступні:  

  1. STVI056WT-01 послідовний сенсорний екран і адаптерна плата STONE V1.2;  
  2. Відповідна плата керування Arduino;  

Короткий опис функції інтерфейсу інтелектуальної системи керування лезом.  

На головній сторінці є три кнопки, натисканням яких можна увійти до відповідної системи гідроелектростанції, системи управління насосною станцією та інтерфейсу посібника користувача (з запасними кнопками). Інтерфейс посібника користувача показує структуру демонстраційної системи, як показано на наступному малюнку:

(Домашній інтерфейс демонстраційного програмного забезпечення Enlegi Blade Intelligent Adjustment Control)

На інтерфейсі системи керування гідроелектростанцією є кнопки пуску та зупинки та відображення стану, номіналу (включаючи номінальну напругу, номінальну потужність та номінальну швидкість) та значення керування (включаючи кут нахилу лопаті гвинта та вихідну потужність). Крім того, також можуть бути інші кнопки переходу на сторінку (наприклад, домашня сторінка, журнал робочих умов, сигналізація про несправність та інші кнопки режиму очікування). У журналі робочих умов і на сторінці тривоги про несправності може бути кнопка «Назад», щоб повернутися до цієї сторінки. Діаграма нижче:

           (Інтерфейс інтелектуального керування дисплеєм гідроелектростанції)

Опис функцій інтерфейсу системи керування насосною станцією. Діаграма нижче:

                            (Інтерфейс функцій системи керування насосною станцією)

У функціональному інтерфейсі насосної станції режим можна змінювати, а джерело живлення всієї системи можна вмикати та вимикати, щоб відобразити фактичні змодельовані параметри (такі як дозування лопаті, миттєва швидкість потоку, вихідна потужність) та інші інтерфейси можна перемикати (наприклад, журнал робочих умов, звіт про помилку). Одночасно можуть відображатися системні значення (загальна кількість лопатей, номінальна потужність, задана швидкість потоку). Інші інтерфейси також можуть мати, наприклад, журнал робочих умов (вміст може бути замовленим номером, часом виникнення, деталями події, примітками), сигналізація про несправність (вміст може бути замовленим номером, часом виникнення, деталями сигналу, кодом сигналу тощо), два інтерфейси можуть мати кнопку повернення, можуть повернутися до функціонального інтерфейсу насосної станції.  

Робоча ідея:  

Екран послідовного порту служить людино-машинним інтерфейсом і взаємодіє з платою розробки Arduino. Плата приймає команди кнопок сенсорного екрана та передає дані на сенсорний екран послідовного порту для синхронного відображення. Шкала повзунка призначена для динамічного відображення змін потужності. Піктограми перемикача живлення, ножа живлення, перемикача режимів і ножа режиму призначені для створення файлів ICON та анімації ефектів дії джерела живлення та режиму. Крім того, у демонстраційній програмі Arduino змінна пам’ять використовується для читання інструкцій для отримання стану джерела живлення та режиму, щоб контролювати симуляцію вихідних даних і виводити фактичне вікно кількості на екран послідовного порту.  

Етапи роботи:  

  1. Налаштування обладнання;  
  2. A) Підключіть плату розробки Arduino та USB до плати перетворення послідовного порту;  
  3. Б) З’єднайте Сенсорний екран STONE із платою завантаження послідовного порту USB і платою адаптера USB-послідовний порт;  
  4. C) Підключіть екран послідовного порту та джерело живлення плати розробки Arduino;  

3, шляхом налагодження послідовної команди, а потім програмування для досягнення демонстраційних функцій керування насосною станцією та керуванням гідроелектростанцією.  

 Далі задокументуйте конкретний процес розробки.

Спочатку налаштуйте апаратне підключення.  

Добре з’єднайте всі частини відповідно до робочих процедур:

Далі зробіть зображення індикатора ICON.  

Кнопки та ІКОНИ ножа, які використовуються в цьому проекті, зроблені наступним чином:  

(Перемикач керування насосною станцією, файл ICON анімації ножа 8. Діаграма перегляду списку ICO)

На панелі меню STONE TOOL BOX (програмне забезпечення GUI Design) клацніть Інструмент створення піктограм у меню Інструмент (T), щоб відкрити діалогове вікно Інструмент піктограм. Натисніть «вибрати шлях до зображення» внизу діалогового вікна, щоб вибрати шлях до зображення значка. Натисніть кнопку «Створити файл ICON», щоб запакувати файли BMP у шлях для створення файлу «.ico», який розпізнається платформою STONE TOOL BOX (програмне забезпечення для дизайну GUI). Натисніть кнопку «Попередній перегляд», щоб переглянути список ICON в імпортованому «.ico» стисненому файлі.  

Кнопка для анімації піктограми BMP, піксель як вище (керування створеною змінною піктограмою, розмір тієї самої позиції має бути однаковим), керування насосною станцією 8 вирізаних зображень у ту саму папку. Потім у лівій частині екрана STONE TOOL BOX (програмне забезпечення GUI Design) виберіть картку сторінки значка та додайте його до стисненого 7. файлу значка за допомогою кнопки «Додати значок» у розділі «Список значків». Помістіть усі 6 зображень стану вимикача керування гідроелектростанції в іншу папку та розташуйте їх у порядку 1-6. Створіть «6. Ico», а потім у лівій частині файлу STONE TOOL BOX (програмне забезпечення GUI Design) виберіть картку сторінки «Значок» і додайте архів «6. Ico» за допомогою кнопки «Додати значок» у розділі «Список значків».  

Тепер імпортуйте піктограму зображення в STONE TOOL BOX (програма GUI Design) і створіть функціональну кнопку.  

Метод 9-variable-animation icon.wmv все ще використовується в цьому проекті для реалізації функції анімації. Скріншот налаштування параметрів виглядає наступним чином:  

            (Діаграма атрибутів змінної ICON гідроелектростанції)

Зліва направо розташовані налаштування параметра ICON трьох змінних функціональної сторінки гідроелектростанції: пуск, зупинка та стан. Їхні адреси пам’яті встановлені на однакові (0x0039) і їхні діапазони даних однакові, тому їхні зміни синхронізовані. Файли значків — 6. Ico, а відповідні серійні номери значків — 1 і 2, 3 і 4, 6 і 5 відповідно, які вибираються відповідно до фактичного стану.  

Ефект анімації стану кнопки досягається за допомогою додаткових кнопок. На наступному малюнку показано параметри кнопки збільшення ліворуч і кнопки декримінації праворуч. Адреса 0x0039, обидва з яких збігаються з адресою змінної ICON.

(Діаграма атрибутів інкрементної кнопки з тією самою адресою пам’яті)

(Діаграма атрибутів змінної ICON статусу кнопкового ножа насосної станції)

Зліва направо розташовані налаштування параметра ICON чотирьох змінних сторінки функцій насосної станції: кнопка живлення, ніж живлення, нож режиму та кнопка режиму. Тут обидва файли значків є 8.ICO, і їх діапазон даних однаковий, у якому адреса пам’яті того самого буде змінено синхронно.  

Анімація стану кнопки також реалізована за допомогою додаткових кнопок. На наступному малюнку ліва сторона кнопки зменшення подачі живлення та права сторона кнопки збільшення режиму є параметрами кнопки зменшення подачі живлення. Адреси такі ж, як і наведена вище змінна ICON, відповідно 0x0009 і 0x000A. Це більше, ніж обмеження режиму обробки кнопки пінг-понгу.

(Інкрементна діаграма атрибутів кнопки стану кнопки насосної станції. Змінна ЗНАЧКА Змінна з тією самою адресою пам’яті)

Крім того, вихідна потужність насосної станції відображається за допомогою ковзного значка, як показано на малюнку нижче:

Його атрибути параметрів:

(Повзунний значок вихідної потужності насосної станції — вікно властивостей повзункової шкали)

Піктограма цього регулятора шкали Slider називається в офіційній DEMO 24.ico. Спосіб додавання файлу 24.ico такий самий, як і вище. Адреса пам’яті цього елемента керування Slider Scale – 0x0180, яку можна записати в програму MCU за допомогою інструкції 82 (як показано на зображенні вище, діапазон встановлено 0–100), щоб змінити положення піктограми.  

Зокрема, стан кнопок живлення та режиму в цьому проекті зчитується з адреси пам’яті 0x0009, 0x000A та 0x0039 екрана послідовного порту за допомогою інструкції 83. 

Використовуються такі інструкції:  

A5 5A 04 83 00 09 02  

Відгук про екран послідовного порту такий:  

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

Наступний 00 01 — 2-байтові дані 0x0009, 00 02 — 2-байтові дані 0x000A.  

Прочитайте інструкцію 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.  

У цьому листкова адреса дорівнює 0x0020, 2-бітне ціле число з 2 байтів. Його можна передати на сенсорний дисплей через послідовний порт.  

Щоб передати 11 на дисплей змінних даних на сенсорному екрані, використовуйте таку команду:  

A5 5A 05 82 00 20 00 0B  

Налагодження програмування.  

Код такий:  

/*

  frank8

  STONE і arduino COMM, система enlaiji yepian.

  Увімкне світлодіод на одну секунду, а потім вимкне на одну секунду, кілька разів.

  Адреса 0x0020 є адресою номеру YePian;

  Адреса 0x0160 є адресою LiuLiang;

  Адреса 0x0180 є адресою аудіостанції Bengzhan;

  Адреса 0x0260 – це адреса Jiejujiao;

  Адреса 0x0280 - адреса водопровідної електростанції;

  Адреса 0x0009 є клавішею живлення bengzhan;

  Адреса 0x000A є ключем режиму bengzhan;

  Адреса 0x0039 є ключем водопостачання.

  Цей приклад коду знаходиться у файлі frank. 20210611

 */

// Штифт 13 має світлодіод, підключений на більшості плат Arduino.

// дайте йому назву:

int led = 13;

int iYePian = 0; //0x0020 для кількості YePian!

int iGongLu = 0; //0x0180 для The GongLu!

int iLiuLiang = 0; //0x0160 для The now LiuLiang!

int iJiao = 0; // 0x0260 для The JieJuJiao!

int iGongLuWater = 0; //0x0280 для The Water GongLu! значення 0-50000!

int iLed = 1; //час затримки num.

int iNum = 0; //читати в char num.

int iNum2 = 0; // читання в char num2 для ShuiDianZhan!

int iPower = 2; // статуя ключа 0x0009

int iMode = 2; // статуя ключа 0x000A

int iPowerWater = 2; // статуя ключа 0x0039

// процедура налаштування запускається один раз, коли ви натискаєте reset:

void setup () {                

  // ініціалізуємо цифровий штифт як вихід.

  pinMode (світлодіод, OUTPUT);     

  Serial.begin(115200); // Відкрийте функцію послідовного зв'язку та дочекайтеся відкриття послідовного порту  

while (!Serial) {

    ; // дочекатися підключення послідовного порту. Потрібний лише Леонардо

  }  

}

// циклова процедура виконується знову і знову назавжди:

void loop () {

  int inChar;

    якщо (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 буде «A5 5A 08 83 00 09 02 00 01 00 02»——

     }

/*———————————————————————————*/     

    якщо (iLed == 800) {     

//——- прочитати значення 0x0039———- 

            Serial.write(0xA5); //"A5" дорівнює 165

            Serial.write(0x5A); //"5A" дорівнює 90

            Serial.write(0x04); //довжина

            Serial.write(0x83); // читай!

            Serial.write(0x00); // адреса ключа ShuiDianZhan Power!

            Serial.write(0x39); // адреса ключа живлення ShuiDianZhan!

            Serial.write(0x01); // 0x0039 (клавіша живлення) 

//———Повернутим значенням STONE буде «A5 5A 06 83 00 39 01 00 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 ключ читається добре! iPower\iMode добре!—————————-

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

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

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

  якщо ((inChar == 0x01)&&(iNum2 == 3)) {  

      iNum2 = 0;

      if(iPowerWater != 1){

          iPowerWater = 1; //ЖИВЛЕННЯ УВІМКНЕНО!       

          iJiao = 0;

          iGongLuWater = 0;

      }

   }

   якщо ((inChar == 0x02)&&(iNum2 == 3)) {  

      iNum2 = 0;

      iPowerWater = 2 ; //ВИМКНІТЬ!

   }

  //——————0x0039 ключ читання нормально! iPowerWater добре!——————————

  delay (1); 

  iLed += 1;   

  якщо (iLed == 500) {  

      digitalWrite(LED, HIGH); // увімкніть світлодіод (ВИСОКИЙ рівень напруги)

                  //затримка(500); // зачекайте секунду, діапазон: 200-2000

           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; 

           }   

  }    

  якщо (iLed >= 1000) {    

      digitalWrite(LED, LOW); // вимкніть світлодіод, зробивши напругу LOW

                  //затримка(500); // зачекайте секунду, діапазон: 200-2000

      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); // адреса LiuLiang

            Serial.write(0x60); // адреса LiuLiang

            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); // адреса ShuiDianZhan JieJuJiao

            Serial.write(0x60); // адреса ShuiDianZhan JieJuJiao

            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 out Power

            Serial.write(0x80); // адреса ShuiDianZhan out Power;

            Serial.write(iGongLuWater); //ShuiDianZhan out Powe становить 0–32000

            Serial.write(0x00);            

  }    

Нарешті, запишіть відео онлайн. 

Підключіть джерело живлення та комунікації, підключіть плату розробки Arduino до послідовного порту зв’язку, спостерігайте за функціональним інтерфейсом гідроелектростанції та насосної станції на екрані послідовного порту, торкніться перемикача, щоб перевірити ефект, і пересуньте піктограму, і дані є нормальними .  

Джерело: Інформація про дані Платона