Removed pc.printf command that sends empty string once per second and associated timer_4, since the operator program was changed, a new operator Loc () was introduced into it. Instead of pc.printf ("Reset ALARM \ r \ n") now plotter.printf ("Reset ALARM \ r \ n").

Dependencies:   _24LCXXX

Revision:
8:bf73cc68a823
Parent:
7:97881cd71b31
Child:
9:6bd6ac6ca7d4
--- a/main.cpp	Fri Jun 19 10:33:01 2020 +0000
+++ b/main.cpp	Fri Sep 11 08:00:35 2020 +0000
@@ -1,5 +1,9 @@
-// 19.06.2020 Продолжение (клон )mbed-os5-press12
-// значения уставок EEPROM2  выводяться в pc.print в специальной строке с текущими данными диагностики
+// 10.09.2020 Продолжение (клон )mbed-os5-press15
+// Суммирование значений каналов А0 А1 А2 было 9 раз, исправлено на 10.
+// Передаваемые через pc.printf сообщения в РС дополнены контрольными суммами для увеличения надёжности связи.
+// Введена команда pc.printf, посылающая пустую строку раз в секунду, на случай потери (порчи )данных при пересылке и
+// возможного зависания программы оператора при ожидании символа из serial порта (для этого добавлен timer_4).
+// Значения уставок EEPROM2  выводяться в pc.print в специальной строке с текущими данными диагностики
 // Сделан дополнительный блок в парсере для декодирования приходящих аварийных уставок, они пишутся в  EEPROM2
 // Сделан timer_2 для отсчёта времени открытого состояния вентиля 1
 // Сделан timer_3 для отсчёта времени открытого состояния вентиля 2
@@ -42,6 +46,7 @@
 Timer timer;                                                                    //инициализация таймера для определения частот переключений вентилей 1 и 2
 Timer timer_2;                                                                  //инициализация таймера 2 для отсчёта времени открытого состояния вентиля 1
 Timer timer_3;                                                                  //инициализация таймера 3 для отсчёта времени открытого состояния вентиля 2
+Timer timer_4;                                                                  //инициализация таймера 4 для отсчёта периода времени отсылки в порт компьютера пустой строки.
 //========УСТАВКИ_1 EEPROM========
 uint8_t delta_value = 0;                                                        //set delta pressure 1...99
 uint8_t flag_compressor = 0;                                                    //флаг компрессора. При 0 - выключение компрессора, при 1 - включение компрессора
