![](/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@31:647771325538, 2015-05-01 (annotated)
- Committer:
- rebonatto
- Date:
- Fri May 01 14:46:08 2015 +0000
- Revision:
- 31:647771325538
- Parent:
- 30:9bf44d2785d5
- Child:
- 32:8b108d8089e8
Ajustes para processar FFT com float e retirar o vm das amostras.
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 | 31:647771325538 | 51 | float buf[NUMBER_OF_SAMPLES*2]; |
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 | 31:647771325538 | 104 | mv2 = 0; |
rebonatto | 31:647771325538 | 105 | Capture::CopyBufferFloat(m_Channel,buf); |
rebonatto | 31:647771325538 | 106 | |
rebonatto | 31:647771325538 | 107 | /* Retira o valorMedio de todas as amostras */ |
rebonatto | 31:647771325538 | 108 | for(i=0; i < NUMBER_OF_SAMPLES; i++){ |
rebonatto | 31:647771325538 | 109 | buf[i] -= mv2; |
rebonatto | 31:647771325538 | 110 | mv2 += buf[i]; |
rebonatto | 31:647771325538 | 111 | } |
rebonatto | 31:647771325538 | 112 | if ( m_EventCounter == Settings::get_EventLimit() ){ |
rebonatto | 31:647771325538 | 113 | mv2 = mv2 / NUMBER_OF_SAMPLES; |
rebonatto | 31:647771325538 | 114 | printf("Novo valor medio %f RMS original %f\n", mv2, rmsvalue); |
rebonatto | 31:647771325538 | 115 | } |
rebonatto | 29:fcfcb31a6362 | 116 | |
rebonatto | 31:647771325538 | 117 | rmsvalue = SignalProcessor::CalculateRMSSigned(buf, m_Channel); |
rebonatto | 31:647771325538 | 118 | if ( m_EventCounter == Settings::get_EventLimit() ) |
rebonatto | 31:647771325538 | 119 | printf("novo RMS %f\n", rmsvalue); |
rebonatto | 31:647771325538 | 120 | |
rebonatto | 29:fcfcb31a6362 | 121 | |
rebonatto | 0:66d8bd1f9d4c | 122 | if(!m_OutletTriggered) |
rebonatto | 0:66d8bd1f9d4c | 123 | { |
rebonatto | 31:647771325538 | 124 | if (rmsvalue > Settings::get_Limit(m_Channel)) { |
rebonatto | 31:647771325538 | 125 | if(m_EventCounter < Settings::get_EventLimit() ) |
rebonatto | 31:647771325538 | 126 | { |
rebonatto | 31:647771325538 | 127 | m_EventCounter++; |
rebonatto | 31:647771325538 | 128 | } |
rebonatto | 31:647771325538 | 129 | else |
rebonatto | 31:647771325538 | 130 | { |
rebonatto | 31:647771325538 | 131 | //printf("Deu evento de liga ou Fuga\n"); |
rebonatto | 31:647771325538 | 132 | if (m_Channel % 2 == 1) // Canais impares sao de diferencial |
rebonatto | 31:647771325538 | 133 | m_tempo.start(); |
rebonatto | 31:647771325538 | 134 | m_OutletTriggered = true; |
rebonatto | 31:647771325538 | 135 | Capture::Stop(); |
rebonatto | 31:647771325538 | 136 | OnTrigger(buf, rmsvalue, mv2, under, over, 0); //TODO: must change the parameter of this function call |
rebonatto | 31:647771325538 | 137 | //CommTCP::RequestAcom(); |
rebonatto | 31:647771325538 | 138 | //zzz |
rebonatto | 31:647771325538 | 139 | Capture::Start(); |
rebonatto | 31:647771325538 | 140 | m_EventCounter = 0; |
rebonatto | 31:647771325538 | 141 | } |
rebonatto | 0:66d8bd1f9d4c | 142 | } |
rebonatto | 0:66d8bd1f9d4c | 143 | } |
rebonatto | 0:66d8bd1f9d4c | 144 | else |
rebonatto | 0:66d8bd1f9d4c | 145 | m_EventCounter = 0; |
rebonatto | 0:66d8bd1f9d4c | 146 | } |
rebonatto | 0:66d8bd1f9d4c | 147 | else |
rebonatto | 0:66d8bd1f9d4c | 148 | { |
rebonatto | 0:66d8bd1f9d4c | 149 | if(m_OutletTriggered) |
rebonatto | 0:66d8bd1f9d4c | 150 | { |
rebonatto | 0:66d8bd1f9d4c | 151 | if(m_EventCounter < Settings::get_EventLimit()) |
rebonatto | 0:66d8bd1f9d4c | 152 | { |
rebonatto | 0:66d8bd1f9d4c | 153 | m_EventCounter++; |
rebonatto | 0:66d8bd1f9d4c | 154 | } |
rebonatto | 0:66d8bd1f9d4c | 155 | else |
rebonatto | 0:66d8bd1f9d4c | 156 | { |
rebonatto | 0:66d8bd1f9d4c | 157 | //printf("Terminou evento de liga ou Fuga\n"); |
rebonatto | 0:66d8bd1f9d4c | 158 | if (m_Channel % 2 == 1){ // Canais impares sao de diferencial |
rebonatto | 0:66d8bd1f9d4c | 159 | //m_tempo.stop(); |
rebonatto | 0:66d8bd1f9d4c | 160 | tempofuga = (int) (Settings::get_EventLimit() * UMCICLO) + m_tempo.read_ms(); |
rebonatto | 0:66d8bd1f9d4c | 161 | //printf("Limite %d\n", (int) (Settings::get_EventLimit() * UMCICLO)); |
rebonatto | 0:66d8bd1f9d4c | 162 | m_tempo.reset(); |
rebonatto | 0:66d8bd1f9d4c | 163 | } |
rebonatto | 0:66d8bd1f9d4c | 164 | else |
rebonatto | 0:66d8bd1f9d4c | 165 | tempofuga = 0; |
rebonatto | 0:66d8bd1f9d4c | 166 | m_OutletTriggered = false; |
rebonatto | 0:66d8bd1f9d4c | 167 | Capture::Stop(); |
rebonatto | 31:647771325538 | 168 | OnTrigger(buf, rmsvalue, mv2, under, over, tempofuga);//TODO: must change the parameter of this function call |
rebonatto | 0:66d8bd1f9d4c | 169 | //printf("===> contliga %d contdesliga %d\n", contliga, contdesl); |
rebonatto | 0:66d8bd1f9d4c | 170 | //zzz |
rebonatto | 0:66d8bd1f9d4c | 171 | Capture::Start(); |
rebonatto | 0:66d8bd1f9d4c | 172 | m_EventCounter = 0; |
rebonatto | 0:66d8bd1f9d4c | 173 | } |
rebonatto | 0:66d8bd1f9d4c | 174 | } |
rebonatto | 0:66d8bd1f9d4c | 175 | else |
rebonatto | 0:66d8bd1f9d4c | 176 | m_EventCounter = 0; |
rebonatto | 0:66d8bd1f9d4c | 177 | } |
rebonatto | 0:66d8bd1f9d4c | 178 | } // Final gerafuga |
rebonatto | 0:66d8bd1f9d4c | 179 | } |
rebonatto | 0:66d8bd1f9d4c | 180 | |
rebonatto | 0:66d8bd1f9d4c | 181 | void EventDetector::ShowValues(CaptureEvent* e) |
rebonatto | 0:66d8bd1f9d4c | 182 | { |
rebonatto | 0:66d8bd1f9d4c | 183 | printf("RFID: %s\n", e->get_RFID()); |
rebonatto | 0:66d8bd1f9d4c | 184 | printf("type: %d\n", e->get_Type()); |
rebonatto | 0:66d8bd1f9d4c | 185 | printf("OutletNr: %d\n", e->get_OutletNumber()); |
rebonatto | 0:66d8bd1f9d4c | 186 | printf("MeanValue: %f\n", e->get_MeanValue()); |
rebonatto | 0:66d8bd1f9d4c | 187 | printf("MV2: %f\n", e->get_MV2()); |
rebonatto | 0:66d8bd1f9d4c | 188 | printf("RMSValue: %f\n", e->get_RMSValue()); |
rebonatto | 0:66d8bd1f9d4c | 189 | printf("Underflow: %d\n", e->get_Under()); |
rebonatto | 0:66d8bd1f9d4c | 190 | printf("Overflow: %d\n", e->get_Over()); |
rebonatto | 0:66d8bd1f9d4c | 191 | printf("Gain: %f\n", e->get_Gain()); |
rebonatto | 0:66d8bd1f9d4c | 192 | printf("Offset: %d\n", e->get_Offset()); |
rebonatto | 0:66d8bd1f9d4c | 193 | printf("Duration: %d\n", e->get_Duration()); |
rebonatto | 0:66d8bd1f9d4c | 194 | |
rebonatto | 0:66d8bd1f9d4c | 195 | int i; |
rebonatto | 0:66d8bd1f9d4c | 196 | for(i=0;i<12;i++) |
rebonatto | 0:66d8bd1f9d4c | 197 | { |
rebonatto | 0:66d8bd1f9d4c | 198 | printf("Harm %d Sen %f Cos %f\n ", i, e->get_SineValue(i), e->get_CossineValue(i)); |
rebonatto | 0:66d8bd1f9d4c | 199 | } |
rebonatto | 0:66d8bd1f9d4c | 200 | |
rebonatto | 0:66d8bd1f9d4c | 201 | } |
rebonatto | 0:66d8bd1f9d4c | 202 | |
rebonatto | 0:66d8bd1f9d4c | 203 | //void EventDetector::OnTrigger(float rmsvalue) |
rebonatto | 31:647771325538 | 204 | void EventDetector::OnTrigger(float *buf, float rmsvalue, float mv2, int under, int over, int duration) |
rebonatto | 0:66d8bd1f9d4c | 205 | { |
rebonatto | 31:647771325538 | 206 | SendMessage(0, buf, rmsvalue, mv2, under, over, duration); |
rebonatto | 0:66d8bd1f9d4c | 207 | //printf("Ontrigger::Enviou mensagem\n"); |
rebonatto | 0:66d8bd1f9d4c | 208 | /* |
rebonatto | 0:66d8bd1f9d4c | 209 | if(m_OutletTriggered) |
rebonatto | 0:66d8bd1f9d4c | 210 | { |
rebonatto | 0:66d8bd1f9d4c | 211 | for(int i=0;i<Settings::get_MaxChannels();i++) |
rebonatto | 0:66d8bd1f9d4c | 212 | { |
rebonatto | 0:66d8bd1f9d4c | 213 | //Thread::wait(300); |
rebonatto | 0:66d8bd1f9d4c | 214 | if(i != m_Channel){ |
rebonatto | 0:66d8bd1f9d4c | 215 | //printf("Ontrigger::Enviou acompanhamento %d\n", i); |
rebonatto | 0:66d8bd1f9d4c | 216 | get_Detector(i).ExternalTrigger(); |
rebonatto | 0:66d8bd1f9d4c | 217 | } |
rebonatto | 0:66d8bd1f9d4c | 218 | } |
rebonatto | 0:66d8bd1f9d4c | 219 | //printf("Ontrigger::Enviou acompanhamentos %d\n"); |
rebonatto | 0:66d8bd1f9d4c | 220 | } |
rebonatto | 0:66d8bd1f9d4c | 221 | */ |
rebonatto | 0:66d8bd1f9d4c | 222 | } |
rebonatto | 0:66d8bd1f9d4c | 223 | |
rebonatto | 0:66d8bd1f9d4c | 224 | void EventDetector::ExternalTrigger() |
rebonatto | 0:66d8bd1f9d4c | 225 | { |
rebonatto | 0:66d8bd1f9d4c | 226 | // Ajustar valores de mv2, under, over e duration na chamada!!! |
rebonatto | 31:647771325538 | 227 | SendMessage(1, NULL, 0, 0, 0, 0, 0); |
rebonatto | 0:66d8bd1f9d4c | 228 | } |
rebonatto | 0:66d8bd1f9d4c | 229 | |
rebonatto | 0:66d8bd1f9d4c | 230 | //void EventDetector::SendMessage(int ext,float rmsvalue) |
rebonatto | 31:647771325538 | 231 | void EventDetector::SendMessage(int ext, float *buf, float rmsvalue, float mv2, int under, int over, int duration) |
rebonatto | 0:66d8bd1f9d4c | 232 | { |
rebonatto | 2:628a25bb5d62 | 233 | int flagrfid = 0; |
rebonatto | 0:66d8bd1f9d4c | 234 | //printf("Chegou SendMessage\n"); |
rebonatto | 0:66d8bd1f9d4c | 235 | //Here we must alloc a CaptureEvent object from mailbox pool, |
rebonatto | 0:66d8bd1f9d4c | 236 | CaptureEvent* event = GetMailbox().alloc(); |
rebonatto | 0:66d8bd1f9d4c | 237 | //printf("Capturou evento\n"); |
rebonatto | 0:66d8bd1f9d4c | 238 | //then initialize the object properly |
rebonatto | 0:66d8bd1f9d4c | 239 | |
rebonatto | 31:647771325538 | 240 | /* O buffer foi coletado no ProcessEvent para retirada do VM |
rebonatto | 0:66d8bd1f9d4c | 241 | unsigned short int buf[NUMBER_OF_SAMPLES]; |
rebonatto | 0:66d8bd1f9d4c | 242 | Capture::CopyBuffer(m_Channel,buf); |
rebonatto | 31:647771325538 | 243 | */ |
rebonatto | 0:66d8bd1f9d4c | 244 | if(ext) |
rebonatto | 0:66d8bd1f9d4c | 245 | { |
rebonatto | 0:66d8bd1f9d4c | 246 | rmsvalue = 0;//SignalProcessor::CalculateRMS(buf,m_Channel); |
rebonatto | 0:66d8bd1f9d4c | 247 | } |
rebonatto | 0:66d8bd1f9d4c | 248 | |
rebonatto | 0:66d8bd1f9d4c | 249 | float seno[NUMBER_OF_HARMONICS+1],coss[NUMBER_OF_HARMONICS+1],mv; |
rebonatto | 0:66d8bd1f9d4c | 250 | //SignalProcessor::CalculateFFT(buf,sen,cos,&mv,1); |
rebonatto | 0:66d8bd1f9d4c | 251 | |
rebonatto | 0:66d8bd1f9d4c | 252 | int type=0,outlet_number=0, aux=0; |
rebonatto | 0:66d8bd1f9d4c | 253 | aux = Settings::get_OutletNumber(m_Channel); |
rebonatto | 0:66d8bd1f9d4c | 254 | outlet_number = Settings::get_Outlet(aux); |
rebonatto | 0:66d8bd1f9d4c | 255 | |
rebonatto | 0:66d8bd1f9d4c | 256 | //Temporario - Sem leitor de RFID |
rebonatto | 1:fe2d4530da1b | 257 | //char rfid[9] = "1234560"; |
rebonatto | 1:fe2d4530da1b | 258 | //rfid[7] = (char)outlet_number + '0'; |
rebonatto | 0:66d8bd1f9d4c | 259 | |
rebonatto | 0:66d8bd1f9d4c | 260 | // Com leitor de RFID |
rebonatto | 1:fe2d4530da1b | 261 | char rfid[9]; |
rebonatto | 1:fe2d4530da1b | 262 | rfid[0] = '\0'; |
rebonatto | 0:66d8bd1f9d4c | 263 | //send hitag request |
rebonatto | 0:66d8bd1f9d4c | 264 | //capture hitag response |
rebonatto | 0:66d8bd1f9d4c | 265 | //printf("OUTLET=%d\n",outlet_index+1); |
rebonatto | 2:628a25bb5d62 | 266 | |
rebonatto | 2:628a25bb5d62 | 267 | //Capture::ReadRFID(outlet_number+1,rfid); |
rebonatto | 2:628a25bb5d62 | 268 | if (Settings::get_ReadRfid()){ |
rebonatto | 1:fe2d4530da1b | 269 | if (! Capture::ReadRFID(outlet_number+1,rfid) ){ // não leu tag RFID |
rebonatto | 2:628a25bb5d62 | 270 | //printf("Entrou\n"); |
rebonatto | 2:628a25bb5d62 | 271 | flagrfid = 1; |
rebonatto | 1:fe2d4530da1b | 272 | } |
rebonatto | 2:628a25bb5d62 | 273 | } |
rebonatto | 2:628a25bb5d62 | 274 | if (! flagrfid){ |
rebonatto | 2:628a25bb5d62 | 275 | strcpy(rfid, "1234560"); |
rebonatto | 2:628a25bb5d62 | 276 | rfid[7] = (char)outlet_number + '0'; |
rebonatto | 2:628a25bb5d62 | 277 | } |
rebonatto | 2:628a25bb5d62 | 278 | //printf("#%s#\n", rfid); |
rebonatto | 0:66d8bd1f9d4c | 279 | |
rebonatto | 0:66d8bd1f9d4c | 280 | if(Settings::get_Purpose(m_Channel) == 'p') // phase channel |
rebonatto | 0:66d8bd1f9d4c | 281 | { |
rebonatto | 0:66d8bd1f9d4c | 282 | if(ext!=0) |
rebonatto | 0:66d8bd1f9d4c | 283 | type = 3; |
rebonatto | 0:66d8bd1f9d4c | 284 | else |
rebonatto | 0:66d8bd1f9d4c | 285 | { |
rebonatto | 0:66d8bd1f9d4c | 286 | if(m_OutletTriggered) |
rebonatto | 0:66d8bd1f9d4c | 287 | type = 4; // power on event |
rebonatto | 0:66d8bd1f9d4c | 288 | else |
rebonatto | 0:66d8bd1f9d4c | 289 | type = 5; // power off event |
rebonatto | 0:66d8bd1f9d4c | 290 | } |
rebonatto | 0:66d8bd1f9d4c | 291 | } |
rebonatto | 0:66d8bd1f9d4c | 292 | if(Settings::get_Purpose(m_Channel) == 'd') // diferential channel (leakage) |
rebonatto | 0:66d8bd1f9d4c | 293 | { |
rebonatto | 0:66d8bd1f9d4c | 294 | if(ext!=0) |
rebonatto | 0:66d8bd1f9d4c | 295 | type = 2; |
rebonatto | 0:66d8bd1f9d4c | 296 | else |
rebonatto | 0:66d8bd1f9d4c | 297 | { |
rebonatto | 0:66d8bd1f9d4c | 298 | if(m_OutletTriggered) |
rebonatto | 0:66d8bd1f9d4c | 299 | type = 1; // start leakage event |
rebonatto | 0:66d8bd1f9d4c | 300 | else |
rebonatto | 0:66d8bd1f9d4c | 301 | type = 6; // stop leakage event |
rebonatto | 0:66d8bd1f9d4c | 302 | } |
rebonatto | 0:66d8bd1f9d4c | 303 | } |
rebonatto | 0:66d8bd1f9d4c | 304 | |
rebonatto | 0:66d8bd1f9d4c | 305 | //printf("Vai calcular a FFT\n"); |
rebonatto | 0:66d8bd1f9d4c | 306 | if (type == 1 || type == 2 || type == 4) // Calula FFT s nos eventos de fuga, acompanhamento de fuga (diferencial) e liga |
rebonatto | 0:66d8bd1f9d4c | 307 | SignalProcessor::CalculateFFT(buf,seno,coss,&mv,1, m_Channel); |
rebonatto | 0:66d8bd1f9d4c | 308 | /* |
rebonatto | 0:66d8bd1f9d4c | 309 | for(int y=0; y < 12; y++) |
rebonatto | 0:66d8bd1f9d4c | 310 | printf("[%d] sen %f cos %f\n", y, seno[y], coss[y]); |
rebonatto | 0:66d8bd1f9d4c | 311 | */ |
rebonatto | 0:66d8bd1f9d4c | 312 | else |
rebonatto | 0:66d8bd1f9d4c | 313 | for(int i=0; i < Settings::get_MaxHarmonics(); i++) |
rebonatto | 0:66d8bd1f9d4c | 314 | seno[i] = coss[i] = 0; |
rebonatto | 0:66d8bd1f9d4c | 315 | |
rebonatto | 0:66d8bd1f9d4c | 316 | //printf("Passou calcular FFT\n"); |
rebonatto | 0:66d8bd1f9d4c | 317 | if (type == 1) |
rebonatto | 0:66d8bd1f9d4c | 318 | printf("Fuga na tomada %d com rms %f\n", outlet_number, rmsvalue); |
rebonatto | 0:66d8bd1f9d4c | 319 | |
rebonatto | 0:66d8bd1f9d4c | 320 | if (type == 4) |
rebonatto | 0:66d8bd1f9d4c | 321 | printf("Liga na tomada %d com rms %f\n", outlet_number, rmsvalue); |
rebonatto | 0:66d8bd1f9d4c | 322 | |
rebonatto | 0:66d8bd1f9d4c | 323 | if (type == 5) |
rebonatto | 0:66d8bd1f9d4c | 324 | printf("Desliga na tomada %d com rms %f\n", outlet_number, rmsvalue); |
rebonatto | 0:66d8bd1f9d4c | 325 | |
rebonatto | 0:66d8bd1f9d4c | 326 | if (type == 6) |
rebonatto | 0:66d8bd1f9d4c | 327 | printf("Final de fuga na tomada %d com rms %f\n", outlet_number, rmsvalue); |
rebonatto | 0:66d8bd1f9d4c | 328 | |
rebonatto | 0:66d8bd1f9d4c | 329 | //event->Setup(rfid,type,outlet_number,mv,rmsvalue,Settings::get_Gain(m_Channel),Settings::get_Offset(m_Channel),seno,coss); |
rebonatto | 0:66d8bd1f9d4c | 330 | |
rebonatto | 0:66d8bd1f9d4c | 331 | //printf("Chegou montar evento\n"); |
rebonatto | 0:66d8bd1f9d4c | 332 | 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 | 333 | |
rebonatto | 0:66d8bd1f9d4c | 334 | //printf("\n\nDuration: %d\n\n", duration); |
rebonatto | 0:66d8bd1f9d4c | 335 | // ShowValues(event); |
rebonatto | 0:66d8bd1f9d4c | 336 | |
rebonatto | 0:66d8bd1f9d4c | 337 | //and finally place the object in the mailbox queue. |
rebonatto | 29:fcfcb31a6362 | 338 | // GetMailbox().put(event); |
rebonatto | 0:66d8bd1f9d4c | 339 | //printf("Deu put no evento no mailBox\n"); |
rebonatto | 0:66d8bd1f9d4c | 340 | } |
rebonatto | 0:66d8bd1f9d4c | 341 | |
rebonatto | 0:66d8bd1f9d4c | 342 | int EventDetector::TimeDelay(int t){ |
rebonatto | 0:66d8bd1f9d4c | 343 | switch (t){ |
rebonatto | 0:66d8bd1f9d4c | 344 | case 0: return 300; |
rebonatto | 0:66d8bd1f9d4c | 345 | case 1: return 250; |
rebonatto | 0:66d8bd1f9d4c | 346 | case 2: return 200; |
rebonatto | 0:66d8bd1f9d4c | 347 | case 3: return 250; |
rebonatto | 0:66d8bd1f9d4c | 348 | case 4: return 200; |
rebonatto | 0:66d8bd1f9d4c | 349 | default: return 150; |
rebonatto | 0:66d8bd1f9d4c | 350 | } |
rebonatto | 0:66d8bd1f9d4c | 351 | } |