Diagrama de Ladder Logic

Sobre diagramas de ladder logic

Ladder logic é a linguagem de programação gráfica usada para descrever programas de controle em Controladores Lógicos Programáveis (CLPs) — os computadores industriais que executam automação de fábricas, sistemas de climatização, linhas de esteira e equipamentos de processo em todo o mundo. O nome vem da aparência do diagrama: dois trilhos verticais de alimentação conectados por rungs horizontais, cada rung expressando uma regra de condição-para-ação. Eletricistas e engenheiros de controle o adotaram porque espelha os esquemas de contatos de relés que já conheciam.

O Schematex segue a IEC 61131-3:2013, o padrão internacional para linguagens de programação de CLP, com convenções de nomes de endereço de tag Allen-Bradley (Rockwell) comuns na prática industrial norte-americana. Esta página documenta o que o parser aceita atualmente.

ladder·§ IEC 61131-3
↘ preview
100%
Motor Start/Stop PLC ladder logic diagram with 4 rungs Motor Start/Stop Rung 001 — Seal-in circuit — Rung 002 — Mode select with Set/Reset — Rung 003 — Run timer — Rung 004 — Alarm on cycle complete — Start Button START_PB IN 1.0 Aux Contact MOTOR_AUX BIT 3.0 Stop Button STOP_PB IN 1.1 Motor Command MOTOR_CMD OUT 2.0 Auto Mode Button AUTO_HMIPB BIT 5.10 System Fault SYS_FAULT BIT 3.0 S System Auto Mode SYS_AUTO BIT 3.1 R System Manual Mode SYS_MANUAL BIT 3.2 MOTOR_CMD TON PT=5000 RUN_TMR Cycle Done CYCLE_DONE BIT 4.0 / Alarm Output ALARM_OUT OUT 2.5
UTF-8 · LF · 23 lines · 734 chars✓ parsed·1.3 ms·10.6 KB SVG

1. Seu primeiro diagrama ladder

O menor programa ladder útil: um rung, dois contatos, uma bobina.

ladder·§ IEC 61131-3
↘ preview
100%
First Rung PLC ladder logic diagram with 1 rung First Rung Rung 001 — Start when button pressed, stop on fault — START_PB FAULT MOTOR_RUN
UTF-8 · LF · 5 lines · 110 chars✓ parsed·1.5 ms·3.3 KB SVG

Quatro regras cobrem 80% do uso:

  1. Comece com ladder, opcionalmente seguido de um título entre aspas.
  2. Cada rung começa com rung N "comentário opcional": em sua própria linha. Os dois-pontos finais são opcionais.
  3. Os elementos são listados um por linha, recuados abaixo do rung — da esquerda para a direita significa série (lógica AND).
  4. Um bloco parallel: / branch: introduz lógica OR. Cada branch contém sua própria lista de elementos.

Comentários podem começar com #, // ou Mermaid-style %% em sua própria linha.


2. Contatos

Os contatos representam condições de entrada — eles passam energia quando o bit associado corresponde ao tipo de contato.

TipoNomePassa energia quando…
XICExamine If ClosedBit da tag = 1 (normalmente aberto)
XIOExamine If OpenBit da tag = 0 (normalmente fechado)
ONSOne-Shot RisingTag transita 0 → 1 (borda de subida, um ciclo)
OSFOne-Shot FallingTag transita 1 → 0 (borda de descida, um ciclo)

Sintaxe:

XIC(tag)
XIC(tag, "address")
XIC(tag, "address", name="Description")
XIC(tag, address="address", name="Description")
  • tag — obrigatório. O nome da tag do CLP (exibido abaixo do símbolo de contato).
  • "address" — segundo argumento posicional opcional. O endereço de E/S (ex.: "IN 1.0", "BIT 3.1").
  • name="…" — argumento chave-valor opcional. Descrição legível por humanos (exibida acima do símbolo).
ladder·§ IEC 61131-3
↘ preview
100%
Contact types PLC ladder logic diagram with 1 rung Contact types Rung 001 — All four contact types — Start Button START_PB IN 1.0 Emergency Stop NC E_STOP IN 1.5 One-Shot Rising PULSE_IN BIT 5.0 One-Shot Falling RESET_SIG BIT 5.1 Output Relay OUT_RLY OUT 2.0
UTF-8 · LF · 7 lines · 293 chars✓ parsed·0.4 ms·5.7 KB SVG

3. Bobinas

As bobinas representam ações de saída — elas atuam em um bit de tag quando o rung tem fluxo de energia.

