6. Blocos de tempo, filtro, controle e tabela
Todos os blocos deste capítulo, exceto as tabelas e os vetores, ficam no menu Lógicas. As tabelas e os vetores ficam em Tabelas.
Todos rodam a cada ciclo da função, nominalmente 1 ms (1 kHz): o intervalo depende da ocupação do processador. Cada execução é um ciclo. Cada ficha traz entradas, saída, campos da tela, regra de cálculo e custo de memória.
#Tempo e contagem
#Atraso
Atrasa a mudança de estado de um sinal de liga/desliga. Não atrasa um valor analógico.
| Item | Descrição |
|---|---|
| Entradas | Entrada: maior que 0 é ligado; 0 ou menos, desligado. Tempo override: ligada e maior que 0, vale no lugar do campo; desligada, vale o campo. |
| Saída | Sempre 0 ou 1, nunca o valor da entrada. |
| Modo | On-Delay: atrasa só a subida (de 0 para 1). Off-Delay: atrasa só a descida. Ambos: atrasa as duas. Padrão: On-Delay. |
| Tempo de atraso (s) | Padrão 1,0; a tela aceita de 0,001 a 60. Unidade: segundos. |
A saída só acompanha a entrada depois que o novo estado dura o tempo ajustado. Em On-Delay, se a entrada volta a 0 antes do tempo, a contagem cancela. Em Off-Delay, se volta a 1, a saída vai a 1 na hora. Em Ambos, cada mudança reinicia a contagem: um pulso mais curto que o tempo ajustado não chega à saída.

