コード例 #1
0
        // Funcao que faz a analise dos reports das TAGs.
        private static void AnalisaDadosTAG(ImpinjReader sender, TagReport report)
        {
            foreach (Tag tag in report)
            {
                // 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 && GlobalData.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 > GlobalData.PicoRSSIAnt1 && GlobalData.LockPicoRSSIAnt1 == 0)
                        {
                            GlobalData.PicoRSSIAnt1         = tag.PeakRssiInDbm;
                            GlobalData.TempoPicoRSSIAnt1    = DateTime.Now.ToString("HH-mm-ss-fff");
                            GlobalData.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 (GlobalData.PicoRSSIAnt1 >= GlobalData.IndicadorRSSIPassagem)
                            {
                                GlobalData.FlagPassagemAnt1      = 1;
                                GlobalData.LockPicoRSSIAnt1      = 1;
                                GlobalData.ContadorPassagemAnt1 += 1;
                            }
                        }

                        // Atualiza o valor minimo da frequência doppler e seu tempo.
                        if (tag.RfDopplerFrequency < GlobalData.PicoNegFreqDopAnt1)
                        {
                            GlobalData.PicoNegFreqDopAnt1         = tag.RfDopplerFrequency;
                            GlobalData.TempoPicoNegFreqDopAnt1    = DateTime.Now.ToString("HH-mm-ss-fff");
                            GlobalData.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 > GlobalData.PicoRSSIAnt2 && GlobalData.LockPicoRSSIAnt2 == 0)
                        {
                            GlobalData.PicoRSSIAnt2         = tag.PeakRssiInDbm;
                            GlobalData.TempoPicoRSSIAnt2    = DateTime.Now.ToString("HH-mm-ss-fff");
                            GlobalData.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 (GlobalData.PicoRSSIAnt2 >= GlobalData.IndicadorRSSIPassagem)
                            {
                                GlobalData.FlagPassagemAnt2      = 1;
                                GlobalData.LockPicoRSSIAnt2      = 1;
                                GlobalData.ContadorPassagemAnt2 += 1;
                            }
                        }

                        // Atualiza o valor minimo da frequência doppler e seu tempo.
                        if (tag.RfDopplerFrequency < GlobalData.PicoNegFreqDopAnt2)
                        {
                            GlobalData.PicoNegFreqDopAnt2         = tag.RfDopplerFrequency;
                            GlobalData.TempoPicoNegFreqDopAnt2    = DateTime.Now.ToString("HH-mm-ss-fff");
                            GlobalData.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 (GlobalData.FlagPassagemAnt1 == 1 && GlobalData.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(GlobalData.DateTimePicoRSSIAnt1, GlobalData.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.
                            GlobalData.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.
                            GlobalData.TAGsReportsON = 0;
                            Thread DescartaReportThread = new Thread(MonitoramentoTAG.DescartaReport);
                            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(GlobalData.DateTimePicoRSSIAnt1, GlobalData.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.
                            GlobalData.FlagTrocaAmbiente = 1;

                            //Inicializa a Thread que faz o descarte de reports das tags por 2 segundos
                            GlobalData.TAGsReportsON = 0;
                            Thread DescartaReportThread = new Thread(MonitoramentoTAG.DescartaReport);
                            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(), GlobalData.ContadorPassagemAnt1.ToString(), GlobalData.ContadorPassagemAnt2.ToString());
                }
            }
        }
コード例 #2
0
ファイル: MainProgram.cs プロジェクト: KennethLui/TG2
        // 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;
            }
        }