Ladder Logic per PIC e AVR

Sul blog di Elettronica Open Source puoi leggere non solo tutti gli articoli Premium riservati agli abbonati Platinum 2.0 e inseriti nella rivista Firmware 2.0 (insieme ad articoli tecnici, progetti, approfondimenti sulle tecnologie emergenti, news, tutorial a puntate, e molto altro) ma anche gli articoli della Rubrica Firmware Reload. In questa Rubrica del blog abbiamo raccolto gli articoli tecnici della vecchia rivista cartacea Firmware, che contengono argomenti e temi evergreen per Professionisti, Makers, Hobbisti e Appassionati di elettronica. In questo articolo analizziamo un tool per generare codice per PIC e AVR partendo da un linguaggio grafico come il Ladder.

Introduzione

Il compilatore LDmicro è stato progettato per generare con facilità il codice nativo per microcontrollori PIC ed AVR partendo da un ladder grafico. Le funzioni e le caratteristiche del compilatore includono:

  • Ingressi (Inputs) e uscite (Outputs) digitali
  • Timers (TON, TOF, RTO)
  • Contatore counters
  • Ingressi (Inputs) analogici, uscite (Outputs) analogiche, generazione di PWM
  • Numeri interi variabili, istruzioni aritmetiche
  • Predisposto per facilitare le comunicazioni seriali verso il PC, LCD, ecc.
  • Shift (scorrimento) registri, tavole “look-up”
  • I valori delle variabili presenti nelle EEPROM, nelle applicazioni in campo, che anche in mancanza di alimentazione saranno mantenuti
  • Simulatore, per testare e verificare il programma scritto ancor prima di generare il codice da trasferire nei microcontrollori PIC o AVR

I PLC sono spesso programmati in Ladder Logic. Questo perché i PLC hanno sostituito il sistema di controllo dei relé e, ancora quaranta anni più tardi, non è stato abbandonato del tutto. Un PLC, come ogni microprocessore, esegue una serie di istruzioni in sequenza. Gli “strumenti“ del Ladder Logic fanno proprio questo: si può programmare un PLC, cablandolo, sullo schermo, con i contatti e le bobine, e mandando il PLC in esecuzione (runtime) simulando il circuito che si è disegnato. Alcuni contatti dei relé possono essere collegati a segnali in ingresso come se fossero collegati a reali apparecchiature; qualche altra bobina potrebbe essere collegata come uscita verso un carico. In questo modo si può realmente simulare il circuito mentre interagisce con altre apparecchiature, controllando realmente il loro comportamento in “ campo”. È possibile, inoltre, incorporare temporizzatori e contatori, operazioni matematiche che non sarebbero facilmente implementabili manipolando semplicemente dei relé. Il concetto del circuito rimane sempre utile anche se, in parte proprio perché è intuitivo, fa risaltare i problemi legati ai nodi, alle ripetizioni delle coincidenze, ecc. Prendiamo ad esempio il segmento di combinazioni logiche riportato in Figura 1.

Figura 1: una combinazione logica

Figura 1: Una combinazione logica

Questo è un semplice segmento di una composizione di combinazione logica. Gli ingressi sono tre, denominati: “Xa”, “Xb” e “Xc”; mentre vi è solo un’uscita, denominata “Yout”. Da cui l’espressione: Yout=Xa and (Xb or (not Xc)). Si pensi a Xa e Xb come contatti normalmente aperti e Xc come contatti normalmente chiusi e Yout come se fosse la bobina di un relè. In Figura 2 è riportata la logica di un semplice termostato. Vi sono due ingressi analogici; uno di loro è per “settare il punto” in modo tale che potrebbe essere, per esempio, connesso ad un potenziometro cosicché l’utilizzatore può selezionare la temperatura desiderata. L’altro potrebbe essere utile per la misura della temperatura; ad esempio, potrebbe essere un semiconduttore sensore di temperatura, o un RTD al platino fornito da adeguato circuito di interfaccia. Si può vedere che vi è una uscita digitale, Yheater. Questo potrebbe controllare un termosifone attraverso un interruttore adatto allo scopo (un TRIAC, oppure un solid-state relè, o qualunque altro dispositivo).

Figura 2: logica di un semplice termostato

Figura 2: Logica di un semplice termostato

