Versão limpa em 04/09/2014. Telnet funcionando.

Dependencies:   EthernetInterface mbed-rtos mbed NTPClient

Committer:
rebonatto
Date:
Thu Jul 30 21:42:06 2015 +0000
Revision:
37:51fed2a3e009
Parent:
34:f1927c94cf8f
Child:
42:d6f9ce115eaf
Altera??es no formato do RFID colocado quando n?o ocorre leitura.

Who changed what in which revision?

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