TipoNomeEfeito no bit da tag
OTEOutput EnergizeDefine bit = 1 enquanto o rung é verdadeiro; limpa para 0 quando o rung é falso
OTLOutput LatchDefine bit = 1; retém mesmo após o rung ficar falso (trava)
OTUOutput UnlatchLimpa bit = 0; retém mesmo após o rung ficar falso
OTNOutput NegateDefine bit = 0 enquanto o rung é verdadeiro; define para 1 quando o rung é falso
RESResetBobina de reset de contador ou timer Rockwell / Allen-Bradley

Sintaxe: idêntica aos contatos — OTE(tag), OTE(tag, "address"), OTE(tag, "address", name="…").

OTL e OTU são usados em pares para construir flip-flops Set/Reset. O último rung a escrever prevalece.

ladder·§ IEC 61131-3
↘ preview
100%
Set-Reset latch PLC ladder logic diagram with 2 rungs Set-Reset latch Rung 001 — Set on start — Rung 002 — Reset on stop or fault — Start START_PB IN 1.0 S Motor Latch MOTOR_ON BIT 3.0 Stop STOP_PB IN 1.1 E-Stop E_STOP IN 1.5 R Motor Latch MOTOR_ON BIT 3.0
UTF-8 · LF · 11 lines · 319 chars✓ parsed·0.5 ms·5.5 KB SVG

4. Blocos de função

Os blocos de função realizam operações de timer, contador, matemática e comparação. Eles aparecem inline em um rung e têm parâmetros de palavra-chave após o argumento de tag obrigatório.

4.1 Timers

TipoNomeParâmetros principais
TONTimer On-DelayPT= tempo de preset em milissegundos
TOFFTimer Off-DelayPT= tempo de preset em milissegundos
TPTimer PulsePT= tempo de preset em milissegundos
TON(timer_tag, PT=5000)

A tag do timer armazena o tempo decorrido. O bit Q do timer (saída done) é acessado pelo nome da tag em contatos downstream.

4.2 Contadores

TipoNomeParâmetros principais
CTUCount UpPV= valor de preset (inteiro)
CTDCount DownPV= valor de preset
CTUDCount Up/DownPV= valor de preset
CTU(cycle_counter, PV=100)

4.3 Matemática

TipoOperação
ADDAdição
SUBSubtração
MULMultiplicação
DIVDivisão
MOVMove (cópia)
ADD(result_tag, IN1=setpoint, IN2=offset)
MOV(dest_tag, IN1=source_tag)

4.4 Comparações

TipoSignificado
EQUIgual
NEQDiferente
GRTMaior que
LESMenor que
GEQMaior ou igual
LEQMenor ou igual
EQU(compare_tag, IN1=speed_actual, IN2=speed_setpoint)
ladder·§ IEC 61131-3
↘ preview
100%
Timer and counter PLC ladder logic diagram with 3 rungs Timer and counter Rung 001 — Start run timer — Rung 002 — Count completed cycles — Rung 003 — Alarm when batch complete — Motor Running MOTOR_CMD BIT 3.0 TON PT=10000 RUN_TIMER Cycle Sensor CYCLE_SENSOR IN 2.0 CTU PV=500 PART_COUNT Count Done PART_COUNT Batch Complete Alarm BATCH_ALARM OUT 3.0
UTF-8 · LF · 10 lines · 359 chars✓ parsed·6.2 ms·5.6 KB SVG

5. Branches paralelos

Um bloco parallel: introduz lógica OR — o rung tem energia se qualquer branch conduzir. Cada branch é um sub-bloco branch: com seus elementos recuados abaixo.

parallel:
  branch:
    XIC(LOCAL_START)
  branch:
    XIC(REMOTE_START)

Os branches em um parallel: são avaliados simultaneamente. O bloco fecha quando o recuo retorna ao nível anterior ao parallel:.

Regras:

  • parallel: deve aparecer dentro de um rung.
  • branch: deve aparecer dentro de um parallel: — usá-lo sozinho gera LadderParseError.
  • Cada branch contém um ou mais elementos.
  • Elementos após o bloco parallel: são em série com ele (lógica AND).
ladder·§ IEC 61131-3
↘ preview
100%
Parallel OR logic PLC ladder logic diagram with 1 rung Parallel OR logic Rung 001 — Start from either local or remote — Local Start LOCAL_START IN 1.0 Remote Start REMOTE_START BIT 5.2 Stop All STOP_ALL IN 1.5 Conveyor Run CONVEYOR OUT 2.0
UTF-8 · LF · 9 lines · 292 chars✓ parsed·1.3 ms·4.5 KB SVG

