EZR

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

Fork of smartRamalKW by Equipe Firmware V2COM

Committer:
fprado
Date:
Thu Jun 16 18:55:57 2016 +0000
Revision:
35:78614a27b9e6
Parent:
25:2c578b923ea9
temporary snapshot

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tpadovani 10:7a1d1abb5172 1 #include "memoriaMassa.h"
tpadovani 10:7a1d1abb5172 2
tpadovani 22:b66e36356dd4 3 void MemoriaMassa::iniciaLeituras(int periodoSec, int size, int sector1, int sector2, int sector3){
tpadovani 10:7a1d1abb5172 4 mmPeriodoSec = periodoSec;
tpadovani 22:b66e36356dd4 5 if(APP_PARAMETERS.ENABLE_LOAD_PROFILE > 0) {
tpadovani 22:b66e36356dd4 6 queue[0].init(size, sector1);
tpadovani 22:b66e36356dd4 7 queue[1].init(size, sector2);
tpadovani 22:b66e36356dd4 8 queue[2].init(size, sector3);
tpadovani 22:b66e36356dd4 9 }
tpadovani 10:7a1d1abb5172 10 leituraPeriodica.attach(this, &MemoriaMassa::disparaLeitura, mmPeriodoSec);
tpadovani 22:b66e36356dd4 11 DEBUG(printf("[LP] Periodic Reading started (%d seconds)\r\n", mmPeriodoSec));
tpadovani 10:7a1d1abb5172 12 }
tpadovani 10:7a1d1abb5172 13
tpadovani 10:7a1d1abb5172 14 void MemoriaMassa::disparaLeitura(){
tpadovani 10:7a1d1abb5172 15 lerAgora = true;
tpadovani 10:7a1d1abb5172 16 }
tpadovani 10:7a1d1abb5172 17
tpadovani 10:7a1d1abb5172 18 void MemoriaMassa::executaLeitura(){
tpadovani 10:7a1d1abb5172 19 if(!lerAgora){
tpadovani 10:7a1d1abb5172 20 return;
tpadovani 10:7a1d1abb5172 21 }
tpadovani 10:7a1d1abb5172 22
tpadovani 22:b66e36356dd4 23 float f1 = getInstVoltage(0);
tpadovani 22:b66e36356dd4 24 float f2 = getInstVoltage(1);
tpadovani 22:b66e36356dd4 25 float f3 = getInstCurrent();
tpadovani 13:eed9484a89bc 26
tpadovani 23:85202a52482d 27 if(APP_PARAMETERS.LOAD_CHANNEL == 0){
tpadovani 23:85202a52482d 28 f1 = f2 - f1;
tpadovani 23:85202a52482d 29 } else{
tpadovani 23:85202a52482d 30 f2 = f1 - f2;
tpadovani 23:85202a52482d 31 }
tpadovani 23:85202a52482d 32
tpadovani 22:b66e36356dd4 33 if(APP_PARAMETERS.ENABLE_LOAD_PROFILE > 0) {
tpadovani 22:b66e36356dd4 34 LeituraMM leitura;
tpadovani 22:b66e36356dd4 35 leitura.value.floatValue = f1;
tpadovani 22:b66e36356dd4 36 leitura.time = time(NULL);
tpadovani 22:b66e36356dd4 37 queue[0].add((char*)&leitura);
tpadovani 13:eed9484a89bc 38
tpadovani 22:b66e36356dd4 39 leitura.value.floatValue = f2;
tpadovani 22:b66e36356dd4 40 queue[1].add((char*)&leitura);
tpadovani 22:b66e36356dd4 41
tpadovani 22:b66e36356dd4 42 leitura.value.floatValue = f3;
tpadovani 22:b66e36356dd4 43 queue[2].add((char*)&leitura);
tpadovani 22:b66e36356dd4 44
tpadovani 25:2c578b923ea9 45 DEBUG(printf("[LP] Reading time = %s\r\n", ctime(&(leitura.time))));
tpadovani 22:b66e36356dd4 46 DEBUG(printf("[LP] New record stored: Time=%d, Ch0=%f\r\n", leitura.time, f1));
tpadovani 22:b66e36356dd4 47 DEBUG(printf("[LP] New record stored: Time=%d, Ch1=%f\r\n", leitura.time, f2));
tpadovani 22:b66e36356dd4 48 DEBUG(printf("[LP] New record stored: Time=%d, Ch2=%f\r\n", leitura.time, f3));
tpadovani 22:b66e36356dd4 49 }
tpadovani 22:b66e36356dd4 50
tpadovani 22:b66e36356dd4 51 checkAlarms(f1, f2, f3);
tpadovani 10:7a1d1abb5172 52
tpadovani 10:7a1d1abb5172 53 lerAgora = false;
tpadovani 10:7a1d1abb5172 54 }
tpadovani 10:7a1d1abb5172 55
tpadovani 10:7a1d1abb5172 56 char* MemoriaMassa::getMM(int channel){
tpadovani 22:b66e36356dd4 57 if(channel < 0 || channel > 2){
tpadovani 22:b66e36356dd4 58 DEBUG(printf("[LP] Invalid channel %d\r\n", channel));
tpadovani 10:7a1d1abb5172 59 return NULL;
tpadovani 10:7a1d1abb5172 60 }
tpadovani 10:7a1d1abb5172 61 return queue[channel].getAll();
tpadovani 10:7a1d1abb5172 62 }
tpadovani 13:eed9484a89bc 63
tpadovani 22:b66e36356dd4 64 void MemoriaMassa::checkAlarms(float ch1, float ch2, float ch3){
tpadovani 22:b66e36356dd4 65 bool tensaoZero, tensaoMinima, tensaoMaxima, correnteZero, correnteMinima, correnteMaxima;
tpadovani 25:2c578b923ea9 66 int linha, carga, limiteZeroLinha, limiteZeroCarga;
tpadovani 13:eed9484a89bc 67 if(APP_PARAMETERS.LOAD_CHANNEL == 0){
tpadovani 13:eed9484a89bc 68 linha = (int)ch2;
tpadovani 13:eed9484a89bc 69 carga = (int)ch1;
tpadovani 25:2c578b923ea9 70 limiteZeroLinha = APP_PARAMETERS.LIMITE_TENSAO_ZERO_CH1_V;
tpadovani 25:2c578b923ea9 71 limiteZeroCarga = APP_PARAMETERS.LIMITE_TENSAO_ZERO_CH0_V;
tpadovani 13:eed9484a89bc 72 } else{
tpadovani 13:eed9484a89bc 73 linha = (int)ch1;
tpadovani 13:eed9484a89bc 74 carga = (int)ch2;
tpadovani 25:2c578b923ea9 75 limiteZeroLinha = APP_PARAMETERS.LIMITE_TENSAO_ZERO_CH0_V;
tpadovani 25:2c578b923ea9 76 limiteZeroCarga = APP_PARAMETERS.LIMITE_TENSAO_ZERO_CH1_V;
tpadovani 13:eed9484a89bc 77 }
tpadovani 22:b66e36356dd4 78
tpadovani 24:69e7e7079915 79 if((linha - carga) > (linha*APP_PARAMETERS.LIMITE_TENSAO_SENSOR_V)/100.0){
tpadovani 24:69e7e7079915 80 ledLoad = LED_ON;
tpadovani 24:69e7e7079915 81 } else if((linha - carga) < -(linha*APP_PARAMETERS.LIMITE_TENSAO_SENSOR_V)/100.0){
tpadovani 22:b66e36356dd4 82 ledLoad = LED_ON;
tpadovani 22:b66e36356dd4 83 } else{
tpadovani 22:b66e36356dd4 84 ledLoad = LED_OFF;
tpadovani 22:b66e36356dd4 85 }
tpadovani 22:b66e36356dd4 86
tpadovani 25:2c578b923ea9 87 tensaoZero = linha < limiteZeroLinha;
tpadovani 13:eed9484a89bc 88 tensaoMinima = linha < APP_PARAMETERS.LIMITE_TENSAO_MINIMA_LINHA_V;
tpadovani 14:4963dc299580 89 tensaoMaxima = linha > APP_PARAMETERS.LIMITE_TENSAO_MAXIMA_LINHA_V;
tpadovani 13:eed9484a89bc 90
tpadovani 22:b66e36356dd4 91 DEBUG(printf("[LP] Line Zero Voltage ST = %d\r\n", tensaoZero));
tpadovani 22:b66e36356dd4 92 DEBUG(printf("[LP] Line Undervoltage ST = %d\r\n", tensaoMinima));
tpadovani 22:b66e36356dd4 93 DEBUG(printf("[LP] Line Overvoltage ST = %d\r\n", tensaoMaxima));
tpadovani 13:eed9484a89bc 94
tpadovani 13:eed9484a89bc 95 if(isAlarmEnabled(ALARME_LINHA_TENSAO_ZERO)){
tpadovani 13:eed9484a89bc 96 alarm.writeAlarm(ALARME_LINHA_TENSAO_ZERO, tensaoZero, getAlarmState(ALARME_LINHA_TENSAO_ZERO));
tpadovani 13:eed9484a89bc 97 }
tpadovani 13:eed9484a89bc 98 if(isAlarmEnabled(ALARME_LINHA_TENSAO_MINIMA)){
tpadovani 13:eed9484a89bc 99 alarm.writeAlarm(ALARME_LINHA_TENSAO_MINIMA, tensaoMinima, getAlarmState(ALARME_LINHA_TENSAO_MINIMA));
tpadovani 13:eed9484a89bc 100 }
tpadovani 13:eed9484a89bc 101 if(isAlarmEnabled(ALARME_LINHA_TENSAO_MAXIMA)){
tpadovani 13:eed9484a89bc 102 alarm.writeAlarm(ALARME_LINHA_TENSAO_MAXIMA, tensaoMaxima, getAlarmState(ALARME_LINHA_TENSAO_MAXIMA));
tpadovani 13:eed9484a89bc 103 }
tpadovani 13:eed9484a89bc 104
tpadovani 25:2c578b923ea9 105 tensaoZero = carga < limiteZeroCarga;
tpadovani 13:eed9484a89bc 106 tensaoMinima = carga < APP_PARAMETERS.LIMITE_TENSAO_MINIMA_CARGA_V;
tpadovani 14:4963dc299580 107 tensaoMaxima = carga > APP_PARAMETERS.LIMITE_TENSAO_MAXIMA_CARGA_V;
tpadovani 13:eed9484a89bc 108
tpadovani 22:b66e36356dd4 109 DEBUG(printf("[LP] Load Zero Voltage ST = %d\r\n", tensaoZero));
tpadovani 22:b66e36356dd4 110 DEBUG(printf("[LP] Load Undervoltage ST = %d\r\n", tensaoMinima));
tpadovani 22:b66e36356dd4 111 DEBUG(printf("[LP] Load Overvoltage ST = %d\r\n", tensaoMaxima));
tpadovani 13:eed9484a89bc 112
tpadovani 13:eed9484a89bc 113 if(isAlarmEnabled(ALARME_CARGA_TENSAO_ZERO)){
tpadovani 13:eed9484a89bc 114 alarm.writeAlarm(ALARME_CARGA_TENSAO_ZERO, tensaoZero, getAlarmState(ALARME_CARGA_TENSAO_ZERO));
tpadovani 13:eed9484a89bc 115 }
tpadovani 13:eed9484a89bc 116 if(isAlarmEnabled(ALARME_CARGA_TENSAO_MINIMA)){
tpadovani 13:eed9484a89bc 117 alarm.writeAlarm(ALARME_CARGA_TENSAO_MINIMA, tensaoMinima, getAlarmState(ALARME_CARGA_TENSAO_MINIMA));
tpadovani 13:eed9484a89bc 118 }
tpadovani 13:eed9484a89bc 119 if(isAlarmEnabled(ALARME_CARGA_TENSAO_MAXIMA)){
tpadovani 13:eed9484a89bc 120 alarm.writeAlarm(ALARME_CARGA_TENSAO_MAXIMA, tensaoMaxima, getAlarmState(ALARME_CARGA_TENSAO_MAXIMA));
tpadovani 13:eed9484a89bc 121 }
tpadovani 22:b66e36356dd4 122
tpadovani 25:2c578b923ea9 123 correnteZero = ch3 < APP_PARAMETERS.LIMITE_CORRENTE_ZERO_A.floatValue;
tpadovani 25:2c578b923ea9 124 correnteMinima = ch3 < APP_PARAMETERS.LIMITE_CORRENTE_MINIMA_A.floatValue;
tpadovani 25:2c578b923ea9 125 correnteMaxima = ch3 > APP_PARAMETERS.LIMITE_CORRENTE_MAXIMA_A.floatValue;
tpadovani 22:b66e36356dd4 126
tpadovani 22:b66e36356dd4 127 DEBUG(printf("[LP] Zero Current ST = %d\r\n", correnteZero));
tpadovani 22:b66e36356dd4 128 DEBUG(printf("[LP] Undercurrent ST = %d\r\n", correnteMinima));
tpadovani 22:b66e36356dd4 129 DEBUG(printf("[LP] Overcurrent ST = %d\r\n", correnteMaxima));
tpadovani 22:b66e36356dd4 130
tpadovani 22:b66e36356dd4 131 if(isAlarmEnabled(ALARME_CORRENTE_ZERO)){
tpadovani 22:b66e36356dd4 132 alarm.writeAlarm(ALARME_CORRENTE_ZERO, correnteZero, getAlarmState(ALARME_CORRENTE_ZERO));
tpadovani 22:b66e36356dd4 133 }
tpadovani 22:b66e36356dd4 134 if(isAlarmEnabled(ALARME_CORRENTE_MINIMA)){
tpadovani 22:b66e36356dd4 135 alarm.writeAlarm(ALARME_CORRENTE_MINIMA, correnteMinima, getAlarmState(ALARME_CORRENTE_MINIMA));
tpadovani 22:b66e36356dd4 136 }
tpadovani 22:b66e36356dd4 137 if(isAlarmEnabled(ALARME_CORRENTE_MAXIMA)){
tpadovani 22:b66e36356dd4 138 alarm.writeAlarm(ALARME_CORRENTE_MAXIMA, correnteMaxima, getAlarmState(ALARME_CORRENTE_MAXIMA));
tpadovani 22:b66e36356dd4 139 }
tpadovani 13:eed9484a89bc 140
tpadovani 13:eed9484a89bc 141 }