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:
FBD · blocosportas lógicas desenhadas: E, OU, temporizadores, com fios
ligando saída de um na entrada do outro. Parece o esquema de um circuito digital.
ST · texto estruturadoparece Pascal: IF, ELSIF,
:=. Bom pra conta, pra escala da aula 05 e pra lógica que em Ladder vira
uma escada de dez linhas. Na Siemens ele se chama SCL.
SFC · sequênciaetapas e transições, desenhadas uma embaixo da outra. É o
Grafcet (IEC 60848) dentro do CLP: “encher, depois misturar, depois esvaziar”.
IL · lista de instruçõesum assembly de CLP. A terceira edição da norma,
de 2013, marcou como obsoleta; aparece em programa antigo.
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);
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:
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