Il loop è chiuso con un semplice hysteretic (bang-bang) controller. Sono stati selezionati più o meno 20 unità di hysteretic. Questo vuol dire che quando la temperatura scende al di sotto (setpoint +20), si accende il riscaldamento e, viceversa, quando raggiunge il limite da noi impostato (setpoint + 20), spegnerà il riscaldamento. Come si vede nel grafico precedente sono stati aggiunti alcuni piccoli accorgimenti. Il primo riguarda un input forzato: il riscaldamento è costretto allo spegnimento quando Xenable è a livello basso. E’ stata aggiunta anche una luce spia, Yis_hot, che indica che la temperatura in esercizio sia compresa all’interno della regolazione. In tal modo viene continuamente comparato il limite imposto (setpoint - 20) dalla soglia affinché la luce spia non si accenda durante i cicli normali del termostato. Questo è un esempio a grandi linee, ma rende bene l’idea di come il linguaggio operativo sia molto auto esplicativo. “Ladder Logic” non è un linguaggio di programmazione di tipo “general purpose” ma piuttosto è del tipo “Turing-complete”, accettato nelle industrie e, per un certo numero di classi di problemi (maggiormente “control-oriented”), è sorprendentemente conveniente.

IL COMPILER LADDER LOGIC PER I PIC16 E AVR

I moderni microcontrollori sub-3.00 USD probabilmente hanno la stessa potenza di calcolo dei PLC del 1975. Questi però mettono a disposizione molti più MIPS di quanti siano effettivamente snecessari in esercizio in Ladder Logic ragionevolmente complessi con un ciclo di tempo di pochi millisecondi. Di solito, i PLC hanno un runtime abbastanza vicino ad un interprete o ad una macchina virtuale, ma se dovessimo operare con una logica semplice su un microprocessore senza molta memoria, allora l’utilizzo di un compilatore potrebbe essere una idea migliore. Sulla base di queste considerazioni è nato il compilatore LDmicro. Si inizia con un rung vuoto (rungs = collegamenti orizzontali tra i montanti, detti pioli o rung, che contengono a sinistra dei contatti e a destra delle bobin.). All’interno si aggiungono dei contatti (in genere a sinistra del rung) “inputs” e delle bobine (in genere a destra del rung) “outputs” o quant’altra struttura per costruire il proprio programma. Nel compilatore è ben supportata la configurazione del Timers (TON, TOFF, RTO) la cui massima/minima durata dipende dal tempo ciclo del PLC; i Timers possono contare a partire da millisecondi a decine di minuti. Inoltre, sono previsti contatori e operazioni aritmetiche (addizione, sottrazione, divisione, ecc.). Ogni elemento nel circuito può essere aggiunto, rispetto agli elementi già inseriti, sia in serie che in parallelo agli elementi esistenti. Una lista di Inputs/Outputs (I/O) è prodotta dal grafico stesso. Si possono avere relè interni (Rfoo), i quali vengono automaticamente allocati in memoria, oppure ingressi (Xfoo) e uscite (Yfoo) per i quali è necessario assegnare il collegamento con i rispettivi pin del microcontrollore (famiglia Atmel - PIC); ovviamente, la disponibilità del numero di selezione dei pin dipende dal tipo di microcontrollore usato o che si intende usare. Nel compilatore sono state considerate le più popolari e più facilmente reperibili serie di microcontrollori PIC e AVR.

Figura 3: L’editor grafico.

Figura 3: L’editor grafico

EDITARE IL PROGRAMMA IN FORMA GRAFICA

