← a sala de CLP · CLP do zero · aula 06

O IF que não desliga

A partida direta passada pra texto: “se apertou o liga e o desliga está bom, então liga o motor”. Liga. E o botão de parar não para mais nada.

começar

a receita, igual em toda aula

1 · o erro

O IF sem ELSE, e a sequência que atravessa as etapas num toque.

2 · o porquê

A bobina escreve em toda varredura; a atribuição dentro do IF, não.

3 · a correção

A atribuição direta, a borda de subida e uma transição por varredura.

4 · a prova

Um CLP que roda texto estruturado, e mostra a linha que mudou cada variável.

antes do erro

A mesma lógica, três jeitos de escrever

A norma IEC 61131-3 define as linguagens que quase todo CLP aceita. Ladder (LD) é uma delas. As outras que você vai encontrar:

A partida direta da aula 02, K1 = F1 · S0 · (S1 + K1), nas três:

Ladder    ──┤ ├ F1 ──┤ ├ S0 ──┬──┤ ├ S1 ──┬──( ) K1
                                └──┤ ├ K1 ──┘

ST        K1 := F1 AND S0 AND (S1 OR K1);
S1K1 S0F1 ≥1 & K1
FBD · o bloco ≥1 é o OU, o & é o E — o selo é o K1 voltando pra entrada

O CLP transforma as três na mesma coisa por dentro, e varre do mesmo jeito: lê, executa de cima pra baixo, escreve. Os tropeços desta aula são de quem traduz achando que IF é bobina.

06a O IF sem ELSE

texto estruturado · atribuição dentro do IF · bobina × set

1 · o erro

A partida com selo, lida em voz alta e escrita do jeito que se lê:

IF (S1 OR K1) AND S0 THEN
    K1 := TRUE;
END_IF;

S1 liga o motor, e ele segura sozinho. Aí o S0 é apertado, e o motor segue girando. Nem desligando o CLP resolve: só STOP e RUN de novo.

2 · o porquê

A bobina do Ladder escreve na memória em toda varredura: 1 se chega energia, 0 se não chega. A atribuição dentro do IF só escreve quando a condição é verdadeira. Quando é falsa, o IF é pulado inteiro, e o K1 fica com o que tinha:

S0 apertado   →  (S1 OR K1) AND S0  =  FALSE
              →  o IF é pulado
              →  ninguém escreve no K1  →  K1 continua TRUE

Esse IF não é a bobina ( ). É a bobina (S) da aula 03 — liga e fica — sem nenhuma (R) em lugar nenhum.

3 · a correção

O jeito mais curto é escrever a bobina como bobina, uma atribuição fora de IF:

K1 := (S1 OR K1) AND S0;

Ou, se o IF deixa mais claro, com os dois lados escritos:

IF (S1 OR K1) AND S0 THEN
    K1 := TRUE;
ELSE
    K1 := FALSE;
END_IF;

A regra pra ler ST: toda variável precisa ser escrita em todos os caminhos, ou ela vira memória. Às vezes é isso que se quer — um set e um reset separados —, mas aí tem que ser de propósito.

4 · a prova

Nos três, dê um toque no S1 e depois no S0. Olhe a linha que fica verde no código: é a última que mudou uma variável. No , apertar o S0 não pinta linha nenhuma — ninguém escreveu.

o IF sem ELSE no lugar de uma bobina é tropeço clássico de quem passa do Ladder pro texto estruturado, montado para esta aula. Eu ainda não tenho um CLP físico: a prova roda num interpretador de ST do site, com a parte da linguagem que as aulas usam.

06b A sequência que pula a água

Grafcet e SFC · etapas em ST · borda de subida · uma transição por varredura

1 · o erro

Um misturador de lote. O operador confirma cada fase no mesmo botão OK: um toque começa a encher de água (K1); outro toque, quando a água basta, liga o misturador (K2) por 5 s; depois volta pro repouso. O Grafcet:

