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

Responder a