Exemplo n.º 1
0
        // Faz o monitoramento das TAGs, verificando se a flag que indica
        // uma transicao entre ambientes foi setada.
        public static void MonitoraTag()
        {
            // Roda essa thread enquanto o programa estiver vivo.
            // Caso seja apertado Enter, a flag vai para zero e a thread eh encerrada.
            while (GlobalData.FlagPrograma == 1)
            {
                // Verifica se a flag que indica transicao de ambientes foi setada.
                // Se sim, faz o reset das variaveis da TAG.
                if (GlobalData.FlagTrocaAmbiente == 1)
                {
                    Console.WriteLine("------------------------------------------------");
                    Console.WriteLine("Pico atual de RSSI da ANTENA 1 : {0}", GlobalData.PicoRSSIAnt1);
                    Console.WriteLine("Tempo do pico RSSI da ANTENA 1 : {0}", GlobalData.TempoPicoRSSIAnt1);
                    Console.WriteLine("Pico atual de RSSI da ANTENA 2 : {0}", GlobalData.PicoRSSIAnt2);
                    Console.WriteLine("Tempo do pico RSSI da ANTENA 2 : {0}", GlobalData.TempoPicoRSSIAnt2);
                    Console.WriteLine("------------------------------------------------");
                    MonitoramentoTAG.ResetaTAG();

                    // Escreve no prompt os dados obtidos.
                    //Console.WriteLine("Pico atual de RSSI da ANTENA 1 : {0}", GlobalData.PicoRSSIAnt1);
                    //Console.WriteLine("Tempo do pico RSSI da ANTENA 1 : {0}", GlobalData.TempoPicoRSSIAnt1);
                    //Console.WriteLine("Pico negativo atual da FREQUENCIA Doppler da ANTENA 1 : {0}", GlobalData.PicoNegFreqDopAnt1);
                    //Console.WriteLine("Tempo do pico negativo da FREQUENCIA Doppler da ANTENA 1 : {0}\n", GlobalData.TempoPicoNegFreqDopAnt1);

                    //Console.WriteLine("Pico atual de RSSI da ANTENA 2 : {0}", GlobalData.PicoRSSIAnt2);
                    //Console.WriteLine("Tempo do pico RSSI da ANTENA 2 : {0}", GlobalData.TempoPicoRSSIAnt2);
                    //Console.WriteLine("Pico negativo atual da Frequencia Doppler da ANTENA 2 : {0}", GlobalData.PicoNegFreqDopAnt2);
                    //Console.WriteLine("Tempo do pico negativo da FREQUENCIA Doppler da ANTENA 2 : {0}", GlobalData.TempoPicoNegFreqDopAnt2);
                    //Console.WriteLine("----------------------------------------------------------------------------------------------------------");
                }
                Thread.Sleep(100);
            }
        }
Exemplo n.º 2
0
        public static void MonitoraTag()
        {
            // Roda essa thread enquanto o programa estiver vivo.
            // Caso seja apertado Enter, a flag vai para zero e a thread eh encerrada.
            while (GlobalData.FlagPrograma == 1)
            {
                // Verifica se a flag que indica transicao de ambientes da leitoraUm
                // (SpeedwayR-10-9F-3F.local) foi setada. Se sim, faz o reset das variaveis da TAG.
                if (LeitoraUm.FlagTrocaAmbiente == 1)
                {
                    MonitoramentoTAG.ResetaTAG(1);
                }

                // Verifica se a flag que indica transicao de ambientes da leitoraDois
                // (SpeedwayR-10-9F-8C.local) foi setada. Se sim, faz o reset das variaveis da TAG.
                if (LeitoraDois.FlagTrocaAmbiente == 1)
                {
                    MonitoramentoTAG.ResetaTAG(2);
                }

                // Verifica se a flag que indica transicao de ambientes da leitoraTres
                // (SpeedwayR-10-9F-BB.local) foi setada. Se sim, faz o reset das variaveis da TAG.
                if (LeitoraTres.FlagTrocaAmbiente == 1)
                {
                    MonitoramentoTAG.ResetaTAG(3);
                }

                Thread.Sleep(100);
            }
        }
