
Added integration of analog channels, introduced three new setpoints (Pb_1, Pb_2, Tp) for automatic compressor operation.
Revision 10:b6de15a30716, committed 2021-03-12
- 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++;