Post

Sistemas sequenciais: dos flip-flops até as máquinas de estados

Por que precisamos de estados e memória? E como sistemas sequenciais funcionam.

Sistemas sequenciais: dos flip-flops até as máquinas de estados

Visualize o seguinte contexto: Temos um manipulador eletropneumático do tipo Pick and Place (Pegar e Posicionar), amplamente utilizado em sistemas automatizados de manufatura, e esse manipulador tem um braço integrado a uma estação de transferência. Esse tipo de sistema tem geralmente uma sequência: uma condição inicial » a garra fecha e prende uma peça » braço sobe e desce e libera a peça em uma esteira de destino. Posto isso, me responda o seguinte: A saída do sistema (o próximo passo ou movimento do braço) depende apenas dos sensores ativados no momento atual, ou ela depende também do histórico de ações anteriores e da ordem em que os passos aconteceram?

A lógica combinacional do post anterior chega ao seu limite aqui, porque avalia apenas o instante atual: nenhuma expressão booleana consegue avaliar de forma completa a saída. Se o braço estivesse em um sistema combinacional, ao ler os sensores de “braço embaixo”, ele não saberia se deveria fechar a garra (primeira descida) ou abrir a garra (segunda descida), pois a leitura dos sensores de posição seria idêntica nas duas situações.

A informação que falta ao programa é a etapa do ciclo em que a máquina está, guardar uma memória ou uma fotografia daquelas condições em um determinado instante de tempo. Essa informação tem nome, estado, e a lógica que depende dela é a dos sistemas sequenciais.

Diagrama de blocos de um sistema sequencial: a entrada alimenta o circuito lógico, que troca informação com um bloco de memória de estado e produz a saída Diagrama de blocos de um sistema sequencial. O bloco de memória guarda o estado entre uma avaliação e a seguinte, e a realimentação desse bloco para a lógica é o que coloca o histórico dentro da decisão.

Estado: o resumo do passado

Para transformar um circuito lógico simples em um sistema inteligente, o diagrama adiciona dois componentes essenciais: um bloco de memória e um caminho de retorno (realimentação). Graças a eles, o sistema não vive apenas o “agora”, ele ganha memória. A partir disso, toda vez que o circuito analisa uma informação, ele gera dois resultados simultâneos:

A Saída Atual: É a ação imediata que o sistema realiza no mundo externo (gerada pela função de saída).

O Próximo Estado: É a informação que a memória vai guardar para a próxima rodada (gerada pela função de transição).

O conteúdo salvo nessa memória é chamado de estado. O estado nada mais é do que um “resumo” ou um pedaço do passado que o sistema precisa lembrar para tomar a decisão certa no presente. A grande vantagem disso para o projetista é que o estado simplifica o histórico do sistema. Não importa o quão longo ou complexo tenha sido o caminho para chegar até ali, se duas situações diferentes resultaram no mesmo estado atual, o comportamento do robô dali para frente será exatamente o mesmo. Isso reduz um histórico infinito a um número finito e gerenciável de situações.

O botão que liga e desliga uma lâmpada é a forma mínima desse comportamento. Pense no seguinte: você aperta sempre o mesmo botão físico (a entrada é sempre a mesma), mas a lâmpada ora acende, ora apaga (a saída muda). Para saber o que fazer a cada clique, o circuito não pode olhar apenas para o botão, ele precisa saber o estado atual da lâmpada (se ela já está acesa ou apagada). O circuito faz uma espécie de “pergunta” a si mesmo: “Eu estou ligado agora?”. Essa consulta ao próprio estado atual para decidir a próxima ação é exatamente a realimentação que vimos no diagrama.

Onde o estado aparece no programa

Em um programa de automação, o estado aparece, geralmente, nesses três tipos de situações:

Bits Retidos: É a forma mais simples de guardar uma informação, funcionando como um interruptor de “sim ou não”. O exemplo mais clássico é o selo de partida de um motor, quando o operador aperta o botão de ligar e depois o solta, um contato auxiliar da própria bobina do motor assume o comando e o mantém funcionando.

Acumuladores de tempo e de contagem: Eles avançam a cada varredura e guardam o valor de uma varredura para a outra. É por essa forma que a exigência de tempo entra no programa: o temporizador compara o valor acumulado com o valor programado em todo ciclo, e os dois fazem parte do estado do sistema.

A Variável de Passo: Em vez de espalhar dezenas de bits e contadores pelo código, usa-se uma única variável numérica (um número inteiro) para ditar exatamente em qual etapa do processo a máquina está (Ex: Passo 1 = Abastecendo; Passo 2 = Misturando; Passo 3 = Injetando). É o conceito central das Máquinas de Estados, que falaremos mais adiante.

