Added integration of analog channels, introduced three new setpoints (Pb_1, Pb_2, Tp) for automatic compressor operation.

Dependencies:   _24LCXXX

Files at this revision

API Documentation at this revision

Comitter:
Aleksk
Date:
Fri Mar 12 11:58:50 2021 +0000
Parent:
9:6bd6ac6ca7d4
Child:
11:86a18c130515
Commit message:
digital pin 11, pin 12 as an input limit switches are now normally closed. Returned timer_4. He now periodically opens the outlet valve to control water leaks. New variables are openTimeV2_H2O and periodV2_H2O.

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Wed Nov 11 21:16:27 2020 +0000
+++ b/main.cpp	Fri Mar 12 11:58:50 2021 +0000
@@ -1,4 +1,6 @@
-// 11.11.2020 Продолжение (клон )mbed-os5-press20
+// 10.03.2021 Продолжение (клон )mbed-os5-press21
+// digital pin 11, pin 12 as an input концевики теперь нормально замкнутые
+// Вернул timer_4. Теперь он периодически открывает выпускной клапан для контроля утечек воды.
 // Вместо pc.printf("Reset ALARM \r\n") теперь plotter.printf("Reset ALARM \r\n") это нужно для парсера программы  Setup_EEPROM
 // Удалена команда pc.printf, посылающая пустую строку раз в секунду и связанный с ней timer_4, т.к. изменена программа оператора (Loc()).
 // Суммирование значений каналов А0 А1 А2 было 9 раз, исправлено на 10.
@@ -48,7 +50,7 @@
 Timer timer;                                                                    //инициализация таймера для определения частот переключений вентилей 1 и 2
 Timer timer_2;                                                                  //инициализация таймера 2 для отсчёта времени открытого состояния вентиля 1
 Timer timer_3;                                                                  //инициализация таймера 3 для отсчёта времени открытого состояния вентиля 2
-//Timer timer_4;                                                                  //инициализация таймера 4 для отсчёта периода времени отсылки в порт компьютера пустой строки.
+Timer timer_4;                                                                  //инициализация таймера 4 для отсчёта периода времени между контрольными открываниями вентиля 2
 //========УСТАВКИ_1 EEPROM========
 uint8_t delta_value = 0;                                                        //set delta pressure 1...99
 uint8_t flag_compressor = 0;                                                    //флаг компрессора. При 0 - выключение компрессора, при 1 - включение компрессора
@@ -65,6 +67,9 @@
 int T_2 = 4000;                                                                 // ms, максимальное время открытого состояния для клапана 2 
 uint8_t event_N = 255;                                                          // номер события , по умолчанию 255 - событий нет
 uint8_t flag_stopRegulatorEEPROM = 0;                                           //если 1 остановка регулятора, когда вручную управляют клапанами через программу SetUp_EEPROM
+int openTimeV2_H2O = 2;                                                        // ms, Время открытого состояния вентиля V2 для датчика влаги должно быть меньше WDlimit=100ms
+int periodV2_H2O = 10000;                                                       // ms, Период открывания вентиля V2 для датчика влаги
+ 
 //======temporary set=====
 int numSet, anySet;
 //=================================
@@ -143,7 +148,16 @@
      data2 = T_2;
      eeprom.nbyte_write( 190, &data2, sizeof(int));
    }
-   
+   eeprom.nbyte_read( 200, &data2, sizeof(int) );
+   if (data2 != openTimeV2_H2O){
+     data2 = openTimeV2_H2O;
+     eeprom.nbyte_write( 200, &data2, sizeof(int));
+   }
+   eeprom.nbyte_read( 210, &data2, sizeof(int) );
+   if (data2 != periodV2_H2O){
+     data2 = periodV2_H2O;
+     eeprom.nbyte_write( 210, &data2, sizeof(int));
+   }
 }
 //_____________________________________________________________________________
 void load_EEPROM () {
@@ -190,7 +204,13 @@
     eeprom.nbyte_read( 190, &data2, sizeof(int) );
     //pc.printf("$adress,190,%d,*\r\n",data2);
     T_2=data2;
-    //pc.printf("$adress,%d,%d,%d,%d,%d,%d,%d,*\r\n",Pd_eeprom,frequencyValve1_eeprom,frequencyValve2_eeprom,WL01_eeprom,WL99_eeprom,T_1,T_2);
+    eeprom.nbyte_read( 200, &data2, sizeof(int) );
+    //pc.printf("$adress,200,%d,*\r\n",data2);
+    openTimeV2_H2O=data2;
+    eeprom.nbyte_read( 210, &data2, sizeof(int) );
+    //pc.printf("$adress,210,%d,*\r\n",data2);
+    periodV2_H2O=data2;
+    //pc.printf("$adress,%d,%d,%d,%d,%d,%d,%d,%d,%d,*\r\n",Pd_eeprom,frequencyValve1_eeprom,frequencyValve2_eeprom,WL01_eeprom,WL99_eeprom,T_1,T_2,openTimeV2_H2O,periodV2_H2O);
     }
 //______________________________________________________________________________
 void substring(char *s,char *d,int pos,int len) {
@@ -410,6 +430,14 @@
             T_2 = anySet;
             plotter.printf( "19 T_2=%d\r\n",anySet );
             break;                            
+       case 20:
+            openTimeV2_H2O = anySet;
+            plotter.printf( "20 openTimeV2_H2O=%d\r\n",anySet );
+            break;
+       case 21:
+            periodV2_H2O = anySet;
+            plotter.printf( "21 periodV2_H2O=%d\r\n",anySet );
+            break;
         default:
             plotter.printf( "Wrong case.\r\n" );
     } 