@@ -434,7 +439,7 @@
 int main() {
     
     pc.attach(&onDataReceived, Serial::RxIrq);
-    int time, time_2, time_3, valve1, valve2, countValve1=0, countValve2=0, temp_valueSensor;
+    int time, time_2, time_3, time_4, ks, valve1, valve2, countValve1=0, countValve2=0, temp_valueSensor;
     int frequencyValve1, frequencyValve2;
     float raw_value_sum_0=0, raw_value_sum_1=0, raw_value_sum_2=0, raw_value_sum_3=0, raw_value_sum_4=0, raw_value_sum_5=0;
     digital_4.write(0);                                                         //valve1  off;
@@ -456,6 +461,7 @@
     timer.start();
     timer_2.start();
     timer_3.start();
+    timer_4.start();
     
   while (true){                                                                 //бесконечный цикл
     // kick watchdog regularly within provided timeout (сброс собаки в начало счёта)
@@ -471,12 +477,16 @@
     }
     
     if (flag_comand_detected) {                                                 //пришла правильная командная строка
-                                                 
-      pc.printf("$press,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,*\r\n",
+      ks=(value+delta_value+flag_compressor+flag_stopRegulator+
+        sensor_value+frequencyValve1+frequencyValve2+
+        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())*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,*\r\n",
         value,delta_value,flag_compressor,flag_stopRegulator,
         sensor_value,frequencyValve1,frequencyValve2,
         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());        //передача текущих значений в РС
+        digital_4.read(),digital_7.read(),digital_5.read(),digital_6.read(),event_N,idigital_11.read(),idigital_12.read(),idigital_13.read(),
+        ks);        //передача текущих значений в РС
              
       //pc.printf("%s\r\n",trueSource);                                         //эхо для отладки канала связи
       flag_comand_detected = false;                                               //в последующих обращениях не печатать пока нет новых уставок из СОМ-порта
@@ -490,13 +500,20 @@
     }
     
     if (flag_comand2_detected ) {                                //пришла правильная строка из программы SetUp_EEPROM и передана уставка
-      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,*\r\n",
+      ks=(value+delta_value+flag_compressor+flag_stopRegulator+
+        sensor_value+frequencyValve1+frequencyValve2+
+        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",
         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 );        //21,22,23,24,25,26,27
+        Pd_eeprom,frequencyValve1_eeprom,frequencyValve2_eeprom,WL01_eeprom,WL99_eeprom,T_1,T_2,
+        ks);        //21,22,23,24,25,26,27,28
       flag_comand2_detected = false;                                            //в последующих обращениях не печатать пока нет нового сообщения из СОМ-порта
       
       if (strcmp(trueSource2Old,trueSource2) != 0 && numSet >= 10) {            //функция возвращает ноль если командные строки совпадают
@@ -509,15 +526,20 @@
     }
     
     if (flag_zerostart) {                                            //пришла командная строка с пустыми уставками (актуально для получения данных на PC при первом запуске)
-      pc.printf("$press,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,*\r\n",
+      ks=(value+delta_value+flag_compressor+flag_stopRegulator+
+        sensor_value+frequencyValve1+frequencyValve2+
+        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())*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,*\r\n",
         value,delta_value,flag_compressor,flag_stopRegulator,
         sensor_value,frequencyValve1,frequencyValve2,
         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());        //передача текущих значений в РС  
+        digital_4.read(),digital_7.read(),digital_5.read(),digital_6.read(),event_N,idigital_11.read(),idigital_12.read(),idigital_13.read(),
+        ks);        //передача текущих значений в РС  
         flag_zerostart = false;
     }   
-    
-    if (counter_cycle1 < 10 ) {
+    //счет counter_cycle1 идет от еденицы
+    if (counter_cycle1 < 11 ) {
       float raw_value_0 = analog_value_0.read();                                     // Чтение аналогового входа 0 (0.0 to 1.0 = full ADC диапазон)
       raw_value_sum_0 = raw_value_sum_0 + raw_value_0;
       float raw_value_1 = analog_value_1.read();                                     // Чтение аналогового входа 1 (0.0 to 1.0 = full ADC диапазон)
@@ -525,7 +547,7 @@
       float raw_value_2 = analog_value_2.read();                                     // Чтение аналогового входа 2 (0.0 to 1.0 = full ADC диапазон)
       raw_value_sum_2 = raw_value_sum_2 + raw_value_2;
     }
-    if (counter_cycle1 >= 10 ) {
+    if (counter_cycle1 >= 11 ) {
       float raw_value_3 = analog_value_3.read();                                     // Чтение аналогового входа 3 (0.0 to 1.0 = full ADC диапазон)
       raw_value_sum_3 = raw_value_sum_3 + raw_value_3;
       float raw_value_4 = analog_value_4.read();                                     // Чтение аналогового входа 4 (0.0 to 1.0 = full ADC диапазон)
@@ -534,7 +556,7 @@
       //raw_value_sum_5 = raw_value_sum_5 + raw_value_5;
     }
        
-    if (counter_cycle1 >= 19 ) {
+    if (counter_cycle1 >= 20 ) {
       counter_cycle1=0;
       
       WL = raw_value_sum_0/10 * 3300;                                           // преобразование в напряжение 0-3300 mV  с усреднением
@@ -634,6 +656,15 @@
       auto_set();                                                               //включение-выкючение компрессора  через flag_compressor
       //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++;