1
Dependencies: mbed
define.h
- Committer:
- meric
- Date:
- 2018-07-09
- Revision:
- 0:2a01c5a56ed1
File content as of revision 0:2a01c5a56ed1:
#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