Memória: 16 bytes da memória de trabalho (limite de 512 do mapa) e 14 bytes de configuração (limite de 2048).
#Timer cíclico
Alterna sem parar entre uma fase ligada e uma desligada e coloca na saída o valor da fase atual. Serve de gerador de pulsos.
| Item | Descrição |
|---|---|
| Entradas | Dado on: valor que sai na fase ligada. Dado off: valor que sai na fase desligada. Desligada, a entrada vale 0. |
| Saída | O valor de Dado on ou de Dado off. Com 1 e 0 nas entradas vira um trem de pulsos; com dois valores quaisquer, alterna entre eles. |
| Tempo On (ms) | Duração da fase ligada. Padrão 1000; 0 a 999999. |
| Tempo Off (ms) | Duração da fase desligada. Padrão 1000; 0 a 999999. |
Período = Tempo On + Tempo Off. Fração ligada = Tempo On ÷ (Tempo On + Tempo Off). Não há entrada para habilitar nem para reiniciar: o bloco roda desde que a função é carregada. A contagem é em milissegundos inteiros: um tempo fracionário vale o inteiro seguinte (7,14 vira 8 ms) e 0 vale 1 ms.
Memória: 12 bytes da memória de trabalho (limite de 512 do mapa) e 14 bytes de configuração (limite de 2048).
#Contador
Conta quantas vezes o disparo sobe. Satura no máximo: não volta a zero sozinho.
| Item | Descrição |
|---|---|
| Entradas | Trigger: cada subida (de 0 ou menos para mais que 0) conta 1. Reset: maior que 0 zera a saída e bloqueia a contagem. Enable: desligada, habilita; ligada, só conta se maior que 0. |
| Saída | A contagem atual. |
| Direção | Crescente soma 1 por subida; Decrescente subtrai 1. Padrão: Crescente. |
| Contagem máxima | Limite da contagem, em módulo. Padrão 9999; 0 a 999999. |
Crescente: sobe até a Contagem máxima e fica nela. Decrescente: parte de 0 e desce até o valor negativo da Contagem máxima; não há valor inicial ajustável. Subidas com Enable em 0 ou com Reset alto são perdidas. Soltar o Reset com o Trigger ainda alto não gera contagem.
Memória: 8 bytes da memória de trabalho (limite de 512 do mapa) e 16 bytes de configuração (limite de 2048).
#Rampa
Leva a saída de um valor inicial a um valor final em um tempo fixo, quando o gatilho passa de um limite.
| Item | Descrição |
|---|---|
| Entradas | Valor disparo: o gatilho. Valor inicial: de onde a rampa parte. Valor final: onde termina. Desligadas, valem 0. |
| Saída | Valor inicial enquanto a rampa não começou; depois o valor intermediário; ao fim, Valor final. |
| Tempo rampa (ms) | Duração da rampa. Padrão 1000; 0 a 999999. |
| Ativar acima de: | A rampa começa quando Valor disparo fica maior que este número. Padrão 0. |
| Rearmar abaixo de: | Depois do fim da rampa, ela só rearma quando Valor disparo fica menor que este número; rearmada, recomeça quando ele estiver acima de Ativar acima de:. Padrão 0. |
A rampa é definida pela duração, não pela taxa: inclinação = (Valor final − Valor inicial) ÷ Tempo rampa. Cair abaixo de Rearmar abaixo de: no meio da rampa não a interrompe. Ao rearmar, a saída volta de uma vez a Valor inicial. Valor inicial e Valor final são lidos a cada ciclo: mudá-los durante a rampa entorta o trajeto.
Memória: 12 bytes da memória de trabalho (limite de 512 do mapa) e 20 bytes de configuração (limite de 2048).
#Sample and Hold
Guarda o valor de um sinal no instante em que um disparo muda e mantém esse valor na saída até o disparo seguinte.
| Item | Descrição |
|---|---|
| Entradas | Sinal: o valor a guardar. Trigger: o disparo; maior que 0 conta como ligado. Desligadas, valem 0. |
| Saída | O último valor capturado de Sinal. Começa em 0. |
| Modo de captura | Borda de subida: o Trigger passa de desligado para ligado. Borda de descida: o inverso. Ambas as bordas: as duas. Padrão: Borda de subida. |
Não há entrada de reset: a saída só muda em uma captura.
Memória: 8 bytes da memória de trabalho (limite de 512 do mapa) e 7 bytes de configuração (limite de 2048).
#Detector de Pico
Retém o maior (ou o menor) valor visto na entrada e, se você quiser, deixa esse pico decair com o tempo.
| Item | Descrição |
|---|---|
| Entradas | Entrada: o sinal. Reset: enquanto maior que 0, a saída copia a entrada a cada ciclo. Desligadas, valem 0. |
| Saída | O pico retido. |
| Modo | Máximo retém o maior valor; Mínimo, o menor. Padrão: Máximo. |
| Taxa de decaimento | Em unidades do sinal por segundo. Padrão 0 (o pico não decai); 0 a 999999. |
Com Taxa de decaimento maior que 0, o pico se aproxima da entrada em linha reta, pelo tempo real medido, e nunca a cruza. Exemplo: o pico foi 1 e a entrada voltou a 0; com taxa 5, a saída chega a 0 em 200 ms. No primeiro ciclo depois de carregar, a saída parte do valor da entrada, não de 0.
Memória: 12 bytes da memória de trabalho (limite de 512 do mapa) e 14 bytes de configuração (limite de 2048).
#Filtros e derivada
Dois destes blocos valem por ciclo de 1 ms (Filtro EMA e Filtro médias), um vale em hertz (Filtro passa baixa) e a Derivada tem um fator por ciclo e uma saída em unidades por segundo. Cada ficha diz como converter o ajuste para tempo ou frequência. Ao ligar a VCU e a cada gravação de mapa, o Filtro EMA e o Filtro passa baixa partem de 0 e levam o tempo do filtro para alcançar a entrada, e a Derivada compara a primeira amostra com 0, o que dá um pico na saída.
#Filtro EMA
Suaviza um sinal misturando a amostra nova com o valor anterior da saída.
| Item | Descrição |
|---|---|
| Entradas | Entrada: o sinal. Desligada, vale 0. |
| Saída | O sinal filtrado. |
| Alpha | Peso da amostra nova a cada ciclo de 1 ms. Padrão 1,0 (sem filtro); 0 a 1 na tela. |
Saída = Alpha × entrada + (1 − Alpha) × saída anterior. Alpha 1 passa o sinal sem filtrar; Alpha 0 não deixa o sinal passar. O Alpha vale por ciclo, não em tempo. A saída chega a 63 % de um degrau em 1 tau (a constante de tempo do filtro) e a 95 % em 3 tau. Converta assim:
tau (ms) = −1 ÷ ln(1 − Alpha)
Alpha = 1 − e^(−1 ÷ tau) (tau em ms)
frequência de corte (Hz) ≈ 159 ÷ tau (ms)
| Alpha | Constante de tempo (tau) | Corte aproximado |
|---|---|---|
| 0,005 | 199,5 ms | 0,8 Hz |
| 0,019 | 52,1 ms | 3,1 Hz |
| 0,05 | 19,5 ms | 8,2 Hz |
| 0,15 | 6,15 ms | 26 Hz |
| 0,5 | 1,44 ms | relação não vale |
Para tau = 50 ms, Alpha = 0,0198. A relação com o corte só vale para tau bem maior que 1 ms.
Memória: 8 bytes da memória de trabalho (limite de 512 do mapa) e 8 bytes de configuração (limite de 2048).
#Filtro médias
Devolve a média das últimas N amostras do sinal, uma amostra por ciclo de 1 ms.
| Item | Descrição |
|---|---|
| Entradas | Entrada: o sinal. Desligada, vale 0. |
| Saída | A média móvel. |
| Pontos | O número N de amostras. Padrão 16; 1 a 32. |
Com N pontos a janela dura N ciclos (cerca de N ms). Diante de um degrau, a saída sobe em linha reta e chega ao valor novo depois de N ms; diante de uma rampa, fica (N − 1) ÷ 2 ms atrás. Logo depois de carregar, enquanto as amostras não enchem a janela, a média usa só as recebidas.
Memória: 12 + 4 × Pontos bytes da memória de trabalho (limite de 512 do mapa) e 5 bytes de configuração (limite de 2048). É o único bloco do capítulo com custo que varia. Exemplos: 16 B com 1 ponto, 44 B com 8, 76 B com 16 (padrão, 14,8 % do limite) e 140 B com 32 (27,3 %).
#Filtro passa baixa
Filtro de 1ª ordem ajustado pela frequência de corte, em hertz, com o tempo real medido entre ciclos.
| Item | Descrição |
|---|---|
| Entradas | Entrada: o sinal. Desligada, vale 0. |
| Saída | O sinal filtrado. |
| Frequência de corte (Hz) | Padrão 100; 1 a 1000 na tela. Valor 0 ou menor: o sinal passa sem filtro. |
| Fator Q | Padrão 1,0; 0 a 1. Não é fator de qualidade: mistura o sinal filtrado com o sinal cru. 1 é só filtrado. |
Constante de tempo tau (ms) ≈ 159 ÷ Fc (Hz): 1 Hz dá 159 ms, 3 Hz dá 53 ms, 10 Hz dá 16 ms. A 1 kHz o filtro perde o sentido acima de 500 Hz. Com Fator Q abaixo de 1, a mistura volta para dentro do filtro e ele fica mais rápido que o corte indica. Exemplo com 10 Hz: Q 1 dá tau de 16,4 ms; Q 0,99, 14,1 ms; Q 0,9, 6,0 ms; Q 0,5, 1,3 ms. Deixe Q em 1 para o corte valer.
Memória: 12 bytes da memória de trabalho (limite de 512 do mapa) e 12 bytes de configuração (limite de 2048).
#Derivada
Mede a taxa de variação do sinal, em unidades por segundo.
| Item | Descrição |
|---|---|
| Entradas | Entrada: o sinal. Desligada, vale 0. |
| Saída | Variação da entrada por segundo, não por ciclo. |
| Fator de filtro | Peso da amostra nova (a tela escreve o símbolo alfa depois do nome) no filtro da saída, por ciclo de 1 ms. Padrão 0,5; 0 a 1. |
Derivada = (entrada − entrada do ciclo anterior) ÷ tempo medido entre os ciclos (cerca de 1 ms). Com o fator de filtro (alfa) entre 0 e 1, a saída passa por um filtro igual ao do Filtro EMA: saída = alfa × derivada + (1 − alfa) × saída anterior.
A derivada não tem janela: compara duas amostras seguidas, cerca de 1 ms entre elas. Um sinal que só atualiza de vez em quando, em degraus, dá derivada 0 na maioria dos ciclos e um pico no ciclo em que o degrau chega. Confira no log com que frequência o canal muda. Filtre antes de derivar: a tabela mostra um sinal que sobe 1 unidade a cada 50 ms (inclinação real: 20 unidades por segundo).
| Montagem | Menor saída (unid/s) | Maior saída (unid/s) |
|---|---|---|
| Derivada com alfa 1 (sem filtro) | 0 | 1000 |
| Derivada com alfa 0,5 (padrão) | 0 | 500 |
| Derivada com alfa 0,05 | 4,4 | 54,2 |
| Filtro EMA (Alpha 0,0198) antes, Derivada com alfa 1 | 11,8 | 31,3 |
| Filtro EMA (Alpha 0,0198) antes, Derivada com alfa 0,05 | 16,3 | 22,1 |
Valores calculados pelas fórmulas dos blocos, com ciclo de 1 ms, depois do regime. O filtro antes custa atraso: com tau de 50 ms, a derivada chega cerca de 50 ms depois.

