1
Dependencies: mbed
define.h
00001 #ifndef _DEFINE_H_ 00002 #define _DEFINE_H_ 00003 /* 00004 **************************************************************************** 00005 **************************************************************************** 00006 ** DEVINT BİLİŞİM YAZILIM DONANIM TİC. LTD. ŞTİ. TARAFINDAN GELİŞTİRİLMİŞTİR 00007 ** İzmir / TÜRKİYE 00008 ** 00009 ** (C) 2015 00010 **************************************************************************** 00011 **************************************************************************** 00012 *************************************************************** K A M B O ** 00013 */ 00014 00015 /* FİLTRASYON MASTER PIN SET 00016 RF Tx..................................................................PA_11 00017 RF Rx..................................................................PA_12 00018 RF Aktif...............................................................PB_10 00019 00020 EEPROM SDA..............................................................PB_9 00021 EEPROM SCL..............................................................PB_8 00022 00023 DP Sensörü (0-3.3VDC)...................................................PC_2 00024 Basınç Sensörü (4-20mA).................................................PA_0 00025 Akış Sensörü............................................................PC_3 00026 Sayaç...................................................................PC_4 00027 */ 00028 00029 // MASTER ID 00030 #define MASTER_ID 0x00 00031 00032 // EEPROM Ayarları 00033 #define EEPROM_TYPE 1 // 1: 1 bayt hafıza adreslemeli EEPROM, 2: 2 bayt hafıza adreslemeli EEPROM 00034 #define EEPROM_ADDRESS 0xA0 // EEPROM device address 00035 #define IO_EXPANDER_ADDRESS 0x40 // IO çoklayıcı adresi 00036 #define EEPROM_FREQUENCY 100000 // EEPROM frekansı 100 KHz 00037 00038 // EEPROM Varsayılan Değerler 00039 #define SYSTEM_SETUP_DEFAULT 15 // Sistem el kitabına bakın 00040 #define AUTOSEND_STATUS_DEFAULT 1 // 0: Otomatik veri aktarımı kapalı, 1: Otomatik veri aktarımı açık 00041 #define IRRI_TRANSMIT_INTERVAL_DEFAULT 15 // Sulama sırasında veri gönderim sıklığı (Dakika) 00042 #define DRY_TRANSMIT_INTERVAL_DEFAULT 15 // Sulama dışında veri gönderim sıklığı, (Dakika) 00043 #define PMAX_DEFAULT 10 // Basınç sensörü max. basınç değeri (Bar) 00044 #define PRESSURE_SENSOR_DEFAULT 1 // Basınç sensörü tipi: 0: 0-3.3V (HONEYWELL), 1: 4-20mA 00045 #define WATERMETER_COEFF_DEFAULT 1000 // Sayaç katsayısı (litre/pals) 00046 #define DP_DEFAULT 10 // Ters yıkamanın başlayacağı fark basınç (DP) değeri, bar (10/10 = 1) 00047 #define PRESSURE_CONTROL_FREQUENCY_DEFAULT 30 // Basınç kontrol sıklığı (Saniye) 00048 #define FLUSH_DURATION_DEFAULT 45 // 1 filtre yıkama süresi (Saniye) 00049 #define FLUSH_INTERVAL_DEFAULT 30 // 2 filtre yıkaması arası bekleme süresi (Saniye) 00050 #define FLOW_CONTROL_LATENCY_DEFAULT 20 // Akış kontrolü gecikme süresi (Saniye) 00051 #define FLUSH_ENABLE_DEFAULT 1 // 0: Ters yıkama kapalı, 1: Ters yıkama açık 00052 #define PR_SENSOR_POSITION_DEFAULT 0 // 0: Basınç sensörü filtre girişinde, 1: Basınç sensörü filtre çıkışında 00053 #define BACKFLUSH_STOP_DEFAULT 0 // 0: Ters yıkama sırasındaki herhangi bir hatada ters yıkama devam eder, 1: Ters yıkama sırasındaki herhangi bir hatada ters yıkama durur 00054 #define INLET_PRS_LOW_TRS_DEFAULT 20 // Giriş basıncı alarmı alt eşik set değeri 1 bar (10/10 = 1) 00055 #define INLET_PRS_HIGH_TRS_DEFAULT 60 // Giriş basıncı alarmı üst eşik set değeri 7 bar (70/10 = 7) 00056 #define ALARMS_ENABLE_DEFAULT 1 // 0: Alarmlar kapalı, 1: Alarmlar açık 00057 #define DP_HIGH_TRS_DEFAULT 15 // DP üst sınır alarmı eşik değeri (Bar) (/10) 00058 #define INLET_PRS_SET_DEFAULT 10 // Sulamanın başladığının anlaşıldığı giriş basıncı değeri 0.2 bar (2/10 = 0.2) 00059 #define OUTLET_PRS_SET_FOR_DP_DEFAULT 20 // DP kontrolünün başlayacağı filtrasyon çıkış basıncı (Bar) (/10) 00060 #define PERIODIC_FLUSH_DEFAULT 10 // Periyodik yıkama aktif ve belirtilen dakikada devreye girer. Bu değer sıfır ise periyodik yıkama aktiflenmez. (saat) 00061 #define MIN_FLUSH_INTERVAL_DEFAULT 5 // DP'ye göre yıkamada iki yıkama arasındaki süre (DAKİKA). Bu değer sıfır ise DP'ye göre yıkama bittiğinde DP değeri düşmemişse hemen yeniden yıkama yapar. 00062 #define FILTER_NUMBER_DEFAULT 4 // Varsayılan filtre sayısı 4 00063 00064 // EEPROM Adresleri 00065 #define DEFAULT_CONFIG_ADDR 0x00 00066 #define IRRI_STATUS_ADDR 0x01 00067 #define SYSTEM_SETUP_ADDR 0x02 00068 #define AUTOSEND_STATUS_ADDR 0x03 00069 #define IRRI_TRANSMIT_INTERVAL_ADDR 0x04 00070 #define DRY_TRANSMIT_INTERVAL_ADDR 0x05 00071 #define WATERMETER_COEFF_ADDR_1 0x06 00072 #define WATERMETER_COEFF_ADDR_2 0x07 00073 #define PMAX_ADDR 0x08 00074 #define PRESSURE_SENSOR_ADDR 0X09 00075 #define DP_ADDR 0x0A 00076 #define PRESSURE_CONTROL_FREQUENCY_ADDR 0x0B 00077 #define FLUSH_DURATION_ADDR 0x0C 00078 #define FLUSH_INTERVAL_ADDR 0x0D 00079 #define FLOW_CONTROL_LATENCY_ADDR 0x0E 00080 #define FLUSH_ENABLE_ADDR 0x0F 00081 #define PR_SENSOR_POSITION_ADDR 0x10 00082 #define BACKFLUSH_STOP_ADDR 0x11 00083 #define INLET_PRS_LOW_TRS_ADDR 0x12 00084 #define INLET_PRS_HIGH_TRS_ADDR 0x13 00085 #define ALARMS_ENABLE_ADDR 0x14 00086 #define DP_HIGH_TRS_ADDR 0x15 00087 #define INLET_PRS_SET_ADDR 0x16 00088 #define OUTLET_PRS_SET_FOR_DP_ADDR 0x17 00089 #define PERIODIC_FLUSH_ADDR 0x18 00090 #define MIN_FLUSH_INTERVAL_ADDR_1 0x19 00091 #define MIN_FLUSH_INTERVAL_ADDR_2 0x1A 00092 #define FILTER_NUMBER_ADDR 0x1B 00093 00094 // RF Koordinatör Adresi 00095 #define COORD_ADDR_1 255 // WSN koordinatör adresi 1. baytı (0xFF) 00096 #define COORD_ADDR_2 255 // WSN koordinatör adresi 2. baytı (0xFF) 00097 00098 // RF USART 00099 #define TX_RF PA_11 // RF Module Tx Pin (Serial6) 00100 #define RX_RF PA_12 // RF Module Rx Pin (Serial6) 00101 #define RF_ACTIVE PB_10 // RF Reset Pin (3.3v verilirse RF aktif kalır) 00102 #define BAUD_SERIAL_RF 38400 // RF USART Baudrate 00103 #define CR 13 // "\r" ASCII kodu 00104 #define EQUAL 61 // "=" ASCII kodu 00105 00106 // MASTER USART 00107 #define TX_MASTER PB_6 00108 #define RX_MASTER PB_7 00109 #define BAUD_MASTER 38400 00110 #define CR 13 // "\r" ASCII kodu 00111 00112 // GPIO 00113 #define WATERMETER_PIN PC_4 // IN1 - Sayaç 00114 #define FLOW_PIN PC_3 // IN2 - Akış sensörü 00115 #define DP_PIN PC_2 // IN3 - Fark basınç sensörü 00116 #define PRESSURE_PIN PA_0 // IN4 - Basınç sensörü 00117 00118 // Diğer 00119 #define RMS_SAMPLING_NUMBER 100 // Analog kanal okumaları için RMS örnekleme sayısı 00120 #define RT_DATA_TRANSMIT_INTERVAL 30 // Gerçek zamanlı veri 30 sn aralıkla gönderiliyor 00121 00122 // Alarmlar 00123 #define BACKFLUSH_DP_STARTED 255 00124 #define BAKCFLUSH_ENDED 254 00125 00126 #define DP_CONTROL_STARTED 253 00127 00128 #define IRRIGATION_STARTED 252 00129 #define IRRIGATION_ENDED 251 00130 00131 #define INLET_LOW_PRESSURE 250 00132 #define INLET_NORMAL_PRESSURE 249 00133 #define INLET_HIGH_PRESSURE 248 00134 00135 #define FILTER_FLUSH_STARTED 1 00136 #define FILTER_FLUSH_ENDED 2 00137 00138 #define NO_FLOW_DURING_FLUSH 3 00139 #define FLOW_DURING_FLUSH 4 00140 00141 #define BACKFLUSH_MANUAL_STARTED 247 00142 #define ALREADY_FLUSHING 246 00143 #define NO_IRRIGATION_FOR_FLUSHING 245 00144 #define FLUSH_DISABLED 244 00145 #define BACKFLUSH_PERIODIC_STARTED 243 00146 00147 enum node_commands { 00148 00149 FENABLE = 1, 00150 FDISABLE, 00151 FSETSYS, 00152 FSETDEF, 00153 FGETCFG, 00154 FREAD, 00155 FSTART, 00156 FSTOP, 00157 FTEST, 00158 FRESET, 00159 FCLEAR, 00160 FFIX, 00161 FGETSTATUS, 00162 FGETFSTATUS, 00163 FLUSHNOW, 00164 SELTESTON, 00165 SELTESTOFF, 00166 FFGETSTAT 00167 }; 00168 00169 enum solenoid_commands { 00170 00171 CLOSE_SOLENOID = 0x00, 00172 OPEN_SOLENOID = 0x01, 00173 TEST_OPEN_SOLENOID = 0x02, 00174 TEST_CLOSE_SOLENOID = 0x03 00175 00176 }; 00177 00178 enum success_state { 00179 00180 _ERROR_ = 0x00, 00181 _OK_ = 0x01 00182 00183 }; 00184 00185 enum filter_solenoid_id { 00186 00187 FILTER_MAIN_SOLENOID = 0x00, 00188 FILTER_1_SOLENOID = 0x01, 00189 FILTER_2_SOLENOID = 0x02, 00190 FILTER_3_SOLENOID = 0x03, 00191 FILTER_4_SOLENOID = 0x04 00192 00193 }; 00194 00195 struct RTU { 00196 float dpPressure; 00197 float pressure; 00198 float inletPressure; 00199 float outletPressure; 00200 float flowrate; 00201 float flowrateTransmission; 00202 00203 char temporaryBuffer[256]; 00204 char dataBuffer[256]; 00205 char rfBuffer[256]; 00206 char str[24]; 00207 char alarmBuffer[256]; 00208 char edata; 00209 char edata2[2]; 00210 char edata3[3]; 00211 char value; 00212 char iodata[2]; 00213 00214 uint8_t systemSetup; 00215 uint8_t filterNumber; 00216 uint8_t dpSet; 00217 uint8_t flushDuration; 00218 uint8_t flushInterval; 00219 uint8_t pressureControlFrequency; 00220 uint8_t pMax; 00221 uint8_t pressureSensorType; 00222 uint8_t autosendStatus; 00223 uint8_t irriTransmitInterval; 00224 uint8_t dryTransmitInterval; 00225 uint8_t enableFlush; 00226 uint8_t filterByte_1; 00227 uint8_t filterByte_2; 00228 uint8_t flowControlLatency; 00229 uint8_t pressureSensorPosition; 00230 uint8_t pressureLowThreshold; 00231 uint8_t pressureHighThreshold; 00232 uint8_t dpThreshold; 00233 uint8_t inletPressureSet; 00234 uint8_t outletPressureSet; 00235 uint8_t alarm; 00236 uint8_t flushEnabled; 00237 uint8_t onErrorStop; 00238 uint8_t alarmsEnabled; 00239 00240 uint16_t watermeterCoefficient; 00241 00242 uint64_t WI; 00243 uint64_t WIC; 00244 float QI; 00245 00246 uint64_t WD; 00247 uint64_t WDC; 00248 float QD; 00249 00250 uint64_t rWI; 00251 uint64_t rWIC; 00252 float rQI; 00253 00254 uint64_t rWD; 00255 uint64_t rWDC; 00256 float rQD; 00257 00258 volatile uint64_t pulse; 00259 volatile uint64_t pulseTransmit; 00260 volatile uint64_t pulsePressureCheck; 00261 00262 volatile bool transmitData; 00263 volatile bool rfInterruptComplete; 00264 bool flushStarted; 00265 volatile bool checkPressure; 00266 00267 volatile uint8_t rfBufferCounter; 00268 volatile uint8_t flushPhase; 00269 00270 volatile char rfBufferChar; 00271 00272 bool irrigation; 00273 bool autosend; 00274 bool flushing; 00275 bool flowControl; 00276 bool errorOccured; 00277 bool pressureLowError; 00278 bool pressureNormalError; 00279 bool pressureHighError; 00280 bool dpControlStarted; 00281 bool checkDp; 00282 00283 bool periodicFlushEnabled; 00284 uint8_t periodicFlushInterval; 00285 volatile uint16_t periodicFlushCounter; 00286 00287 uint16_t minFlushInterval; 00288 volatile uint16_t minFlushCounter; 00289 bool isMinTimePassed; 00290 bool minFlushEnabled; 00291 00292 volatile bool transmit_rtData; 00293 volatile uint8_t rtCounter; 00294 00295 volatile uint64_t rtPulseFirst; 00296 bool rtActive; 00297 00298 uint8_t testFilterNo; 00299 00300 uint16_t lastFlushPhase; 00301 00302 volatile char masterBufferChar; 00303 char masterRxBuffer[2]; 00304 char masterTxBuffer[5]; 00305 volatile uint8_t masterBufferCounter; 00306 volatile bool masterInterruptComplete; 00307 00308 uint16_t globalFlushPhase; 00309 uint8_t currentFlushPhase; 00310 uint8_t currentFlushingFilter; 00311 uint8_t currentWorkingSlave; 00312 uint16_t globalFlushingFilter; 00313 00314 uint8_t testid; 00315 00316 volatile bool flush_isr; 00317 00318 uint8_t periodicFirstStartCounter; 00319 00320 uint8_t totalSlaveNumber; 00321 00322 00323 RTU() { 00324 00325 pulse = 0; 00326 pulseTransmit = 0; 00327 pulsePressureCheck = 0; 00328 00329 rfBufferCounter = 0; 00330 alarm = 0; 00331 flushPhase = 0; 00332 pressureSensorPosition = 0; 00333 onErrorStop = 0; 00334 00335 filterByte_1 = 255; 00336 filterByte_2 = 255; 00337 alarmsEnabled = 1; 00338 00339 transmitData = false; 00340 rfInterruptComplete = false; 00341 irrigation = false; 00342 autosend = false; 00343 flushStarted = false; 00344 checkPressure = false; 00345 flushing = false; 00346 flowControl = false; 00347 errorOccured = false; 00348 pressureLowError = false; 00349 pressureNormalError = false; 00350 pressureHighError = false; 00351 dpControlStarted = false; 00352 checkDp = true; 00353 00354 WI = 0; 00355 WIC = 0; 00356 QI = 0.0; 00357 00358 WD = 0; 00359 WDC = 0; 00360 QD = 0.0; 00361 00362 rWI = 0; 00363 rWIC = 0; 00364 rQI = 0.0; 00365 00366 rWD = 0; 00367 rWDC = 0; 00368 rQD = 0.0; 00369 00370 periodicFlushEnabled = false; 00371 periodicFlushInterval = 0; 00372 periodicFlushCounter = 0; 00373 00374 minFlushInterval = 0; 00375 minFlushCounter = 0; 00376 isMinTimePassed = true; 00377 minFlushEnabled = false; 00378 00379 transmit_rtData = false; 00380 rtCounter = 0; 00381 00382 rtPulseFirst = 0; 00383 rtActive = false; 00384 00385 masterBufferCounter = 0; 00386 masterInterruptComplete = false; 00387 00388 flush_isr = false; 00389 00390 periodicFirstStartCounter = 0; 00391 } 00392 } fnode; 00393 00394 // Global değişkenler 00395 uint8_t c1 = 0; 00396 uint8_t c2 = 0; 00397 uint8_t c3 = 0; 00398 uint8_t c4 = 0; 00399 uint8_t c5_a = 0; 00400 uint8_t c5_b = 0; 00401 uint16_t c5 = 0; 00402 uint8_t c6 = 0; 00403 uint8_t c7 = 0; 00404 uint8_t c8 = 0; 00405 uint8_t c9 = 0; 00406 uint8_t c10 = 0; 00407 uint8_t c11 = 0; 00408 uint8_t c12 = 0; 00409 uint8_t c13 = 0; 00410 uint8_t c14 = 0; 00411 uint8_t c15 = 0; 00412 uint8_t c16 = 0; 00413 uint8_t c17 = 0; 00414 uint8_t c18 = 0; 00415 uint8_t c19 = 0; 00416 uint8_t c20 = 0; 00417 uint8_t c21 = 0; 00418 uint8_t c22 = 0; 00419 uint8_t c23_a = 0; 00420 uint8_t c23_b = 0; 00421 uint16_t c23 = 0; 00422 uint8_t c24 = 0; 00423 uint8_t irriTrsIntOld = 0; 00424 uint8_t dryTrsIntOld = 0; 00425 00426 float rmsStore[RMS_SAMPLING_NUMBER]; 00427 float totalSampling = 0.0; 00428 float tempValue = 0.0; 00429 float tp = 0.0; 00430 float tdp = 0.0; 00431 float tdpResult = 0.0; 00432 00433 // JSON 00434 const char* jsonHeader[9] = {"PRIN:", "PROUT:", "DP:", "WI:", "WIC:", "QI:", "WD:", "WDC:", "QD:"}; 00435 const char* json[2] = {"{F:{", "}}"}; 00436 const char* jsonAlarm[15] = {"{ALR:\"FALR\"", "ALRCODE:", "APRSIN:", "ADP:", "AIRR:", "AFLUSH:", "AF11:", "AF12:", "AF21:", "AF22:", "AF31:", "AF32:", "AF41:", "AF42:", "}"}; 00437 00438 // Komutlar 00439 const char* fenable_command = "FENABLE"; 00440 const char* fdisable_command = "FDISABLE"; 00441 const char* fsetsys_command = "FSETSYS"; 00442 const char* fgetcfg_command = "FGETCFG"; 00443 const char* fread_command = "FREAD"; 00444 const char* fstart_command = "FSTART"; 00445 const char* fstop_command = "FSTOP"; 00446 const char* ftest_command = "FTEST"; 00447 const char* freset_command = "FRESET"; 00448 const char* fclear_command = "FCLEAR"; 00449 const char* ffix_command = "FFIX"; 00450 const char* fgetstatus_command = "FGETSTATUS"; 00451 const char* fgetfstatus_command = "FGETFSTATUS"; 00452 const char* fflushnow_command = "FLUSHNOW"; 00453 const char* frton_command = "FRTON"; 00454 const char* frtoff_command = "FRTOFF"; 00455 const char* getfrtstatus_command = "GETFRTSTATUS"; 00456 const char* selteston_command = "SELTESTON"; 00457 const char* seltestoff_command = "SELTESTOFF"; 00458 const char* ffgetstat_command = "FFGETSTAT"; 00459 00460 // EEPROM I2C 00461 I2C i2c(I2C_SDA, I2C_SCL); 00462 00463 // DP Sensörü 00464 AnalogIn dpSensor = DP_PIN; 00465 00466 // Basınç sensörü 00467 AnalogIn pressureSensor = PRESSURE_PIN; 00468 00469 // Akış sensörü 00470 DigitalIn flowSensor(FLOW_PIN, PullDown); 00471 00472 // RF Reset Pin 00473 DigitalOut rfPower(RF_ACTIVE, 0); 00474 00475 // Sayaç & Sayaç ISR 00476 DigitalIn watermeterPin(WATERMETER_PIN, PullDown); 00477 InterruptIn watermeterInterrupt(WATERMETER_PIN); 00478 00479 // RF USART 00480 RawSerial rf(TX_RF, RX_RF); 00481 RawSerial master(TX_MASTER, RX_MASTER); 00482 00483 // Zamanlayıcılar 00484 Timeout flushTimer; 00485 Timer timer; 00486 Ticker pressureCheckTicker; 00487 Ticker dataTransmitTicker; 00488 Ticker periodicFlushTicker; 00489 Ticker minFlushTicker; 00490 Ticker rtDataTransmitTicker; 00491 #endif
Generated on Sat Jul 16 2022 01:21:54 by 1.7.2