Com isso notamos que circuitos combinacionais dependem apenas das entradas atuais, permitindo testes rápidos e previsíveis por meio de uma tabela verdade simples. Já os circuitos sequenciais possuem memória e dependem também do estado anterior, o que aumenta drasticamente as combinações e exige métodos de verificação muito mais complexos.

Em um sistema com memória, sequencial, é preciso mapear a lista de situações possíveis (estados) e todas as regras de mudança (transições) entre elas. Esse é um conceito importantíssimo.

Como a eletrônica guarda um bit

Na eletrônica digital, a capacidade de memorizar 1 bit de informação nasce de um conceito simples: a realimentação (ou feedback). Isso significa conectar duas portas lógicas de forma que a saída de uma sirva de entrada para a outra, criando um “laço” fechado. Quando construímos esse circuito usando duas portas NOR, criamos o Latch SR. O nome vem de suas duas entradas de controle: • S (Set): Ativa a saída (transforma em 1). • R (Reset): Zera a saída (transforma em 0).

S R Q (próximo) Comportamento
0 0 Q anterior retenção do estado
1 0 1 ativação da saída
0 1 0 desativação da saída
1 1 indeterminado condição proibida

A entrada de relógio e o flip-flop

O flip-flop resolve as duas limitações do latch introduzindo um elemento fundamental: o clock, que funciona como o relógio do circuito. Em vez de reagir instantaneamente a qualquer mudança nas entradas, o flip-flop só lê os comandos em um momento exato chamado borda do relógio. Esse é o instante milimétrico em que o sinal elétrico muda de estado. Entre uma borda e outra, o valor guardado fica trancado e inalterado, não importa o que aconteça nas entradas. Essa mudança traz duas grandes vantagens para a eletrônica digital:

• Fim do efeito dominó: Como todos os elementos de memória do chip compartilham o mesmo relógio, eles se atualizam exatamente no mesmo instante.

• Previsibilidade: O comportamento do circuito inteiro passa a ser medido e descrito em ciclos de relógio, eliminando os atrasos imprevisíveis de cada componente.

A partir desse princípio, existem variantes na família que se diferenciam apenas pelo comando que executam no instante da leitura. Algumas mantêm comandos separados para ligar e desligar, outras usam uma entrada única para evitar conflitos, e há modelos focados em inverter o sinal para criar contadores binários ou dividir a frequência do circuito.

Esquema de flip-flop JK construído com quatro portas NAND, entradas J, clock e K, saídas Q e Q barrado em realimentação cruzada Flip-flop JK implementado com quatro portas NAND. O par de portas da direita é o latch; o par da esquerda combina J, K, o sinal de relógio e as saídas realimentadas antes de liberar o comando.

CLP e ciclo de Scan

Dentro de um CLP, que é o Controlador Lógico Programável usado na indústria, nenhum daqueles circuitos e chips físicos que vimos antes existe de verdade. Tudo acontece por meio de software. O controlador funciona repetindo um ciclo contínuo de três passos:

  1. Lê todas as entradas físicas.
  2. Executa a lógica do programa.
  3. Atualiza as saídas de uma vez só.

Esse ciclo repetitivo, chamado de varredura, funciona exatamente como o relógio dos flip-flops. Todas as funções de memória e retenção voltam aqui na forma de instruções de software, mantendo o mesmo comportamento e exigindo o mesmo cuidado para evitar comandos contraditórios.

O ciclo de scan de um CLP é, essencialmente, a representação maior de um processo dinâmico de sincronização da memória.

A máquina de estados finitos

Um flip-flop guarda apenas um bit de informação. Porém, um processo de automação real como nosso sistema de pick and place, exige várias etapas sequenciais. Esse tipo de sistema pede uma descrição de nível mais alto, que liste todas as situações possíveis da máquina e as condições exatas que fazem o sistema passar de uma etapa para a outra. Essa descrição é chamada de Máquina de Estados Finitos, ou simplesmente FSM, da sigla em inglês. Na sua forma abstrata, ela usa círculos para representar as situações e setas para representar as mudanças de caminho.

Diagrama genérico de máquina de estados com quatro círculos nomeados State A, State B, State C e State D, ligados por cinco setas rotuladas de Transition 1 a Transition 5 Representação abstrata da máquina de estados: círculos para os estados, setas para as transições.

A definição formal tem cinco elementos:

  1. Conjunto de estados: Todas as situações possíveis em que a máquina pode estar.
  2. Estado inicial: O ponto de partida do sistema quando ele é ligado.
  3. Conjunto de entradas: Os sinais externos, como botões e sensores.
  4. Função de transição: A regra que define qual será o próximo estado com base no estado atual e nos sinais das entradas.
  5. Conjunto de saídas: As ações que a máquina executa, como acionar motores ou acender lâmpadas.

A forma mais comum de visualizar isso é o diagrama de estados, onde cada situação é desenhada como uma figura fechada e as setas mostram as condições que autorizam a mudança de passo.

Diagrama de estados com quatro estados nomeados Início, Operando, Parado e Falha, ligados por transições rotuladas Iniciar, Manter, Parar, Erro, Reiniciar e Reativar Estrutura de supervisão típica de um equipamento: espera, funcionamento, desligamento manual e falha. Se houver falha, o sistema só volta a rodar após o operador analisar o erro e autorizar, o famoso rearme.

O diagrama traz os cinco elementos comuns em casos reais: temos quatro estados possíveis, o ponto de partida indicado à esquerda, comandos do operador e alertas de falhas servindo como entradas, e setas que conectam tudo de forma lógica.

Aplicação: Sistema Pick and Place

Vamos tomar como exemplo nosso sistema pick and place inicial, onde tem um eixo vertical para descer e subir o braço, eixo horizontal para o deslocamento entre origem e destino, e garra pneumática. Cada movimento tem sensor de fim de curso que confirma a chegada, e a garra tem sensores de aberta e de fechada.

Infográfico do ciclo de operação de uma estação pick-and-place em oito etapas numeradas, da espera da peça ao retorno à posição inicial As oito etapas do ciclo da estação. Cada número corresponde a um estado da máquina de estados e a uma linha da tabela de transição.

O desenvolvimento de um software para CLP que implementa uma máquina de estados, geralmente sempre começa pela criação da tabela de transições, um passo fundamental que deve ser feito antes mesmo de abrir a IDE que iremos programar. A tabela funciona como o diagrama de estados, mas organizada em formato de lista. Ao ler cada linha da esquerda para a direita, você encontra a resposta para três perguntas centrais:

  1. Em qual etapa o sistema está agora?
  2. Quais ações ou atuadores a máquina mantém ligados nessa etapa?
  3. Qual sinal ou sensor de campo autoriza o sistema a avançar para a próxima etapa?
Passo Estado Saídas ativas Condição de transição Próximo
0 Espera da peça nenhuma pecaPresente · botaoCiclo 1
1 Descida do braço eixoZDesce fimCursoInferior 2
2 Fechamento da garra garraFecha garraFechada 3
3 Elevação do braço eixoZSobe fimCursoSuperior 4
4 Deslocamento eixoXAvanca posicaoDestino 5
5 Segunda descida eixoZDesce fimCursoInferior 6
6 Liberação da peça garraAbre garraAberta 7
7 Retorno à origem eixoZSobe, eixoXRecua fimCursoSuperior · posicaoOrigem 0

Na tabela de transição, cada condição para mudar de passo depende do sinal de um sensor. Isso garante que a máquina só avance para a próxima etapa quando houver uma confirmação física e real de que o movimento anterior foi totalmente concluído. Embora seja possível programar a mesma sequência usando tempos estimados em vez de sensores, essa escolha só funciona bem enquanto a máquina for nova e mantiver o mesmo desempenho perfeito. Com o passar do tempo, o desgaste mecânico e as variações na pressão do sistema pneumático quebram essa estabilidade, tornando o uso de temporizadores uma opção pouco confiável.

O Desafio das Ações Repetidas e a Variável de Passo

Outra característica importante da tabela é que a mesma ação física se repete em momentos diferentes do ciclo. O eixo vertical da máquina precisa descer nos passos um e cinco, e subir nos passos três e sete. O sistema consegue diferenciar essas duas descidas apenas pelo contexto. Na primeira descida, a garra está vazia para coletar a peça. Na segunda descida, a garra já está segurando a peça para posicioná-la.

Esse cenário nos traz de volta ao problema inicial do texto, que agora ganha uma explicação técnica. Como os sensores de posição fazem exatamente a mesma leitura nesses dois momentos diferentes, a única forma de a máquina saber o que fazer é consultando o histórico do processo. É por isso que, na automação de sequências, é uma boa opção usar uma variável de passo, que funciona como a memória do sistema para registrar em qual etapa exata o ciclo se encontra.

A implementação em texto estruturado

