1
Dependencies: mbed
main_filtration.cpp@0:2a01c5a56ed1, 2018-07-09 (annotated)
- Committer:
- meric
- Date:
- Mon Jul 09 09:12:38 2018 +0000
- Revision:
- 0:2a01c5a56ed1
1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
meric | 0:2a01c5a56ed1 | 1 | /* |
meric | 0:2a01c5a56ed1 | 2 | **************************************************************************** |
meric | 0:2a01c5a56ed1 | 3 | **************************************************************************** |
meric | 0:2a01c5a56ed1 | 4 | ** DEVINT BİLİŞİM YAZILIM DONANIM TİC. LTD. ŞTİ. TARAFINDAN GELİŞTİRİLMİŞTİR |
meric | 0:2a01c5a56ed1 | 5 | ** İzmir / TÜRKİYE |
meric | 0:2a01c5a56ed1 | 6 | ** |
meric | 0:2a01c5a56ed1 | 7 | ** Copyright (C) 2015 |
meric | 0:2a01c5a56ed1 | 8 | **************************************************************************** |
meric | 0:2a01c5a56ed1 | 9 | **************************************************************************** |
meric | 0:2a01c5a56ed1 | 10 | */ |
meric | 0:2a01c5a56ed1 | 11 | |
meric | 0:2a01c5a56ed1 | 12 | #include "mbed.h" |
meric | 0:2a01c5a56ed1 | 13 | #include "define.h" |
meric | 0:2a01c5a56ed1 | 14 | #include "i2c.h" |
meric | 0:2a01c5a56ed1 | 15 | #include "function.h" |
meric | 0:2a01c5a56ed1 | 16 | #include "alerts.h" |
meric | 0:2a01c5a56ed1 | 17 | |
meric | 0:2a01c5a56ed1 | 18 | int main () |
meric | 0:2a01c5a56ed1 | 19 | { |
meric | 0:2a01c5a56ed1 | 20 | // RF Modül açık |
meric | 0:2a01c5a56ed1 | 21 | rfPower = 1; |
meric | 0:2a01c5a56ed1 | 22 | wait_ms(50); |
meric | 0:2a01c5a56ed1 | 23 | |
meric | 0:2a01c5a56ed1 | 24 | // RF UART: 38400 Kbit, 8 Data Bits, No Parity, 1 Stop Bit |
meric | 0:2a01c5a56ed1 | 25 | rf.baud(BAUD_SERIAL_RF); |
meric | 0:2a01c5a56ed1 | 26 | rf.format(8, SerialBase::None, 1); |
meric | 0:2a01c5a56ed1 | 27 | |
meric | 0:2a01c5a56ed1 | 28 | // MASTER UART: 115200 Kbit, 8 Data Bits, No Parity, 1 Stop Bit |
meric | 0:2a01c5a56ed1 | 29 | master.baud(BAUD_MASTER); |
meric | 0:2a01c5a56ed1 | 30 | master.format(8, SerialBase::None, 1); |
meric | 0:2a01c5a56ed1 | 31 | |
meric | 0:2a01c5a56ed1 | 32 | // UART Rx ISR |
meric | 0:2a01c5a56ed1 | 33 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 34 | |
meric | 0:2a01c5a56ed1 | 35 | // MASTER Rx ISR |
meric | 0:2a01c5a56ed1 | 36 | master.attach(&master_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 37 | |
meric | 0:2a01c5a56ed1 | 38 | // EEPROM frekansı 100 KHz |
meric | 0:2a01c5a56ed1 | 39 | i2c.frequency(EEPROM_FREQUENCY); |
meric | 0:2a01c5a56ed1 | 40 | wait_ms(1500); |
meric | 0:2a01c5a56ed1 | 41 | |
meric | 0:2a01c5a56ed1 | 42 | // EEPROM'a ilk çalışma için varsayılan konfigürasyonları yaz |
meric | 0:2a01c5a56ed1 | 43 | configure_eeprom_default_values(); |
meric | 0:2a01c5a56ed1 | 44 | |
meric | 0:2a01c5a56ed1 | 45 | // EEPROM'dan konfigürasyonu oku |
meric | 0:2a01c5a56ed1 | 46 | init_node(); |
meric | 0:2a01c5a56ed1 | 47 | |
meric | 0:2a01c5a56ed1 | 48 | // PCF pinleri LOW |
meric | 0:2a01c5a56ed1 | 49 | io_send(fnode.filterByte_1, fnode.filterByte_2); |
meric | 0:2a01c5a56ed1 | 50 | wait_ms(1500); |
meric | 0:2a01c5a56ed1 | 51 | |
meric | 0:2a01c5a56ed1 | 52 | check_and_close_valves(); |
meric | 0:2a01c5a56ed1 | 53 | |
meric | 0:2a01c5a56ed1 | 54 | while(1) { |
meric | 0:2a01c5a56ed1 | 55 | |
meric | 0:2a01c5a56ed1 | 56 | |
meric | 0:2a01c5a56ed1 | 57 | if (fnode.flush_isr == true) { |
meric | 0:2a01c5a56ed1 | 58 | |
meric | 0:2a01c5a56ed1 | 59 | fnode.flush_isr = false; |
meric | 0:2a01c5a56ed1 | 60 | |
meric | 0:2a01c5a56ed1 | 61 | if (fnode.globalFlushPhase != fnode.lastFlushPhase) { |
meric | 0:2a01c5a56ed1 | 62 | |
meric | 0:2a01c5a56ed1 | 63 | fnode.globalFlushPhase ++; |
meric | 0:2a01c5a56ed1 | 64 | fnode.currentFlushPhase ++; |
meric | 0:2a01c5a56ed1 | 65 | |
meric | 0:2a01c5a56ed1 | 66 | if (fnode.currentFlushPhase > 4) { |
meric | 0:2a01c5a56ed1 | 67 | |
meric | 0:2a01c5a56ed1 | 68 | fnode.globalFlushingFilter ++; |
meric | 0:2a01c5a56ed1 | 69 | fnode.currentFlushingFilter ++; |
meric | 0:2a01c5a56ed1 | 70 | |
meric | 0:2a01c5a56ed1 | 71 | fnode.currentFlushPhase = 1; |
meric | 0:2a01c5a56ed1 | 72 | } |
meric | 0:2a01c5a56ed1 | 73 | |
meric | 0:2a01c5a56ed1 | 74 | if (fnode.currentFlushingFilter > 4) { |
meric | 0:2a01c5a56ed1 | 75 | |
meric | 0:2a01c5a56ed1 | 76 | fnode.currentWorkingSlave ++; |
meric | 0:2a01c5a56ed1 | 77 | fnode.currentFlushingFilter = 1; |
meric | 0:2a01c5a56ed1 | 78 | |
meric | 0:2a01c5a56ed1 | 79 | } |
meric | 0:2a01c5a56ed1 | 80 | } |
meric | 0:2a01c5a56ed1 | 81 | |
meric | 0:2a01c5a56ed1 | 82 | fnode.flushStarted = true; |
meric | 0:2a01c5a56ed1 | 83 | } |
meric | 0:2a01c5a56ed1 | 84 | |
meric | 0:2a01c5a56ed1 | 85 | // 30 sn aralıkla 10 kez veri gönderim koşulu oluşmuşsa |
meric | 0:2a01c5a56ed1 | 86 | if (fnode.transmit_rtData == true) { |
meric | 0:2a01c5a56ed1 | 87 | |
meric | 0:2a01c5a56ed1 | 88 | if (fnode.irrigation == true) { |
meric | 0:2a01c5a56ed1 | 89 | |
meric | 0:2a01c5a56ed1 | 90 | fnode.rWIC = 0; |
meric | 0:2a01c5a56ed1 | 91 | fnode.rWI = (fnode.rtPulseFirst - fnode.pulse) * fnode.watermeterCoefficient; |
meric | 0:2a01c5a56ed1 | 92 | fnode.rQI = (float)fnode.rWI / (float)RT_DATA_TRANSMIT_INTERVAL; |
meric | 0:2a01c5a56ed1 | 93 | fnode.rtPulseFirst = fnode.pulse; |
meric | 0:2a01c5a56ed1 | 94 | |
meric | 0:2a01c5a56ed1 | 95 | } else { |
meric | 0:2a01c5a56ed1 | 96 | |
meric | 0:2a01c5a56ed1 | 97 | fnode.rWDC = 0; |
meric | 0:2a01c5a56ed1 | 98 | fnode.rWD = (fnode.rtPulseFirst - fnode.pulse) * fnode.watermeterCoefficient; |
meric | 0:2a01c5a56ed1 | 99 | fnode.rQD = (float)fnode.rWD / (float)RT_DATA_TRANSMIT_INTERVAL; |
meric | 0:2a01c5a56ed1 | 100 | fnode.rtPulseFirst = fnode.pulse; |
meric | 0:2a01c5a56ed1 | 101 | |
meric | 0:2a01c5a56ed1 | 102 | } |
meric | 0:2a01c5a56ed1 | 103 | |
meric | 0:2a01c5a56ed1 | 104 | fnode.transmit_rtData = false; |
meric | 0:2a01c5a56ed1 | 105 | |
meric | 0:2a01c5a56ed1 | 106 | prepare_data_fread(); |
meric | 0:2a01c5a56ed1 | 107 | |
meric | 0:2a01c5a56ed1 | 108 | send_to_coordinator(fnode.dataBuffer); |
meric | 0:2a01c5a56ed1 | 109 | memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 110 | |
meric | 0:2a01c5a56ed1 | 111 | if (fnode.rtCounter >= 10) { |
meric | 0:2a01c5a56ed1 | 112 | rtDataTransmitTicker.detach(); |
meric | 0:2a01c5a56ed1 | 113 | fnode.rtCounter = 0; |
meric | 0:2a01c5a56ed1 | 114 | fnode.rtActive = false; |
meric | 0:2a01c5a56ed1 | 115 | fnode.rtPulseFirst = 0; |
meric | 0:2a01c5a56ed1 | 116 | |
meric | 0:2a01c5a56ed1 | 117 | send_to_coordinator("{CMD:\"FRTOFFOK\"}"); |
meric | 0:2a01c5a56ed1 | 118 | memset(fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 119 | wait_ms(50); |
meric | 0:2a01c5a56ed1 | 120 | } |
meric | 0:2a01c5a56ed1 | 121 | } |
meric | 0:2a01c5a56ed1 | 122 | |
meric | 0:2a01c5a56ed1 | 123 | // Otomatik veri aktarım koşulu oluşmuşsa |
meric | 0:2a01c5a56ed1 | 124 | if (fnode.transmitData == true) { |
meric | 0:2a01c5a56ed1 | 125 | |
meric | 0:2a01c5a56ed1 | 126 | fnode.transmitData = false; |
meric | 0:2a01c5a56ed1 | 127 | |
meric | 0:2a01c5a56ed1 | 128 | if (fnode.irrigation == true) { |
meric | 0:2a01c5a56ed1 | 129 | |
meric | 0:2a01c5a56ed1 | 130 | fnode.WIC = fnode.pulse * fnode.watermeterCoefficient; |
meric | 0:2a01c5a56ed1 | 131 | fnode.WI = fnode.pulseTransmit * fnode.watermeterCoefficient; |
meric | 0:2a01c5a56ed1 | 132 | fnode.QI = (float)fnode.WI / timer.read(); |
meric | 0:2a01c5a56ed1 | 133 | |
meric | 0:2a01c5a56ed1 | 134 | } else { |
meric | 0:2a01c5a56ed1 | 135 | |
meric | 0:2a01c5a56ed1 | 136 | fnode.WDC = fnode.pulse * fnode.watermeterCoefficient; |
meric | 0:2a01c5a56ed1 | 137 | fnode.WD = fnode.pulseTransmit * fnode.watermeterCoefficient; |
meric | 0:2a01c5a56ed1 | 138 | fnode.QD = (float)fnode.WD / timer.read(); |
meric | 0:2a01c5a56ed1 | 139 | |
meric | 0:2a01c5a56ed1 | 140 | } |
meric | 0:2a01c5a56ed1 | 141 | |
meric | 0:2a01c5a56ed1 | 142 | fnode.pulseTransmit = 0; |
meric | 0:2a01c5a56ed1 | 143 | |
meric | 0:2a01c5a56ed1 | 144 | timer.reset(); |
meric | 0:2a01c5a56ed1 | 145 | |
meric | 0:2a01c5a56ed1 | 146 | prepare_data(); |
meric | 0:2a01c5a56ed1 | 147 | |
meric | 0:2a01c5a56ed1 | 148 | // Otomatik veri aktarımı açıksa veriyi gönder |
meric | 0:2a01c5a56ed1 | 149 | if (fnode.autosend == true) { |
meric | 0:2a01c5a56ed1 | 150 | send_to_coordinator(fnode.dataBuffer); |
meric | 0:2a01c5a56ed1 | 151 | } |
meric | 0:2a01c5a56ed1 | 152 | |
meric | 0:2a01c5a56ed1 | 153 | memset(fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 154 | } |
meric | 0:2a01c5a56ed1 | 155 | |
meric | 0:2a01c5a56ed1 | 156 | // İki DP yıkaması arasında min bekleme süresinin hesaplanması |
meric | 0:2a01c5a56ed1 | 157 | if (fnode.minFlushEnabled == true && (fnode.minFlushCounter >= fnode.minFlushInterval * 60)) { |
meric | 0:2a01c5a56ed1 | 158 | |
meric | 0:2a01c5a56ed1 | 159 | minFlushTicker.detach(); |
meric | 0:2a01c5a56ed1 | 160 | fnode.isMinTimePassed = true; |
meric | 0:2a01c5a56ed1 | 161 | fnode.minFlushCounter = 0; |
meric | 0:2a01c5a56ed1 | 162 | } |
meric | 0:2a01c5a56ed1 | 163 | |
meric | 0:2a01c5a56ed1 | 164 | // PERIYODIK YIKAMA |
meric | 0:2a01c5a56ed1 | 165 | // Filtrasyon nodunda ters yıkamalara izin verilmişse && şu an ters yıkama yoksa (manual ya da DP ile aktiflenmiş) && sulama varsa && önceden hata oluşmamışsa && periyodik yıkamanın kullanımı aktif edilmişse |
meric | 0:2a01c5a56ed1 | 166 | //if (fnode.flushEnabled == 1 && fnode.flushing == false && fnode.irrigation == true && fnode.errorOccured == false && fnode.periodicFlushEnabled == true) { |
meric | 0:2a01c5a56ed1 | 167 | if (fnode.flushEnabled == 1 && fnode.flushing == false && fnode.errorOccured == false && fnode.periodicFlushEnabled == true) { |
meric | 0:2a01c5a56ed1 | 168 | |
meric | 0:2a01c5a56ed1 | 169 | // Periyodik sayaç periyot değerine ulaşmışsa yıkamayı başlat |
meric | 0:2a01c5a56ed1 | 170 | if (fnode.periodicFlushCounter >= fnode.periodicFlushInterval * 60 * 60) { |
meric | 0:2a01c5a56ed1 | 171 | |
meric | 0:2a01c5a56ed1 | 172 | // Periyot zamanlayıcısını iptal et ve periyot sayaç değerini sıfırla |
meric | 0:2a01c5a56ed1 | 173 | periodicFlushTicker.detach(); |
meric | 0:2a01c5a56ed1 | 174 | fnode.periodicFlushCounter = 0; |
meric | 0:2a01c5a56ed1 | 175 | |
meric | 0:2a01c5a56ed1 | 176 | // Yıkama zamanlayıcısını iptal et ve minimum zaman sayacını sıfırla |
meric | 0:2a01c5a56ed1 | 177 | minFlushTicker.detach(); |
meric | 0:2a01c5a56ed1 | 178 | //fnode.isMinTimePassed = true; |
meric | 0:2a01c5a56ed1 | 179 | fnode.minFlushCounter = 0; |
meric | 0:2a01c5a56ed1 | 180 | |
meric | 0:2a01c5a56ed1 | 181 | // Şu an periyodik yıkama yapılıyor koşuluna geç |
meric | 0:2a01c5a56ed1 | 182 | fnode.flushing = true; |
meric | 0:2a01c5a56ed1 | 183 | |
meric | 0:2a01c5a56ed1 | 184 | fnode.checkDp = false; |
meric | 0:2a01c5a56ed1 | 185 | fnode.flushStarted = true; |
meric | 0:2a01c5a56ed1 | 186 | |
meric | 0:2a01c5a56ed1 | 187 | // Yıkama fazı 1 |
meric | 0:2a01c5a56ed1 | 188 | fnode.globalFlushPhase = 1; |
meric | 0:2a01c5a56ed1 | 189 | fnode.currentFlushPhase = 1; |
meric | 0:2a01c5a56ed1 | 190 | fnode.globalFlushingFilter = 1; |
meric | 0:2a01c5a56ed1 | 191 | fnode.currentFlushingFilter = 1; |
meric | 0:2a01c5a56ed1 | 192 | fnode.currentWorkingSlave = 0; |
meric | 0:2a01c5a56ed1 | 193 | |
meric | 0:2a01c5a56ed1 | 194 | send_alarm(BACKFLUSH_PERIODIC_STARTED, fnode.globalFlushingFilter, fnode.currentWorkingSlave); |
meric | 0:2a01c5a56ed1 | 195 | } |
meric | 0:2a01c5a56ed1 | 196 | } |
meric | 0:2a01c5a56ed1 | 197 | |
meric | 0:2a01c5a56ed1 | 198 | if (fnode.checkPressure == true) { |
meric | 0:2a01c5a56ed1 | 199 | |
meric | 0:2a01c5a56ed1 | 200 | fnode.checkPressure = false; |
meric | 0:2a01c5a56ed1 | 201 | |
meric | 0:2a01c5a56ed1 | 202 | fnode.pressure = read_pressure(); |
meric | 0:2a01c5a56ed1 | 203 | fnode.dpPressure = read_pressure_dp(); |
meric | 0:2a01c5a56ed1 | 204 | |
meric | 0:2a01c5a56ed1 | 205 | // Eğer basınç sensörü filtre girişinde ise basınç ve DP değerine göre giriş ve çıkış basıncını hesapla |
meric | 0:2a01c5a56ed1 | 206 | // Giriş basıncı = Okunan basınç |
meric | 0:2a01c5a56ed1 | 207 | // Çıkış basıncı = Okunan basınç - Fark basınç |
meric | 0:2a01c5a56ed1 | 208 | if (fnode.pressureSensorPosition == 0) { |
meric | 0:2a01c5a56ed1 | 209 | |
meric | 0:2a01c5a56ed1 | 210 | fnode.inletPressure = fnode.pressure; |
meric | 0:2a01c5a56ed1 | 211 | fnode.outletPressure = fnode.pressure - fnode.dpPressure; |
meric | 0:2a01c5a56ed1 | 212 | |
meric | 0:2a01c5a56ed1 | 213 | if (fnode.outletPressure < 0) { |
meric | 0:2a01c5a56ed1 | 214 | |
meric | 0:2a01c5a56ed1 | 215 | fnode.outletPressure = 0; |
meric | 0:2a01c5a56ed1 | 216 | |
meric | 0:2a01c5a56ed1 | 217 | } |
meric | 0:2a01c5a56ed1 | 218 | |
meric | 0:2a01c5a56ed1 | 219 | // Eğer basınç sensörü filtre çıkışında ise basınç ve DP değerine göre giriş ve çıkış basıncını hesapla |
meric | 0:2a01c5a56ed1 | 220 | // Giriş basıncı = Okunan basınç + Fark basınç |
meric | 0:2a01c5a56ed1 | 221 | // Çıkış basıncı = Okunan basınç |
meric | 0:2a01c5a56ed1 | 222 | } else { |
meric | 0:2a01c5a56ed1 | 223 | |
meric | 0:2a01c5a56ed1 | 224 | fnode.inletPressure = fnode.pressure + fnode.dpPressure; |
meric | 0:2a01c5a56ed1 | 225 | fnode.outletPressure = fnode.pressure; |
meric | 0:2a01c5a56ed1 | 226 | |
meric | 0:2a01c5a56ed1 | 227 | } |
meric | 0:2a01c5a56ed1 | 228 | |
meric | 0:2a01c5a56ed1 | 229 | // Eğer alarmlar aktifse ve giriş basıncı set edilen alt alarm eşik değerinin altında ise ve alarm daha önce gönderilmemişse alarm gönder |
meric | 0:2a01c5a56ed1 | 230 | // Alarm gönderme işlemi alarm bölgesi değiştiğinde tekrar devreye girer |
meric | 0:2a01c5a56ed1 | 231 | if (fnode.alarmsEnabled == 1) { |
meric | 0:2a01c5a56ed1 | 232 | |
meric | 0:2a01c5a56ed1 | 233 | if (fnode.inletPressure < (float)fnode.pressureLowThreshold / 10.0f && fnode.pressureLowError == false) { |
meric | 0:2a01c5a56ed1 | 234 | |
meric | 0:2a01c5a56ed1 | 235 | fnode.pressureLowError = true; |
meric | 0:2a01c5a56ed1 | 236 | fnode.pressureNormalError = false; |
meric | 0:2a01c5a56ed1 | 237 | fnode.pressureHighError = false; |
meric | 0:2a01c5a56ed1 | 238 | |
meric | 0:2a01c5a56ed1 | 239 | // Düşük |
meric | 0:2a01c5a56ed1 | 240 | send_alarm(INLET_LOW_PRESSURE, fnode.globalFlushingFilter, fnode.currentWorkingSlave); |
meric | 0:2a01c5a56ed1 | 241 | |
meric | 0:2a01c5a56ed1 | 242 | // Eğer giriş basıncı set edilen güvenli bölge içinde ise alarm gönder |
meric | 0:2a01c5a56ed1 | 243 | } else if (fnode.inletPressure >= (float)fnode.pressureLowThreshold / 10.0f && fnode.inletPressure <= (float)fnode.pressureHighThreshold / 10.0f && fnode.pressureNormalError == false) { |
meric | 0:2a01c5a56ed1 | 244 | |
meric | 0:2a01c5a56ed1 | 245 | fnode.pressureLowError = false; |
meric | 0:2a01c5a56ed1 | 246 | fnode.pressureNormalError = true; |
meric | 0:2a01c5a56ed1 | 247 | fnode.pressureHighError = false; |
meric | 0:2a01c5a56ed1 | 248 | |
meric | 0:2a01c5a56ed1 | 249 | // Normal |
meric | 0:2a01c5a56ed1 | 250 | send_alarm(INLET_NORMAL_PRESSURE, fnode.globalFlushingFilter, fnode.currentWorkingSlave); |
meric | 0:2a01c5a56ed1 | 251 | |
meric | 0:2a01c5a56ed1 | 252 | // Eğer giriş basıncı set edilen üst alarm eşik değerinin üstünde ise alarm gönder |
meric | 0:2a01c5a56ed1 | 253 | } else if (fnode.inletPressure > (float)fnode.pressureHighThreshold / 10.0f && fnode.pressureHighError == false) { |
meric | 0:2a01c5a56ed1 | 254 | |
meric | 0:2a01c5a56ed1 | 255 | fnode.pressureLowError = false; |
meric | 0:2a01c5a56ed1 | 256 | fnode.pressureNormalError = false; |
meric | 0:2a01c5a56ed1 | 257 | fnode.pressureHighError = true; |
meric | 0:2a01c5a56ed1 | 258 | |
meric | 0:2a01c5a56ed1 | 259 | // Yüksek |
meric | 0:2a01c5a56ed1 | 260 | send_alarm(INLET_HIGH_PRESSURE, fnode.globalFlushingFilter, fnode.currentWorkingSlave); |
meric | 0:2a01c5a56ed1 | 261 | |
meric | 0:2a01c5a56ed1 | 262 | } |
meric | 0:2a01c5a56ed1 | 263 | } |
meric | 0:2a01c5a56ed1 | 264 | |
meric | 0:2a01c5a56ed1 | 265 | // Giriş basıncı set edilen değerin altında ise sulamanın bittiği kabul edilir |
meric | 0:2a01c5a56ed1 | 266 | // SULAMA DIŞI |
meric | 0:2a01c5a56ed1 | 267 | if (fnode.inletPressure < (float)fnode.inletPressureSet / 10.0f) { |
meric | 0:2a01c5a56ed1 | 268 | |
meric | 0:2a01c5a56ed1 | 269 | // Giriş basıncı set edilen değerden düşükse önce son kez data gönderilir, sonrasında sulama bitti (filtrasyondan su geçişi durdu) alarmı gönderilir |
meric | 0:2a01c5a56ed1 | 270 | if (fnode.irrigation == true) { |
meric | 0:2a01c5a56ed1 | 271 | |
meric | 0:2a01c5a56ed1 | 272 | fnode.irrigation = false; |
meric | 0:2a01c5a56ed1 | 273 | |
meric | 0:2a01c5a56ed1 | 274 | dataTransmitTicker.detach(); |
meric | 0:2a01c5a56ed1 | 275 | |
meric | 0:2a01c5a56ed1 | 276 | // Sulama bitince periyodik sayıcıyı durdur ancak counterı sıfırlama (Pause) |
meric | 0:2a01c5a56ed1 | 277 | // Sulama başlayınca saymaya devam edecek |
meric | 0:2a01c5a56ed1 | 278 | periodicFlushTicker.detach(); |
meric | 0:2a01c5a56ed1 | 279 | |
meric | 0:2a01c5a56ed1 | 280 | // Min yıkama aralığını durdur |
meric | 0:2a01c5a56ed1 | 281 | minFlushTicker.detach(); |
meric | 0:2a01c5a56ed1 | 282 | fnode.minFlushCounter = 0; |
meric | 0:2a01c5a56ed1 | 283 | |
meric | 0:2a01c5a56ed1 | 284 | // Sulama bitince sulama sırasında geçen su miktarlarını ve debiyi hesapla |
meric | 0:2a01c5a56ed1 | 285 | fnode.WI = fnode.pulseTransmit * fnode.watermeterCoefficient; |
meric | 0:2a01c5a56ed1 | 286 | fnode.WIC = fnode.pulse * fnode.watermeterCoefficient; |
meric | 0:2a01c5a56ed1 | 287 | fnode.QI = (float)fnode.WI / timer.read(); |
meric | 0:2a01c5a56ed1 | 288 | |
meric | 0:2a01c5a56ed1 | 289 | // Sulama dışı değişkenleri sıfırla |
meric | 0:2a01c5a56ed1 | 290 | fnode.WD = 0; |
meric | 0:2a01c5a56ed1 | 291 | fnode.WDC = 0; |
meric | 0:2a01c5a56ed1 | 292 | fnode.QD = 0; |
meric | 0:2a01c5a56ed1 | 293 | |
meric | 0:2a01c5a56ed1 | 294 | // Basınç alarmlarını sıfırla |
meric | 0:2a01c5a56ed1 | 295 | fnode.pressureLowError = false; |
meric | 0:2a01c5a56ed1 | 296 | fnode.pressureNormalError = false; |
meric | 0:2a01c5a56ed1 | 297 | fnode.pressureHighError = false; |
meric | 0:2a01c5a56ed1 | 298 | |
meric | 0:2a01c5a56ed1 | 299 | // Timerı resetle |
meric | 0:2a01c5a56ed1 | 300 | timer.reset(); |
meric | 0:2a01c5a56ed1 | 301 | |
meric | 0:2a01c5a56ed1 | 302 | // Pals sayaç ISR değişkenlerini sıfırla |
meric | 0:2a01c5a56ed1 | 303 | fnode.pulse = 0; |
meric | 0:2a01c5a56ed1 | 304 | fnode.pulseTransmit = 0; |
meric | 0:2a01c5a56ed1 | 305 | fnode.pulsePressureCheck = 0; |
meric | 0:2a01c5a56ed1 | 306 | |
meric | 0:2a01c5a56ed1 | 307 | // SULAMA BİTTİĞİNDE SON KEZ DATA GÖNDER !!! |
meric | 0:2a01c5a56ed1 | 308 | prepare_data(); |
meric | 0:2a01c5a56ed1 | 309 | if (fnode.autosend == true) { |
meric | 0:2a01c5a56ed1 | 310 | send_to_coordinator(fnode.dataBuffer); |
meric | 0:2a01c5a56ed1 | 311 | } |
meric | 0:2a01c5a56ed1 | 312 | memset(fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 313 | |
meric | 0:2a01c5a56ed1 | 314 | // SULAMANIN BİTTİĞİNİ BELİRTEN ALARMI GÖNDER !!! |
meric | 0:2a01c5a56ed1 | 315 | send_alarm(IRRIGATION_ENDED, fnode.globalFlushingFilter, fnode.currentWorkingSlave); |
meric | 0:2a01c5a56ed1 | 316 | |
meric | 0:2a01c5a56ed1 | 317 | // Sulama sırasında geçen su miktarını sıfırla |
meric | 0:2a01c5a56ed1 | 318 | fnode.WIC = 0; |
meric | 0:2a01c5a56ed1 | 319 | fnode.WI = 0; |
meric | 0:2a01c5a56ed1 | 320 | fnode.QI = 0; |
meric | 0:2a01c5a56ed1 | 321 | |
meric | 0:2a01c5a56ed1 | 322 | // Veri aktarım aralığını sulama dışı sıklığa ayarla |
meric | 0:2a01c5a56ed1 | 323 | dataTransmitTicker.attach(&data_transmit_isr, fnode.dryTransmitInterval * 60); |
meric | 0:2a01c5a56ed1 | 324 | |
meric | 0:2a01c5a56ed1 | 325 | // Sulamanın bittiğini EEPROM'a yaz |
meric | 0:2a01c5a56ed1 | 326 | eeprom_write(EEPROM_TYPE, IRRI_STATUS_ADDR, 0); |
meric | 0:2a01c5a56ed1 | 327 | |
meric | 0:2a01c5a56ed1 | 328 | } |
meric | 0:2a01c5a56ed1 | 329 | |
meric | 0:2a01c5a56ed1 | 330 | // Giriş basıncı set değerinin üzerine çıktığında filtrasyon aktive olur. (Kendi başına çalışma koşulu) |
meric | 0:2a01c5a56ed1 | 331 | // Bu durumda çıkış basıncının set edilen değere ulaşıp ulaşmadığına bakılır |
meric | 0:2a01c5a56ed1 | 332 | //(SULAMA) |
meric | 0:2a01c5a56ed1 | 333 | } else if (fnode.inletPressure >= (float)fnode.inletPressureSet / 10.0f) { |
meric | 0:2a01c5a56ed1 | 334 | |
meric | 0:2a01c5a56ed1 | 335 | // Giriş basıncı set edilen değerden yüksekse sulama başladı (filtrasyondan su geçişi var) alarmı gönderilir |
meric | 0:2a01c5a56ed1 | 336 | if (fnode.irrigation == false) { |
meric | 0:2a01c5a56ed1 | 337 | |
meric | 0:2a01c5a56ed1 | 338 | fnode.irrigation = true; |
meric | 0:2a01c5a56ed1 | 339 | |
meric | 0:2a01c5a56ed1 | 340 | dataTransmitTicker.detach(); |
meric | 0:2a01c5a56ed1 | 341 | |
meric | 0:2a01c5a56ed1 | 342 | fnode.WDC = fnode.pulse * fnode.watermeterCoefficient; |
meric | 0:2a01c5a56ed1 | 343 | fnode.WD = fnode.pulseTransmit * fnode.watermeterCoefficient; |
meric | 0:2a01c5a56ed1 | 344 | fnode.QD = (float)fnode.WD / timer.read(); |
meric | 0:2a01c5a56ed1 | 345 | |
meric | 0:2a01c5a56ed1 | 346 | timer.reset(); |
meric | 0:2a01c5a56ed1 | 347 | |
meric | 0:2a01c5a56ed1 | 348 | fnode.pulse = 0; |
meric | 0:2a01c5a56ed1 | 349 | fnode.pulseTransmit = 0; |
meric | 0:2a01c5a56ed1 | 350 | fnode.pulsePressureCheck = 0; |
meric | 0:2a01c5a56ed1 | 351 | |
meric | 0:2a01c5a56ed1 | 352 | fnode.WI = 0; |
meric | 0:2a01c5a56ed1 | 353 | fnode.WIC = 0; |
meric | 0:2a01c5a56ed1 | 354 | fnode.QI = 0; |
meric | 0:2a01c5a56ed1 | 355 | |
meric | 0:2a01c5a56ed1 | 356 | // Basınç alarmlarını sıfırla |
meric | 0:2a01c5a56ed1 | 357 | fnode.pressureLowError = false; |
meric | 0:2a01c5a56ed1 | 358 | fnode.pressureNormalError = false; |
meric | 0:2a01c5a56ed1 | 359 | fnode.pressureHighError = false; |
meric | 0:2a01c5a56ed1 | 360 | |
meric | 0:2a01c5a56ed1 | 361 | // Veri aktarım aralığını sulama sıklığına ayarla |
meric | 0:2a01c5a56ed1 | 362 | dataTransmitTicker.attach(&data_transmit_isr, fnode.irriTransmitInterval * 60); |
meric | 0:2a01c5a56ed1 | 363 | |
meric | 0:2a01c5a56ed1 | 364 | //Sulama başlayınca ilk sulama verisini gönder |
meric | 0:2a01c5a56ed1 | 365 | prepare_data(); |
meric | 0:2a01c5a56ed1 | 366 | if (fnode.autosend == true) { |
meric | 0:2a01c5a56ed1 | 367 | send_to_coordinator(fnode.dataBuffer); |
meric | 0:2a01c5a56ed1 | 368 | } |
meric | 0:2a01c5a56ed1 | 369 | memset(fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 370 | |
meric | 0:2a01c5a56ed1 | 371 | // Sulama başlayınca sulama başladı alarmını gönder |
meric | 0:2a01c5a56ed1 | 372 | send_alarm(IRRIGATION_STARTED, fnode.globalFlushingFilter, fnode.currentWorkingSlave); |
meric | 0:2a01c5a56ed1 | 373 | |
meric | 0:2a01c5a56ed1 | 374 | fnode.WD = 0; |
meric | 0:2a01c5a56ed1 | 375 | fnode.WDC = 0; |
meric | 0:2a01c5a56ed1 | 376 | fnode.QD = 0; |
meric | 0:2a01c5a56ed1 | 377 | |
meric | 0:2a01c5a56ed1 | 378 | // Periyodik yıkama süresini yeniden başlat |
meric | 0:2a01c5a56ed1 | 379 | fnode.periodicFirstStartCounter ++; |
meric | 0:2a01c5a56ed1 | 380 | |
meric | 0:2a01c5a56ed1 | 381 | if (fnode.periodicFirstStartCounter == 1) { |
meric | 0:2a01c5a56ed1 | 382 | |
meric | 0:2a01c5a56ed1 | 383 | periodicFlushTicker.attach(&periodic_flush_isr, 1); |
meric | 0:2a01c5a56ed1 | 384 | fnode.periodicFlushCounter = 0; |
meric | 0:2a01c5a56ed1 | 385 | |
meric | 0:2a01c5a56ed1 | 386 | } else if (fnode.periodicFirstStartCounter > 1) { |
meric | 0:2a01c5a56ed1 | 387 | |
meric | 0:2a01c5a56ed1 | 388 | fnode.periodicFirstStartCounter = 2; |
meric | 0:2a01c5a56ed1 | 389 | |
meric | 0:2a01c5a56ed1 | 390 | if (fnode.periodicFlushCounter >= fnode.periodicFlushInterval * 60 * 60) { |
meric | 0:2a01c5a56ed1 | 391 | |
meric | 0:2a01c5a56ed1 | 392 | fnode.periodicFlushCounter = 0; |
meric | 0:2a01c5a56ed1 | 393 | periodicFlushTicker.attach(&periodic_flush_isr, 1); |
meric | 0:2a01c5a56ed1 | 394 | |
meric | 0:2a01c5a56ed1 | 395 | } else { |
meric | 0:2a01c5a56ed1 | 396 | |
meric | 0:2a01c5a56ed1 | 397 | periodicFlushTicker.attach(&periodic_flush_isr, 1); |
meric | 0:2a01c5a56ed1 | 398 | |
meric | 0:2a01c5a56ed1 | 399 | } |
meric | 0:2a01c5a56ed1 | 400 | } |
meric | 0:2a01c5a56ed1 | 401 | |
meric | 0:2a01c5a56ed1 | 402 | // Min yıkama aralığını yeniden başlat |
meric | 0:2a01c5a56ed1 | 403 | fnode.minFlushCounter = 0; |
meric | 0:2a01c5a56ed1 | 404 | |
meric | 0:2a01c5a56ed1 | 405 | // Sulamanın başladığını EEPROM'a yaz |
meric | 0:2a01c5a56ed1 | 406 | eeprom_write(EEPROM_TYPE, IRRI_STATUS_ADDR, 1); |
meric | 0:2a01c5a56ed1 | 407 | |
meric | 0:2a01c5a56ed1 | 408 | } |
meric | 0:2a01c5a56ed1 | 409 | |
meric | 0:2a01c5a56ed1 | 410 | // Sulama yapılıyorsa ve sayaç mevcutsa geçen su miktarlarını sulama süresince her basınç kontrolü yapıldığında hesapla |
meric | 0:2a01c5a56ed1 | 411 | if ((fnode.systemSetup >> 3) & 1) { |
meric | 0:2a01c5a56ed1 | 412 | |
meric | 0:2a01c5a56ed1 | 413 | fnode.WIC = fnode.pulse * fnode.watermeterCoefficient; |
meric | 0:2a01c5a56ed1 | 414 | fnode.WI = fnode.pulsePressureCheck * fnode.watermeterCoefficient; |
meric | 0:2a01c5a56ed1 | 415 | fnode.QI = (float)fnode.WI / (float)fnode.pressureControlFrequency; |
meric | 0:2a01c5a56ed1 | 416 | |
meric | 0:2a01c5a56ed1 | 417 | fnode.pulsePressureCheck = 0; |
meric | 0:2a01c5a56ed1 | 418 | |
meric | 0:2a01c5a56ed1 | 419 | } |
meric | 0:2a01c5a56ed1 | 420 | |
meric | 0:2a01c5a56ed1 | 421 | // Eğer çıkış basıncı set edilen değere ulaşmışsa DP de kontrol edilir (Çıkış basıncı stabil durumda, DP kontrolü başlayacak). Ancak o an periyodik yıkama veya elle yıkama olmamaması ve ters yıkamanın kapatılmamaış olması ve iki yıkama arasındaki min sürenin geçmiş olması gerekir. |
meric | 0:2a01c5a56ed1 | 422 | if ((fnode.outletPressure >= (float)fnode.outletPressureSet / 10.0f) && fnode.flushing == false && fnode.flushEnabled == 1 && fnode.isMinTimePassed == true) { |
meric | 0:2a01c5a56ed1 | 423 | |
meric | 0:2a01c5a56ed1 | 424 | if (fnode.dpControlStarted == false) { |
meric | 0:2a01c5a56ed1 | 425 | |
meric | 0:2a01c5a56ed1 | 426 | fnode.dpControlStarted = true; |
meric | 0:2a01c5a56ed1 | 427 | |
meric | 0:2a01c5a56ed1 | 428 | fnode.globalFlushPhase = 1; |
meric | 0:2a01c5a56ed1 | 429 | fnode.currentFlushPhase = 1; |
meric | 0:2a01c5a56ed1 | 430 | fnode.globalFlushingFilter = 1; |
meric | 0:2a01c5a56ed1 | 431 | fnode.currentFlushingFilter = 1; |
meric | 0:2a01c5a56ed1 | 432 | fnode.currentWorkingSlave = 0; |
meric | 0:2a01c5a56ed1 | 433 | |
meric | 0:2a01c5a56ed1 | 434 | send_alarm(DP_CONTROL_STARTED, fnode.globalFlushingFilter, fnode.currentWorkingSlave); |
meric | 0:2a01c5a56ed1 | 435 | |
meric | 0:2a01c5a56ed1 | 436 | } |
meric | 0:2a01c5a56ed1 | 437 | |
meric | 0:2a01c5a56ed1 | 438 | // DP set edilen değerden yüksekse ve hata durumu yoksa ve ters yıkama aktiflenmişse ve o an yıkama yapılmıyorsa ve min bekleme zamanı geçmişse ters yıkamayı başlat |
meric | 0:2a01c5a56ed1 | 439 | if (fnode.dpPressure >= (float)(fnode.dpSet / 10.0f) && fnode.checkDp == true && fnode.errorOccured == false && fnode.flushEnabled == 1 && fnode.flushing == false && fnode.isMinTimePassed == true) { |
meric | 0:2a01c5a56ed1 | 440 | |
meric | 0:2a01c5a56ed1 | 441 | // Periyodik yıkama ISR'sini durdur ve sayacı sıfırla |
meric | 0:2a01c5a56ed1 | 442 | periodicFlushTicker.detach(); |
meric | 0:2a01c5a56ed1 | 443 | fnode.periodicFlushCounter = 0; |
meric | 0:2a01c5a56ed1 | 444 | |
meric | 0:2a01c5a56ed1 | 445 | fnode.isMinTimePassed = false; |
meric | 0:2a01c5a56ed1 | 446 | fnode.minFlushCounter = 0; |
meric | 0:2a01c5a56ed1 | 447 | |
meric | 0:2a01c5a56ed1 | 448 | fnode.checkDp = false; |
meric | 0:2a01c5a56ed1 | 449 | |
meric | 0:2a01c5a56ed1 | 450 | fnode.flushing = true; |
meric | 0:2a01c5a56ed1 | 451 | fnode.flushStarted = true; |
meric | 0:2a01c5a56ed1 | 452 | |
meric | 0:2a01c5a56ed1 | 453 | // Yıkama fazı 1 |
meric | 0:2a01c5a56ed1 | 454 | fnode.globalFlushPhase = 1; |
meric | 0:2a01c5a56ed1 | 455 | fnode.currentFlushPhase = 1; |
meric | 0:2a01c5a56ed1 | 456 | fnode.globalFlushingFilter = 1; |
meric | 0:2a01c5a56ed1 | 457 | fnode.currentFlushingFilter = 1; |
meric | 0:2a01c5a56ed1 | 458 | fnode.currentWorkingSlave = 0; |
meric | 0:2a01c5a56ed1 | 459 | |
meric | 0:2a01c5a56ed1 | 460 | send_alarm(BACKFLUSH_DP_STARTED, fnode.globalFlushingFilter, fnode.currentWorkingSlave); |
meric | 0:2a01c5a56ed1 | 461 | |
meric | 0:2a01c5a56ed1 | 462 | } |
meric | 0:2a01c5a56ed1 | 463 | } |
meric | 0:2a01c5a56ed1 | 464 | } |
meric | 0:2a01c5a56ed1 | 465 | } |
meric | 0:2a01c5a56ed1 | 466 | |
meric | 0:2a01c5a56ed1 | 467 | // YIKAMA FAZLARI |
meric | 0:2a01c5a56ed1 | 468 | if (fnode.currentFlushPhase == 1 && fnode.flushStarted == true) { |
meric | 0:2a01c5a56ed1 | 469 | |
meric | 0:2a01c5a56ed1 | 470 | // Ters yıkama bitirme fazı |
meric | 0:2a01c5a56ed1 | 471 | if (fnode.globalFlushPhase == fnode.lastFlushPhase) { |
meric | 0:2a01c5a56ed1 | 472 | |
meric | 0:2a01c5a56ed1 | 473 | fnode.flushStarted = false; |
meric | 0:2a01c5a56ed1 | 474 | |
meric | 0:2a01c5a56ed1 | 475 | send_alarm(BAKCFLUSH_ENDED, fnode.globalFlushingFilter, fnode.currentWorkingSlave); |
meric | 0:2a01c5a56ed1 | 476 | |
meric | 0:2a01c5a56ed1 | 477 | // DP kontrolünü yeniden başlat |
meric | 0:2a01c5a56ed1 | 478 | fnode.checkDp = true; |
meric | 0:2a01c5a56ed1 | 479 | fnode.flushing = false; |
meric | 0:2a01c5a56ed1 | 480 | fnode.dpControlStarted = false; |
meric | 0:2a01c5a56ed1 | 481 | |
meric | 0:2a01c5a56ed1 | 482 | // Yıkama bitti |
meric | 0:2a01c5a56ed1 | 483 | // Sulama varsa periyodik sayaç resetlenir ve devam eder |
meric | 0:2a01c5a56ed1 | 484 | // Sulama yoksa periyodik sayaç pause moduna alınır |
meric | 0:2a01c5a56ed1 | 485 | |
meric | 0:2a01c5a56ed1 | 486 | if (fnode.irrigation == true) { |
meric | 0:2a01c5a56ed1 | 487 | |
meric | 0:2a01c5a56ed1 | 488 | fnode.periodicFlushCounter = 0; |
meric | 0:2a01c5a56ed1 | 489 | periodicFlushTicker.attach(&periodic_flush_isr, 1); |
meric | 0:2a01c5a56ed1 | 490 | |
meric | 0:2a01c5a56ed1 | 491 | } else { |
meric | 0:2a01c5a56ed1 | 492 | |
meric | 0:2a01c5a56ed1 | 493 | periodicFlushTicker.detach(); |
meric | 0:2a01c5a56ed1 | 494 | |
meric | 0:2a01c5a56ed1 | 495 | } |
meric | 0:2a01c5a56ed1 | 496 | |
meric | 0:2a01c5a56ed1 | 497 | // Yıkama bittiği için min yıkama süresi sayacını etkinleştir |
meric | 0:2a01c5a56ed1 | 498 | fnode.minFlushCounter = 0; |
meric | 0:2a01c5a56ed1 | 499 | fnode.isMinTimePassed = false; |
meric | 0:2a01c5a56ed1 | 500 | |
meric | 0:2a01c5a56ed1 | 501 | if (fnode.irrigation == true) { |
meric | 0:2a01c5a56ed1 | 502 | |
meric | 0:2a01c5a56ed1 | 503 | minFlushTicker.attach(&min_flush_interval_isr, 1); |
meric | 0:2a01c5a56ed1 | 504 | |
meric | 0:2a01c5a56ed1 | 505 | } else { |
meric | 0:2a01c5a56ed1 | 506 | |
meric | 0:2a01c5a56ed1 | 507 | minFlushTicker.detach(); |
meric | 0:2a01c5a56ed1 | 508 | |
meric | 0:2a01c5a56ed1 | 509 | } |
meric | 0:2a01c5a56ed1 | 510 | |
meric | 0:2a01c5a56ed1 | 511 | } else { |
meric | 0:2a01c5a56ed1 | 512 | |
meric | 0:2a01c5a56ed1 | 513 | fnode.flushStarted = false; |
meric | 0:2a01c5a56ed1 | 514 | fnode.flowControl = false; |
meric | 0:2a01c5a56ed1 | 515 | |
meric | 0:2a01c5a56ed1 | 516 | // SOLENOIDLER ACIK |
meric | 0:2a01c5a56ed1 | 517 | if (open_solenoid(FILTER_MAIN_SOLENOID) == false) { |
meric | 0:2a01c5a56ed1 | 518 | |
meric | 0:2a01c5a56ed1 | 519 | // ALARM |
meric | 0:2a01c5a56ed1 | 520 | } |
meric | 0:2a01c5a56ed1 | 521 | |
meric | 0:2a01c5a56ed1 | 522 | if (send_command(fnode.currentWorkingSlave, OPEN_SOLENOID, fnode.currentFlushingFilter) == false) { |
meric | 0:2a01c5a56ed1 | 523 | |
meric | 0:2a01c5a56ed1 | 524 | // SEND ERROR ALARM |
meric | 0:2a01c5a56ed1 | 525 | |
meric | 0:2a01c5a56ed1 | 526 | } else { |
meric | 0:2a01c5a56ed1 | 527 | |
meric | 0:2a01c5a56ed1 | 528 | send_alarm(FILTER_FLUSH_STARTED, fnode.globalFlushingFilter, fnode.currentWorkingSlave); |
meric | 0:2a01c5a56ed1 | 529 | |
meric | 0:2a01c5a56ed1 | 530 | } |
meric | 0:2a01c5a56ed1 | 531 | |
meric | 0:2a01c5a56ed1 | 532 | // Faz 2'yi zamanla |
meric | 0:2a01c5a56ed1 | 533 | flushTimer.attach(&flush_phase_isr, (float)fnode.flowControlLatency); |
meric | 0:2a01c5a56ed1 | 534 | } |
meric | 0:2a01c5a56ed1 | 535 | |
meric | 0:2a01c5a56ed1 | 536 | |
meric | 0:2a01c5a56ed1 | 537 | } else if (fnode.currentFlushPhase == 2 && fnode.flushStarted == true) { |
meric | 0:2a01c5a56ed1 | 538 | |
meric | 0:2a01c5a56ed1 | 539 | fnode.flushStarted = false; |
meric | 0:2a01c5a56ed1 | 540 | fnode.flowControl = true; |
meric | 0:2a01c5a56ed1 | 541 | |
meric | 0:2a01c5a56ed1 | 542 | // Faz 3'ü zamanla |
meric | 0:2a01c5a56ed1 | 543 | flushTimer.attach(&flush_phase_isr, (float)(fnode.flushDuration - fnode.flowControlLatency)); |
meric | 0:2a01c5a56ed1 | 544 | |
meric | 0:2a01c5a56ed1 | 545 | } else if (fnode.currentFlushPhase == 3 && fnode.flushStarted == true) { |
meric | 0:2a01c5a56ed1 | 546 | |
meric | 0:2a01c5a56ed1 | 547 | fnode.flushStarted = false; |
meric | 0:2a01c5a56ed1 | 548 | fnode.flowControl = false; |
meric | 0:2a01c5a56ed1 | 549 | |
meric | 0:2a01c5a56ed1 | 550 | // SOLENOIDLER KAPALI |
meric | 0:2a01c5a56ed1 | 551 | if (close_solenoid(FILTER_MAIN_SOLENOID) == false) { |
meric | 0:2a01c5a56ed1 | 552 | |
meric | 0:2a01c5a56ed1 | 553 | // ALARM |
meric | 0:2a01c5a56ed1 | 554 | } |
meric | 0:2a01c5a56ed1 | 555 | |
meric | 0:2a01c5a56ed1 | 556 | if (send_command(fnode.currentWorkingSlave, CLOSE_SOLENOID, fnode.currentFlushingFilter) == false) { |
meric | 0:2a01c5a56ed1 | 557 | |
meric | 0:2a01c5a56ed1 | 558 | // SEND ERROR ALARM |
meric | 0:2a01c5a56ed1 | 559 | |
meric | 0:2a01c5a56ed1 | 560 | } else { |
meric | 0:2a01c5a56ed1 | 561 | |
meric | 0:2a01c5a56ed1 | 562 | send_alarm(FILTER_FLUSH_ENDED, fnode.globalFlushingFilter, fnode.currentWorkingSlave); |
meric | 0:2a01c5a56ed1 | 563 | |
meric | 0:2a01c5a56ed1 | 564 | } |
meric | 0:2a01c5a56ed1 | 565 | |
meric | 0:2a01c5a56ed1 | 566 | // Faz 4'ü zamanla |
meric | 0:2a01c5a56ed1 | 567 | flushTimer.attach(&flush_phase_isr, (float)fnode.flowControlLatency); |
meric | 0:2a01c5a56ed1 | 568 | |
meric | 0:2a01c5a56ed1 | 569 | } else if (fnode.currentFlushPhase == 4 && fnode.flushStarted == true) { |
meric | 0:2a01c5a56ed1 | 570 | |
meric | 0:2a01c5a56ed1 | 571 | fnode.flushStarted = false; |
meric | 0:2a01c5a56ed1 | 572 | fnode.flowControl = true; |
meric | 0:2a01c5a56ed1 | 573 | |
meric | 0:2a01c5a56ed1 | 574 | // Sonraki ya da son fazı zamanla |
meric | 0:2a01c5a56ed1 | 575 | flushTimer.attach(&flush_phase_isr, (float)(fnode.flushInterval - fnode.flowControlLatency)); |
meric | 0:2a01c5a56ed1 | 576 | } |
meric | 0:2a01c5a56ed1 | 577 | |
meric | 0:2a01c5a56ed1 | 578 | |
meric | 0:2a01c5a56ed1 | 579 | |
meric | 0:2a01c5a56ed1 | 580 | // AKIŞ SENSÖRÜ KONTROLÜ |
meric | 0:2a01c5a56ed1 | 581 | // YIKAMA SIRASINDA |
meric | 0:2a01c5a56ed1 | 582 | // Filtre yıkanırken AKIŞ YOK hatası: |
meric | 0:2a01c5a56ed1 | 583 | if (fnode.currentFlushPhase == 2 && flowSensor.read() == 0 && fnode.flowControl == true) { |
meric | 0:2a01c5a56ed1 | 584 | |
meric | 0:2a01c5a56ed1 | 585 | // Eğer hata olduğunda ters yıkama duracaksa |
meric | 0:2a01c5a56ed1 | 586 | if (fnode.onErrorStop == 1) { |
meric | 0:2a01c5a56ed1 | 587 | |
meric | 0:2a01c5a56ed1 | 588 | fnode.flowControl = false; |
meric | 0:2a01c5a56ed1 | 589 | |
meric | 0:2a01c5a56ed1 | 590 | // Faz zamanlayıcısını kapat |
meric | 0:2a01c5a56ed1 | 591 | flushTimer.detach(); |
meric | 0:2a01c5a56ed1 | 592 | |
meric | 0:2a01c5a56ed1 | 593 | fnode.errorOccured = true; |
meric | 0:2a01c5a56ed1 | 594 | fnode.flushing = false; |
meric | 0:2a01c5a56ed1 | 595 | |
meric | 0:2a01c5a56ed1 | 596 | // SOLENOIDLER KAPALI |
meric | 0:2a01c5a56ed1 | 597 | if (close_solenoid(FILTER_MAIN_SOLENOID) == false) { |
meric | 0:2a01c5a56ed1 | 598 | |
meric | 0:2a01c5a56ed1 | 599 | // ALARM |
meric | 0:2a01c5a56ed1 | 600 | } |
meric | 0:2a01c5a56ed1 | 601 | |
meric | 0:2a01c5a56ed1 | 602 | |
meric | 0:2a01c5a56ed1 | 603 | if (send_command(fnode.currentWorkingSlave, CLOSE_SOLENOID, fnode.currentFlushingFilter) == false) { |
meric | 0:2a01c5a56ed1 | 604 | |
meric | 0:2a01c5a56ed1 | 605 | |
meric | 0:2a01c5a56ed1 | 606 | } else { |
meric | 0:2a01c5a56ed1 | 607 | |
meric | 0:2a01c5a56ed1 | 608 | send_alarm(NO_FLOW_DURING_FLUSH, fnode.globalFlushingFilter, fnode.currentWorkingSlave); |
meric | 0:2a01c5a56ed1 | 609 | |
meric | 0:2a01c5a56ed1 | 610 | } |
meric | 0:2a01c5a56ed1 | 611 | |
meric | 0:2a01c5a56ed1 | 612 | fnode.globalFlushPhase = 0; |
meric | 0:2a01c5a56ed1 | 613 | fnode.currentFlushPhase = 0; |
meric | 0:2a01c5a56ed1 | 614 | fnode.globalFlushingFilter = 0; |
meric | 0:2a01c5a56ed1 | 615 | fnode.currentFlushingFilter = 0; |
meric | 0:2a01c5a56ed1 | 616 | fnode.currentWorkingSlave = 0; |
meric | 0:2a01c5a56ed1 | 617 | |
meric | 0:2a01c5a56ed1 | 618 | // Yıkama bittiği için periyodik yıkama sayacını aktifleştir. |
meric | 0:2a01c5a56ed1 | 619 | fnode.periodicFlushCounter = 0; |
meric | 0:2a01c5a56ed1 | 620 | periodicFlushTicker.attach(&periodic_flush_isr, 1); |
meric | 0:2a01c5a56ed1 | 621 | |
meric | 0:2a01c5a56ed1 | 622 | } else { |
meric | 0:2a01c5a56ed1 | 623 | |
meric | 0:2a01c5a56ed1 | 624 | fnode.flowControl = false; |
meric | 0:2a01c5a56ed1 | 625 | |
meric | 0:2a01c5a56ed1 | 626 | // Filtre yıkaması sırasında akış yok hatası |
meric | 0:2a01c5a56ed1 | 627 | send_alarm(NO_FLOW_DURING_FLUSH, fnode.globalFlushingFilter, fnode.currentWorkingSlave); |
meric | 0:2a01c5a56ed1 | 628 | |
meric | 0:2a01c5a56ed1 | 629 | } |
meric | 0:2a01c5a56ed1 | 630 | |
meric | 0:2a01c5a56ed1 | 631 | |
meric | 0:2a01c5a56ed1 | 632 | //----------------------------------------------------------------------------// |
meric | 0:2a01c5a56ed1 | 633 | // YIKAMA SONRASINDA |
meric | 0:2a01c5a56ed1 | 634 | // Filtre yıkaması arasında AKIŞ VAR hatası: |
meric | 0:2a01c5a56ed1 | 635 | } else if (fnode.currentFlushPhase == 4 && flowSensor.read() == 1 && fnode.flowControl == true) { |
meric | 0:2a01c5a56ed1 | 636 | |
meric | 0:2a01c5a56ed1 | 637 | // Eğer hata olduğunda ters yıkama duracaksa |
meric | 0:2a01c5a56ed1 | 638 | if (fnode.onErrorStop == 1) { |
meric | 0:2a01c5a56ed1 | 639 | |
meric | 0:2a01c5a56ed1 | 640 | fnode.flowControl = false; |
meric | 0:2a01c5a56ed1 | 641 | |
meric | 0:2a01c5a56ed1 | 642 | // Faz zamanlayıcısını kapat |
meric | 0:2a01c5a56ed1 | 643 | flushTimer.detach(); |
meric | 0:2a01c5a56ed1 | 644 | |
meric | 0:2a01c5a56ed1 | 645 | fnode.errorOccured = true; |
meric | 0:2a01c5a56ed1 | 646 | fnode.flushing = false; |
meric | 0:2a01c5a56ed1 | 647 | |
meric | 0:2a01c5a56ed1 | 648 | // 1. ve ana solenoid Faz 4'de kapatıldığı için kapatmaya gerek yok. |
meric | 0:2a01c5a56ed1 | 649 | |
meric | 0:2a01c5a56ed1 | 650 | send_alarm(FLOW_DURING_FLUSH, fnode.globalFlushingFilter, fnode.currentWorkingSlave); |
meric | 0:2a01c5a56ed1 | 651 | |
meric | 0:2a01c5a56ed1 | 652 | fnode.globalFlushPhase = 0; |
meric | 0:2a01c5a56ed1 | 653 | fnode.currentFlushPhase = 0; |
meric | 0:2a01c5a56ed1 | 654 | fnode.globalFlushingFilter = 0; |
meric | 0:2a01c5a56ed1 | 655 | fnode.currentFlushingFilter = 0; |
meric | 0:2a01c5a56ed1 | 656 | fnode.currentWorkingSlave = 0; |
meric | 0:2a01c5a56ed1 | 657 | |
meric | 0:2a01c5a56ed1 | 658 | // Yıkama bittiği için periyodik yıkama sayacını aktifleştir. |
meric | 0:2a01c5a56ed1 | 659 | fnode.periodicFlushCounter = 0; |
meric | 0:2a01c5a56ed1 | 660 | periodicFlushTicker.attach(&periodic_flush_isr, 1); |
meric | 0:2a01c5a56ed1 | 661 | |
meric | 0:2a01c5a56ed1 | 662 | } else { |
meric | 0:2a01c5a56ed1 | 663 | |
meric | 0:2a01c5a56ed1 | 664 | fnode.flowControl = false; |
meric | 0:2a01c5a56ed1 | 665 | |
meric | 0:2a01c5a56ed1 | 666 | // Filtre yıkaması arasında akış var hatası |
meric | 0:2a01c5a56ed1 | 667 | send_alarm(FLOW_DURING_FLUSH, fnode.globalFlushingFilter, fnode.currentWorkingSlave); |
meric | 0:2a01c5a56ed1 | 668 | |
meric | 0:2a01c5a56ed1 | 669 | } |
meric | 0:2a01c5a56ed1 | 670 | } |
meric | 0:2a01c5a56ed1 | 671 | |
meric | 0:2a01c5a56ed1 | 672 | |
meric | 0:2a01c5a56ed1 | 673 | // WSN Komutlarının İşlenmesi |
meric | 0:2a01c5a56ed1 | 674 | if (fnode.rfInterruptComplete == true) { |
meric | 0:2a01c5a56ed1 | 675 | |
meric | 0:2a01c5a56ed1 | 676 | // FENABLE |
meric | 0:2a01c5a56ed1 | 677 | if (strncmp (fnode.rfBuffer, fenable_command, 7) == 0) { |
meric | 0:2a01c5a56ed1 | 678 | |
meric | 0:2a01c5a56ed1 | 679 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 680 | |
meric | 0:2a01c5a56ed1 | 681 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 682 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 683 | |
meric | 0:2a01c5a56ed1 | 684 | process_command(FENABLE); |
meric | 0:2a01c5a56ed1 | 685 | |
meric | 0:2a01c5a56ed1 | 686 | // FDISABLE |
meric | 0:2a01c5a56ed1 | 687 | } else if (strncmp (fnode.rfBuffer, fdisable_command, 8) == 0) { |
meric | 0:2a01c5a56ed1 | 688 | |
meric | 0:2a01c5a56ed1 | 689 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 690 | |
meric | 0:2a01c5a56ed1 | 691 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 692 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 693 | |
meric | 0:2a01c5a56ed1 | 694 | process_command(FDISABLE); |
meric | 0:2a01c5a56ed1 | 695 | |
meric | 0:2a01c5a56ed1 | 696 | // FSETSYS |
meric | 0:2a01c5a56ed1 | 697 | } else if (strncmp (fnode.rfBuffer, fsetsys_command, 7) == 0) { |
meric | 0:2a01c5a56ed1 | 698 | |
meric | 0:2a01c5a56ed1 | 699 | sscanf (fnode.rfBuffer,"%s%hhd%hhd%hhd%hhd%hd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hhd%hd%hhd", fnode.str, &fnode.systemSetup, &fnode.autosendStatus, &fnode.irriTransmitInterval, &fnode.dryTransmitInterval, &fnode.watermeterCoefficient, &fnode.pMax, &fnode.pressureSensorType, &fnode.dpSet, &fnode.pressureControlFrequency, &fnode.flushDuration, &fnode.flushInterval, &fnode.flowControlLatency, &fnode.flushEnabled, &fnode.pressureSensorPosition, &fnode.onErrorStop, &fnode.pressureLowThreshold, &fnode.pressureHighThreshold, &fnode.alarmsEnabled, &fnode.dpThreshold, &fnode.inletPressureSet, &fnode.outletPressureSet, &fnode.periodicFlushInterval, &fnode.minFlushInterval, &fnode.filterNumber); |
meric | 0:2a01c5a56ed1 | 700 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 701 | memset (fnode.str, 0, sizeof(fnode.str)); |
meric | 0:2a01c5a56ed1 | 702 | |
meric | 0:2a01c5a56ed1 | 703 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 704 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 705 | |
meric | 0:2a01c5a56ed1 | 706 | process_command(FSETSYS); |
meric | 0:2a01c5a56ed1 | 707 | |
meric | 0:2a01c5a56ed1 | 708 | // FGETCFG |
meric | 0:2a01c5a56ed1 | 709 | } else if (strncmp(fnode.rfBuffer, fgetcfg_command, 7) == 0) { |
meric | 0:2a01c5a56ed1 | 710 | |
meric | 0:2a01c5a56ed1 | 711 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 712 | |
meric | 0:2a01c5a56ed1 | 713 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 714 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 715 | |
meric | 0:2a01c5a56ed1 | 716 | process_command(FGETCFG); |
meric | 0:2a01c5a56ed1 | 717 | |
meric | 0:2a01c5a56ed1 | 718 | // FREAD |
meric | 0:2a01c5a56ed1 | 719 | } else if (strncmp(fnode.rfBuffer, fread_command, 5) == 0) { |
meric | 0:2a01c5a56ed1 | 720 | |
meric | 0:2a01c5a56ed1 | 721 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 722 | |
meric | 0:2a01c5a56ed1 | 723 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 724 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 725 | |
meric | 0:2a01c5a56ed1 | 726 | process_command(FREAD); |
meric | 0:2a01c5a56ed1 | 727 | |
meric | 0:2a01c5a56ed1 | 728 | // FFIX |
meric | 0:2a01c5a56ed1 | 729 | } else if (strncmp(fnode.rfBuffer, ffix_command, 4) == 0) { |
meric | 0:2a01c5a56ed1 | 730 | |
meric | 0:2a01c5a56ed1 | 731 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 732 | |
meric | 0:2a01c5a56ed1 | 733 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 734 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 735 | |
meric | 0:2a01c5a56ed1 | 736 | process_command(FFIX); |
meric | 0:2a01c5a56ed1 | 737 | |
meric | 0:2a01c5a56ed1 | 738 | // FTEST |
meric | 0:2a01c5a56ed1 | 739 | } else if (strncmp(fnode.rfBuffer, ftest_command, 5) == 0) { |
meric | 0:2a01c5a56ed1 | 740 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 741 | |
meric | 0:2a01c5a56ed1 | 742 | sprintf(fnode.dataBuffer, "%s", "{CMD:\"FTESTOK\"}"); |
meric | 0:2a01c5a56ed1 | 743 | send_to_coordinator(fnode.dataBuffer); |
meric | 0:2a01c5a56ed1 | 744 | memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 745 | |
meric | 0:2a01c5a56ed1 | 746 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 747 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 748 | |
meric | 0:2a01c5a56ed1 | 749 | // FRESET komutu |
meric | 0:2a01c5a56ed1 | 750 | } else if (strncmp(fnode.rfBuffer, freset_command, 6) == 0) { |
meric | 0:2a01c5a56ed1 | 751 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 752 | |
meric | 0:2a01c5a56ed1 | 753 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 754 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 755 | |
meric | 0:2a01c5a56ed1 | 756 | if (fnode.irrigation == true) { |
meric | 0:2a01c5a56ed1 | 757 | |
meric | 0:2a01c5a56ed1 | 758 | eeprom_write(EEPROM_TYPE, IRRI_STATUS_ADDR, 1); |
meric | 0:2a01c5a56ed1 | 759 | |
meric | 0:2a01c5a56ed1 | 760 | } else { |
meric | 0:2a01c5a56ed1 | 761 | |
meric | 0:2a01c5a56ed1 | 762 | eeprom_write(EEPROM_TYPE, IRRI_STATUS_ADDR, 0); |
meric | 0:2a01c5a56ed1 | 763 | |
meric | 0:2a01c5a56ed1 | 764 | } |
meric | 0:2a01c5a56ed1 | 765 | |
meric | 0:2a01c5a56ed1 | 766 | if (fnode.autosend == true) { |
meric | 0:2a01c5a56ed1 | 767 | |
meric | 0:2a01c5a56ed1 | 768 | eeprom_write(EEPROM_TYPE, AUTOSEND_STATUS_ADDR, 1); |
meric | 0:2a01c5a56ed1 | 769 | |
meric | 0:2a01c5a56ed1 | 770 | } else { |
meric | 0:2a01c5a56ed1 | 771 | |
meric | 0:2a01c5a56ed1 | 772 | eeprom_write(EEPROM_TYPE, AUTOSEND_STATUS_ADDR, 0); |
meric | 0:2a01c5a56ed1 | 773 | |
meric | 0:2a01c5a56ed1 | 774 | } |
meric | 0:2a01c5a56ed1 | 775 | |
meric | 0:2a01c5a56ed1 | 776 | sprintf(fnode.dataBuffer, "%s", "{CMD:\"FRESETOK\"}"); |
meric | 0:2a01c5a56ed1 | 777 | send_to_coordinator(fnode.dataBuffer); |
meric | 0:2a01c5a56ed1 | 778 | memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 779 | |
meric | 0:2a01c5a56ed1 | 780 | wait(1); |
meric | 0:2a01c5a56ed1 | 781 | NVIC_SystemReset(); |
meric | 0:2a01c5a56ed1 | 782 | |
meric | 0:2a01c5a56ed1 | 783 | // FCLEAR |
meric | 0:2a01c5a56ed1 | 784 | } else if (strncmp(fnode.rfBuffer, fclear_command, 6) == 0) { |
meric | 0:2a01c5a56ed1 | 785 | |
meric | 0:2a01c5a56ed1 | 786 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 787 | |
meric | 0:2a01c5a56ed1 | 788 | bool eepromOk = true; |
meric | 0:2a01c5a56ed1 | 789 | |
meric | 0:2a01c5a56ed1 | 790 | for (uint16_t i = 0; i < 60; i++) { |
meric | 0:2a01c5a56ed1 | 791 | |
meric | 0:2a01c5a56ed1 | 792 | eeprom_write(EEPROM_TYPE, i, 0xFF); |
meric | 0:2a01c5a56ed1 | 793 | |
meric | 0:2a01c5a56ed1 | 794 | } |
meric | 0:2a01c5a56ed1 | 795 | |
meric | 0:2a01c5a56ed1 | 796 | for (uint16_t i = 0; i < 60; i++) { |
meric | 0:2a01c5a56ed1 | 797 | |
meric | 0:2a01c5a56ed1 | 798 | if (eeprom_read(EEPROM_TYPE, i) != 0xFF) { |
meric | 0:2a01c5a56ed1 | 799 | |
meric | 0:2a01c5a56ed1 | 800 | eepromOk = false; |
meric | 0:2a01c5a56ed1 | 801 | |
meric | 0:2a01c5a56ed1 | 802 | } |
meric | 0:2a01c5a56ed1 | 803 | } |
meric | 0:2a01c5a56ed1 | 804 | |
meric | 0:2a01c5a56ed1 | 805 | if (eepromOk == true) { |
meric | 0:2a01c5a56ed1 | 806 | |
meric | 0:2a01c5a56ed1 | 807 | sprintf(fnode.dataBuffer, "%s", "{CMD:\"FCLEAROK\"}"); |
meric | 0:2a01c5a56ed1 | 808 | |
meric | 0:2a01c5a56ed1 | 809 | } else { |
meric | 0:2a01c5a56ed1 | 810 | |
meric | 0:2a01c5a56ed1 | 811 | sprintf(fnode.dataBuffer, "%s", "{CMD:\"FCLEARERR\"}"); |
meric | 0:2a01c5a56ed1 | 812 | |
meric | 0:2a01c5a56ed1 | 813 | } |
meric | 0:2a01c5a56ed1 | 814 | |
meric | 0:2a01c5a56ed1 | 815 | send_to_coordinator(fnode.dataBuffer); |
meric | 0:2a01c5a56ed1 | 816 | memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 817 | |
meric | 0:2a01c5a56ed1 | 818 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 819 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 820 | |
meric | 0:2a01c5a56ed1 | 821 | // FGETSTATUS |
meric | 0:2a01c5a56ed1 | 822 | } else if (strncmp(fnode.rfBuffer, fgetstatus_command, 10) == 0) { |
meric | 0:2a01c5a56ed1 | 823 | |
meric | 0:2a01c5a56ed1 | 824 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 825 | |
meric | 0:2a01c5a56ed1 | 826 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 827 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 828 | |
meric | 0:2a01c5a56ed1 | 829 | process_command(FGETSTATUS); |
meric | 0:2a01c5a56ed1 | 830 | |
meric | 0:2a01c5a56ed1 | 831 | // FFGETSTAT |
meric | 0:2a01c5a56ed1 | 832 | } else if (strncmp(fnode.rfBuffer, ffgetstat_command, 9) == 0) { |
meric | 0:2a01c5a56ed1 | 833 | |
meric | 0:2a01c5a56ed1 | 834 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 835 | |
meric | 0:2a01c5a56ed1 | 836 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 837 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 838 | |
meric | 0:2a01c5a56ed1 | 839 | process_command(FFGETSTAT); |
meric | 0:2a01c5a56ed1 | 840 | |
meric | 0:2a01c5a56ed1 | 841 | // FGETFSTATUS |
meric | 0:2a01c5a56ed1 | 842 | } else if (strncmp(fnode.rfBuffer, fgetfstatus_command, 11) == 0) { |
meric | 0:2a01c5a56ed1 | 843 | |
meric | 0:2a01c5a56ed1 | 844 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 845 | |
meric | 0:2a01c5a56ed1 | 846 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 847 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 848 | |
meric | 0:2a01c5a56ed1 | 849 | process_command(FGETFSTATUS); |
meric | 0:2a01c5a56ed1 | 850 | |
meric | 0:2a01c5a56ed1 | 851 | // FLUSHNOW |
meric | 0:2a01c5a56ed1 | 852 | } else if (strncmp(fnode.rfBuffer, fflushnow_command, 9) == 0) { |
meric | 0:2a01c5a56ed1 | 853 | |
meric | 0:2a01c5a56ed1 | 854 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 855 | |
meric | 0:2a01c5a56ed1 | 856 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 857 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 858 | |
meric | 0:2a01c5a56ed1 | 859 | process_command(FLUSHNOW); |
meric | 0:2a01c5a56ed1 | 860 | |
meric | 0:2a01c5a56ed1 | 861 | // FRTON |
meric | 0:2a01c5a56ed1 | 862 | } else if (strncmp(fnode.rfBuffer, frton_command, 5) == 0) { |
meric | 0:2a01c5a56ed1 | 863 | |
meric | 0:2a01c5a56ed1 | 864 | if(fnode.rtActive == false) { |
meric | 0:2a01c5a56ed1 | 865 | |
meric | 0:2a01c5a56ed1 | 866 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 867 | sprintf(fnode.dataBuffer, "%s", "{CMD:\"FRTONOK\"}"); |
meric | 0:2a01c5a56ed1 | 868 | send_to_coordinator(fnode.dataBuffer); |
meric | 0:2a01c5a56ed1 | 869 | memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 870 | |
meric | 0:2a01c5a56ed1 | 871 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 872 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 873 | |
meric | 0:2a01c5a56ed1 | 874 | fnode.rtCounter = 0; |
meric | 0:2a01c5a56ed1 | 875 | fnode.rtActive = true; |
meric | 0:2a01c5a56ed1 | 876 | |
meric | 0:2a01c5a56ed1 | 877 | fnode.rtPulseFirst = fnode.pulse; |
meric | 0:2a01c5a56ed1 | 878 | |
meric | 0:2a01c5a56ed1 | 879 | rtDataTransmitTicker.attach(&rt_data_transmit_isr, RT_DATA_TRANSMIT_INTERVAL); |
meric | 0:2a01c5a56ed1 | 880 | |
meric | 0:2a01c5a56ed1 | 881 | } else { |
meric | 0:2a01c5a56ed1 | 882 | |
meric | 0:2a01c5a56ed1 | 883 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 884 | sprintf(fnode.dataBuffer, "%s", "{CMD:\"FRTONERROR\"}"); |
meric | 0:2a01c5a56ed1 | 885 | send_to_coordinator(fnode.dataBuffer); |
meric | 0:2a01c5a56ed1 | 886 | memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 887 | |
meric | 0:2a01c5a56ed1 | 888 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 889 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 890 | |
meric | 0:2a01c5a56ed1 | 891 | } |
meric | 0:2a01c5a56ed1 | 892 | |
meric | 0:2a01c5a56ed1 | 893 | // FRTOFF |
meric | 0:2a01c5a56ed1 | 894 | } else if (strncmp(fnode.rfBuffer, frtoff_command, 6) == 0) { |
meric | 0:2a01c5a56ed1 | 895 | |
meric | 0:2a01c5a56ed1 | 896 | if (fnode.rtActive == true) { |
meric | 0:2a01c5a56ed1 | 897 | |
meric | 0:2a01c5a56ed1 | 898 | rtDataTransmitTicker.detach(); |
meric | 0:2a01c5a56ed1 | 899 | |
meric | 0:2a01c5a56ed1 | 900 | fnode.rtCounter = 0; |
meric | 0:2a01c5a56ed1 | 901 | fnode.rtActive = false; |
meric | 0:2a01c5a56ed1 | 902 | |
meric | 0:2a01c5a56ed1 | 903 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 904 | sprintf(fnode.dataBuffer, "%s", "{CMD:\"FRTOFFOK\"}"); |
meric | 0:2a01c5a56ed1 | 905 | send_to_coordinator(fnode.dataBuffer); |
meric | 0:2a01c5a56ed1 | 906 | memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 907 | |
meric | 0:2a01c5a56ed1 | 908 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 909 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 910 | |
meric | 0:2a01c5a56ed1 | 911 | } else { |
meric | 0:2a01c5a56ed1 | 912 | |
meric | 0:2a01c5a56ed1 | 913 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 914 | sprintf(fnode.dataBuffer, "%s", "{CMD:\"FRTOFFERROR\"}"); |
meric | 0:2a01c5a56ed1 | 915 | send_to_coordinator(fnode.dataBuffer); |
meric | 0:2a01c5a56ed1 | 916 | memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 917 | |
meric | 0:2a01c5a56ed1 | 918 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 919 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 920 | |
meric | 0:2a01c5a56ed1 | 921 | } |
meric | 0:2a01c5a56ed1 | 922 | |
meric | 0:2a01c5a56ed1 | 923 | // GETFRTSTATUS |
meric | 0:2a01c5a56ed1 | 924 | } else if (strncmp(fnode.rfBuffer, getfrtstatus_command, 12) == 0) { |
meric | 0:2a01c5a56ed1 | 925 | |
meric | 0:2a01c5a56ed1 | 926 | if (fnode.rtActive == true) { |
meric | 0:2a01c5a56ed1 | 927 | |
meric | 0:2a01c5a56ed1 | 928 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 929 | sprintf(fnode.dataBuffer, "%s", "{CMD:\"GETFRTSTATUS\",STAT:\"ACTIVE\"}"); |
meric | 0:2a01c5a56ed1 | 930 | send_to_coordinator(fnode.dataBuffer); |
meric | 0:2a01c5a56ed1 | 931 | memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 932 | |
meric | 0:2a01c5a56ed1 | 933 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 934 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 935 | |
meric | 0:2a01c5a56ed1 | 936 | } else { |
meric | 0:2a01c5a56ed1 | 937 | |
meric | 0:2a01c5a56ed1 | 938 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 939 | sprintf(fnode.dataBuffer, "%s", "{CMD:\"GETFRTSTATUS\",STAT:\"PASSIVE\"}"); |
meric | 0:2a01c5a56ed1 | 940 | send_to_coordinator(fnode.dataBuffer); |
meric | 0:2a01c5a56ed1 | 941 | memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 942 | |
meric | 0:2a01c5a56ed1 | 943 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 944 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 945 | |
meric | 0:2a01c5a56ed1 | 946 | } |
meric | 0:2a01c5a56ed1 | 947 | |
meric | 0:2a01c5a56ed1 | 948 | // SELTESTON |
meric | 0:2a01c5a56ed1 | 949 | } else if (strncmp(fnode.rfBuffer, selteston_command, 9) == 0) { |
meric | 0:2a01c5a56ed1 | 950 | |
meric | 0:2a01c5a56ed1 | 951 | sscanf (fnode.rfBuffer,"%s%hhd%hhd", fnode.str, &fnode.testid, &fnode.testFilterNo); |
meric | 0:2a01c5a56ed1 | 952 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 953 | memset (fnode.str, 0, sizeof(fnode.str)); |
meric | 0:2a01c5a56ed1 | 954 | |
meric | 0:2a01c5a56ed1 | 955 | if (send_command(fnode.testid, TEST_OPEN_SOLENOID, fnode.testFilterNo) == true) { |
meric | 0:2a01c5a56ed1 | 956 | |
meric | 0:2a01c5a56ed1 | 957 | sprintf(fnode.dataBuffer, "%s", "{CMD:\"SELTESTONOK\"}"); |
meric | 0:2a01c5a56ed1 | 958 | send_to_coordinator(fnode.dataBuffer); |
meric | 0:2a01c5a56ed1 | 959 | memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 960 | |
meric | 0:2a01c5a56ed1 | 961 | } else { |
meric | 0:2a01c5a56ed1 | 962 | |
meric | 0:2a01c5a56ed1 | 963 | sprintf(fnode.dataBuffer, "%s", "{CMD:\"SELTESTONERROR\"}"); |
meric | 0:2a01c5a56ed1 | 964 | send_to_coordinator(fnode.dataBuffer); |
meric | 0:2a01c5a56ed1 | 965 | memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 966 | } |
meric | 0:2a01c5a56ed1 | 967 | |
meric | 0:2a01c5a56ed1 | 968 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 969 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 970 | |
meric | 0:2a01c5a56ed1 | 971 | // SELTESTOFF |
meric | 0:2a01c5a56ed1 | 972 | } else if (strncmp(fnode.rfBuffer, seltestoff_command, 10) == 0) { |
meric | 0:2a01c5a56ed1 | 973 | |
meric | 0:2a01c5a56ed1 | 974 | sscanf (fnode.rfBuffer,"%s%hhd%hhd", fnode.str, &fnode.testid, &fnode.testFilterNo); |
meric | 0:2a01c5a56ed1 | 975 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 976 | memset (fnode.str, 0, sizeof(fnode.str)); |
meric | 0:2a01c5a56ed1 | 977 | |
meric | 0:2a01c5a56ed1 | 978 | if (send_command(fnode.testid, TEST_CLOSE_SOLENOID, fnode.testFilterNo) == true) { |
meric | 0:2a01c5a56ed1 | 979 | |
meric | 0:2a01c5a56ed1 | 980 | sprintf(fnode.dataBuffer, "%s", "{CMD:\"SELTESTOFFOK\"}"); |
meric | 0:2a01c5a56ed1 | 981 | send_to_coordinator(fnode.dataBuffer); |
meric | 0:2a01c5a56ed1 | 982 | memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 983 | |
meric | 0:2a01c5a56ed1 | 984 | } else { |
meric | 0:2a01c5a56ed1 | 985 | |
meric | 0:2a01c5a56ed1 | 986 | sprintf(fnode.dataBuffer, "%s", "{CMD:\"SELTESTOFFERROR\"}"); |
meric | 0:2a01c5a56ed1 | 987 | send_to_coordinator(fnode.dataBuffer); |
meric | 0:2a01c5a56ed1 | 988 | memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 989 | } |
meric | 0:2a01c5a56ed1 | 990 | |
meric | 0:2a01c5a56ed1 | 991 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 992 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 993 | |
meric | 0:2a01c5a56ed1 | 994 | // TANIMSIZ KOMUT |
meric | 0:2a01c5a56ed1 | 995 | } else { |
meric | 0:2a01c5a56ed1 | 996 | |
meric | 0:2a01c5a56ed1 | 997 | memset (fnode.rfBuffer, 0, sizeof(fnode.rfBuffer)); |
meric | 0:2a01c5a56ed1 | 998 | |
meric | 0:2a01c5a56ed1 | 999 | sprintf(fnode.dataBuffer, "%s", "{CMD:\"UNKNOWN COMMAND\"}"); |
meric | 0:2a01c5a56ed1 | 1000 | send_to_coordinator(fnode.dataBuffer); |
meric | 0:2a01c5a56ed1 | 1001 | memset (fnode.dataBuffer, 0, sizeof(fnode.dataBuffer)); |
meric | 0:2a01c5a56ed1 | 1002 | |
meric | 0:2a01c5a56ed1 | 1003 | fnode.rfInterruptComplete = false; |
meric | 0:2a01c5a56ed1 | 1004 | rf.attach(&rf_rx_isr, Serial::RxIrq); |
meric | 0:2a01c5a56ed1 | 1005 | } |
meric | 0:2a01c5a56ed1 | 1006 | } |
meric | 0:2a01c5a56ed1 | 1007 | } |
meric | 0:2a01c5a56ed1 | 1008 | } |