1

Dependencies:   mbed

Revision:
0:2a01c5a56ed1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/define.h	Mon Jul 09 09:12:38 2018 +0000
@@ -0,0 +1,491 @@
+#ifndef _DEFINE_H_
+#define _DEFINE_H_
+/*
+    ****************************************************************************
+    ****************************************************************************
+    ** DEVINT BİLİŞİM YAZILIM DONANIM TİC. LTD. ŞTİ. TARAFINDAN GELİŞTİRİLMİŞTİR
+    ** İzmir / TÜRKİYE
+    **
+    ** (C) 2015
+    ****************************************************************************
+    ****************************************************************************
+    *************************************************************** K A M B O **
+*/
+
+/*  FİLTRASYON MASTER PIN SET
+    RF Tx..................................................................PA_11
+    RF Rx..................................................................PA_12
+    RF Aktif...............................................................PB_10
+
+    EEPROM SDA..............................................................PB_9
+    EEPROM SCL..............................................................PB_8
+
+    DP Sensörü (0-3.3VDC)...................................................PC_2
+    Basınç Sensörü (4-20mA).................................................PA_0
+    Akış Sensörü............................................................PC_3
+    Sayaç...................................................................PC_4
+*/
+
+// MASTER ID
+#define     MASTER_ID                                                           0x00
+
+// EEPROM Ayarları
+#define     EEPROM_TYPE                                                         1       // 1: 1 bayt hafıza adreslemeli EEPROM, 2: 2 bayt hafıza adreslemeli EEPROM
+#define     EEPROM_ADDRESS                                                      0xA0    // EEPROM device address
+#define     IO_EXPANDER_ADDRESS                                                 0x40    // IO çoklayıcı adresi
+#define     EEPROM_FREQUENCY                                                    100000  // EEPROM frekansı 100 KHz
+
+// EEPROM Varsayılan Değerler
+#define     SYSTEM_SETUP_DEFAULT                                                15      // Sistem el kitabına bakın
+#define     AUTOSEND_STATUS_DEFAULT                                             1       // 0: Otomatik veri aktarımı kapalı, 1: Otomatik veri aktarımı açık
+#define     IRRI_TRANSMIT_INTERVAL_DEFAULT                                      15      // Sulama sırasında veri gönderim sıklığı (Dakika)
+#define     DRY_TRANSMIT_INTERVAL_DEFAULT                                       15      // Sulama dışında veri gönderim sıklığı, (Dakika)
+#define     PMAX_DEFAULT                                                        10      // Basınç sensörü max. basınç değeri (Bar)
+#define     PRESSURE_SENSOR_DEFAULT                                             1       // Basınç sensörü tipi: 0: 0-3.3V (HONEYWELL), 1: 4-20mA 
+#define     WATERMETER_COEFF_DEFAULT                                            1000    // Sayaç katsayısı (litre/pals)
+#define     DP_DEFAULT                                                          10      // Ters yıkamanın başlayacağı fark basınç (DP) değeri, bar (10/10 = 1)
+#define     PRESSURE_CONTROL_FREQUENCY_DEFAULT                                  30      // Basınç kontrol sıklığı (Saniye)
+#define     FLUSH_DURATION_DEFAULT                                              45      // 1 filtre yıkama süresi (Saniye)
+#define     FLUSH_INTERVAL_DEFAULT                                              30      // 2 filtre yıkaması arası bekleme süresi (Saniye)
+#define     FLOW_CONTROL_LATENCY_DEFAULT                                        20      // Akış kontrolü gecikme süresi (Saniye)
+#define     FLUSH_ENABLE_DEFAULT                                                1       // 0: Ters yıkama kapalı, 1: Ters yıkama açık
+#define     PR_SENSOR_POSITION_DEFAULT                                          0       // 0: Basınç sensörü filtre girişinde, 1: Basınç sensörü filtre çıkışında
+#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
+#define     INLET_PRS_LOW_TRS_DEFAULT                                           20      // Giriş basıncı alarmı alt eşik set değeri 1 bar (10/10 = 1)
+#define     INLET_PRS_HIGH_TRS_DEFAULT                                          60      // Giriş basıncı alarmı üst eşik set değeri 7 bar (70/10 = 7)
+#define     ALARMS_ENABLE_DEFAULT                                               1       // 0: Alarmlar kapalı, 1: Alarmlar açık
+#define     DP_HIGH_TRS_DEFAULT                                                 15      // DP üst sınır alarmı eşik değeri (Bar) (/10)
+#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)
+#define     OUTLET_PRS_SET_FOR_DP_DEFAULT                                       20      // DP kontrolünün başlayacağı filtrasyon çıkış basıncı (Bar) (/10)
+#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)
+#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.
+#define     FILTER_NUMBER_DEFAULT                                               4       // Varsayılan filtre sayısı 4
+
+// EEPROM Adresleri
+#define     DEFAULT_CONFIG_ADDR                                                 0x00
+#define     IRRI_STATUS_ADDR                                                    0x01
+#define     SYSTEM_SETUP_ADDR                                                   0x02
+#define     AUTOSEND_STATUS_ADDR                                                0x03
+#define     IRRI_TRANSMIT_INTERVAL_ADDR                                         0x04
+#define     DRY_TRANSMIT_INTERVAL_ADDR                                          0x05
+#define     WATERMETER_COEFF_ADDR_1                                             0x06
+#define     WATERMETER_COEFF_ADDR_2                                             0x07
+#define     PMAX_ADDR                                                           0x08
+#define     PRESSURE_SENSOR_ADDR                                                0X09
+#define     DP_ADDR                                                             0x0A
+#define     PRESSURE_CONTROL_FREQUENCY_ADDR                                     0x0B
+#define     FLUSH_DURATION_ADDR                                                 0x0C
+#define     FLUSH_INTERVAL_ADDR                                                 0x0D
+#define     FLOW_CONTROL_LATENCY_ADDR                                           0x0E
+#define     FLUSH_ENABLE_ADDR                                                   0x0F
+#define     PR_SENSOR_POSITION_ADDR                                             0x10
+#define     BACKFLUSH_STOP_ADDR                                                 0x11
+#define     INLET_PRS_LOW_TRS_ADDR                                              0x12
+#define     INLET_PRS_HIGH_TRS_ADDR                                             0x13
+#define     ALARMS_ENABLE_ADDR                                                  0x14
+#define     DP_HIGH_TRS_ADDR                                                    0x15
+#define     INLET_PRS_SET_ADDR                                                  0x16
+#define     OUTLET_PRS_SET_FOR_DP_ADDR                                          0x17
+#define     PERIODIC_FLUSH_ADDR                                                 0x18
+#define     MIN_FLUSH_INTERVAL_ADDR_1                                           0x19
+#define     MIN_FLUSH_INTERVAL_ADDR_2                                           0x1A
+#define     FILTER_NUMBER_ADDR                                                  0x1B
+
+// RF Koordinatör Adresi
+#define     COORD_ADDR_1                                                        255     // WSN koordinatör adresi 1. baytı (0xFF)
+#define     COORD_ADDR_2                                                        255     // WSN koordinatör adresi 2. baytı (0xFF)
+
+// RF USART
+#define     TX_RF                                                               PA_11   // RF Module Tx Pin (Serial6)
+#define     RX_RF                                                               PA_12   // RF Module Rx Pin (Serial6)
+#define     RF_ACTIVE                                                           PB_10   // RF Reset Pin (3.3v verilirse RF aktif kalır)
+#define     BAUD_SERIAL_RF                                                      38400   // RF USART Baudrate
+#define     CR                                                                  13      // "\r" ASCII kodu
+#define     EQUAL                                                               61      // "=" ASCII kodu
+
+// MASTER USART
+#define     TX_MASTER                                                           PB_6
+#define     RX_MASTER                                                           PB_7
+#define     BAUD_MASTER                                                         38400
+#define     CR                                                                  13      // "\r" ASCII kodu
+
+// GPIO
+#define     WATERMETER_PIN                                                      PC_4    // IN1 - Sayaç
+#define     FLOW_PIN                                                            PC_3    // IN2 - Akış sensörü
+#define     DP_PIN                                                              PC_2    // IN3 - Fark basınç sensörü
+#define     PRESSURE_PIN                                                        PA_0    // IN4 - Basınç sensörü
+
+// Diğer
+#define     RMS_SAMPLING_NUMBER                                                 100     // Analog kanal okumaları için RMS örnekleme sayısı
+#define     RT_DATA_TRANSMIT_INTERVAL                                           30      // Gerçek zamanlı veri 30 sn aralıkla gönderiliyor
+
+// Alarmlar
+#define     BACKFLUSH_DP_STARTED                255
+#define     BAKCFLUSH_ENDED                     254
+
+#define     DP_CONTROL_STARTED                  253
+
+#define     IRRIGATION_STARTED                  252
+#define     IRRIGATION_ENDED                    251
+
+#define     INLET_LOW_PRESSURE                  250
+#define     INLET_NORMAL_PRESSURE               249
+#define     INLET_HIGH_PRESSURE                 248
+
+#define     FILTER_FLUSH_STARTED                1
+#define     FILTER_FLUSH_ENDED                  2
+
+#define     NO_FLOW_DURING_FLUSH                3
+#define     FLOW_DURING_FLUSH                   4
+
+#define     BACKFLUSH_MANUAL_STARTED            247
+#define     ALREADY_FLUSHING                    246
+#define     NO_IRRIGATION_FOR_FLUSHING          245
+#define     FLUSH_DISABLED                      244
+#define     BACKFLUSH_PERIODIC_STARTED          243
+
+enum node_commands {
+
+    FENABLE = 1,
+    FDISABLE,
+    FSETSYS,
+    FSETDEF,
+    FGETCFG,
+    FREAD,
+    FSTART,
+    FSTOP,
+    FTEST,
+    FRESET,
+    FCLEAR,
+    FFIX,
+    FGETSTATUS,
+    FGETFSTATUS,
+    FLUSHNOW,
+    SELTESTON,
+    SELTESTOFF,
+    FFGETSTAT
+};
+
+enum solenoid_commands {
+
+    CLOSE_SOLENOID = 0x00,
+    OPEN_SOLENOID = 0x01,
+    TEST_OPEN_SOLENOID = 0x02,
+    TEST_CLOSE_SOLENOID = 0x03
+
+};
+
+enum success_state {
+
+    _ERROR_ = 0x00,
+    _OK_ = 0x01
+
+};
+
+enum filter_solenoid_id {
+
+    FILTER_MAIN_SOLENOID = 0x00,
+    FILTER_1_SOLENOID = 0x01,
+    FILTER_2_SOLENOID = 0x02,
+    FILTER_3_SOLENOID = 0x03,
+    FILTER_4_SOLENOID = 0x04
+
+};
+
+struct RTU {
+    float dpPressure;
+    float pressure;
+    float inletPressure;
+    float outletPressure;
+    float flowrate;
+    float flowrateTransmission;
+
+    char temporaryBuffer[256];
+    char dataBuffer[256];
+    char rfBuffer[256];
+    char str[24];
+    char alarmBuffer[256];
+    char edata;
+    char edata2[2];
+    char edata3[3];
+    char value;
+    char iodata[2];
+
+    uint8_t systemSetup;
+    uint8_t filterNumber;
+    uint8_t dpSet;
+    uint8_t flushDuration;
+    uint8_t flushInterval;
+    uint8_t pressureControlFrequency;
+    uint8_t pMax;
+    uint8_t pressureSensorType;
+    uint8_t autosendStatus;
+    uint8_t irriTransmitInterval;
+    uint8_t dryTransmitInterval;
+    uint8_t enableFlush;
+    uint8_t filterByte_1;
+    uint8_t filterByte_2;
+    uint8_t flowControlLatency;
+    uint8_t pressureSensorPosition;
+    uint8_t pressureLowThreshold;
+    uint8_t pressureHighThreshold;
+    uint8_t dpThreshold;
+    uint8_t inletPressureSet;
+    uint8_t outletPressureSet;
+    uint8_t alarm;
+    uint8_t flushEnabled;
+    uint8_t onErrorStop;
+    uint8_t alarmsEnabled;
+
+    uint16_t watermeterCoefficient;
+
+    uint64_t WI;
+    uint64_t WIC;
+    float QI;
+
+    uint64_t WD;
+    uint64_t WDC;
+    float QD;
+
+    uint64_t rWI;
+    uint64_t rWIC;
+    float rQI;
+
+    uint64_t rWD;
+    uint64_t rWDC;
+    float rQD;
+
+    volatile uint64_t pulse;
+    volatile uint64_t pulseTransmit;
+    volatile uint64_t pulsePressureCheck;
+
+    volatile bool transmitData;
+    volatile bool rfInterruptComplete;
+    bool flushStarted;
+    volatile bool checkPressure;
+
+    volatile uint8_t rfBufferCounter;
+    volatile uint8_t flushPhase;
+
+    volatile char rfBufferChar;
+
+    bool irrigation;
+    bool autosend;
+    bool flushing;
+    bool flowControl;
+    bool errorOccured;
+    bool pressureLowError;
+    bool pressureNormalError;
+    bool pressureHighError;
+    bool dpControlStarted;
+    bool checkDp;
+
+    bool periodicFlushEnabled;
+    uint8_t periodicFlushInterval;
+    volatile uint16_t periodicFlushCounter;
+
+    uint16_t minFlushInterval;
+    volatile uint16_t minFlushCounter;
+    bool isMinTimePassed;
+    bool minFlushEnabled;
+
+    volatile bool transmit_rtData;
+    volatile uint8_t rtCounter;
+
+    volatile uint64_t   rtPulseFirst;
+    bool rtActive;
+
+    uint8_t testFilterNo;
+
+    uint16_t lastFlushPhase;
+
+    volatile char masterBufferChar;
+    char masterRxBuffer[2];
+    char masterTxBuffer[5];
+    volatile uint8_t masterBufferCounter;
+    volatile bool masterInterruptComplete;
+
+    uint16_t globalFlushPhase;
+    uint8_t currentFlushPhase;
+    uint8_t currentFlushingFilter;
+    uint8_t currentWorkingSlave;
+    uint16_t globalFlushingFilter;
+
+    uint8_t testid;
+
+    volatile bool flush_isr;
+
+    uint8_t periodicFirstStartCounter;
+
+    uint8_t totalSlaveNumber;
+
+
+    RTU() {
+
+        pulse = 0;
+        pulseTransmit = 0;
+        pulsePressureCheck = 0;
+
+        rfBufferCounter = 0;
+        alarm = 0;
+        flushPhase = 0;
+        pressureSensorPosition = 0;
+        onErrorStop = 0;
+
+        filterByte_1 = 255;
+        filterByte_2 = 255;
+        alarmsEnabled = 1;
+
+        transmitData = false;
+        rfInterruptComplete = false;
+        irrigation = false;
+        autosend = false;
+        flushStarted = false;
+        checkPressure = false;
+        flushing = false;
+        flowControl = false;
+        errorOccured = false;
+        pressureLowError = false;
+        pressureNormalError = false;
+        pressureHighError = false;
+        dpControlStarted = false;
+        checkDp = true;
+
+        WI = 0;
+        WIC = 0;
+        QI = 0.0;
+
+        WD = 0;
+        WDC = 0;
+        QD = 0.0;
+
+        rWI = 0;
+        rWIC = 0;
+        rQI = 0.0;
+
+        rWD = 0;
+        rWDC = 0;
+        rQD = 0.0;
+
+        periodicFlushEnabled = false;
+        periodicFlushInterval = 0;
+        periodicFlushCounter = 0;
+
+        minFlushInterval = 0;
+        minFlushCounter = 0;
+        isMinTimePassed = true;
+        minFlushEnabled = false;
+
+        transmit_rtData = false;
+        rtCounter = 0;
+
+        rtPulseFirst = 0;
+        rtActive = false;
+
+        masterBufferCounter = 0;
+        masterInterruptComplete = false;
+
+        flush_isr = false;
+
+        periodicFirstStartCounter = 0;
+    }
+} fnode;
+
+// Global değişkenler
+uint8_t c1 = 0;
+uint8_t c2 = 0;
+uint8_t c3 = 0;
+uint8_t c4 = 0;
+uint8_t c5_a = 0;
+uint8_t c5_b = 0;
+uint16_t c5 = 0;
+uint8_t c6 = 0;
+uint8_t c7 = 0;
+uint8_t c8 = 0;
+uint8_t c9 = 0;
+uint8_t c10 = 0;
+uint8_t c11 = 0;
+uint8_t c12 = 0;
+uint8_t c13 = 0;
+uint8_t c14 = 0;
+uint8_t c15 = 0;
+uint8_t c16 = 0;
+uint8_t c17 = 0;
+uint8_t c18 = 0;
+uint8_t c19 = 0;
+uint8_t c20 = 0;
+uint8_t c21 = 0;
+uint8_t c22 = 0;
+uint8_t c23_a = 0;
+uint8_t c23_b = 0;
+uint16_t c23 = 0;
+uint8_t c24 = 0;
+uint8_t irriTrsIntOld = 0;
+uint8_t dryTrsIntOld = 0;
+
+float rmsStore[RMS_SAMPLING_NUMBER];
+float totalSampling = 0.0;
+float tempValue = 0.0;
+float tp = 0.0;
+float tdp = 0.0;
+float tdpResult = 0.0;
+
+// JSON
+const char* jsonHeader[9] = {"PRIN:", "PROUT:", "DP:", "WI:", "WIC:", "QI:", "WD:", "WDC:", "QD:"};
+const char* json[2] = {"{F:{", "}}"};
+const char* jsonAlarm[15] = {"{ALR:\"FALR\"", "ALRCODE:", "APRSIN:", "ADP:", "AIRR:", "AFLUSH:", "AF11:", "AF12:", "AF21:", "AF22:", "AF31:", "AF32:", "AF41:", "AF42:", "}"};
+
+// Komutlar
+const char* fenable_command = "FENABLE";
+const char* fdisable_command = "FDISABLE";
+const char* fsetsys_command = "FSETSYS";
+const char* fgetcfg_command = "FGETCFG";
+const char* fread_command   = "FREAD";
+const char* fstart_command  = "FSTART";
+const char* fstop_command   = "FSTOP";
+const char* ftest_command   = "FTEST";
+const char* freset_command  = "FRESET";
+const char* fclear_command  = "FCLEAR";
+const char* ffix_command    = "FFIX";
+const char* fgetstatus_command = "FGETSTATUS";
+const char* fgetfstatus_command = "FGETFSTATUS";
+const char* fflushnow_command = "FLUSHNOW";
+const char* frton_command = "FRTON";
+const char* frtoff_command = "FRTOFF";
+const char* getfrtstatus_command = "GETFRTSTATUS";
+const char* selteston_command = "SELTESTON";
+const char* seltestoff_command = "SELTESTOFF";
+const char* ffgetstat_command = "FFGETSTAT";
+
+// EEPROM I2C
+I2C i2c(I2C_SDA, I2C_SCL);
+
+// DP Sensörü
+AnalogIn dpSensor = DP_PIN;
+
+// Basınç sensörü
+AnalogIn pressureSensor = PRESSURE_PIN;
+
+// Akış sensörü
+DigitalIn flowSensor(FLOW_PIN, PullDown);
+
+// RF Reset Pin
+DigitalOut rfPower(RF_ACTIVE, 0);
+
+// Sayaç & Sayaç ISR
+DigitalIn watermeterPin(WATERMETER_PIN, PullDown);
+InterruptIn watermeterInterrupt(WATERMETER_PIN);
+
+// RF USART
+RawSerial rf(TX_RF, RX_RF);
+RawSerial master(TX_MASTER, RX_MASTER);
+
+// Zamanlayıcılar
+Timeout flushTimer;
+Timer timer;
+Ticker pressureCheckTicker;
+Ticker dataTransmitTicker;
+Ticker periodicFlushTicker;
+Ticker minFlushTicker;
+Ticker rtDataTransmitTicker;
+#endif
\ No newline at end of file