![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Versão limpa em 04/09/2014. Telnet funcionando.
Dependencies: EthernetInterface mbed-rtos mbed NTPClient
Diff: Codes/EventDetector.cpp
- Revision:
- 42:d6f9ce115eaf
- Parent:
- 37:51fed2a3e009
- Child:
- 43:69afea5f5a4d
diff -r b87bbdb97ac7 -r d6f9ce115eaf Codes/EventDetector.cpp --- a/Codes/EventDetector.cpp Thu Jan 14 17:26:05 2016 +0000 +++ b/Codes/EventDetector.cpp Mon Jan 18 18:01:59 2016 +0000 @@ -48,153 +48,85 @@ void EventDetector::ProcessEvent(float rmsvalue, float mv2, int under, int over) { int i, tempofuga = 0; - float buf[NUMBER_OF_SAMPLES*2], newvm; + //float buf[NUMBER_OF_SAMPLES*2], newvm; + float newvm, aux; - //Thread::wait(500);//TimeDelay(t)); - //printf("%d time delay\n", TimeDelay(t)); - if (GERAFUGA && (m_Channel % 2 == 0) ){ - /* - if (cont % MARCA == 0) - printf("Envia Fuga %d %d\n", cont, TimeDelay(m_Channel)); - cont++; - */ - // Fuga - m_OutletTriggered = true; - Capture::Stop(); - //printf("Passou Stop\n"); - //CommTCP::RequestAcom(); - OnTrigger(NULL,rmsvalue, mv2, under, over, 0); //TODO: must change the parameter of this function call - //printf("Passou OnTriger\n"); - Capture::Start(); - //printf("Passou Start\n"); - m_EventCounter = 0; + if(rmsvalue > Settings::get_Limit(m_Channel)) + { + /* Retira o VM das amostras */ + //pega os dados da captura atual + newvm = 0; + //Capture::CopyBufferFloat(m_Channel,buf); - Thread::wait(2); - // Termino - /* - if (cont % MARCA == 0) - printf("Envia Termino\n"); - */ - m_OutletTriggered = false; - Capture::Stop(); - //printf("Passou Stop\n"); - OnTrigger(NULL, rmsvalue, mv2, under, over, 0);//TODO: must change the parameter of this function call - //printf("Passou onTrigger\n"); - Capture::Start(); - //printf("Passou Start\n"); - m_EventCounter = 0; + /* Retira o valorMedio de todas as amostras */ + for(i=0; i < NUMBER_OF_SAMPLES; i++){ + aux = Capture::GetValue(i, m_Channel) - mv2; + Capture::PutValue(i, m_Channel, aux) ; + newvm += aux; + } + + if ( m_EventCounter == Settings::get_EventLimit() ){ + mv2 = newvm / NUMBER_OF_SAMPLES; + //printf("Novo valor medio %f RMS original %f\n", mv2, rmsvalue); + } - Thread::wait(2); - } - else{ - /* - unsigned short int buf[NUMBER_OF_SAMPLES]; - Capture::CopyBuffer(m_Channel,buf); - if ( (rmsvalue > 200) && (m_Channel == 0) ){ - for(int y=0; y< 256; y++) - printf("%d*",buf - [y]); - printf("\n"); - } - */ - if(rmsvalue > Settings::get_Limit(m_Channel)) + rmsvalue = SignalProcessor::CalculateRMSFloat(&Capture::m_AdcBuffers[m_Channel][0], m_Channel); + + if(!m_OutletTriggered) { - /* Retira o VM das amostras */ - //pega os dados da captura atual - newvm = 0; - Capture::CopyBufferFloat(m_Channel,buf); - /* - if ( m_EventCounter == Settings::get_EventLimit() ){ - printf("Valores originais\n"); - for(i=0; i < NUMBER_OF_SAMPLES; i++){ - printf("%.2f,", buf[i]); - } - } - */ - /* Retira o valorMedio de todas as amostras */ - for(i=0; i < NUMBER_OF_SAMPLES; i++){ - buf[i] -= mv2; - newvm += buf[i]; - } - - /* - if ( m_EventCounter == Settings::get_EventLimit() ){ - printf("\nSem valor medio\n"); - for(i=0; i < NUMBER_OF_SAMPLES; i++){ - printf("%.2f,", buf[i]); - } - printf("\n"); - } - */ - - if ( m_EventCounter == Settings::get_EventLimit() ){ - mv2 = newvm / NUMBER_OF_SAMPLES; - //printf("Novo valor medio %f RMS original %f\n", mv2, rmsvalue); - } - - rmsvalue = SignalProcessor::CalculateRMSFloat(buf, m_Channel); - /* - if ( m_EventCounter == Settings::get_EventLimit() ) - printf("novo RMS %f\n", rmsvalue); - */ - - if(!m_OutletTriggered) - { - if (rmsvalue > Settings::get_Limit(m_Channel)) { - if(m_EventCounter < Settings::get_EventLimit() ) - { - m_EventCounter++; - } - else - { - //printf("Deu evento de liga ou Fuga\n"); - if (m_Channel % 2 == 1) // Canais impares sao de diferencial - m_tempo.start(); - m_OutletTriggered = true; - Capture::Stop(); - OnTrigger(buf, rmsvalue, mv2, under, over, 0); //TODO: must change the parameter of this function call - //CommTCP::RequestAcom(); - //zzz - Capture::Start(); - m_EventCounter = 0; - } - } - } - else - m_EventCounter = 0; - } - else - { - if(m_OutletTriggered) - { - if(m_EventCounter < Settings::get_EventLimit()) + if (rmsvalue > Settings::get_Limit(m_Channel)) { + if(m_EventCounter < Settings::get_EventLimit() ) { m_EventCounter++; } else - { - //printf("Terminou evento de liga ou Fuga\n"); - if (m_Channel % 2 == 1){ // Canais impares sao de diferencial - //m_tempo.stop(); - tempofuga = (int) (Settings::get_EventLimit() * UMCICLO) + m_tempo.read_ms(); - //printf("Limite %d\n", (int) (Settings::get_EventLimit() * UMCICLO)); - m_tempo.reset(); - } - else - tempofuga = 0; - m_OutletTriggered = false; - Capture::Stop(); - OnTrigger(buf, rmsvalue, mv2, under, over, tempofuga);//TODO: must change the parameter of this function call - //printf("===> contliga %d contdesliga %d\n", contliga, contdesl); - //zzz - Capture::Start(); + { + //printf("Deu evento de liga ou Fuga\n"); + if (m_Channel % 2 == 1) // Canais impares sao de diferencial + m_tempo.start(); + m_OutletTriggered = true; + + //OnTrigger(buf, rmsvalue, mv2, under, over, 0); //TODO: must change the parameter of this function call + + SendMessage(0, rmsvalue, mv2, under, over, 0); + m_EventCounter = 0; } } + } + else + m_EventCounter = 0; + } + else + { + if(m_OutletTriggered) + { + if(m_EventCounter < Settings::get_EventLimit()) + { + m_EventCounter++; + } else + { + //printf("Terminou evento de liga ou Fuga\n"); + if (m_Channel % 2 == 1){ // Canais impares sao de diferencial + //m_tempo.stop(); + tempofuga = (int) (Settings::get_EventLimit() * UMCICLO) + m_tempo.read_ms(); + //printf("Limite %d\n", (int) (Settings::get_EventLimit() * UMCICLO)); + m_tempo.reset(); + } + else + tempofuga = 0; + m_OutletTriggered = false; + + SendMessage(0, rmsvalue, mv2, under, over, tempofuga); + //printf("===> contliga %d contdesliga %d\n", contliga, contdesl); + m_EventCounter = 0; + } } - } // Final gerafuga + else + m_EventCounter = 0; + } } void EventDetector::ShowValues(CaptureEvent* e) @@ -218,70 +150,37 @@ } } -//void EventDetector::OnTrigger(float rmsvalue) -void EventDetector::OnTrigger(float *buf, float rmsvalue, float mv2, int under, int over, int duration) -{ - SendMessage(0, buf, rmsvalue, mv2, under, over, duration); - //printf("Ontrigger::Enviou mensagem\n"); - /* - if(m_OutletTriggered) - { - for(int i=0;i<Settings::get_MaxChannels();i++) - { - //Thread::wait(300); - if(i != m_Channel){ - //printf("Ontrigger::Enviou acompanhamento %d\n", i); - get_Detector(i).ExternalTrigger(); - } - } - //printf("Ontrigger::Enviou acompanhamentos %d\n"); - } - */ -} void EventDetector::ExternalTrigger() { // Ajustar valores de mv2, under, over e duration na chamada!!! - SendMessage(1, NULL, 0, 0, 0, 0, 0); + SendMessage(1, 0, 0, 0, 0, 0); } //void EventDetector::SendMessage(int ext,float rmsvalue) -void EventDetector::SendMessage(int ext, float *buf, float rmsvalue, float mv2, int under, int over, int duration) +void EventDetector::SendMessage(int ext, float rmsvalue, float mv2, int under, int over, int duration) { int flagrfid = 0; - //printf("Chegou SendMessage\n"); + float seno[NUMBER_OF_HARMONICS+1],coss[NUMBER_OF_HARMONICS+1],mv; + int type=0,outlet_number=0, aux=0; + //Here we must alloc a CaptureEvent object from mailbox pool, - CaptureEvent* event = GetMailbox().alloc(); - //printf("Capturou evento\n"); //then initialize the object properly + CaptureEvent* event = GetMailbox().alloc(); - /* O buffer foi coletado no ProcessEvent para retirada do VM - unsigned short int buf[NUMBER_OF_SAMPLES]; - Capture::CopyBuffer(m_Channel,buf); - */ if(ext) { rmsvalue = 0;//SignalProcessor::CalculateRMS(buf,m_Channel); - } - - float seno[NUMBER_OF_HARMONICS+1],coss[NUMBER_OF_HARMONICS+1],mv; - //SignalProcessor::CalculateFFT(buf,sen,cos,&mv,1); - - int type=0,outlet_number=0, aux=0; + } + aux = Settings::get_OutletNumber(m_Channel); - outlet_number = Settings::get_Outlet(aux); - - //Temporario - Sem leitor de RFID - //char rfid[9] = "1234560"; - //rfid[7] = (char)outlet_number + '0'; - - // Com leitor de RFID + outlet_number = Settings::get_Outlet(aux); + char rfid[9], aux2[5]; //rfid[0] = '\0'; //send hitag request //capture hitag response - //printf("OUTLET=%d\n",outlet_index+1); - + //printf("OUTLET=%d\n",outlet_index+1); if (Settings::get_ReadRfid()){ @@ -325,13 +224,9 @@ } } - //printf("Vai calcular a FFT\n"); + if (type == 1 || type == 2 || type == 4) // Calula FFT s nos eventos de fuga, acompanhamento de fuga (diferencial) e liga - SignalProcessor::CalculateFFT(buf,seno,coss,&mv,1, m_Channel); - /* - for(int y=0; y < 12; y++) - printf("[%d] sen %f cos %f\n", y, seno[y], coss[y]); - */ + SignalProcessor::CalculateFFT(&Capture::m_AdcBuffers[m_Channel][0],seno,coss,&mv,1, m_Channel); else for(int i=0; i < Settings::get_MaxHarmonics(); i++) seno[i] = coss[i] = 0;