Il programma, una volta scritto, si può testare attraverso la simulazione in tempo reale; infatti, nella apposita sezione del menu, appena lanciata la simulazione, sullo schermo appaiono chiaramente evidenziati (true) i rami “energizzati”, e questo rende molto facile il processo di debug del programma scritto. Gli stati di tutte le variabili sono mostrati in una sottofinestra in fondo alla schermo nell’apposita sezione - lista di I/O. Una volta che nella selezione “simulazione “ il programma si comporta come stabilito, si possono definitivamente assegnare i pin di ingresso e di uscita e generare, direttamente da menu, il codice da trasferire nel microcontrollore voluto, sia esso un PIC o un AVR. La generazione del codice non è affatto difficile, mentre l’editing richiede più impegno e potrebbe essere necessario un pò di lavoro per ottenere una compilazione abbastanza sagace. Per la serie AVR una buona allocazione dei registri fornirà delle prestazioni più veloci. Se si desidera elaborare qualcosa di più interessante allora si potrebbero applicare i criteri di “standard logic reduction algorithms” e, forse anche, “state reduction”. I temporizzatori, comunque, tendono sempre ad accumulare. Al momento la produzione di codice (back end) per gli AVR produce in effetti del codice per i PIC, nel senso che il processo non tiene conto del fatto che i microcontrollori AVR hanno più di un registro, pertanto il codice generato per AVR può non essere buono e ottimizzato. Invece, il codice generato per i PIC è migliore, anche se non molto ottimizzato, ma ciò importa poco a meno che non si abbia a che fare con dozzine di rungs di logica con tempi di ciclo veloci. Il compilatore supporta l’A/D converter, unità di PWM, e l’UART in quei microcontrollori che sono forniti di queste periferiche. In breve, ciò vuol dire che si possono scrivere delle istruzioni in Ladder Logic che leggano gli ingressi analogici, che inviino e ricevano caratteri attraverso la porta seriale del micro (ad esempio, ad un PC se si aggiunge un idoneo level-shifter del tipo MAX.232 o inviare dei caratteri ad un LCD). E’ altrettanto possibile inviare arbitrarie stringhe lungo la seriale, o anche i valori di variabili di interi, come i caratteri in formato ASCII. Finalmente, adesso è supportata la funzione di "preserved variables" su dispositivi dotati di memoria EEPROM; adesso si può indicare che una particolare variabile deve essere auto-conservata (salvata), ogni qual volta essa cambia nella memoria non volatile del dispositivo; in tal modo il suo valore è persistente ed indifferente all’accensione o al reset del dispositivo.

Figura 4: debug del programma

Figura 4: Debug del programma

LIMITAZIONI

Naturalmente un microcontrollore con questo software (firmware) non può fare tutto quello che fa un PLC. La gran parte di ambienti di programmazione per PLC offrono più funzioni e blocchi predefiniti, anche sotto il profilo hardware. Solitamente gli ingressi e le uscite sono progettati per sopportare o essere esposti ad incredibili abusi elettrici. Si può acquistare un PIC16F877 corredato di scheda per qualche decina di Euro ma si può pagare molto di più per un PLC con le stesse capacità. Certamente non si deve usare LDmicro per qualunque cosa che abbia a che fare con i punti critici della sicurezza oppure con qualunque cosa di costoso che, a causa di un’avaria, si potrebbe danneggiare. Come è stato precedentemente puntualizzato, il codice generato è ben lontano dalla forma ottimale. Inoltre, non tutta la porzione della data RAM, nei dispositivi PIC16 è disponibile per il Ladder Logic program.

DOWNLOAD

Il software è stato testato sotto Windows XP e può lavorare anche sotto Windows ‘98. Il download è un .exe file; non sono richiesti altri files, e non c’è un programma d’installazione. Basta salvare il file .exe da qualche parte nel proprio computer, lanciarlo, ed esso lavorerà. Il manuale è incluso nel .exe file, ma se si crede lo si può scaricare separatamente. Il compiler genera Intel IHEX files. Naturalmente occorrerà un apposito programmatore per trasferire l’hex file nella memoria del chip. I seguenti chips sono supportati e testati:

PIC16F877
PIC16F876
PIC16F628
ATmega64
ATmega128

I seguenti chips sono supportati ma non testati; questi, dovrebbero lavorare ma non ne è data alcuna garanzia:

PIC16F819
PIC16F88
ATmega162
ATmega16
ATmega8

Dal programma ladder è anche possibile generare del codice in C. Questo è meno conveniente, ma si potrebbe usare in ogni altro processore per il quale si ha un compilatore in C. LDmicro può generare byte codice interpretabile. Nel caso si intendesse scrivere un interprete allora si potrebbe usare questo per effettuare il proprio codice ladder su ogni tipo di “target”. Non c’è molta documentazione, a questo proposito, ma viene fornito un campione di interprete per la gran parte di C “portabile”.

Scarica subito una copia gratis

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend