Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 10:b6de15a30716, committed 2021-03-12
- Comitter:
- Aleksk
- Date:
- Fri Mar 12 11:58:50 2021 +0000
- Parent:
- 9:6bd6ac6ca7d4
- 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 |
diff -r 6bd6ac6ca7d4 -r b6de15a30716 main.cpp
--- 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++;