![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Versão limpa em 04/09/2014. Telnet funcionando.
Dependencies: EthernetInterface mbed-rtos mbed NTPClient
Codes/EventDetector.cpp@33:3abe9d906312, 2015-05-03 (annotated)
- Committer:
- rebonatto
- Date:
- Sun May 03 22:31:53 2015 +0000
- Revision:
- 33:3abe9d906312
- Parent:
- 32:8b108d8089e8
- Child:
- 34:f1927c94cf8f
Retirado Valor medio. Calculada fft com valores float j? indo em mA.; Resulta muitos valores pequenos.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
rebonatto | 0:66d8bd1f9d4c | 1 | /* |
rebonatto | 0:66d8bd1f9d4c | 2 | * EventDetector.cpp |
rebonatto | 0:66d8bd1f9d4c | 3 | * |
rebonatto | 0:66d8bd1f9d4c | 4 | * Created on: |
rebonatto | 0:66d8bd1f9d4c | 5 | * Author: |
rebonatto | 0:66d8bd1f9d4c | 6 | */ |
rebonatto | 0:66d8bd1f9d4c | 7 | |
rebonatto | 0:66d8bd1f9d4c | 8 | #include "EventDetector.h" |
rebonatto | 0:66d8bd1f9d4c | 9 | #include "CommTCP.h" |
rebonatto | 0:66d8bd1f9d4c | 10 | |
rebonatto | 0:66d8bd1f9d4c | 11 | #define MARCA 10 |
rebonatto | 0:66d8bd1f9d4c | 12 | #define GERAFUGA 0 |
rebonatto | 0:66d8bd1f9d4c | 13 | #define UMCICLO 16.666666667 |
rebonatto | 31:647771325538 | 14 | |
rebonatto | 0:66d8bd1f9d4c | 15 | CaptureMailbox EventDetector::m_EventMailbox; |
rebonatto | 0:66d8bd1f9d4c | 16 | EventDetector EventDetector::m_Detector[NUMBER_OF_CHANNELS] = {0,1,2,3,4,5}; |
rebonatto | 0:66d8bd1f9d4c | 17 | |
rebonatto | 0:66d8bd1f9d4c | 18 | CaptureEvent::CaptureEvent() |
rebonatto | 0:66d8bd1f9d4c | 19 | { |
rebonatto | 0:66d8bd1f9d4c | 20 | } |
rebonatto | 0:66d8bd1f9d4c | 21 | |
rebonatto | 0:66d8bd1f9d4c | 22 | //void CaptureEvent::Setup(char* rfid,int type,int outlet,float mv,float rms,float gain, int offset,float* sin, float* cos) |
rebonatto | 0:66d8bd1f9d4c | 23 | void CaptureEvent::Setup(char* rfid, int type, int outlet, float mv, float mv2, float rms, int under, int over, float gain, int offset, int duration, float* sin, float* cos) |
rebonatto | 0:66d8bd1f9d4c | 24 | { |
rebonatto | 0:66d8bd1f9d4c | 25 | memcpy(m_RFID,rfid,9); |
rebonatto | 0:66d8bd1f9d4c | 26 | m_Type = type; |
rebonatto | 0:66d8bd1f9d4c | 27 | m_OutletNumber = outlet; |
rebonatto | 0:66d8bd1f9d4c | 28 | m_MeanValue = mv; |
rebonatto | 0:66d8bd1f9d4c | 29 | m_MV2 = mv2; |
rebonatto | 0:66d8bd1f9d4c | 30 | m_RMSValue = rms; |
rebonatto | 0:66d8bd1f9d4c | 31 | m_Under = under; |
rebonatto | 0:66d8bd1f9d4c | 32 | m_Over = over; |
rebonatto | 0:66d8bd1f9d4c | 33 | m_Gain = gain; |
rebonatto | 0:66d8bd1f9d4c | 34 | m_Offset = offset; |
rebonatto | 0:66d8bd1f9d4c | 35 | m_Duration = duration; |
rebonatto | 0:66d8bd1f9d4c | 36 | memcpy(m_Sin,sin,Settings::get_MaxHarmonics()*sizeof(float)); |
rebonatto | 0:66d8bd1f9d4c | 37 | memcpy(m_Cos,cos,Settings::get_MaxHarmonics()*sizeof(float)); |
rebonatto | 0:66d8bd1f9d4c | 38 | } |
rebonatto | 0:66d8bd1f9d4c | 39 | |
rebonatto | 0:66d8bd1f9d4c | 40 | EventDetector::EventDetector(int ch) |
rebonatto | 0:66d8bd1f9d4c | 41 | { |
rebonatto | 0:66d8bd1f9d4c | 42 | m_Channel = ch; |
rebonatto | 0:66d8bd1f9d4c | 43 | m_OutletTriggered = false; |
rebonatto | 0:66d8bd1f9d4c | 44 | m_EventCounter = 0; |
rebonatto | 0:66d8bd1f9d4c | 45 | } |
rebonatto | 0:66d8bd1f9d4c | 46 | |
rebonatto | 0:66d8bd1f9d4c | 47 | //void EventDetector::ProcessEvent(float rmsvalue, int t) |
rebonatto | 0:66d8bd1f9d4c | 48 | void EventDetector::ProcessEvent(float rmsvalue, float mv2, int under, int over) |
rebonatto | 0:66d8bd1f9d4c | 49 | { |
rebonatto | 31:647771325538 | 50 | int i, tempofuga = 0; |
rebonatto | 32:8b108d8089e8 | 51 | float buf[NUMBER_OF_SAMPLES*2], newvm; |
rebonatto | 0:66d8bd1f9d4c | 52 | |
rebonatto | 0:66d8bd1f9d4c | 53 | //Thread::wait(500);//TimeDelay(t)); |
rebonatto | 0:66d8bd1f9d4c | 54 | //printf("%d time delay\n", TimeDelay(t)); |
rebonatto | 0:66d8bd1f9d4c | 55 | if (GERAFUGA && (m_Channel % 2 == 0) ){ |
rebonatto | 0:66d8bd1f9d4c | 56 | /* |
rebonatto | 0:66d8bd1f9d4c | 57 | if (cont % MARCA == 0) |
rebonatto | 0:66d8bd1f9d4c | 58 | printf("Envia Fuga %d %d\n", cont, TimeDelay(m_Channel)); |
rebonatto | 0:66d8bd1f9d4c | 59 | cont++; |
rebonatto | 0:66d8bd1f9d4c | 60 | */ |
rebonatto | 0:66d8bd1f9d4c | 61 | // Fuga |
rebonatto | 0:66d8bd1f9d4c | 62 | m_OutletTriggered = true; |
rebonatto | 0:66d8bd1f9d4c | 63 | Capture::Stop(); |
rebonatto | 0:66d8bd1f9d4c | 64 | //printf("Passou Stop\n"); |
rebonatto | 0:66d8bd1f9d4c | 65 | //CommTCP::RequestAcom(); |
rebonatto | 31:647771325538 | 66 | OnTrigger(NULL,rmsvalue, mv2, under, over, 0); //TODO: must change the parameter of this function call |
rebonatto | 0:66d8bd1f9d4c | 67 | //printf("Passou OnTriger\n"); |
rebonatto | 0:66d8bd1f9d4c | 68 | Capture::Start(); |
rebonatto | 0:66d8bd1f9d4c | 69 | //printf("Passou Start\n"); |
rebonatto | 0:66d8bd1f9d4c | 70 | m_EventCounter = 0; |
rebonatto | 0:66d8bd1f9d4c | 71 | |
rebonatto | 0:66d8bd1f9d4c | 72 | Thread::wait(2); |
rebonatto | 0:66d8bd1f9d4c | 73 | // Termino |
rebonatto | 0:66d8bd1f9d4c | 74 | /* |
rebonatto | 0:66d8bd1f9d4c | 75 | if (cont % MARCA == 0) |
rebonatto | 0:66d8bd1f9d4c | 76 | printf("Envia Termino\n"); |
rebonatto | 0:66d8bd1f9d4c | 77 | */ |
rebonatto | 0:66d8bd1f9d4c | 78 | m_OutletTriggered = false; |
rebonatto | 0:66d8bd1f9d4c | 79 | Capture::Stop(); |
rebonatto | 0:66d8bd1f9d4c | 80 | //printf("Passou Stop\n"); |
rebonatto | 31:647771325538 | 81 | OnTrigger(NULL, rmsvalue, mv2, under, over, 0);//TODO: must change the parameter of this function call |
rebonatto | 0:66d8bd1f9d4c | 82 | //printf("Passou onTrigger\n"); |
rebonatto | 0:66d8bd1f9d4c | 83 | Capture::Start(); |
rebonatto | 0:66d8bd1f9d4c | 84 | //printf("Passou Start\n"); |
rebonatto | 0:66d8bd1f9d4c | 85 | m_EventCounter = 0; |
rebonatto | 0:66d8bd1f9d4c | 86 | |
rebonatto | 0:66d8bd1f9d4c | 87 | Thread::wait(2); |
rebonatto | 0:66d8bd1f9d4c | 88 | } |
rebonatto | 0:66d8bd1f9d4c | 89 | else{ |
rebonatto | 0:66d8bd1f9d4c | 90 | /* |
rebonatto | 0:66d8bd1f9d4c | 91 | unsigned short int buf[NUMBER_OF_SAMPLES]; |
rebonatto | 0:66d8bd1f9d4c | 92 | Capture::CopyBuffer(m_Channel,buf); |
rebonatto | 0:66d8bd1f9d4c | 93 | if ( (rmsvalue > 200) && (m_Channel == 0) ){ |
rebonatto | 0:66d8bd1f9d4c | 94 | for(int y=0; y< 256; y++) |
rebonatto | 0:66d8bd1f9d4c | 95 | printf("%d*",buf |
rebonatto | 0:66d8bd1f9d4c | 96 | [y]); |
rebonatto | 0:66d8bd1f9d4c | 97 | printf("\n"); |
rebonatto | 0:66d8bd1f9d4c | 98 | } |
rebonatto | 0:66d8bd1f9d4c | 99 | */ |
rebonatto | 29:fcfcb31a6362 | 100 | if(rmsvalue > Settings::get_Limit(m_Channel)) |
rebonatto | 0:66d8bd1f9d4c | 101 | { |
rebonatto | 31:647771325538 | 102 | /* Retira o VM das amostras */ |
rebonatto | 31:647771325538 | 103 | //pega os dados da captura atual |
rebonatto | 32:8b108d8089e8 | 104 | newvm = 0; |
rebonatto | 31:647771325538 | 105 | Capture::CopyBufferFloat(m_Channel,buf); |
rebonatto | 33:3abe9d906312 | 106 | /* |
rebonatto | 33:3abe9d906312 | 107 | if ( m_EventCounter == Settings::get_EventLimit() ){ |
rebonatto | 33:3abe9d906312 | 108 | printf("Valores originais\n"); |
rebonatto | 33:3abe9d906312 | 109 | for(i=0; i < NUMBER_OF_SAMPLES; i++){ |
rebonatto | 33:3abe9d906312 | 110 | printf("%.2f,", buf[i]); |
rebonatto | 33:3abe9d906312 | 111 | } |
rebonatto | 33:3abe9d906312 | 112 | } |
rebonatto | 33:3abe9d906312 | 113 | */ |
rebonatto | 33:3abe9d906312 | 114 | /* Retira o valorMedio de todas as amostras */ |
rebonatto | 31:647771325538 | 115 | for(i=0; i < NUMBER_OF_SAMPLES; i++){ |
rebonatto | 31:647771325538 | 116 | buf[i] -= mv2; |
rebonatto | 32:8b108d8089e8 | 117 | newvm += buf[i]; |
rebonatto | 31:647771325538 | 118 | } |
rebonatto | 33:3abe9d906312 | 119 | /* |
rebonatto | 33:3abe9d906312 | 120 | if ( m_EventCounter == Settings::get_EventLimit() ){ |
rebonatto | 33:3abe9d906312 | 121 | printf("\nSem valor medio\n"); |
rebonatto | 33:3abe9d906312 | 122 | for(i=0; i < NUMBER_OF_SAMPLES; i++){ |
rebonatto | 33:3abe9d906312 | 123 | printf("%.2f,", buf[i]); |
rebonatto | 33:3abe9d906312 | 124 | } |
rebonatto | 33:3abe9d906312 | 125 | printf("\n"); |
rebonatto | 33:3abe9d906312 | 126 | } |
rebonatto | 33:3abe9d906312 | 127 | */ |
rebonatto | 33:3abe9d906312 | 128 | |
rebonatto | 31:647771325538 | 129 | if ( m_EventCounter == Settings::get_EventLimit() ){ |
rebonatto | 32:8b108d8089e8 | 130 | mv2 = newvm / NUMBER_OF_SAMPLES; |
rebonatto | 32:8b108d8089e8 | 131 | //printf("Novo valor medio %f RMS original %f\n", mv2, rmsvalue); |
rebonatto | 31:647771325538 | 132 | } |
rebonatto | 29:fcfcb31a6362 | 133 | |
rebonatto | 32:8b108d8089e8 | 134 | rmsvalue = SignalProcessor::CalculateRMSFloat(buf, m_Channel); |
rebonatto | 32:8b108d8089e8 | 135 | /* |
rebonatto | 31:647771325538 | 136 | if ( m_EventCounter == Settings::get_EventLimit() ) |
rebonatto | 31:647771325538 | 137 | printf("novo RMS %f\n", rmsvalue); |
rebonatto | 32:8b108d8089e8 | 138 | */ |
rebonatto | 29:fcfcb31a6362 | 139 | |
rebonatto | 0:66d8bd1f9d4c | 140 | if(!m_OutletTriggered) |
rebonatto | 0:66d8bd1f9d4c | 141 | { |
rebonatto | 31:647771325538 | 142 | if (rmsvalue > Settings::get_Limit(m_Channel)) { |
rebonatto | 31:647771325538 | 143 | if(m_EventCounter < Settings::get_EventLimit() ) |
rebonatto | 31:647771325538 | 144 | { |
rebonatto | 31:647771325538 | 145 | m_EventCounter++; |
rebonatto | 31:647771325538 | 146 | } |
rebonatto | 31:647771325538 | 147 | else |
rebonatto | 31:647771325538 | 148 | { |
rebonatto | 31:647771325538 | 149 | //printf("Deu evento de liga ou Fuga\n"); |
rebonatto | 31:647771325538 | 150 | if (m_Channel % 2 == 1) // Canais impares sao de diferencial |
rebonatto | 31:647771325538 | 151 | m_tempo.start(); |
rebonatto | 31:647771325538 | 152 | m_OutletTriggered = true; |
rebonatto | 31:647771325538 | 153 | Capture::Stop(); |
rebonatto | 31:647771325538 | 154 | OnTrigger(buf, rmsvalue, mv2, under, over, 0); //TODO: must change the parameter of this function call |
rebonatto | 31:647771325538 | 155 | //CommTCP::RequestAcom(); |
rebonatto | 31:647771325538 | 156 | //zzz |
rebonatto | 31:647771325538 | 157 | Capture::Start(); |
rebonatto | 31:647771325538 | 158 | m_EventCounter = 0; |
rebonatto | 31:647771325538 | 159 | } |
rebonatto | 0:66d8bd1f9d4c | 160 | } |
rebonatto | 0:66d8bd1f9d4c | 161 | } |
rebonatto | 0:66d8bd1f9d4c | 162 | else |
rebonatto | 0:66d8bd1f9d4c | 163 | m_EventCounter = 0; |
rebonatto | 0:66d8bd1f9d4c | 164 | } |
rebonatto | 0:66d8bd1f9d4c | 165 | else |
rebonatto | 0:66d8bd1f9d4c | 166 | { |
rebonatto | 0:66d8bd1f9d4c | 167 | if(m_OutletTriggered) |
rebonatto | 0:66d8bd1f9d4c | 168 | { |
rebonatto | 0:66d8bd1f9d4c | 169 | if(m_EventCounter < Settings::get_EventLimit()) |
rebonatto | 0:66d8bd1f9d4c | 170 | { |
rebonatto | 0:66d8bd1f9d4c | 171 | m_EventCounter++; |
rebonatto | 0:66d8bd1f9d4c | 172 | } |
rebonatto | 0:66d8bd1f9d4c | 173 | else |
rebonatto | 0:66d8bd1f9d4c | 174 | { |
rebonatto | 0:66d8bd1f9d4c | 175 | //printf("Terminou evento de liga ou Fuga\n"); |
rebonatto | 0:66d8bd1f9d4c | 176 | if (m_Channel % 2 == 1){ // Canais impares sao de diferencial |
rebonatto | 0:66d8bd1f9d4c | 177 | //m_tempo.stop(); |
rebonatto | 0:66d8bd1f9d4c | 178 | tempofuga = (int) (Settings::get_EventLimit() * UMCICLO) + m_tempo.read_ms(); |
rebonatto | 0:66d8bd1f9d4c | 179 | //printf("Limite %d\n", (int) (Settings::get_EventLimit() * UMCICLO)); |
rebonatto | 0:66d8bd1f9d4c | 180 | m_tempo.reset(); |
rebonatto | 0:66d8bd1f9d4c | 181 | } |
rebonatto | 0:66d8bd1f9d4c | 182 | else |
rebonatto | 0:66d8bd1f9d4c | 183 | tempofuga = 0; |
rebonatto | 0:66d8bd1f9d4c | 184 | m_OutletTriggered = false; |
rebonatto | 0:66d8bd1f9d4c | 185 | Capture::Stop(); |
rebonatto | 31:647771325538 | 186 | OnTrigger(buf, rmsvalue, mv2, under, over, tempofuga);//TODO: must change the parameter of this function call |
rebonatto | 0:66d8bd1f9d4c | 187 | //printf("===> contliga %d contdesliga %d\n", contliga, contdesl); |
rebonatto | 0:66d8bd1f9d4c | 188 | //zzz |
rebonatto | 0:66d8bd1f9d4c | 189 | Capture::Start(); |
rebonatto | 0:66d8bd1f9d4c | 190 | m_EventCounter = 0; |
rebonatto | 0:66d8bd1f9d4c | 191 | } |
rebonatto | 0:66d8bd1f9d4c | 192 | } |
rebonatto | 0:66d8bd1f9d4c | 193 | else |
rebonatto | 0:66d8bd1f9d4c | 194 | m_EventCounter = 0; |
rebonatto | 0:66d8bd1f9d4c | 195 | } |
rebonatto | 33:3abe9d906312 | 196 | } // Final gerafuga |
rebonatto | 0:66d8bd1f9d4c | 197 | } |
rebonatto | 0:66d8bd1f9d4c | 198 | |
rebonatto | 0:66d8bd1f9d4c | 199 | void EventDetector::ShowValues(CaptureEvent* e) |
rebonatto | 0:66d8bd1f9d4c | 200 | { |
rebonatto | 0:66d8bd1f9d4c | 201 | printf("RFID: %s\n", e->get_RFID()); |
rebonatto | 0:66d8bd1f9d4c | 202 | printf("type: %d\n", e->get_Type()); |
rebonatto | 0:66d8bd1f9d4c | 203 | printf("OutletNr: %d\n", e->get_OutletNumber()); |
rebonatto | 0:66d8bd1f9d4c | 204 | printf("MeanValue: %f\n", e->get_MeanValue()); |
rebonatto | 0:66d8bd1f9d4c | 205 | printf("MV2: %f\n", e->get_MV2()); |
rebonatto | 0:66d8bd1f9d4c | 206 | printf("RMSValue: %f\n", e->get_RMSValue()); |
rebonatto | 0:66d8bd1f9d4c | 207 | printf("Underflow: %d\n", e->get_Under()); |
rebonatto | 0:66d8bd1f9d4c | 208 | printf("Overflow: %d\n", e->get_Over()); |
rebonatto | 0:66d8bd1f9d4c | 209 | printf("Gain: %f\n", e->get_Gain()); |
rebonatto | 0:66d8bd1f9d4c | 210 | printf("Offset: %d\n", e->get_Offset()); |
rebonatto | 0:66d8bd1f9d4c | 211 | printf("Duration: %d\n", e->get_Duration()); |
rebonatto | 0:66d8bd1f9d4c | 212 | |
rebonatto | 0:66d8bd1f9d4c | 213 | int i; |
rebonatto | 0:66d8bd1f9d4c | 214 | for(i=0;i<12;i++) |
rebonatto | 0:66d8bd1f9d4c | 215 | { |
rebonatto | 0:66d8bd1f9d4c | 216 | printf("Harm %d Sen %f Cos %f\n ", i, e->get_SineValue(i), e->get_CossineValue(i)); |
rebonatto | 32:8b108d8089e8 | 217 | } |
rebonatto | 0:66d8bd1f9d4c | 218 | } |
rebonatto | 0:66d8bd1f9d4c | 219 | |
rebonatto | 0:66d8bd1f9d4c | 220 | //void EventDetector::OnTrigger(float rmsvalue) |
rebonatto | 31:647771325538 | 221 | void EventDetector::OnTrigger(float *buf, float rmsvalue, float mv2, int under, int over, int duration) |
rebonatto | 0:66d8bd1f9d4c | 222 | { |
rebonatto | 31:647771325538 | 223 | SendMessage(0, buf, rmsvalue, mv2, under, over, duration); |
rebonatto | 0:66d8bd1f9d4c | 224 | //printf("Ontrigger::Enviou mensagem\n"); |
rebonatto | 0:66d8bd1f9d4c | 225 | /* |
rebonatto | 0:66d8bd1f9d4c | 226 | if(m_OutletTriggered) |
rebonatto | 0:66d8bd1f9d4c | 227 | { |
rebonatto | 0:66d8bd1f9d4c | 228 | for(int i=0;i<Settings::get_MaxChannels();i++) |
rebonatto | 0:66d8bd1f9d4c | 229 | { |
rebonatto | 0:66d8bd1f9d4c | 230 | //Thread::wait(300); |
rebonatto | 0:66d8bd1f9d4c | 231 | if(i != m_Channel){ |
rebonatto | 0:66d8bd1f9d4c | 232 | //printf("Ontrigger::Enviou acompanhamento %d\n", i); |
rebonatto | 0:66d8bd1f9d4c | 233 | get_Detector(i).ExternalTrigger(); |
rebonatto | 0:66d8bd1f9d4c | 234 | } |
rebonatto | 0:66d8bd1f9d4c | 235 | } |
rebonatto | 0:66d8bd1f9d4c | 236 | //printf("Ontrigger::Enviou acompanhamentos %d\n"); |
rebonatto | 0:66d8bd1f9d4c | 237 | } |
rebonatto | 0:66d8bd1f9d4c | 238 | */ |
rebonatto | 0:66d8bd1f9d4c | 239 | } |
rebonatto | 0:66d8bd1f9d4c | 240 | |
rebonatto | 0:66d8bd1f9d4c | 241 | void EventDetector::ExternalTrigger() |
rebonatto | 0:66d8bd1f9d4c | 242 | { |
rebonatto | 0:66d8bd1f9d4c | 243 | // Ajustar valores de mv2, under, over e duration na chamada!!! |
rebonatto | 31:647771325538 | 244 | SendMessage(1, NULL, 0, 0, 0, 0, 0); |
rebonatto | 0:66d8bd1f9d4c | 245 | } |
rebonatto | 0:66d8bd1f9d4c | 246 | |
rebonatto | 0:66d8bd1f9d4c | 247 | //void EventDetector::SendMessage(int ext,float rmsvalue) |
rebonatto | 31:647771325538 | 248 | void EventDetector::SendMessage(int ext, float *buf, float rmsvalue, float mv2, int under, int over, int duration) |
rebonatto | 0:66d8bd1f9d4c | 249 | { |
rebonatto | 2:628a25bb5d62 | 250 | int flagrfid = 0; |
rebonatto | 0:66d8bd1f9d4c | 251 | //printf("Chegou SendMessage\n"); |
rebonatto | 0:66d8bd1f9d4c | 252 | //Here we must alloc a CaptureEvent object from mailbox pool, |
rebonatto | 0:66d8bd1f9d4c | 253 | CaptureEvent* event = GetMailbox().alloc(); |
rebonatto | 0:66d8bd1f9d4c | 254 | //printf("Capturou evento\n"); |
rebonatto | 0:66d8bd1f9d4c | 255 | //then initialize the object properly |
rebonatto | 0:66d8bd1f9d4c | 256 | |
rebonatto | 31:647771325538 | 257 | /* O buffer foi coletado no ProcessEvent para retirada do VM |
rebonatto | 0:66d8bd1f9d4c | 258 | unsigned short int buf[NUMBER_OF_SAMPLES]; |
rebonatto | 0:66d8bd1f9d4c | 259 | Capture::CopyBuffer(m_Channel,buf); |
rebonatto | 31:647771325538 | 260 | */ |
rebonatto | 0:66d8bd1f9d4c | 261 | if(ext) |
rebonatto | 0:66d8bd1f9d4c | 262 | { |
rebonatto | 0:66d8bd1f9d4c | 263 | rmsvalue = 0;//SignalProcessor::CalculateRMS(buf,m_Channel); |
rebonatto | 0:66d8bd1f9d4c | 264 | } |
rebonatto | 0:66d8bd1f9d4c | 265 | |
rebonatto | 0:66d8bd1f9d4c | 266 | float seno[NUMBER_OF_HARMONICS+1],coss[NUMBER_OF_HARMONICS+1],mv; |
rebonatto | 0:66d8bd1f9d4c | 267 | //SignalProcessor::CalculateFFT(buf,sen,cos,&mv,1); |
rebonatto | 0:66d8bd1f9d4c | 268 | |
rebonatto | 0:66d8bd1f9d4c | 269 | int type=0,outlet_number=0, aux=0; |
rebonatto | 0:66d8bd1f9d4c | 270 | aux = Settings::get_OutletNumber(m_Channel); |
rebonatto | 0:66d8bd1f9d4c | 271 | outlet_number = Settings::get_Outlet(aux); |
rebonatto | 0:66d8bd1f9d4c | 272 | |
rebonatto | 0:66d8bd1f9d4c | 273 | //Temporario - Sem leitor de RFID |
rebonatto | 1:fe2d4530da1b | 274 | //char rfid[9] = "1234560"; |
rebonatto | 1:fe2d4530da1b | 275 | //rfid[7] = (char)outlet_number + '0'; |
rebonatto | 0:66d8bd1f9d4c | 276 | |
rebonatto | 0:66d8bd1f9d4c | 277 | // Com leitor de RFID |
rebonatto | 1:fe2d4530da1b | 278 | char rfid[9]; |
rebonatto | 1:fe2d4530da1b | 279 | rfid[0] = '\0'; |
rebonatto | 0:66d8bd1f9d4c | 280 | //send hitag request |
rebonatto | 0:66d8bd1f9d4c | 281 | //capture hitag response |
rebonatto | 0:66d8bd1f9d4c | 282 | //printf("OUTLET=%d\n",outlet_index+1); |
rebonatto | 2:628a25bb5d62 | 283 | |
rebonatto | 2:628a25bb5d62 | 284 | //Capture::ReadRFID(outlet_number+1,rfid); |
rebonatto | 2:628a25bb5d62 | 285 | if (Settings::get_ReadRfid()){ |
rebonatto | 1:fe2d4530da1b | 286 | if (! Capture::ReadRFID(outlet_number+1,rfid) ){ // não leu tag RFID |
rebonatto | 2:628a25bb5d62 | 287 | //printf("Entrou\n"); |
rebonatto | 2:628a25bb5d62 | 288 | flagrfid = 1; |
rebonatto | 1:fe2d4530da1b | 289 | } |
rebonatto | 2:628a25bb5d62 | 290 | } |
rebonatto | 2:628a25bb5d62 | 291 | if (! flagrfid){ |
rebonatto | 2:628a25bb5d62 | 292 | strcpy(rfid, "1234560"); |
rebonatto | 2:628a25bb5d62 | 293 | rfid[7] = (char)outlet_number + '0'; |
rebonatto | 2:628a25bb5d62 | 294 | } |
rebonatto | 2:628a25bb5d62 | 295 | //printf("#%s#\n", rfid); |
rebonatto | 0:66d8bd1f9d4c | 296 | |
rebonatto | 0:66d8bd1f9d4c | 297 | if(Settings::get_Purpose(m_Channel) == 'p') // phase channel |
rebonatto | 0:66d8bd1f9d4c | 298 | { |
rebonatto | 0:66d8bd1f9d4c | 299 | if(ext!=0) |
rebonatto | 0:66d8bd1f9d4c | 300 | type = 3; |
rebonatto | 0:66d8bd1f9d4c | 301 | else |
rebonatto | 0:66d8bd1f9d4c | 302 | { |
rebonatto | 0:66d8bd1f9d4c | 303 | if(m_OutletTriggered) |
rebonatto | 0:66d8bd1f9d4c | 304 | type = 4; // power on event |
rebonatto | 0:66d8bd1f9d4c | 305 | else |
rebonatto | 0:66d8bd1f9d4c | 306 | type = 5; // power off event |
rebonatto | 0:66d8bd1f9d4c | 307 | } |
rebonatto | 0:66d8bd1f9d4c | 308 | } |
rebonatto | 0:66d8bd1f9d4c | 309 | if(Settings::get_Purpose(m_Channel) == 'd') // diferential channel (leakage) |
rebonatto | 0:66d8bd1f9d4c | 310 | { |
rebonatto | 0:66d8bd1f9d4c | 311 | if(ext!=0) |
rebonatto | 0:66d8bd1f9d4c | 312 | type = 2; |
rebonatto | 0:66d8bd1f9d4c | 313 | else |
rebonatto | 0:66d8bd1f9d4c | 314 | { |
rebonatto | 0:66d8bd1f9d4c | 315 | if(m_OutletTriggered) |
rebonatto | 0:66d8bd1f9d4c | 316 | type = 1; // start leakage event |
rebonatto | 0:66d8bd1f9d4c | 317 | else |
rebonatto | 0:66d8bd1f9d4c | 318 | type = 6; // stop leakage event |
rebonatto | 0:66d8bd1f9d4c | 319 | } |
rebonatto | 0:66d8bd1f9d4c | 320 | } |
rebonatto | 0:66d8bd1f9d4c | 321 | |
rebonatto | 0:66d8bd1f9d4c | 322 | //printf("Vai calcular a FFT\n"); |
rebonatto | 0:66d8bd1f9d4c | 323 | if (type == 1 || type == 2 || type == 4) // Calula FFT s nos eventos de fuga, acompanhamento de fuga (diferencial) e liga |
rebonatto | 0:66d8bd1f9d4c | 324 | SignalProcessor::CalculateFFT(buf,seno,coss,&mv,1, m_Channel); |
rebonatto | 0:66d8bd1f9d4c | 325 | /* |
rebonatto | 0:66d8bd1f9d4c | 326 | for(int y=0; y < 12; y++) |
rebonatto | 0:66d8bd1f9d4c | 327 | printf("[%d] sen %f cos %f\n", y, seno[y], coss[y]); |
rebonatto | 0:66d8bd1f9d4c | 328 | */ |
rebonatto | 0:66d8bd1f9d4c | 329 | else |
rebonatto | 0:66d8bd1f9d4c | 330 | for(int i=0; i < Settings::get_MaxHarmonics(); i++) |
rebonatto | 0:66d8bd1f9d4c | 331 | seno[i] = coss[i] = 0; |
rebonatto | 0:66d8bd1f9d4c | 332 | |
rebonatto | 0:66d8bd1f9d4c | 333 | //printf("Passou calcular FFT\n"); |
rebonatto | 0:66d8bd1f9d4c | 334 | if (type == 1) |
rebonatto | 0:66d8bd1f9d4c | 335 | printf("Fuga na tomada %d com rms %f\n", outlet_number, rmsvalue); |
rebonatto | 0:66d8bd1f9d4c | 336 | |
rebonatto | 0:66d8bd1f9d4c | 337 | if (type == 4) |
rebonatto | 0:66d8bd1f9d4c | 338 | printf("Liga na tomada %d com rms %f\n", outlet_number, rmsvalue); |
rebonatto | 0:66d8bd1f9d4c | 339 | |
rebonatto | 0:66d8bd1f9d4c | 340 | if (type == 5) |
rebonatto | 0:66d8bd1f9d4c | 341 | printf("Desliga na tomada %d com rms %f\n", outlet_number, rmsvalue); |
rebonatto | 0:66d8bd1f9d4c | 342 | |
rebonatto | 0:66d8bd1f9d4c | 343 | if (type == 6) |
rebonatto | 0:66d8bd1f9d4c | 344 | printf("Final de fuga na tomada %d com rms %f\n", outlet_number, rmsvalue); |
rebonatto | 0:66d8bd1f9d4c | 345 | |
rebonatto | 0:66d8bd1f9d4c | 346 | //event->Setup(rfid,type,outlet_number,mv,rmsvalue,Settings::get_Gain(m_Channel),Settings::get_Offset(m_Channel),seno,coss); |
rebonatto | 0:66d8bd1f9d4c | 347 | |
rebonatto | 0:66d8bd1f9d4c | 348 | //printf("Chegou montar evento\n"); |
rebonatto | 0:66d8bd1f9d4c | 349 | event->Setup(rfid,type,outlet_number,mv,mv2, rmsvalue,under, over, Settings::get_Gain(m_Channel),Settings::get_Offset(m_Channel),duration, seno,coss); |
rebonatto | 0:66d8bd1f9d4c | 350 | |
rebonatto | 0:66d8bd1f9d4c | 351 | //printf("\n\nDuration: %d\n\n", duration); |
rebonatto | 33:3abe9d906312 | 352 | //ShowValues(event); |
rebonatto | 0:66d8bd1f9d4c | 353 | |
rebonatto | 0:66d8bd1f9d4c | 354 | //and finally place the object in the mailbox queue. |
rebonatto | 33:3abe9d906312 | 355 | GetMailbox().put(event); |
rebonatto | 0:66d8bd1f9d4c | 356 | //printf("Deu put no evento no mailBox\n"); |
rebonatto | 0:66d8bd1f9d4c | 357 | } |
rebonatto | 0:66d8bd1f9d4c | 358 | |
rebonatto | 0:66d8bd1f9d4c | 359 | int EventDetector::TimeDelay(int t){ |
rebonatto | 0:66d8bd1f9d4c | 360 | switch (t){ |
rebonatto | 0:66d8bd1f9d4c | 361 | case 0: return 300; |
rebonatto | 0:66d8bd1f9d4c | 362 | case 1: return 250; |
rebonatto | 0:66d8bd1f9d4c | 363 | case 2: return 200; |
rebonatto | 0:66d8bd1f9d4c | 364 | case 3: return 250; |
rebonatto | 0:66d8bd1f9d4c | 365 | case 4: return 200; |
rebonatto | 0:66d8bd1f9d4c | 366 | default: return 150; |
rebonatto | 0:66d8bd1f9d4c | 367 | } |
rebonatto | 0:66d8bd1f9d4c | 368 | } |