Memória: 12 bytes da memória de trabalho (limite de 512 do mapa) e 8 bytes de configuração (limite de 2048).
#Qual filtro usar
| Situação | Bloco | Por quê | Memória de trabalho |
|---|---|---|---|
| Você pensa em hertz | Filtro passa baixa | O corte vale em Hz, com o tempo medido entre ciclos. | 12 B |
| Você pensa em tempo de resposta e quer o menor custo | Filtro EMA | Uma conta e um valor guardado; o Alpha vale por ciclo. | 8 B |
| Você quer uma janela de tamanho fixo (N amostras) | Filtro médias | A saída chega ao valor novo em N ms, N ciclos. | 12 + 4 × Pontos |
| Você vai derivar um sinal que muda em degraus | Um dos três, antes da Derivada | A derivada sem filtro vira picos. | (do filtro) |

#Controle
#Integrador
Soma a entrada ao longo do tempo, com ganho e limites.
| Item | Descrição |
|---|---|
| Entradas | Entrada: o valor a integrar. Reset: enquanto maior que 0, a saída fica em 0. Desligadas, valem 0. |
| Saída | O valor acumulado. |
| Ganho | Padrão 1,0; −999999 a 999999. Unidade: por segundo. |
| Limite mínimo | Piso do acumulado. Padrão −999999. |
| Limite máximo | Teto do acumulado. Padrão 999999. |
A cada ciclo: acumulado = acumulado + entrada × Ganho × tempo medido (em segundos); depois o acumulado é limitado entre os dois limites. Entrada 10 e Ganho 1 durante 2 s sobem 20. Não há valor de reserva: com a Entrada desligada o bloco integra 0 e a saída não se move. Não há entrada para pausar: para segurar o valor, leve a entrada a 0 antes do bloco (por exemplo, com uma Chave). O Reset zera sem aplicar os limites. Se Limite mínimo for maior que Limite máximo, vale o mínimo. Em uso contínuo por horas, sem chegar a um limite, o acumulado acaba deixando de crescer por falta de resolução numérica.
Memória: 8 bytes da memória de trabalho (limite de 512 do mapa) e 18 bytes de configuração (limite de 2048).
#PID
Calcula uma saída a partir da diferença entre o valor medido e o alvo, com parcelas proporcional, integral e derivativa.
| Item | Descrição |
|---|---|
| Entradas | Dado (o valor medido), Alvo, Ganho P, Ganho I, Ganho D (desligado vale 0) e Anti windup (opcional: desligada, vale o campo). |
| Saída | A soma das três parcelas, sem limite. |
| Tempo de loop (ms) | Fator de escala do tempo dos ganhos. Padrão 100; 1 a 999999. |
| Anti windup (valor fixo) | Limite do acumulado, em módulo (de −valor a +valor). Padrão 100; 0 a 999999. |
erro = Dado − Alvo
acumulado = acumulado + erro × (Tempo de loop ÷ 1000), limitado a ± Anti windup
variação = (erro anterior − erro) ÷ (Tempo de loop ÷ 1000)
Saída = erro × Ganho P + acumulado × Ganho I + variação × Ganho D
O bloco roda a cada ciclo (nominalmente 1 ms). O Tempo de loop (ms) não muda isso: entra só como tempo de cada conta. Por segundo, o acumulado cresce erro × Tempo de loop, então o Ganho I efetivo é Ganho I × Tempo de loop e o Ganho D efetivo é Ganho D ÷ Tempo de loop. Com Tempo de loop em 1, os ganhos ficam em unidades reais (I por segundo, D em segundos). Com o padrão 100, um Ganho I de 0,5 rende 50. Os três ganhos são entradas, não campos: ligue um Valor Fixo em cada.

