Boa noite pessoal Estou desenvolvendo uma aplicacao que utiliza o metodo de MAQUINA DE ESTADO que e uma rotina que fica em loop testando uma variável que chamamos de Estado. Dependendo do estado atual, executamos alguns procedimentos e em seguida alteramos o estado que será verificado pela máquina de estados novamente no próximo passo do loop.
Utilizo esse conceito para trabalhar com terminais onde o programa fica rodando em loop aguardo informacoes do terminal. queria saber dos amigos se conhecem esse conceito de programacao que nao conhecia ate entao, se ja utilizaram em terminais ou em qualquer outra aplicacao. mas ai vai a minha questao. Essa aplicao a para atender 11 terminais de acesso ( catracas ). quardo as informacoes desses terminais em um vetor e um dos campos desse vetor chamo de "estado" que sera a variavel que ira armazenar o estado atual de cada terminais, se foi acessado ou nao por exemplo. um pseudocodigo ficaria assim mais ou mesnos //Váriável para armazenar o estado atual de cada terminals Inteiro VetorTerminal[32]; //Variável que diz qual é o terminal que estamos tratando Inteiro TerminalAtual = 1 while(TRUE){ //Verifica qual é o estado do terminal atual Case VetorTerminal[TerminalAtual] 1: // Procedimentos Primeiro passo inner //Seta o Terminal atual para o próximo estado VetorTerminal[TerminalAtual] = 2; 2: //Executa o estado 2 para o Terminal atual //Seta o Terminal atual para o próximo estado VetorTerminal[TerminalAtual] = 3; . . . // Ate quantos passos achar necessario //Pula para o próximo Terminal TerminalAtual = TerminalAtual + 1; If(TerminalAtual > TOTALDETERMINAIS){ TerminalAtual = 1; } Basicamente se eu nao estiver errado essa e a ideia de maquina de estado, e foi o unico metodo que concegui para trabalhar com terminais, e ai esta o problema. Pelo pseudocodigoa cada passo do CASE a variavel que controla a posicao do vetorterminal e incrementada, fazendo um loop assim em todos os terminais. Nesses passos que estao dentro desse loop sao testados as conexoes com cada terminal, verifica se as informcoes foram passadas por esses terminais ( informacoes vindas de cartoes, teclado, digitais etc ) O problems que ja observei em pratica foi: 1 - Quando um terminal sai do passo 1, para entrar no passo dois tem que esperar o loop percorrer todos os outros terminais, oq as vezes gera um pouco de lentidao. 2 - Problemas no momento da validacao de dados, se dois ou mais usuarios fizerem uma validacao ( passaram um cartao ) ao mesmo tempo as variaveis que utilizo para armazenar por exemplo o codigo do cartao que foi passado ou informacoes do teclado perdem as referencias. 3 - um meio de tratar dentro desse loop terminais a parte, por exemplo, um terminais perdeu a conexao, ter um meio dentro dese loop de ficar testando a conexao com esse termianal isoladamente, sem que o teste de conexao do mesmo tenha o mesmo problema que relatei na questao 1. Bem pessoal queria ver se alguem pode me dar uma ideia para melhorar esse pseudo codigo, se alguem conehce esse metodo de maquina de estado e possa dar uma ideia de como melhorar o desempenho, e ainda se alguem trabalha com terminais utilizando esse conceito para trocarmos experiencia. Vou ficando por aqui, o texto ja esta grande. Um forte abraco a todos eduardo