
Added integration of analog channels, introduced three new setpoints (Pb_1, Pb_2, Tp) for automatic compressor operation.
Diff: main.cpp
- 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++;