O Anti windup limita o acumulado antes do ganho: a parcela integral nunca passa de |Ganho I| × Anti windup. Não há reset, habilitar nem limite de saída: ponha um Limitador depois do PID. O acumulado soma o tempo todo, mesmo que você desvie a saída com uma Chave, até chegar a ± Anti windup. A parcela derivativa compara o erro de dois ciclos seguidos (cerca de 1 ms) e age sobre o erro, não só sobre o Dado: um dado que muda em degraus, um degrau no Alvo ou a primeira execução depois de gravar o mapa (o erro anterior começa em 0) geram picos nela. Filtre o Dado antes, como na Derivada.
Memória: 12 bytes da memória de trabalho (limite de 512 do mapa) e 22 bytes de configuração (limite de 2048).
#Tabelas e vetores
Tabelas e vetores guardam números que você digita e devolvem o valor interpolado para a entrada.
#Tabela 4x4, Tabela 8x8 e Tabela 12x12
Devolve um valor de uma tabela de duas dimensões, com interpolação entre as células vizinhas.
| Item | Descrição |
|---|---|
| Entradas | X: valor no eixo das colunas. Y: valor no eixo das linhas. Desligadas, valem 0. |
| Saída | O valor interpolado. |
| Modo | Fora da faixa dos eixos: Clamp segura o valor da ponta; Extrapola continua a reta (ou o plano) do segmento da ponta. |
| Eixos e células | De −100000 a 100000. Uma tabela nova vem com eixos 0, 1, 2... e células 0: devolve 0. |
A interpolação é bilinear: o bloco acha o quadrado do eixo onde X e Y caem e interpola entre as quatro células vizinhas. Os eixos precisam ser estritamente crescentes (cada ponto maior que o anterior). Com eixo fora de ordem, o resultado não segue o que você desenhou; dois pontos iguais em seguida dão um degrau. A tela da tabela mostra um aviso em vermelho quando o eixo X, o Y ou ambos não são estritamente crescentes, mas só avisa.