Exemplo n.º 3
0
 public static void MonitoraTag()
 {
     // Roda essa thread enquanto o programa estiver vivo.
     // Caso seja apertado Enter, a flag vai para zero e a thread eh encerrada.
     while (GlobalData.FlagPrograma == 1)
     {
         // Verifica se a flag que indica transicao de ambientes foi setada.
         // Se sim, faz o reset das variaveis da TAG.
         if (GlobalData.FlagTrocaAmbiente == 1)
         {
             MonitoramentoTAG.ResetaTAG();
         }
         Thread.Sleep(100);
     }
 }
Exemplo n.º 4
0
        // Funcao que faz a analise dos reports das TAGs dado uma determinada leitora.
        private static void AnalisaDadosTAG(ImpinjReader sender, TagReport report)
        {
            switch (sender.Address)
            {
            // Caso o report da TAG seja relacionado a Leitora #1, entra aqui.
            case "SpeedwayR-10-9F-3F.local":
                foreach (Tag tag in report)
                {
                    // Variavel do tipo Tags_TG que vai armazenar a tag que foi reportada agora.
                    Tags_TG TagAtual;

                    // Variavel que indica se aceita o report da TAG ou nao.
                    int TAGsReportsON = 0;

                    // Verifica o EPC das tags que estao registradas para verificar se o report dessa TAG
                    // deve ser aceito ou nao dependendo da variavel ReportON da TAG. Caso seja true,
                    // a variavel TAGReportON eh setada e o report eh aceito.
                    foreach (var TagRegistrada in GlobalData.ListaTAGs)
                    {
                        if (TagRegistrada.EPC == tag.Epc.ToString())
                        {
                            TagAtual = TagRegistrada;
                            if (TagAtual.ReportON == true)
                            {
                                TAGsReportsON = 1;
                            }
                        }
                    }

                    // Condicional com um filtro para validar leitura. Valor de RSSI tem que estar acima
                    // do valor do filtro e TAGsReportsON tem que ser verdadeiro.
                    if (tag.PeakRssiInDbm > GlobalData.FiltroPassaBaixaRSSI && TAGsReportsON == 1)
                    {
                        // Checa se a antena 1 que está lendo
                        if (tag.AntennaPortNumber == 1)
                        {
                            // Se o RSSI lido do report for maior que o pico atual
                            // de RSSI, atualiza o valor máximo de RSSI e seu tempo.
                            if (tag.PeakRssiInDbm > LeitoraUm.PicoRSSIAnt1 && LeitoraUm.LockPicoRSSIAnt1 == 0)
                            {
                                LeitoraUm.PicoRSSIAnt1         = tag.PeakRssiInDbm;
                                LeitoraUm.TempoPicoRSSIAnt1    = DateTime.Now.ToString("HH-mm-ss-fff");
                                LeitoraUm.DateTimePicoRSSIAnt1 = DateTime.Now;

                                // Verifica se o pico de RSSI da antena 1 é maior ou igual que o indicador RSSI de passagem.
                                // Se for, atualiza a flag que indica que houve passagem pela primeira antena e
                                // da "lock" nesse valor, para que nao pegue outras medidas desnecessariamente.
                                if (LeitoraUm.PicoRSSIAnt1 >= GlobalData.IndicadorRSSIPassagem)
                                {
                                    LeitoraUm.FlagPassagemAnt1      = 1;
                                    LeitoraUm.LockPicoRSSIAnt1      = 1;
                                    LeitoraUm.ContadorPassagemAnt1 += 1;
                                }
                            }

                            // Atualiza o valor minimo da frequência doppler e seu tempo.
                            if (tag.RfDopplerFrequency < LeitoraUm.PicoNegFreqDopAnt1)
                            {
                                LeitoraUm.PicoNegFreqDopAnt1         = tag.RfDopplerFrequency;
                                LeitoraUm.TempoPicoNegFreqDopAnt1    = DateTime.Now.ToString("HH-mm-ss-fff");
                                LeitoraUm.DateTimePicoNegFreqDopAnt1 = DateTime.Now;
                            }
                        }

                        // Checa se a antena 2 que está lendo.
                        if (tag.AntennaPortNumber == 2)
                        {
                            // Se o RSSI lido do report for maior que o pico atual
                            // de RSSI, atualiza o valor máximo de RSSI e seu tempo.
                            if (tag.PeakRssiInDbm > LeitoraUm.PicoRSSIAnt2 && LeitoraUm.LockPicoRSSIAnt2 == 0)
                            {
                                LeitoraUm.PicoRSSIAnt2         = tag.PeakRssiInDbm;
                                LeitoraUm.TempoPicoRSSIAnt2    = DateTime.Now.ToString("HH-mm-ss-fff");
                                LeitoraUm.DateTimePicoRSSIAnt2 = DateTime.Now;

                                // Verifica se o pico de RSSI da antena 1 é maior ou igual que o indicador RSSI de passagem.
                                // Se for, atualiza a flag que indica que houve passagem pela primeira antena e
                                // da "lock" nesse valor, para que nao pegue outras medidas desnecessariamente.
                                if (LeitoraUm.PicoRSSIAnt2 >= GlobalData.IndicadorRSSIPassagem)
                                {
                                    LeitoraUm.FlagPassagemAnt2      = 1;
                                    LeitoraUm.LockPicoRSSIAnt2      = 1;
                                    LeitoraUm.ContadorPassagemAnt2 += 1;
                                }
                            }

                            // Atualiza o valor minimo da frequência doppler e seu tempo.
                            if (tag.RfDopplerFrequency < LeitoraUm.PicoNegFreqDopAnt2)
                            {
                                LeitoraUm.PicoNegFreqDopAnt2         = tag.RfDopplerFrequency;
                                LeitoraUm.TempoPicoNegFreqDopAnt2    = DateTime.Now.ToString("HH-mm-ss-fff");
                                LeitoraUm.DateTimePicoNegFreqDopAnt2 = DateTime.Now;
                            }
                        }

                        // Checa se a flag de passagem das duas antenas foram setadas.
                        // Se sim, significa que houve a passagem da TAG pelas duas antenas.
                        // Ou seja, significa que alguem entrou ou saiu do ambiente.
                        if (LeitoraUm.FlagPassagemAnt1 == 1 && LeitoraUm.FlagPassagemAnt2 == 1)
                        {
                            // Checa os tempos de cada pico para saber se a TAG entrou ou saiu do ambiente.
                            // Se a comparacao for negativa, significa que passaram primeiro pela antena 1 e depois
                            // pela antena 2, ou seja, a pessoa entrou no ambiente.
                            if (DateTime.Compare(LeitoraUm.DateTimePicoRSSIAnt1, LeitoraUm.DateTimePicoRSSIAnt2) < 0)
                            {
                                Console.WriteLine("\n\nLeitora endereço: {0}", sender.Address);

                                bool passagem = true;

                                // Verifica o EPC das tags que estao registradas para verificar quem entrou no ambiente,
                                // e ai passa o nome da pessoa para a funcao MonitoramentoSALA.
                                foreach (var tags in GlobalData.ListaTAGs)
                                {
                                    if (tags.EPC == tag.Epc.ToString())
                                    {
                                        TransicaoTags.transicao_sala(sender.Address, tag.Epc.ToString(), passagem, tags.Nome, tags);
                                    }
                                }

                                // Seta a flag que indica que esta ocorrendo uma transicao entre ambientes.
                                LeitoraUm.FlagTrocaAmbiente = 1;

                                // Inicializa a Thread que faz o descarte de reports das tags por 2 segundos.
                                // Isso eh feito para que os dados dos reports durante a transicao da pessoa
                                // nao atrapalhem a analise.
                                foreach (var TagRegistrada in GlobalData.ListaTAGs)
                                {
                                    if (TagRegistrada.EPC == tag.Epc.ToString())
                                    {
                                        TagAtual = TagRegistrada;
                                        Thread DescartaReportThread = new Thread(() => MonitoramentoTAG.DescartaReport(TagAtual));
                                        DescartaReportThread.Start();
                                    }
                                }
                            }

                            // Checa os tempos de cada pico para saber se a TAG entrou ou saiu do ambiente.
                            // Se a comparacao for positiva, significa que passaram primeiro pela antena 2 e depois
                            // pela antena 1, ou seja, a pessoa saiu do ambiente.
                            if (DateTime.Compare(LeitoraUm.DateTimePicoRSSIAnt1, LeitoraUm.DateTimePicoRSSIAnt2) > 0)
                            {
                                Console.WriteLine("\n\nLeitora endereço: {0}", sender.Address);

                                bool passagem = false;

                                // Verifica o EPC das tags que estao registradas para verificar quem saiu do ambiente,
                                // e ai passa o nome da pessoa para a funcao MonitoramentoSALA.
                                foreach (var tags in GlobalData.ListaTAGs)
                                {
                                    if (tags.EPC == tag.Epc.ToString())
                                    {
                                        TransicaoTags.transicao_sala(sender.Address, tag.Epc.ToString(), passagem, tags.Nome, tags);
                                    }
                                }

                                // Seta a flag que indica que esta ocorrendo uma transicao entre ambientes.
                                LeitoraUm.FlagTrocaAmbiente = 1;

                                //Inicializa a Thread que faz o descarte de reports das tags por 2 segundos
                                //Thread DescartaReportThread = new Thread(MonitoramentoTAG.DescartaReport);
                                //Thread DescartaReportThread = new Thread(() => MonitoramentoTAG.DescartaReport(TagAtual));
                                //DescartaReportThread.Start();

                                // Inicializa a Thread que faz o descarte de reports das tags por 2 segundos.
                                // Isso eh feito para que os dados dos reports durante a transicao da pessoa
                                // nao atrapalhem a analise.
                                foreach (var TagRegistrada in GlobalData.ListaTAGs)
                                {
                                    if (TagRegistrada.EPC == tag.Epc.ToString())
                                    {
                                        TagAtual = TagRegistrada;
                                        Thread DescartaReportThread = new Thread(() => MonitoramentoTAG.DescartaReport(TagAtual));
                                        DescartaReportThread.Start();
                                    }
                                }
                            }
                        }

                        // Armazena o DateTime do tempo da ultima vez que foi feito uma leitura valida.
                        GlobalData.LastSeen = DateTime.Now;

                        //Escreve nos arquivos os dados.
                        //GlobalData.filehandler.WriteToFile(tag.Epc.ToString(), sender.Name, tag.AntennaPortNumber, tag.RfDopplerFrequency.ToString("0.00"), tag.PeakRssiInDbm.ToString(), LeitoraUm.ContadorPassagemAnt1.ToString(), LeitoraUm.ContadorPassagemAnt2.ToString());
                    }
                }
                break;

            // Caso o report da TAG seja relacionado a Leitora #2, entra aqui.
            case "SpeedwayR-10-9F-C8.local":
                foreach (Tag tag in report)
                {
                    // Variavel do tipo Tags_TG que vai armazenar a tag que foi reportada agora.
                    Tags_TG TagAtual;

                    // Variavel que indica se aceita o report da TAG ou nao.
                    int TAGsReportsON = 0;

                    // Verifica o EPC das tags que estao registradas para verificar se o report dessa TAG
                    // deve ser aceito ou nao dependendo da variavel ReportON da TAG. Caso seja true,
                    // a variavel TAGReportON eh setada e o report eh aceito.
                    foreach (var TagRegistrada in GlobalData.ListaTAGs)
                    {
                        if (TagRegistrada.EPC == tag.Epc.ToString())
                        {
                            TagAtual = TagRegistrada;
                            if (TagAtual.ReportON == true)
                            {
                                TAGsReportsON = 1;
                            }
                        }
                    }

                    // Condicional com um filtro para validar leitura. Valor de RSSI tem que estar acima
                    // do valor do filtro e TAGsReportsON tem que ser verdadeiro.
                    if (tag.PeakRssiInDbm > GlobalData.FiltroPassaBaixaRSSI && TAGsReportsON == 1)
                    {
                        // Checa se a antena 1 que está lendo
                        if (tag.AntennaPortNumber == 1)
                        {
                            // Se o RSSI lido do report for maior que o pico atual
                            // de RSSI, atualiza o valor máximo de RSSI e seu tempo.
                            if (tag.PeakRssiInDbm > LeitoraDois.PicoRSSIAnt1 && LeitoraDois.LockPicoRSSIAnt1 == 0)
                            {
                                LeitoraDois.PicoRSSIAnt1         = tag.PeakRssiInDbm;
                                LeitoraDois.TempoPicoRSSIAnt1    = DateTime.Now.ToString("HH-mm-ss-fff");
                                LeitoraDois.DateTimePicoRSSIAnt1 = DateTime.Now;

                                // Verifica se o pico de RSSI da antena 1 é maior ou igual que o indicador RSSI de passagem.
                                // Se for, atualiza a flag que indica que houve passagem pela primeira antena e
                                // da "lock" nesse valor, para que nao pegue outras medidas desnecessariamente.
                                if (LeitoraDois.PicoRSSIAnt1 >= GlobalData.IndicadorRSSIPassagem)
                                {
                                    LeitoraDois.FlagPassagemAnt1      = 1;
                                    LeitoraDois.LockPicoRSSIAnt1      = 1;
                                    LeitoraDois.ContadorPassagemAnt1 += 1;
                                }
                            }

                            // Atualiza o valor minimo da frequência doppler e seu tempo.
                            if (tag.RfDopplerFrequency < LeitoraDois.PicoNegFreqDopAnt1)
                            {
                                LeitoraDois.PicoNegFreqDopAnt1         = tag.RfDopplerFrequency;
                                LeitoraDois.TempoPicoNegFreqDopAnt1    = DateTime.Now.ToString("HH-mm-ss-fff");
                                LeitoraDois.DateTimePicoNegFreqDopAnt1 = DateTime.Now;
                            }
                        }

                        // Checa se a antena 2 que está lendo.
                        if (tag.AntennaPortNumber == 2)
                        {
                            // Se o RSSI lido do report for maior que o pico atual
                            // de RSSI, atualiza o valor máximo de RSSI e seu tempo.
                            if (tag.PeakRssiInDbm > LeitoraDois.PicoRSSIAnt2 && LeitoraDois.LockPicoRSSIAnt2 == 0)
                            {
                                LeitoraDois.PicoRSSIAnt2         = tag.PeakRssiInDbm;
                                LeitoraDois.TempoPicoRSSIAnt2    = DateTime.Now.ToString("HH-mm-ss-fff");
                                LeitoraDois.DateTimePicoRSSIAnt2 = DateTime.Now;

                                // Verifica se o pico de RSSI da antena 1 é maior ou igual que o indicador RSSI de passagem.
                                // Se for, atualiza a flag que indica que houve passagem pela primeira antena e
                                // da "lock" nesse valor, para que nao pegue outras medidas desnecessariamente.
                                if (LeitoraDois.PicoRSSIAnt2 >= GlobalData.IndicadorRSSIPassagem)
                                {
                                    LeitoraDois.FlagPassagemAnt2      = 1;
                                    LeitoraDois.LockPicoRSSIAnt2      = 1;
                                    LeitoraDois.ContadorPassagemAnt2 += 1;
                                }
                            }

                            // Atualiza o valor minimo da frequência doppler e seu tempo.
                            if (tag.RfDopplerFrequency < LeitoraDois.PicoNegFreqDopAnt2)
                            {
                                LeitoraDois.PicoNegFreqDopAnt2         = tag.RfDopplerFrequency;
                                LeitoraDois.TempoPicoNegFreqDopAnt2    = DateTime.Now.ToString("HH-mm-ss-fff");
                                LeitoraDois.DateTimePicoNegFreqDopAnt2 = DateTime.Now;
                            }
                        }

                        // Checa se a flag de passagem das duas antenas foram setadas.
                        // Se sim, significa que houve a passagem da TAG pelas duas antenas.
                        // Ou seja, significa que alguem entrou ou saiu do ambiente.
                        if (LeitoraDois.FlagPassagemAnt1 == 1 && LeitoraDois.FlagPassagemAnt2 == 1)
                        {
                            // Checa os tempos de cada pico para saber se a TAG entrou ou saiu do ambiente.
                            // Se a comparacao for negativa, significa que passaram primeiro pela antena 1 e depois
                            // pela antena 2, ou seja, a pessoa entrou no ambiente.
                            if (DateTime.Compare(LeitoraDois.DateTimePicoRSSIAnt1, LeitoraDois.DateTimePicoRSSIAnt2) < 0)
                            {
                                Console.WriteLine("\n\nLeitora endereço: {0}", sender.Address);

                                bool passagem = true;

                                // Verifica o EPC das tags que estao registradas para verificar quem entrou no ambiente,
                                // e ai passa o nome da pessoa para a funcao MonitoramentoSALA.
                                foreach (var tags in GlobalData.ListaTAGs)
                                {
                                    if (tags.EPC == tag.Epc.ToString())
                                    {
                                        TransicaoTags.transicao_sala(sender.Address, tag.Epc.ToString(), passagem, tags.Nome, tags);
                                    }
                                }

                                // Seta a flag que indica que esta ocorrendo uma transicao entre ambientes.
                                LeitoraDois.FlagTrocaAmbiente = 1;

                                // Inicializa a Thread que faz o descarte de reports das tags por 2 segundos.
                                // Isso eh feito para que os dados dos reports durante a transicao da pessoa
                                // nao atrapalhem a analise.
                                foreach (var TagRegistrada in GlobalData.ListaTAGs)
                                {
                                    if (TagRegistrada.EPC == tag.Epc.ToString())
                                    {
                                        TagAtual = TagRegistrada;
                                        Thread DescartaReportThread = new Thread(() => MonitoramentoTAG.DescartaReport(TagAtual));
                                        DescartaReportThread.Start();
                                    }
                                }
                            }

                            // Checa os tempos de cada pico para saber se a TAG entrou ou saiu do ambiente.
                            // Se a comparacao for positiva, significa que passaram primeiro pela antena 2 e depois
                            // pela antena 1, ou seja, a pessoa saiu do ambiente.
                            if (DateTime.Compare(LeitoraDois.DateTimePicoRSSIAnt1, LeitoraDois.DateTimePicoRSSIAnt2) > 0)
                            {
                                Console.WriteLine("\n\nLeitora endereço: {0}", sender.Address);

                                bool passagem = false;

                                // Verifica o EPC das tags que estao registradas para verificar quem saiu do ambiente,
                                // e ai passa o nome da pessoa para a funcao MonitoramentoSALA.
                                foreach (var tags in GlobalData.ListaTAGs)
                                {
                                    if (tags.EPC == tag.Epc.ToString())
                                    {
                                        TransicaoTags.transicao_sala(sender.Address, tag.Epc.ToString(), passagem, tags.Nome, tags);
                                    }
                                }

                                // Seta a flag que indica que esta ocorrendo uma transicao entre ambientes.
                                LeitoraDois.FlagTrocaAmbiente = 1;

                                //Inicializa a Thread que faz o descarte de reports das tags por 2 segundos
                                //Thread DescartaReportThread = new Thread(MonitoramentoTAG.DescartaReport);
                                //Thread DescartaReportThread = new Thread(() => MonitoramentoTAG.DescartaReport(TagAtual));
                                //DescartaReportThread.Start();

                                // Inicializa a Thread que faz o descarte de reports das tags por 2 segundos.
                                // Isso eh feito para que os dados dos reports durante a transicao da pessoa
                                // nao atrapalhem a analise.
                                foreach (var TagRegistrada in GlobalData.ListaTAGs)
                                {
                                    if (TagRegistrada.EPC == tag.Epc.ToString())
                                    {
                                        TagAtual = TagRegistrada;
                                        Thread DescartaReportThread = new Thread(() => MonitoramentoTAG.DescartaReport(TagAtual));
                                        DescartaReportThread.Start();
                                    }
                                }
                            }
                        }

                        // Armazena o DateTime do tempo da ultima vez que foi feito uma leitura valida.
                        GlobalData.LastSeen = DateTime.Now;

                        //Escreve nos arquivos os dados.
                        //GlobalData.filehandler.WriteToFile(tag.Epc.ToString(), sender.Name, tag.AntennaPortNumber, tag.RfDopplerFrequency.ToString("0.00"), tag.PeakRssiInDbm.ToString(), LeitoraDois.ContadorPassagemAnt1.ToString(), LeitoraDois.ContadorPassagemAnt2.ToString());
                    }
                }
                break;

            // Caso o report da TAG seja relacionado a Leitora #3, entra aqui.
            case "SpeedwayR-10-9F-BB.local":
                foreach (Tag tag in report)
                {
                    // Variavel do tipo Tags_TG que vai armazenar a tag que foi reportada agora.
                    Tags_TG TagAtual;

                    // Variavel que indica se aceita o report da TAG ou nao.
                    int TAGsReportsON = 0;

                    // Verifica o EPC das tags que estao registradas para verificar se o report dessa TAG
                    // deve ser aceito ou nao dependendo da variavel ReportON da TAG. Caso seja true,
                    // a variavel TAGReportON eh setada e o report eh aceito.
                    foreach (var TagRegistrada in GlobalData.ListaTAGs)
                    {
                        if (TagRegistrada.EPC == tag.Epc.ToString())
                        {
                            TagAtual = TagRegistrada;
                            if (TagAtual.ReportON == true)
                            {
                                TAGsReportsON = 1;
                            }
                        }
                    }

                    // Condicional com um filtro para validar leitura. Valor de RSSI tem que estar acima
                    // do valor do filtro e TAGsReportsON tem que ser verdadeiro.
                    if (tag.PeakRssiInDbm > GlobalData.FiltroPassaBaixaRSSI && TAGsReportsON == 1)
                    {
                        // Checa se a antena 1 que está lendo
                        if (tag.AntennaPortNumber == 1)
                        {
                            // Se o RSSI lido do report for maior que o pico atual
                            // de RSSI, atualiza o valor máximo de RSSI e seu tempo.
                            if (tag.PeakRssiInDbm > LeitoraTres.PicoRSSIAnt1 && LeitoraTres.LockPicoRSSIAnt1 == 0)
                            {
                                LeitoraTres.PicoRSSIAnt1         = tag.PeakRssiInDbm;
                                LeitoraTres.TempoPicoRSSIAnt1    = DateTime.Now.ToString("HH-mm-ss-fff");
                                LeitoraTres.DateTimePicoRSSIAnt1 = DateTime.Now;

                                // Verifica se o pico de RSSI da antena 1 é maior ou igual que o indicador RSSI de passagem.
                                // Se for, atualiza a flag que indica que houve passagem pela primeira antena e
                                // da "lock" nesse valor, para que nao pegue outras medidas desnecessariamente.
                                if (LeitoraTres.PicoRSSIAnt1 >= GlobalData.IndicadorRSSIPassagem)
                                {
                                    LeitoraTres.FlagPassagemAnt1      = 1;
                                    LeitoraTres.LockPicoRSSIAnt1      = 1;
                                    LeitoraTres.ContadorPassagemAnt1 += 1;
                                }
                            }

                            // Atualiza o valor minimo da frequência doppler e seu tempo.
                            if (tag.RfDopplerFrequency < LeitoraTres.PicoNegFreqDopAnt1)
                            {
                                LeitoraTres.PicoNegFreqDopAnt1         = tag.RfDopplerFrequency;
                                LeitoraTres.TempoPicoNegFreqDopAnt1    = DateTime.Now.ToString("HH-mm-ss-fff");
                                LeitoraTres.DateTimePicoNegFreqDopAnt1 = DateTime.Now;
                            }
                        }

                        // Checa se a antena 2 que está lendo.
                        if (tag.AntennaPortNumber == 2)
                        {
                            // Se o RSSI lido do report for maior que o pico atual
                            // de RSSI, atualiza o valor máximo de RSSI e seu tempo.
                            if (tag.PeakRssiInDbm > LeitoraTres.PicoRSSIAnt2 && LeitoraTres.LockPicoRSSIAnt2 == 0)
                            {
                                LeitoraTres.PicoRSSIAnt2         = tag.PeakRssiInDbm;
                                LeitoraTres.TempoPicoRSSIAnt2    = DateTime.Now.ToString("HH-mm-ss-fff");
                                LeitoraTres.DateTimePicoRSSIAnt2 = DateTime.Now;

                                // Verifica se o pico de RSSI da antena 1 é maior ou igual que o indicador RSSI de passagem.
                                // Se for, atualiza a flag que indica que houve passagem pela primeira antena e
                                // da "lock" nesse valor, para que nao pegue outras medidas desnecessariamente.
                                if (LeitoraTres.PicoRSSIAnt2 >= GlobalData.IndicadorRSSIPassagem)
                                {
                                    LeitoraTres.FlagPassagemAnt2      = 1;
                                    LeitoraTres.LockPicoRSSIAnt2      = 1;
                                    LeitoraTres.ContadorPassagemAnt2 += 1;
                                }
                            }

                            // Atualiza o valor minimo da frequência doppler e seu tempo.
                            if (tag.RfDopplerFrequency < LeitoraTres.PicoNegFreqDopAnt2)
                            {
                                LeitoraTres.PicoNegFreqDopAnt2         = tag.RfDopplerFrequency;
                                LeitoraTres.TempoPicoNegFreqDopAnt2    = DateTime.Now.ToString("HH-mm-ss-fff");
                                LeitoraTres.DateTimePicoNegFreqDopAnt2 = DateTime.Now;
                            }
                        }

                        // Checa se a flag de passagem das duas antenas foram setadas.
                        // Se sim, significa que houve a passagem da TAG pelas duas antenas.
                        // Ou seja, significa que alguem entrou ou saiu do ambiente.
                        if (LeitoraTres.FlagPassagemAnt1 == 1 && LeitoraTres.FlagPassagemAnt2 == 1)
                        {
                            // Checa os tempos de cada pico para saber se a TAG entrou ou saiu do ambiente.
                            // Se a comparacao for negativa, significa que passaram primeiro pela antena 1 e depois
                            // pela antena 2, ou seja, a pessoa entrou no ambiente.
                            if (DateTime.Compare(LeitoraTres.DateTimePicoRSSIAnt1, LeitoraTres.DateTimePicoRSSIAnt2) < 0)
                            {
                                Console.WriteLine("\n\nLeitora endereço: {0}", sender.Address);

                                bool passagem = true;

                                // Verifica o EPC das tags que estao registradas para verificar quem entrou no ambiente,
                                // e ai passa o nome da pessoa para a funcao MonitoramentoSALA.
                                foreach (var tags in GlobalData.ListaTAGs)
                                {
                                    if (tags.EPC == tag.Epc.ToString())
                                    {
                                        TransicaoTags.transicao_sala(sender.Address, tag.Epc.ToString(), passagem, tags.Nome, tags);
                                    }
                                }

                                // Seta a flag que indica que esta ocorrendo uma transicao entre ambientes.
                                LeitoraTres.FlagTrocaAmbiente = 1;

                                // Inicializa a Thread que faz o descarte de reports das tags por 2 segundos.
                                // Isso eh feito para que os dados dos reports durante a transicao da pessoa
                                // nao atrapalhem a analise.
                                foreach (var TagRegistrada in GlobalData.ListaTAGs)
                                {
                                    if (TagRegistrada.EPC == tag.Epc.ToString())
                                    {
                                        TagAtual = TagRegistrada;
                                        Thread DescartaReportThread = new Thread(() => MonitoramentoTAG.DescartaReport(TagAtual));
                                        DescartaReportThread.Start();
                                    }
                                }
                            }

                            // Checa os tempos de cada pico para saber se a TAG entrou ou saiu do ambiente.
                            // Se a comparacao for positiva, significa que passaram primeiro pela antena 2 e depois
                            // pela antena 1, ou seja, a pessoa saiu do ambiente.
                            if (DateTime.Compare(LeitoraTres.DateTimePicoRSSIAnt1, LeitoraTres.DateTimePicoRSSIAnt2) > 0)
                            {
                                Console.WriteLine("\n\nLeitora endereço: {0}", sender.Address);

                                bool passagem = false;

                                // Verifica o EPC das tags que estao registradas para verificar quem saiu do ambiente,
                                // e ai passa o nome da pessoa para a funcao MonitoramentoSALA.
                                foreach (var tags in GlobalData.ListaTAGs)
                                {
                                    if (tags.EPC == tag.Epc.ToString())
                                    {
                                        TransicaoTags.transicao_sala(sender.Address, tag.Epc.ToString(), passagem, tags.Nome, tags);
                                    }
                                }

                                // Seta a flag que indica que esta ocorrendo uma transicao entre ambientes.
                                LeitoraTres.FlagTrocaAmbiente = 1;

                                //Inicializa a Thread que faz o descarte de reports das tags por 2 segundos
                                //Thread DescartaReportThread = new Thread(MonitoramentoTAG.DescartaReport);
                                //Thread DescartaReportThread = new Thread(() => MonitoramentoTAG.DescartaReport(TagAtual));
                                //DescartaReportThread.Start();

                                // Inicializa a Thread que faz o descarte de reports das tags por 2 segundos.
                                // Isso eh feito para que os dados dos reports durante a transicao da pessoa
                                // nao atrapalhem a analise.
                                foreach (var TagRegistrada in GlobalData.ListaTAGs)
                                {
                                    if (TagRegistrada.EPC == tag.Epc.ToString())
                                    {
                                        TagAtual = TagRegistrada;
                                        Thread DescartaReportThread = new Thread(() => MonitoramentoTAG.DescartaReport(TagAtual));
                                        DescartaReportThread.Start();
                                    }
                                }
                            }
                        }

                        // Armazena o DateTime do tempo da ultima vez que foi feito uma leitura valida.
                        GlobalData.LastSeen = DateTime.Now;

                        //Escreve nos arquivos os dados.
                        //GlobalData.filehandler.WriteToFile(tag.Epc.ToString(), sender.Name, tag.AntennaPortNumber, tag.RfDopplerFrequency.ToString("0.00"), tag.PeakRssiInDbm.ToString(), LeitoraTres.ContadorPassagemAnt1.ToString(), LeitoraTres.ContadorPassagemAnt2.ToString());
                    }
                }
                break;

            default:
                Console.Write("Caso não identificado");
                break;
            }
        }