6. Rótulos e comentários

  • Título: ladder "Motor Control" — apenas na primeira linha, string entre aspas.
  • Número do rung: inteiro obrigatório após rung.
  • Comentário do rung: string opcional entre aspas após o número do rung, antes do dois-pontos opcional: rung 3 "Run indicator": ou rung 3 "Run indicator".
  • Tag: primeiro argumento dentro dos parênteses — exibido abaixo do símbolo.
  • Endereço: segundo argumento posicional (entre aspas): XIC(START_PB, "IN 1.0").
  • Name: argumento de palavra-chave name="…" — descrição legível por humanos exibida acima do símbolo.
  • Comentários de linha: #, // ou %% no início de uma linha (após espaços em branco iniciais). Os mesmos marcadores também iniciam comentários ao final de linha.

7. Palavras reservadas e escape

Reservadas no início de linha (sem distinção de maiúsculas): ladder, rung, parallel:, branch:.

Nomes de elementos são todos ASCII maiúsculos: XIC, XIO, ONS, OSF, OTE, OTL, OTU, OTN, TON, TOFF, TP, CTU, CTD, CTUD, ADD, SUB, MUL, DIV, MOV, EQU, NEQ, GRT, LES, GEQ, LEQ.

IDs de tag — devem corresponder a [A-Z][A-Z0-9_]* (o parser reconhece [A-Z][A-Z0-9_]* como prefixo de nome de elemento). Tags em minúsculas são aceitas dentro dos parênteses.

Strings entre aspas em argumentos de endereço ou name devem usar aspas duplas "…".


8. Erros comuns