0 repouso ↑OK 1 K1 · encher de água ↑OK 2 K2 · misturar 5 s 5 s passaram
Grafcet · etapa ativa = o que está ligado; a barra é a transição; ↑OK é a borda de subida do OK

Em ST, cada etapa vira um BOOL, e cada transição vira um IF:

IF E0 AND OK THEN   E0 := FALSE;  E1 := TRUE;  END_IF;
IF E1 AND OK THEN   E1 := FALSE;  E2 := TRUE;  END_IF;
IF E2 AND TMIX.Q THEN  E2 := FALSE;  E0 := TRUE;  END_IF;

Um toque no OK, e o misturador liga com o tanque vazio. A água nunca entrou.

2 · o porquê

São dois motivos, e os dois são o ciclo da aula 00:

  • na mesma varredurao primeiro IF liga o E1. O segundo IF, logo embaixo, já enxerga o E1 ligado — e o OK ainda está apertado, porque é a mesma varredura. Atravessa. A etapa 1 existiu por algumas linhas de programa, e o K1 nunca chegou no borne.
  • o dedo dura várias varredurasmesmo que cada varredura só avançasse uma etapa, um toque de 0,3 s são seis varreduras de 50 ms. O OK continua em 1 e empurra a próxima transição.

No desenho, o ↑OK quer dizer “no instante em que o OK sobe”, e cada transição dispara uma vez por toque. Em ST, as duas coisas precisam ser escritas.

3 · a correção

Uma borda de subida — um bit que fica em 1 só na varredura em que o OK sobe — e as transições num ELSIF, pra só uma disparar em cada varredura:

PULSO := OK AND NOT OK_ANTES;    (* 1 só na varredura em que o OK sobe *)
OK_ANTES := OK;

IF E0 AND PULSO THEN
    E0 := FALSE;  E1 := TRUE;
ELSIF E1 AND PULSO THEN
    E1 := FALSE;  E2 := TRUE;
ELSIF E2 AND TMIX.Q THEN
    E2 := FALSE;  E0 := TRUE;
END_IF;

A borda sozinha não basta: o PULSO dura a varredura inteira, e sem o ELSIF ele atravessaria as duas transições do mesmo jeito. O ELSIF sozinho também não: o dedo dura várias varreduras. Na IEC 61131-3 a borda também existe pronta, no bloco R_TRIG. E muito CLP tem SFC desenhado, que cuida disso por você — mas entender a conta é o que salva quando a sequência for escrita em Ladder ou em ST.

4 · a prova

Nos três, dê um toque curto no OK e olhe as variáveis E0 E1 E2 e o rastro embaixo do código. No , uma varredura só leva o E0 até o E2. No , cada varredura avança uma — mas o toque dura várias. No , um toque, uma etapa.

o Grafcet é da IEC 60848, e o SFC da IEC 61131-3 segue o mesmo desenho; a sequência que atravessa etapas é tropeço clássico de quem escreve a sequência na mão, montado para esta aula. Eu ainda não tenho um CLP físico: a prova roda no interpretador de ST do site.

sua vez

A partida da aula 02, em texto

Mesmo painel da aula 02: térmico F1 e botão S0 (os dois NF no campo), botão S1, contator K1, lâmpada H1 de motor ligado e H2 de térmico disparado. Toque em ✎ editar o código, escreva as três saídas em ST e confira: são as mesmas sete situações da aula 02.

uma dica, se travar

A primeira linha é a do FBD lá de cima, com o F1 junto. H1 olha pro K1. E o H2 é o contato NF do térmico: em ST, NOT F1. Três atribuições, nenhum IF.

para levar

A bobina escreve em toda varredura; a atribuição dentro do IF só quando a condição é verdadeira — IF sem ELSE é memória. Numa sequência, cada transição precisa de borda, e só uma pode disparar por varredura.

CLP do zero · aula 06 · simulado no navegador — ainda sem CLP físico