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

Dependencies:   EthernetInterface mbed-rtos mbed NTPClient

Revision:
42:d6f9ce115eaf
Parent:
37:51fed2a3e009
Child:
43:69afea5f5a4d
--- 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;