// 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); } }
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); } }
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); } }
// 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; } }