Memória: 4 bytes da memória de trabalho (limite de 512 do mapa) e de 106 a 682 bytes de configuração (limite de 2048), conforme o tamanho: veja a tabela de tamanhos.
#Vetor 1x4, Vetor 1x8, Vetor 1x12 e Vetor 1x16
A mesma ideia da tabela, com um eixo só: devolve o valor interpolado em linha reta entre dois pontos.
| Item | Descrição |
|---|---|
| Entradas | X: valor no eixo. Desligada, vale 0. |
| Saída | O valor interpolado. |
| Modo | Igual ao da tabela: Clamp segura o valor da ponta; Extrapola continua a reta do segmento da ponta. |
| Eixo e dados | De −100000 a 100000. Um vetor novo vem com eixo 0, 1, 2... e dados 0. |
Valem as mesmas regras de eixo estritamente crescente e de entrada desligada. A tela do vetor não mostra o aviso de eixo fora de ordem que a tela da tabela mostra: confira a ordem você mesmo.
Memória: 4 bytes da memória de trabalho (limite de 512 do mapa) e de 40 a 136 bytes de configuração (limite de 2048), conforme o tamanho.
#Tamanhos e custo de configuração
| Bloco | Pontos de eixo e células | Configuração | Parte dos 2048 B |
|---|---|---|---|
| Tabela 4x4 | 4 + 4 pontos, 16 células | 106 B | 5,2 % |
| Tabela 8x8 | 8 + 8 pontos, 64 células | 330 B | 16,1 % |
| Tabela 12x12 | 12 + 12 pontos, 144 células | 682 B | 33,3 % |
| Vetor 1x4 | 4 pontos | 40 B | 2,0 % |
| Vetor 1x8 | 8 pontos | 72 B | 3,5 % |
| Vetor 1x12 | 12 pontos | 104 B | 5,1 % |
| Vetor 1x16 | 16 pontos | 136 B | 6,6 % |