1

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers define.h Source File

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