Você escreveuO parser dizCorreção
rung 1 (sem dois-pontos)Interpretado corretamenteOs dois-pontos finais são opcionais
ONF(TAG)LadderParseError: unknown element type "ONF"O contato de borda de descida é OSF, não ONF
parallel: sem branch:Bloco parallel vazio — rung sem elementoAdicione pelo menos um branch: dentro do parallel:
branch: antes de parallel:LadderParseError: branch: without parallel:Sempre abra parallel: primeiro
OTE() — sem tagLadderParseError: element missing tagTag é obrigatório: OTE(MY_TAG)
var StartBtn: bool (declaração de variável)LadderParseError: invalid element syntaxSem declarações de variável — as tags são usadas diretamente
Rung vazio (sem elementos após rung N:)LadderParseError: Rung N: empty rungAdicione pelo menos um elemento a cada rung
TON(T1, T#5s)LadderParseError: invalid element syntax (T# não é um número válido)Use inteiro em milissegundos: TON(T1, PT=5000)

9. Gramática (EBNF)

document      = header NEWLINE rung+

header        = "ladder" ( WS quoted-string )? NEWLINE
quoted-string = '"' any-char-but-quote* '"'

rung          = "rung" WS integer ( WS quoted-string )? ":"? NEWLINE
                  element+

element       = contact-line
              | coil-line
              | fb-line
              | parallel-block

contact-line  = contact-type "(" tag ( "," arg )* ")" NEWLINE
contact-type  = "XIC" | "XIO" | "ONS" | "OSF"

coil-line     = coil-type "(" tag ( "," arg )* ")" NEWLINE
coil-type     = "OTE" | "OTL" | "OTU" | "OTN" | "RES"

fb-line       = fb-type "(" tag ( "," arg )* ")" NEWLINE
fb-type       = "TON" | "TOFF" | "TP"
              | "CTU" | "CTD" | "CTUD"
              | "ADD" | "SUB" | "MUL" | "DIV" | "MOV"
              | "EQU" | "NEQ" | "GRT" | "LES" | "GEQ" | "LEQ"

arg           = quoted-string             // posicional (address)
              | key "=" quoted-string     // keyword (ex.: name="…")
              | key "=" number            // keyword (ex.: PT=5000)

parallel-block = INDENT≥2 "parallel:" NEWLINE
                   ( INDENT branch-block )+

branch-block   = "branch:" NEWLINE
                   ( INDENT element )+

tag           = [A-Za-z][A-Za-z0-9_]*
key           = [A-Za-z][A-Za-z0-9_]*
integer       = [0-9]+
number        = [0-9]+ ( "." [0-9]+ )?
comment       = ( "#" | "//" | "%%" ) any NEWLINE

Fonte autoritativa: src/diagrams/ladder/parser.ts. Se houver divergência com o parser, o parser prevalece — abra uma issue.


10. Conformidade com o padrão

A ladder logic do Schematex segue a IEC 61131-3:2013 Parte 3 para a linguagem Ladder Diagram e usa convenções de nome-endereço-tag Allen-Bradley (Rockwell) comuns na prática de CLP norte-americana.

O que está implementado hoje:

  • ✅ Quatro tipos de contato: XIC (NA), XIO (NF), ONS (borda de subida), OSF (borda de descida)
  • ✅ Cinco tipos de bobina: OTE (saída), OTL (latch/set), OTU (unlatch/reset), OTN (negar), RES (reset de contador/timer)
  • ✅ Três blocos de função timer: TON, TOFF, TP com parâmetro PT= em milissegundos
  • ✅ Três blocos de função contador: CTU, CTD, CTUD com parâmetro PV= inteiro
  • ✅ Blocos de função matemática: ADD, SUB, MUL, DIV, MOV
  • ✅ Blocos de função de comparação: EQU, NEQ, GRT, LES, GEQ, LEQ
  • ✅ Blocos paralelos / branch para lógica OR
  • ✅ Anotações de tag, address e name per convenções Allen-Bradley Studio 5000
  • ⏳ Timer retentivo (RTO) — no padrão; ainda não no parser
  • ⏳ Instruções Jump (JMP) / Label (LBL)
  • ⏳ Zona Master Control Reset (MCR)
  • ⏳ Instruções imediatas de E/S (IIN, IOT)
  • ⏳ Elementos de Structured Text ou Function Block Diagram embutidos em rungs

Referências:

  • IEC 61131-3:2013 — Programmable controllers, Part 3: Programming languages
  • NEMA ICS 1-2009 — General Standards for Industrial Control and Systems
  • Rockwell Automation Studio 5000 Logix Designer — Ladder Diagram Programming Manual

11. Exemplos relacionados

ladder·§ IEC 61131-3
Motor Start/Stop PLC ladder logic diagram with 1 rung Motor Start/Stop Rung 001 — Seal-in circuit — Start Button START_PB IN 1.0 Aux Contact MOTOR_AUX BIT 3.0 Stop Button STOP_PB IN 1.1 Motor Command MOTOR_CMD OUT 2.0
Motor start/stop seal-in circuit
Classic three-wire motor start/stop seal-in circuit in IEC 61131-3 ladder logic — the foundational pattern taught in every PLC certification course.
industrial & process
ladder·§ IEC 61131-3
System Mode Selection PLC ladder logic diagram with 2 rungs System Mode Selection Rung 001 — Set system Auto mode, reset Manual — Rung 002 — Set Manual, reset Auto (with Home seal-in) — Auto Mode HMI Pushbutton AUTO_HMIPB BIT 5.10 Manual Mode HMI Pushbutton MANL_HMIPB BIT 5.11 System Fault SYS_FAULT BIT 3.0 S System Auto Mode SYS_AUTO BIT 3.1 R System Manual Mode SYS_MANUAL BIT 3.2 Manual Mode HMI Pushbutton MANL_HMIPB BIT 5.11 System Home Command SYS_HOMECMD BIT 3.5 Auto Mode HMI Pushbutton AUTO_HMIPB BIT 5.10 System Fault SYS_FAULT BIT 3.0 S System Manual Mode SYS_MANUAL BIT 3.2 R System Auto Mode SYS_AUTO BIT 3.1
System mode selection (Set/Reset)
IEC 61131-3 ladder logic for HMI-driven Auto/Manual mode selection using Set/Reset (OTL/OTU) coils with system fault interlocks.
industrial & process

12. Roadmap

Planejado — ainda não parseável. Não use esses recursos em DSL gerado hoje; o parser irá rejeitá-los ou ignorá-los.

  • Retentive Timer On (RTO) — timer que mantém o tempo decorrido durante perda de energia; requer um contato de reset separado.
  • Jump (JMP) / Label (LBL) — ramifica para um rung rotulado para pular lógica condicionalmente; usado em programas grandes para desempenho.
  • Zona Master Control Reset (MCR) — uma zona delimitada que desenergiza todas as saídas não retentivas quando a entrada MCR é falsa.
  • Structured text em rungs — avaliação de expressão inline (ex.: CALC(result = a * b + c)).
  • E/S imediata (IIN / IOT) — força o ciclo de E/S no meio do programa para controle de tempo crítico.

Acompanhe as issues do GitHub se precisar de algum desses recursos mais cedo.

Found this useful?

Schematex is free, fully open source, and zero-dependency. A star helps other developers discover it.