Um módulo com ruído pode emitir várias dezenas de impulsos por segundo. Cada elo da cadeia avança ao seu próprio ritmo: quando chegam mais impulsos do que aqueles que saem, uma fila de espera enche-se. Esta página descreve a localização dessas filas, os seus limites conhecidos e o mecanismo de proteção implementado pela aplicação.
Os números-chave
| Valor | O que designa |
|---|---|
| 1 de cada vez | impulsos tratados pelo tablet, uma fila por máquina |
| 100 / 20 s | sincronização para a plataforma por predefinição, ou seja, 5 elementos/s no máximo |
| 15 000 | tarefas em espera no tablet: corte do Bluetooth |
| 500 | tarefas restantes: nova ligação ao módulo |
A cadeia, elo a elo
Sucedem-se três reservatórios. Cada um absorve as irregularidades, desde que o débito de entrada não ultrapasse de forma duradoura o débito de saída.

Os impulsos armazenados (a laranja) aguardam tratamento; os elementos a azul aguardam envio. A seta vermelha representa o mecanismo de proteção descrito mais abaixo. Os marcadores 1 e 2 identificam os dois pontos de estrangulamento conhecidos.
Memória do módulo
O módulo regista cada impulso com a respetiva marca temporal. Quando está ligado, transmite-o ao tablet. Quando está desligado, conserva-o e esvazia a sua memória assim que a ligação é restabelecida. Trata-se de um buffer, e não de um ponto de estrangulamento.
1. Tratamento no tablet
Cada impulso é registado na base de dados e, em seguida, tratado para construir os perflogs, um só de cada vez por máquina. O débito depende do tablet e da sua carga: não é fixo.
2. Sincronização para a plataforma
Um pacote de 100 elementos a cada 20 s, ou seja, 5 por segundo no máximo.
Quando o ruído ultrapassa a capacidade de sincronização
Com as definições predefinidas, a sincronização transmite no máximo 5 elementos por segundo. Tudo o que chega acima deste limiar soma-se ao atraso da plataforma, hora após hora, mesmo que o tablet consiga tratar o fluxo.

A azul, o volume transmitido de forma contínua; a laranja, o volume que se acumula na fila de sincronização. Estes valores são ordens de grandeza, estabelecidos com base num elemento a sincronizar por impulso. O atraso só é recuperado quando o fluxo volta a descer abaixo de 5 impulsos por segundo; aumentar o tamanho dos pacotes ou encurtar o intervalo eleva este teto.
O mecanismo de proteção: desligamento temporário
Quando o tablet deixa de conseguir acompanhar o fluxo, a sua fila de tratamento alonga-se. Para evitar a saturação, a aplicação corta o Bluetooth e deixa o módulo assegurar o armazenamento em seu lugar, durante o tempo necessário para recuperar o atraso.

