Frederico Prado / smartRamalEZR

Dependencies:   CRC16 FreescaleIAP FreescaleWatchdog GGSProtocol LM75B PIMA Parameters PersistentCircularQueue SerialNumberV2COM mbed-dev-watchdog_2016_03_04

Fork of smartRamalKW by Equipe Firmware V2COM

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers memoriaMassa.cpp Source File

memoriaMassa.cpp

00001 #include "memoriaMassa.h"
00002 
00003 void MemoriaMassa::iniciaLeituras(int periodoSec, int size, int sector1, int sector2, int sector3){
00004     mmPeriodoSec = periodoSec;
00005     if(APP_PARAMETERS.ENABLE_LOAD_PROFILE > 0) {
00006         queue[0].init(size, sector1);
00007         queue[1].init(size, sector2);
00008         queue[2].init(size, sector3);
00009     }
00010     leituraPeriodica.attach(this, &MemoriaMassa::disparaLeitura, mmPeriodoSec);
00011     DEBUG(printf("[LP] Periodic Reading started (%d seconds)\r\n", mmPeriodoSec));
00012 }
00013 
00014 void MemoriaMassa::disparaLeitura(){
00015     lerAgora = true;
00016 }
00017 
00018 void MemoriaMassa::executaLeitura(){
00019     if(!lerAgora){
00020         return;
00021     }
00022     
00023     float f1 = getInstVoltage(0);
00024     float f2 = getInstVoltage(1);
00025     float f3 = getInstCurrent();
00026     
00027     if(APP_PARAMETERS.LOAD_CHANNEL == 0){
00028         f1 = f2 - f1;
00029     } else{
00030         f2 = f1 - f2;
00031     }
00032     
00033     if(APP_PARAMETERS.ENABLE_LOAD_PROFILE > 0) {
00034         LeituraMM leitura;
00035         leitura.value.floatValue = f1;
00036         leitura.time = time(NULL);
00037         queue[0].add((char*)&leitura);
00038 
00039         leitura.value.floatValue = f2;
00040         queue[1].add((char*)&leitura);
00041 
00042         leitura.value.floatValue = f3;
00043         queue[2].add((char*)&leitura);
00044 
00045         DEBUG(printf("[LP] Reading time = %s\r\n", ctime(&(leitura.time))));
00046         DEBUG(printf("[LP] New record stored: Time=%d, Ch0=%f\r\n", leitura.time, f1));
00047         DEBUG(printf("[LP] New record stored: Time=%d, Ch1=%f\r\n", leitura.time, f2));
00048         DEBUG(printf("[LP] New record stored: Time=%d, Ch2=%f\r\n", leitura.time, f3));
00049     }
00050 
00051     checkAlarms(f1, f2, f3);
00052 
00053     lerAgora = false;
00054 }
00055 
00056 char* MemoriaMassa::getMM(int channel){
00057     if(channel < 0 || channel > 2){
00058         DEBUG(printf("[LP] Invalid channel %d\r\n", channel));
00059         return NULL;
00060     }
00061     return queue[channel].getAll();
00062 }
00063 
00064 void MemoriaMassa::checkAlarms(float ch1, float ch2, float ch3){
00065     bool tensaoZero, tensaoMinima, tensaoMaxima, correnteZero, correnteMinima, correnteMaxima;
00066     int linha, carga, limiteZeroLinha, limiteZeroCarga;
00067     if(APP_PARAMETERS.LOAD_CHANNEL == 0){
00068         linha = (int)ch2;
00069         carga = (int)ch1;
00070         limiteZeroLinha = APP_PARAMETERS.LIMITE_TENSAO_ZERO_CH1_V;
00071         limiteZeroCarga = APP_PARAMETERS.LIMITE_TENSAO_ZERO_CH0_V;
00072     } else{
00073         linha = (int)ch1;
00074         carga = (int)ch2;
00075         limiteZeroLinha = APP_PARAMETERS.LIMITE_TENSAO_ZERO_CH0_V;
00076         limiteZeroCarga = APP_PARAMETERS.LIMITE_TENSAO_ZERO_CH1_V;
00077     }
00078     
00079     if((linha - carga) > (linha*APP_PARAMETERS.LIMITE_TENSAO_SENSOR_V)/100.0){
00080         ledLoad = LED_ON;
00081     } else if((linha - carga) < -(linha*APP_PARAMETERS.LIMITE_TENSAO_SENSOR_V)/100.0){
00082         ledLoad = LED_ON;
00083     } else{
00084         ledLoad = LED_OFF;
00085     }
00086     
00087     tensaoZero = linha < limiteZeroLinha;
00088     tensaoMinima = linha < APP_PARAMETERS.LIMITE_TENSAO_MINIMA_LINHA_V;
00089     tensaoMaxima = linha > APP_PARAMETERS.LIMITE_TENSAO_MAXIMA_LINHA_V;
00090     
00091     DEBUG(printf("[LP] Line Zero Voltage ST = %d\r\n", tensaoZero));
00092     DEBUG(printf("[LP] Line Undervoltage ST = %d\r\n", tensaoMinima));
00093     DEBUG(printf("[LP] Line Overvoltage  ST = %d\r\n", tensaoMaxima));
00094     
00095     if(isAlarmEnabled(ALARME_LINHA_TENSAO_ZERO)){
00096         alarm.writeAlarm(ALARME_LINHA_TENSAO_ZERO, tensaoZero, getAlarmState(ALARME_LINHA_TENSAO_ZERO));
00097     }
00098     if(isAlarmEnabled(ALARME_LINHA_TENSAO_MINIMA)){
00099         alarm.writeAlarm(ALARME_LINHA_TENSAO_MINIMA, tensaoMinima, getAlarmState(ALARME_LINHA_TENSAO_MINIMA));
00100     }
00101     if(isAlarmEnabled(ALARME_LINHA_TENSAO_MAXIMA)){
00102         alarm.writeAlarm(ALARME_LINHA_TENSAO_MAXIMA, tensaoMaxima, getAlarmState(ALARME_LINHA_TENSAO_MAXIMA));
00103     }
00104     
00105     tensaoZero = carga < limiteZeroCarga;
00106     tensaoMinima = carga < APP_PARAMETERS.LIMITE_TENSAO_MINIMA_CARGA_V;
00107     tensaoMaxima = carga > APP_PARAMETERS.LIMITE_TENSAO_MAXIMA_CARGA_V;
00108     
00109     DEBUG(printf("[LP] Load Zero Voltage ST = %d\r\n", tensaoZero));
00110     DEBUG(printf("[LP] Load Undervoltage ST = %d\r\n", tensaoMinima));
00111     DEBUG(printf("[LP] Load Overvoltage  ST = %d\r\n", tensaoMaxima));
00112     
00113     if(isAlarmEnabled(ALARME_CARGA_TENSAO_ZERO)){
00114         alarm.writeAlarm(ALARME_CARGA_TENSAO_ZERO, tensaoZero, getAlarmState(ALARME_CARGA_TENSAO_ZERO));
00115     }
00116     if(isAlarmEnabled(ALARME_CARGA_TENSAO_MINIMA)){
00117         alarm.writeAlarm(ALARME_CARGA_TENSAO_MINIMA, tensaoMinima, getAlarmState(ALARME_CARGA_TENSAO_MINIMA));
00118     }
00119     if(isAlarmEnabled(ALARME_CARGA_TENSAO_MAXIMA)){
00120         alarm.writeAlarm(ALARME_CARGA_TENSAO_MAXIMA, tensaoMaxima, getAlarmState(ALARME_CARGA_TENSAO_MAXIMA));
00121     }
00122     
00123     correnteZero = ch3 < APP_PARAMETERS.LIMITE_CORRENTE_ZERO_A.floatValue;
00124     correnteMinima = ch3 < APP_PARAMETERS.LIMITE_CORRENTE_MINIMA_A.floatValue;
00125     correnteMaxima = ch3 > APP_PARAMETERS.LIMITE_CORRENTE_MAXIMA_A.floatValue;
00126     
00127     DEBUG(printf("[LP] Zero Current ST = %d\r\n", correnteZero));
00128     DEBUG(printf("[LP] Undercurrent ST = %d\r\n", correnteMinima));
00129     DEBUG(printf("[LP] Overcurrent  ST = %d\r\n", correnteMaxima));
00130     
00131     if(isAlarmEnabled(ALARME_CORRENTE_ZERO)){
00132         alarm.writeAlarm(ALARME_CORRENTE_ZERO, correnteZero, getAlarmState(ALARME_CORRENTE_ZERO));
00133     }
00134     if(isAlarmEnabled(ALARME_CORRENTE_MINIMA)){
00135         alarm.writeAlarm(ALARME_CORRENTE_MINIMA, correnteMinima, getAlarmState(ALARME_CORRENTE_MINIMA));
00136     }
00137     if(isAlarmEnabled(ALARME_CORRENTE_MAXIMA)){
00138         alarm.writeAlarm(ALARME_CORRENTE_MAXIMA, correnteMaxima, getAlarmState(ALARME_CORRENTE_MAXIMA));
00139     }
00140 
00141 }