A seguir temos um trecho de uma implementação básica de um sequenciador, programada em ST, no Codesys. A tabela de transição serve como a especificação do programa, e a estrutura usada para traduzi-la em código segue sempre o mesmo padrão. Uma única variável do tipo inteiro armazena o número do passo atual e mantém essa informação guardada de uma varredura para a seguinte. O programa utiliza um comando do tipo CASE baseado nessa variável para abrir um bloco de código específico para cada linha da tabela.

Trecho de código em Structured Text abrindo o CASE sequenciador OF com o passo 00

Continuação do código em Structured Text com os passos 10 a 40 do sequenciador

Continuação do código em Structured Text com os passos 60 a 90 do sequenciador

Dentro de cada bloco de código ficam duas coisas:

• As saídas: Os comandos que devem ficar ligados naquela etapa.

• A condição de transição: A lógica que aguarda o sinal do sensor para gravar o número do próximo passo na variável, fazendo o ciclo avançar.

(Futuramente quero entrar mais a fundo em técnicas e boas práticas de código para implementações de sistemas sequenciais.) Esse post é só para molharmos os pés no assunto.

Quando a memória se torna necessária?

Uma única pergunta ajuda a separar os dois tipos de lógica na automação: a saída de agora depende exclusivamente do que os sensores estão lendo neste exato momento? Se a resposta for sim, o problema é combinacional e uma expressão booleana simples resolve. Por outro lado, se a resposta correta mudar de acordo com o que aconteceu antes no processo, o programa precisa guardar o estado anterior e a lógica passa a ser sequencial.

O teste prático para identificar a necessidade de memória é procurar no processo uma leitura de sensor que apareça duas vezes no ciclo, mas pedindo ações diferentes em cada uma delas. A segunda descida da garra no sistema pick and place exemplifica exatamente essa situação. A tabela abaixo resume as principais diferenças que nascem dessa escolha de projeto.

  Combinacional Sequencial
Saída depende de entradas do instante entradas e estado
Elemento de memória ausente obrigatório
Caminho de realimentação ausente presente
Descrição formal tabela verdade, expressão booleana diagrama de estados, tabela de transição
Mesma entrada aplicada duas vezes mesma saída saída conforme a etapa
Tempo e ordem dos eventos fora do modelo dentro do modelo
Esforço de verificação duas elevado a n linhas estados vezes transições

A verificação de um sistema combinacional termina na tabela verdade. A de um sistema sequencial depende do diagrama de estados e da lista de transições, e a qualidade dela fica limitada pela completude dessa lista. Os estados que ficam fora do diagrama continuam alcançáveis pelo programa, e costumam aparecer com o equipamento já em operação.

Aplicações práticas de sistema sequencial

Em automação industrial, alguns casos não fecham sem memória.

Ciclo de máquina com etapas em ordem fixa. Prensa, envase, paletizadora e pick-and-place repetem a mesma leitura de fim de curso em etapas diferentes, pedindo comandos diferentes.

Comando por botoeira de pulso. O operador solta o botão e o motor continua ligado, porque o selo guarda a informação de que a partida aconteceu.

Partida estrela-triângulo e qualquer sequência temporizada de contatores. O intervalo entre uma manobra e a seguinte é estado, e a ordem errada fecha dois contatores que jamais podem fechar juntos.

Falha com reconhecimento. Depois de um desarme, o equipamento guarda a condição de falha até o operador rearmar, exigência que aparece em parada de emergência e em todo rearme manual.

Contagem e dosagem. Peças contadas, batelada por tempo ou por peso acumulado: o valor acumulado é estado por definição.

Modos de operação. Manual, automático e passo a passo são estados do equipamento, e cada um habilita um conjunto diferente de comandos.

Diálogo com outro equipamento ou com o supervisório. Pedido, confirmação e liberação formam uma sequência em que cada lado espera a resposta do outro.

Detecção de borda. Contar um pulso ou disparar uma ação uma vez por acionamento exige comparar o valor atual do sinal com o do ciclo anterior.

Aplicações práticas de sistema combinacional

Parte da lógica de planta continua combinacional, e transformá-la em máquina de estados só acrescenta trabalho.

Permissivo de partida. A bomba liga com nível alto e tampa fechada, e a avaliação é do instante.

Alarme comum. A soma lógica dos alarmes individuais vale no ciclo em que é calculada.

Comparação com setpoint e conversão de código. O resultado sai das entradas atuais.

Como evolução dos circuitos sequenciais complexos e dos elementos de memória, a máquina de estados organiza as etapas lógicas de um processo para garantir decisões seguras baseadas no histórico de ações, servindo de base para padrões globais da indústria atual, como o PackML.

Esta postagem está licenciada sob CC BY 4.0 pelo autor.