Perda de dados e lentidão

Boa tarde!

Estou em fase final de testes e homologação do meu sistema! (ufa!) E agora estou lidando com os problemas intermitentes que surgem.

Entre esses problemas eu tenho 2 muito importantes para eu lidar:

1 - Lentidão na execução dos scripts e comandos, lentidão no envio e recebimento da comunicação ModBus TCP;

2 - Pode estar relacionado com o problema acima, mas às vezes simplesmente o sistema não executa um comando ou comunicação ModBus. Ele “pula” esse comando ou ignora, sem falhas ou erros. Pode ser um comando interno que só usa datasources virtuais ou um externo, que comunica com o CLP. Na maioria das vezes criar um atraso de 1s entre comandos resolve e, na minha aplicação, não implica muitos problemas, exceto na execução do primeiro comando para dar responsividade ao usuário.

Sobre o problema 1 já tentei manipular o período de atualização do Modbus, o timeout, número de tentativas, keep alive, etc. Nada parece mudar muito. O tempo para que CLP responder é de quase 2s, sendo que na especificação me parece que ele executa a comunicação ModBus em 100ms, ou seja, tempo de resposta de quase 20 ciclos!

Sobre o 2, eu realmente não sei. Monitorando processamento e ram eu não vejo excesso, muito muito raramente ele chega em 70% de processamento e os 8GB de ram estão sobrando muito.

Eu já consegui simular problemas forçando processamento pesado no servidor. Quando está a 100% simplesmente os comandos não funcionam. Não são executados com atraso, simplesmente nem são executados.

Como eu posso fazer para otimizar isso tudo?

Levando em conta que o meu servidor é um Intel NUC com Celeron J3455 e 8GB de ram ddr3 rodando windows pro (pra utilizar RDP). Pra mim é importante porque aí eu posso manipular o CLP a distância utilizando o software da Siemens que só funciona em windows.

Desde já agradeço a todos!

Então, hoje eu desinstalei o Tomcat e deletei a pasta inteira.

Antes disso eu fiz a exportação do meu supervisório pelo próprio Scada.

Reinstalei limpo e importei de volta. Tirando que não veio a tela da representação gráfica, tudo bem. Refiz a exportação só da tela e reimportei, deu certo.

Agora está funcionando MUITO mais rápido. Ainda não eliminei o problema de parte de scripts ou comunicação sumir no ar por completo, mas a execução dos comandos é quase instantânea.

Acredito que com o passar do tempo, a criação e deleção de data sources, telas e outros elementos deve deixar lixo acumulado, e limpar tudo deu uma nova vida ao meu sistema.

1 curtida

Atualização:

Ainda encontro problemas de comandos simplesmente sendo perdidos, scripts parando no meio, etc. São menos comuns, mas ainda acontecem, mesmo com variáveis internas apenas.

Os casos mais bizarros são onde alguns comandos no meio são simplesmente pulados e o script continua até o final. Não gera erros ou falhas. Não entendo esses mesmo.

Amigo, agora que vi seu post.
Realmente as inconsistências são preocupantes. Vc saca de programação? Já deu uma olhada nas ferramentas de devops que o java possui?

Não saco de programação.

Sou Eng° Eletricista e a minha área seria mais a programação dos CLPs, invadi o mundo do Scada tem algum tempo, mas não sou nem próximo de expert. Fui aprendendo o que eu fui precisando.

Eu realmente não consigo entender as inconsistências, pois várias vezes que os comandos não funcionam a CPU está praticamente em descanso. Eu consigo simular erros forçando alto uso da CPU, mas não é necessário.

Por enquanto vou viver com isso, na verdade vou ter que adicionar uma rotina a ser executada ao final de cada sequência de comandos que vai verificar se todas as variáveis foram setadas e se o CLP respondeu a todos os comandos e retornar erro caso não tenham sido. O problema vai ser se essa rotina também falhar…

Estou com o mesmo problema, você conseguiu resolver? Obrigado!

Veja o tempo de leituras dos datapoints. Tempos entre leituras de menos de 10 segundos de um mesmo datasource podem ser problematicos de um modo geral. Se voce nao precisa de leituras tao curtas aumente para 1 minuto pelo menos. Quanto menos leituras por segundo, menos volume de dados, menos processamento, mais folego pra CPU.

O scadaBR le um ds. Grava e le o banco de dados. Chama os scripts envolvidos. As vezes o script chama outros e ai vem a atualizaçao das views ativas… Tenha isso sempre em mente.

Ae voce tem realmente que ler um datasource a cada segundo pq um processo é importante até qie vai… Mas varios? Nem da tempo de fazer tudo as vezes. Por isso lentidao e perda de dados.

Isso consome