# Ladder diagram

Un ladder diagram (in italiano diagramma a scala, ma è di uso generale la dizione inglese oppure la versione diagramma/programma a contatti) è un ausilio grafico per la programmazione dei controllori logici programmabili (PLC) di tipo discreto, divenuto ormai il linguaggio standard di programmazione, a fianco dei linguaggi di tipo assembler, ormai in via di abbandono.
La norma IEC 61131-3 definisce 5 tipi di linguaggio di programmazione per i PLC:
* FBD (Function block diagram: a blocchi di funzioni)
* LD (Ladder diagram)
* ST (Structured text, testo strutturato, simile al linguaggio Pascal)
* IL (Instruction list, lista di istruzioni, simile all'assembler)
* SFC (Sequential function chart, detto anche GRAFCET).
Il linguaggio ladder è stato il primo linguaggio utilizzato per la programmazione dei PLC, che inizialmente andavano a sostituire i normali quadri a logica cablata realizzati con tecnologia a relè. Nei casi più semplici, infatti, è facile convertire uno schema elettrico funzionale in un programma ladder. Al tempo stesso, la somiglianza con i diagrammi elettrici risultava più facilmente comprensibile agli operatori e manutentori che, nei primi anni 60, avevano spesso conoscenze in campo elettrico o elettromeccanico ma non sempre in ambito informatico o matematico.
Con questo linguaggio, il programma è scritto all'interno di 2 linee verticali che rappresentano l'alimentazione. Sono presenti inoltre delle righe orizzontali che congiungono queste verticali che vengono chiamate rung (letteralmente pioli, a causa del fatto che l'aspetto di questi programmi ricorda quello di una scala). Ogni rung è idealmente suddiviso in due parti. La parte di sinistra è detta zona di test, e contiene le variabili di ingresso o variabili interne. La zona di destra è detta zona di azione, e comprende le uscite esterne o interne nonché i blocchi di funzione avanzata. L'energia può fluire solo da sinistra verso destra.

## Struttura

È molto semplice, e si avvale di pochi semplici simboli grafici. In Fig. 1, i simboli della prima riga significano:
* ingresso negato (NOT logico)
* ingresso attivo
* out
* attivazione registro memoria
* disattivazione registro memoria
* temporizzatore
mentre nella seconda riga vi sono i simboli di collegamento.
La simbologia può variare leggermente tra produttori diversi dei PLC; in alcuni casi è possibile richiamare dei gruppi funzionali, ossia delle subroutine in grado di ripetere determinate operazioni.
Il risultato grafico è come in Fig. 2, e si può esprimere così:
* Se l'ingresso I 57 è attivo
* E l'ingresso I 31 è attivo
* E il registro R 25 non è attivo
* Oppure il registro R 26 è attivo
Tutto ciò controllato;
* Se il registro R 27 è attivo
* Oppure il temporizzatore T 02 (dopo 32 secondi) ha terminato il conteggio
* Allora attiva l'uscita O 17
Considerando che la sistemazione dei simboli, nelle interfacce evolute, avviene con un semplice doppio clic, si capisce come sia più semplice programmare con un ladder diagram che in IL (vedi sopra):
    IF I57
    AND I31
    AND NOT R25
    OR R26
    AND R27
    OR T02 ON
    SET O17
Salvo dover dare separatamente i valori di conteggio del timer.
Questo esempio è solo indicativo in quanto spesso produttori diversi di PLC usano linguaggi IL diversi; le differenze nel linguaggio LD, invece, sono minime.