@@ -448,6 +476,8 @@
     digital_7.write(0);                                                         //valve2  off;    
     digital_5.write(0);                                                         //valve3,4  off; 
     digital_6.write(0);                                                         //выключение компрессора
+    //eeprom.nbyte_write( 200, &openTimeV2_H2O, sizeof(int));                   //debug set
+    //eeprom.nbyte_write( 210, &periodV2_H2O, sizeof(int));                     //debug set
     load_EEPROM ();                                                             //загрузка уставок из EEPROM
     load_EEPROM2 ();                                                            //загрузка граничных уставок (аварийных событий)из EEPROM2
     if (value >= 1 && delta_value >= 1 && flag_compressor < 2 && flag_stopRegulator < 2 && num_chan < 6) {
@@ -463,7 +493,7 @@
     timer.start();
     timer_2.start();
     timer_3.start();
-   // timer_4.start();
+    timer_4.start();
     
   while (true){                                                                 //бесконечный цикл
     // kick watchdog regularly within provided timeout (сброс собаки в начало счёта)
@@ -507,15 +537,15 @@
         WL+Pb+Pw1+Pw2+Pd+
         digital_4.read()+digital_7.read()+digital_5.read()+digital_6.read()+
         event_N+idigital_11.read()+idigital_12.read()+idigital_13.read()+
-        Pd_eeprom+frequencyValve1_eeprom+frequencyValve2_eeprom+WL01_eeprom+WL99_eeprom+T_1+T_2)*2;
-      pc.printf("$press,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,*\r\n",
+        Pd_eeprom+frequencyValve1_eeprom+frequencyValve2_eeprom+WL01_eeprom+WL99_eeprom+T_1+T_2+openTimeV2_H2O+periodV2_H2O)*2;
+      pc.printf("$press,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,*\r\n",
         value,delta_value,flag_compressor,flag_stopRegulator,                                             //1,2,3,4
         sensor_value,frequencyValve1,frequencyValve2,                                                     //5,6,7
         WL,Pb,Pw1,Pw2,Pd,                                                                                 //8,9,10,11,12
         digital_4.read(),digital_7.read(),digital_5.read(),digital_6.read(),                              //13,14,15,16
         event_N,idigital_11.read(),idigital_12.read(),idigital_13.read(),                                 //17,18,19,20
         Pd_eeprom,frequencyValve1_eeprom,frequencyValve2_eeprom,WL01_eeprom,WL99_eeprom,T_1,T_2,
-        ks);        //21,22,23,24,25,26,27,28
+        openTimeV2_H2O,periodV2_H2O,ks);        //21,22,23,24,25,26,27,28,29,30
       flag_comand2_detected = false;                                            //в последующих обращениях не печатать пока нет нового сообщения из СОМ-порта
       
       if (strcmp(trueSource2Old,trueSource2) != 0 && numSet >= 10) {            //функция возвращает ноль если командные строки совпадают
@@ -581,6 +611,14 @@
       
       if (flag_stopRegulator == 0 && event_N == 255 && flag_stopRegulatorEEPROM == 0) {                          // можно запускать регулятор
         digital_5.write(1);                                                                //valve3,4 открыты - подключаемся к контуру охлаждения макета
+        //-----------Контроль протечки воды через периодическое отпирание Valve2----------
+          time_4 = timer_4.read_ms();  
+        if (time_4 >= periodV2_H2O) {                                                   //Время таймера достигло периода включения вентиля V2
+          timer_4.reset();
+          digital_7.write(1);                                                   //valve2  on;
+          ThisThread::sleep_for(openTimeV2_H2O);                                //Время открытого состояния (mc) вентиля V2 должно быть меньше WDlimit=100ms
+          digital_7.write(0);                                                   //valve2  off;
+        }
         //--------------regulator begin-----------------------
         if (temp_valueSensor > value + delta_value) {
           valve2 = digital_7.read();
@@ -622,10 +660,10 @@
        if (WL >= WL99_eeprom) {
              event_N = 4;
        }
-       if (idigital_11.read()==0) {
+       if (idigital_11.read()==1) {
              event_N = 5;
        }
-       if (idigital_12.read()==0) {
+       if (idigital_12.read()==1) {
              event_N = 6;
        }
        if (idigital_13.read()==0) {
@@ -656,16 +694,10 @@
      
       
       auto_set();                                                               //включение-выкючение компрессора  через flag_compressor
-      //led = !led;                                                               //гасим/зажигаем индикаторный светодиод
+      //led = !led;                                                             //гасим/зажигаем индикаторный светодиод
     } 
     
-    //---------------------print void string to PC----------------------------
-    //time_4 = timer_4.read_ms();  
-    //if (time_4 >= 1000) {
-    //    timer_4.reset();
-    //    pc.printf("$\r\n");                                                     //отправка пустой (символ $ обязателен!)строки раз в 1000 мс в PC
-    //}
-    
+   
     
     ThisThread::sleep_for(1);                                                   // (mc) правильный оператор задержки для mbed5
     counter_cycle1++;