Ilustração elaborada com um ruído ininterrupto; a escala de tempo é indicativa. A escala vertical da fila é respeitada, o que explica que o limiar de 500 apareça próximo de zero.
- O ruído enche a fila mais rapidamente do que o tablet a esvazia.
- Com 15 000 tarefas em espera, considerando todas as máquinas do tablet, a aplicação desliga todos os módulos.
- O módulo prossegue a contagem e conserva os impulsos na sua memória.
- Quando a fila desce para 500, a aplicação volta a ligar-se e o módulo esvazia a sua memória de uma só vez.
- Se o ruído persistir, esta rajada faz a fila regressar a 15 000 e inicia-se um novo ciclo.
💡 São utilizados dois limiares afastados em vez de um limiar único, para que a aplicação não encadeie cortes e novas ligações por algumas tarefas de diferença.
Quatro cenários
Do caso mais benigno ao mais crítico, consoante o débito do ruído e a sua duração.
| Cenário | Condição | Tablet | Plataforma | Bluetooth |
|---|---|---|---|---|
| Ruído absorvido | menos de 5 impulsos/s | atualizado | atualizada | ligado |
| Plataforma em atraso | mais de 5 impulsos/s, o tablet acompanha o fluxo | atualizado | em atraso | ligado |
| Tablet saturado, ruído pontual | mais impulsos do que aqueles que o tablet trata | em atraso | em atraso | cortado temporariamente |
| Tablet saturado, ruído contínuo | o ruído não se interrompe | atraso crescente | atraso crescente | cortes repetidos |
- Ruído absorvido — Nenhum efeito visível. As filas esvaziam-se de forma contínua.
- Plataforma em atraso — O tablet mantém-se em tempo real. Os dados da plataforma apresentam um atraso, recuperado assim que o ruído cessa.
- Tablet saturado, ruído pontual — A máquina deixa de estar em tempo real: as ações que o exigem, como a mudança de produto, são recusadas. Se for o caso, corte aos 15 000 e depois nova ligação aos 500. Em seguida, a situação regressa à normalidade.
- Tablet saturado, ruído contínuo — Cada nova ligação provoca uma nova saturação. A aplicação não recupera o seu atraso enquanto a fonte do ruído não for tratada.
Evitar o cenário
Existem duas famílias de medidas, consoante o ruído seja sofrido ou controlado.
Cortar na fonte
O ruído nunca entra na memória do módulo.
Desligar a alimentação do módulo

O módulo deixa de registar qualquer impulso e o tablet considera-o desligado até voltar a ser alimentado.
Desligar o sensor da ficha

O módulo permanece alimentado e ligado, mas o ruído deixa de o atingir: nenhum impulso é registado.
Fazer com que a aplicação ignore os impulsos
Esta solução aplica-se a um ruído controlado, durante um período conhecido. O módulo continua a transmitir, mas o tablet descarta os impulsos logo à chegada: não são registados, nem tratados, nem sincronizados.
Iniciar uma tarefa

Uma tarefa de limpeza, por exemplo: o tempo é qualificado e os impulsos são ignorados até ao fim da tarefa. O início pode exigir o tempo real; a tarefa deve, portanto, ser iniciada antes do aparecimento do ruído, e não durante a saturação.
Ignorar os impulsos

Opção «Ignorar os impulsos do módulo»: um botão deslizante no ecrã principal. A escuta deve ser reativada assim que a operação estiver concluída.
⚠️ Em todos os casos, a produção real não é contabilizada durante este período: a configuração nominal deve ser restabelecida antes da retoma. Cortar o Bluetooth ou fechar a aplicação não tem qualquer efeito, uma vez que o módulo continua a registar o ruído e a restituí-lo quando a ligação é restabelecida.
O que o utilizador vê
| O que é apresentado | Quando | Conteúdo |
|---|---|---|
| Ação recusada | a fila de tratamento não está vazia | «Requer estar em tempo real — Impulsos a aguardar tratamento: N» |
| Ação recusada | o módulo esvazia a sua memória após uma nova ligação | «Requer estar em tempo real — Recuperação dos dados do módulo em curso» |
| Janela de alerta | durante o corte; fecha-se automaticamente quando a ligação é restabelecida | «Foram recebidas muitas mensagens do módulo. A aplicação desligou-se temporariamente para tratar estas mensagens e voltará a ligar-se em seguida.» |
| Ícone Bluetooth verde-laranja | durante o corte; ao tocar no ícone é apresentado | «Muitos impulsos a tratar, desligado do módulo temporariamente» |
A reter
- O corte não implica qualquer perda de impulsos, dentro do limite da memória do módulo: este conserva-os, e o tablet regista-os na base de dados antes de os tratar.
- As marcas temporais provêm do módulo: os perflogs mantêm-se exatos no tempo. Apenas a visualização e a plataforma apresentam um atraso.
- O limiar de 15 000 é comum a todo o tablet e o corte aplica-se a todos os seus módulos: uma máquina com ruído penaliza as outras máquinas do mesmo tablet.
- A solução encontra-se na fonte do ruído. Ajustar a sincronização acelera a plataforma, mas não o tablet.