L'automazione flessibile ha trovato nei linguaggi di programmazione il suo mezzo più potente di espressione. Questi linguaggi si sono affermati soprattutto per la programmazione di macchine utensili, di trasferte flessibili, di robot, macchine automatiche ecc.
Esiste però tutta una categoria di macchine, caratterizzate da molti assi che ruotano in continuo e che devono essere sincronizzati secondo leggi di movimento più o meno complicate, che ancora non ha potuto convenientemente godere della flessibilità caratteristica dell'automazione di oggi. Ci riferiamo, ad esempio, ai seguenti campi di applicazione:
•macchine per la stampa
•macchine tessili
•macchine per la lavorazione del metallo
•macchine per la lavorazione della carta
•macchine per la lavorazione del legno
•in generale controlli di sincronismo
In questi campi dominano ancora le soluzioni di tipo meccanico, come, ad esempio:
•camme di profilo opportuno per la memorizzazione di una certa legge di movimento
•tamburi con camme e micro per la memorizzazione di programmi
•sincronismi realizzati meccanicamente, ossia con alberi principali dal cui movimento, tramite ingranaggerie, vengono derivati tutti i movimenti per la macchina
•leverismi più o meno geniali
•ecc.
Le soluzioni elettroniche sono poi, normalmente, di tipo analogico, o derivate dall'analogico, a meno che la soluzione digitale risulti irrinunciabile; per esempio nel controllo in sincronismo di due motori asserviti.
Evidentemente, in queste condizioni, la flessibilità degli impianti, ossia la capacità di adeguarsi a nuove esigenze produttive, risulta nulla e, in ogni caso, legata ad operazioni meccaniche lunghe e soprattutto costose. Costose in se stesse e costose soprattutto in termini di produzione mancata.
Analogamente impossibile risulta una conduzione centralizzata della produzione sia nel suo aspetto gestionale, sia nel suo aspetto diagnostico.
Obiettivi
La Robox SpA, forte dell'esperienza nel controllo assi acquisita in robotica, ha realizzato il linguaggio R3 per la programmazione dei cicli di lavoro di queste macchine.
Il linguaggio R3 realizza molteplici obiettivi, come ad esempio:
•rende utilizzabili le apparecchiature Robox di controllo assi, sviluppate per la robotica, nel campo più generale del controllo dei movimenti e dei sincronismi su assi che possono anche girare in continuo
•rende risolubili da software tutti i problemi
•rende possibile e facile l'inserimento delle macchine così controllate nella "fabbrica automatica".
Queste macchine, in generale, sono caratterizzate dal numero di assi controllati, intendendosi per "asse" una parte della macchina il cui moto può essere governato in modo indipendente mediante un attuatore.
L'attuatore sarà tipicamente un motore in CC, un motore brushless, un motore rotativo idraulico, ma anche un motore ad induzione, un cilindro idraulico, ecc.
Un esempio tipico è quello di un programma di trasformazione di coordinate di uno o più assi, il quale deve eseguire una serie di calcoli con cadenza fissa, ad es. ogni 2 ms, prendendo le informazioni dal processore master e restituendo i risultati in tempo reale.
Vantaggi dei linguaggi
Affrontare i problemi mediante programmazione, ossia scrivendo del software, offre innumerevoli vantaggi.
Ricordiamo i principali:
•la descrizione delle problematiche, in questo caso leggi di movimento e cicli operativi, è veloce, semplice e documentata
•i tempi intercorrenti fra l'inizio della progettazione di una macchina e la messa a punto vengono ridotti drasticamente
•le parti meccaniche delle macchine hanno un grado di standardizzazione molto più elevato
•vengono eliminati particolari meccanici di difficile lavorazione
•l'affidabilità della macchina aumenta, congiuntamente alla diminuzione delle complicazioni meccaniche (leonardismi)
•errori di progettazione vengono rapidamente e facilmente eliminati
•è assai facile ottimizzare i modi di funzionamento delle macchine e quindi migliorare il funzionamento o adattarsi a nuove esigenze
•è assai facile introdurre modifiche.
Praticamente inesistenti gli svantaggi. L'unico oggettivo svantaggio che può ancora esistere è la necessità di dover cambiare il modo di progettare e quindi di dover investire tempo nell'apprendere i nuovi strumenti di lavoro: computer, linguaggi di programmazione, editori, trasmissioni seriali, compilatori, ecc.; nonché di dover assimilare tutto un nuovo lessico fatto di software, listing, bugs, files, debug, ecc.
Si tratta comunque di un passo che, prima o dopo, deve essere fatto da tutti, e che quindi va fatto subito, dato che i tempi sono più che maturi.
Programmazione
Programmare in linguaggio R3 i movimenti delle macchine presenta molte analogie con il programmare un PLC. In entrambi i casi il progettista dovrà:
•scrivere un programma sorgente, cioè un elenco delle operazioni che la macchina deve svolgere, scritto in un opportuno linguaggio (linguaggio R3 nel caso Robox). È questo il momento della progettazione, cioè il momento creativo
•compilare il programma sorgente mediante l'apposito compilatore. Il compilatore, ricordiamo, traduce il programma sorgente, scritto in un linguaggio vicino all'uomo, in un programma oggetto, scritto in codici numerici comprensibili dall'apparecchiatura elettronica che controlla la macchina
•caricare il programma oggetto nell'apparecchiatura elettronica, operazione che normalmente è fatta utilizzando le porte di comunicazione seriali o Ethernet
•verificare il funzionamento della macchina ed eventualmente apportare modifiche al programma sorgente.
La differenza fondamentale fra il linguaggio R3 ed il linguaggio di programmazione ladder è che quest'ultimo è stato concepito per la programmazione di grandezze di tipo attacca/stacca, cioè, per esempio, tele-interruttori che si aprono e si chiudono secondo i segnali che provengono da pulsanti, micro interruttori, ecc. che, a loro volta, possono essere aperti o chiusi.
Il linguaggio R3, che è stato concepito per regolare grandezze continue come tipicamente posizioni, velocità, coppie, ma anche pressioni, temperature, ecc., accetta e gestisce equazioni che correlino variabili di questo tipo.
Praticamente non c'è limite alla sofisticazione delle operazioni: il linguaggio R3 gestisce integrali e derivate, moltiplicazioni, divisioni, seni, coseni, ecc.
Evidentemente il linguaggio R3 sarà anche in grado di governare fenomeni di tipo attacca/stacca come un PLC, cioè di risolvere equazioni di tipo booleano, ma questa è certamente un'attività secondaria, rispetto all'attività principale, che è volta a governare con precisione, dolcezza, rapidità e obbedendo a leggi di movimento più o meno complicate, le predette grandezze cinematiche e non.
L'estensione del file sorgente R3 deve essere .R3
L'estensione dei file di inclusione deve essere .I3
La programmazione con il linguaggio R3 avviene in tre passaggi.
Rules
Una prima fase di programmazione riguarda la descrizione delle leggi di movimento degli assi. Ad esempio, nel caso di un motore che debba ruotare in perfetto sincronismo con un secondo motore (asse elettrico), la descrizione della legge di movimento sarà semplicemente:
IP2 = IP1 |
cioè la posizione dell'albero del secondo motore deve essere identica a quella del primo motore (e conseguentemente le velocità coincideranno con errore assolutamente nullo).
Se, viceversa, due motori dovranno avere velocità identiche a meno di un fattore K, l'equazione sarà:
IV2 = IV1 * K |
cioè la velocità IV2 dovrà coincidere con la velocità IV1 a meno del fattore K, e K potrà essere un qualunque numero reale.
Nel caso poi che si debba controllare un aspo avvolgente con un ballerino, si scriverà:
E = P - P0 INT_E = INT_E + E IV1 = KP * E + KI * INT_E |
L'equazione numero 3. dice che l'errore del ballerino è la differenza fra la posizione attuale (cioè P) e la posizione di mezzeria (cioè P0).
L'equazione numero 5. dice che la velocità dell'asse 1 deve essere uguale a KP volte l'errore del ballerino (KP = guadagno proporzionale) + KI volte l'integrale dell'errore del ballerino (KI = guadagno integrale).
Le equazioni 1, 2, 3, 4 e 5 vengono denominate, nel linguaggio R3, "rules" (regole) e dovranno essere verificate con frequenza sufficientemente alta nel tempo, cioè "in gergo" dovranno essere onorate con continuità da un "interrupt" a tempo. Le regole non saranno fisse, ma varieranno secondo i cicli operativi della macchina.
Rules asincrone
Sono inoltre gestite delle rules invocate in modo asincrono: l'invocazione può essere effettuata o tramite variazioni dello stato di un input digitale a frequenza programmabile oppure a predizione di posizione.
La gestione di queste rules e le rules stesse vengono eseguite in modo da non essere interrotte da nessun evento. Per il buon funzionamento del sistema stesso, l'utente dovrà avere la massima cura nello scrivere queste rules, in modo che la loro esecuzione sia il più breve possibile.
Cicli operativi (main)
Una seconda programmazione riguarda la descrizione dei cicli operativi e delle funzioni ausiliarie.
Per esempio, volendo programmare che, se la variabile booleana "avanti" è vera, venga eccitata la elettrovalvola EVa o, in caso contrario, l'elettrovalvola EVi si scriverà:
... if (avanti) out(EVa) else out(EVi) endif ... |
iin questo caso, le istruzioni non dovranno essere eseguite a cadenza fissa, come nel caso delle rules, ma ogni qualvolta il flusso del programma le incontrerà.
Categorie di linguaggi
Il linguaggio R3, come già accennato, è un linguaggio compilato. Il programma sorgente viene tradotto dal compilatore in programma oggetto e il programma oggetto, a sua volta, deve essere immesso nella memoria dell'apparecchiatura.
I vantaggi del linguaggio compilato sono molteplici; per meglio chiarirli, ricordiamo che i linguaggi possono essere suddivisi in tre categorie:
•linguaggi interpretati
•linguaggi compilati
•linguaggi misti
Linguaggi interpretati
Nei linguaggi interpretati le varie istruzioni, scritte normalmente in formato AscII, vengono lette e decodificate al momento dell'esecuzione. L'esecuzione avverrà con la chiamata di opportune routines presenti nella memoria (normalmente firmware) dell'apparecchiatura.
Il vantaggio dei linguaggi interpretati è la maggior semplicità di uso, l'immediata eseguibilità e la maggiore facilità di debug.
Lo svantaggio è la maggiore lentezza di esecuzione, la più grande facilità di commettere errori, la mancanza di un "file" list.
Linguaggi compilati
Nei linguaggi compilati le varie istruzioni, scritte ancora in formato AscII, vengono tradotte in codici oggetto del microprocessore che governa l'apparecchiatura ed immesse nella sua memoria.
I vantaggi dei linguaggi compilati sono fra gli altri:
•permettono la massima rapidità di esecuzione del programma al momento dell'esecuzione. Questa caratteristica è estremamente importante nel caso R3 per la risoluzione in tempo reale di equazioni anche assai complicate
•generano un file avente estensione .LST (il file list) nel quale vengono individuati e documentati tutti gli errori formali e vengono date tutte le informazioni utili per la successiva messa a punto del programma
•assicurano una completa ed esaustiva documentazione del programma.
Linguaggi misti
Nei linguaggi misti le varie istruzioni vengono tradotte in codici intermedi, che non sono ancora i codici oggetto del microprocessore che governa l'apparecchiatura, ma che sono interpretati ed eseguiti dal software residente.
I linguaggi misti consentono, talvolta, di realizzare il compromesso ottimo, permettendo velocità di esecuzione, facilità di debug, compattezza del codice oggetto generato.
Compilazione
Come già detto in precedenza, il linguaggio R3 è un linguaggio compilato. Il programma sorgente viene tradotto dal compilatore in codici esadecimali eseguibili dal microprocessore. Si è preferita la versione compilata per privilegiare al massimo la rapidità di esecuzione necessaria per correttamente eseguire le istruzioni contenute nelle "rules".
Nel file sorgente è possibile introdurre apposite istruzioni, dette metacomandi, che permettono di variare, secondo particolari esigenze, il funzionamento del compilatore stesso.
La compilazione genera, oltre al file oggetto, anche un file .LST contenente informazioni di tipo generale, nonchè l'elenco degli errori grammaticali sintattici eventualmente contenuti nel file sorgente. Se questi errori sono di tipo grave, il file oggetto non viene generato.
Ambiente di sviluppo RDE (Robox Development Environment)
Allo scopo di agevolare l'utente in tutte queste operazioni, è stato sviluppato un ambiente di sviluppo denominato RDE. Questo ambiente di sviluppo, che di norma viene ospitato su Personal Computer Windows, pur non essendo indispensabile, crea l'ambiente ideale per poter correttamente operare sia con il linguaggio R3 che con i moduli della Famiglia ROBOX.
Due tipi di programmazione
Il linguaggio R3 prevede due tipi di programmazione.
Il primo tipo di programmazione riguarda la descrizione delle leggi di movimento della macchina (programmazione delle "rules").
Il secondo tipo di programmazione, a livello "main", riguarda la descrizione delle sequenze operative della macchina (programmazione delle istruzioni).
Le "rules" (regole) dovranno essere eseguite ad una frequenza adeguata al processo controllato. Programmando le rules è lecito solo una programmazione lineare, non devono essere usati dei loop bloccanti o attese di eventi.
Evidentemente le risorse dedicate dall'apparecchiatura al controllo dei movimenti della macchina (rules) dovranno, in generale, essere molto maggiori di quelle dedicate al controllo delle sequenze operative.
Programmazione a livello RULE
A questo livello di programmazione è affidato il governo vero e proprio dei movimenti della macchina, in altre parole:
•la chiusura di anelli di posizione o di velocità
•il controllo di eventuali ballerini
•la generazione di opportune traiettorie
•la sincronizzazione di più assi
•ecc.
Queste funzioni dovranno essere descritte nelle "rules" e dovranno essere ottemperate dal controllo "execution time" con frequenza sufficientemente alta rispetto alla larghezza di banda della dinamica del processo controllato.
I moduli della famiglia Robox SpA sono concepiti per lavorare con una frequenza di aggiornamento delle rules che va da 25 Hz a 2 KHz (default 100 Hz), che appare più che sufficiente per controllare processi con larghezza di banda fino a 200 Hz.
Come accennato, alla programmazione a livello rule è affidato il compito di descrivere le leggi di movimento della macchina.
In linea di massima una rule sarà relativa ad uno degli "n" assi controllati, ma è ammesso che una rule descriva le leggi di moto di più assi. Allo scopo di poter descrivere le leggi di movimento nei vari stati operativi, sarà sufficiente scrivere le diverse rules.
In generale in una rule sono individuabili tre campi:
•REF
•MOTION
•AUX
nel campo REF (opzionale) saranno scritte le equazioni che governano la generazione del riferimento agli azionamenti (tipicamente riferimento di velocità). Se questo campo viene omesso il controllo userà le formule standard.
Nel campo MOTION saranno descritte le leggi di movimento.
Nel campo AUX saranno descritte funzioni al contorno per le quali valgono le stesse esigenze temporali caratteristiche delle rule.
Ripetiamo che le equazioni descritte nelle rule vengono eseguite con una frequenza fissa normalmente pari a 100 Hz, cui corrisponde un periodo di "scansione" di 10 ms, con una frequenza massima di 2 KHz, cui corrisponde un periodo di 0,5 ms. Per ogni battuta, possono essere eseguite fino a 32 rules.
Programmazione a livello MAIN
A questo livello di programmazione è affidato il compito di descrivere l'operatività della macchina.
La programmazione a livello main è una programmazione di tipo classico, orientata all'uso dei diagrammi di flusso. L'utente dovrà definire il o i diagrammi di flusso in base alle sue esigenze e successivamente convertirli in istruzioni del linguaggio R3, operazione che normalmente non presenta difficoltà né concettuali, né pratiche.
Per facilitare il compito di chi scrive, il linguaggio R3 permette una programmazione a livello main "multitasking".
Possono essere descritti fino a 8 programmi evolventi in parallelo. Tutti i task godono del medesimo livello di priorità, nel senso che il tempo macchina disponibile verrà ripartito fra tutti i task attivi.
Al fine di facilitare la sincronizzazione dei differenti task, sono disponibili un numero adeguato di variabili "globali", ossia accessibili dai diversi tasks. In ogni task si potranno poi aggiungere variabili locali secondo le necessità.
All'accensione dell'unità di governo viene mandato automaticamente in esecuzione soltanto il task numero 1 (task autorun). Sarà poi il task n. 1 ad avviare gli altri task, se necessari e se previsto dal programma del task 1.
Durante lo svolgimento del programma è inoltre possibile disabilitare uno o più task, ponendoli in stato di attesa. Il sistema è inoltre dotato della capacità di gestire gli "interrupt", ossia eventi esterni a fronte dei quali il normale programma deve essere abbandonato per permettere di gestire con la dovuta rapidità detti eventi.
Il controllo di tale "evento" viene effettuato all'interno di una RULE, e quindi con un tempo di latenza massimo nominalmente di 20 microsec. La rule a sua volta forzerà l'esecuzione di una apposita procedura scritta dall'utente a livello main.
#Sistema operativo in linea RTE (Real time extended)
Il linguaggio R3 è supportato nei moduli Robox da un sistema operativo real time RTE il quale garantisce fra le altre le seguenti funzioni fondamentali:
•assegna la giusta partizione di tempo all'evoluzione dei programmi a livello rule
•assegna la giusta partizione di tempo all'evoluzione di programmi a livello main
•assicura i servizi fondamentali a livello governo assi
•assicura i servizi fondamentali relativi alle comunicazioni (RS232 RS422/485 ETHERNET)
•assicura la gestione (drivers) di una varietà di schede I/O come:
- schede input output digitali
- schede input output analogiche
- ecc.
•assicura i servizi fondamentali a livello diagnostico
•permette l'esecuzione delle rules asincrone.
Conclusioni
Per programmare in R3, il progettista dovrà innanzitutto assimilarne le istruzioni. Le istruzioni del linguaggio R3 sono le classiche istruzioni dei linguaggi di programmazione strutturati, con l'aggiunta di alcune istruzioni specifiche, strettamente legate alle problematiche cui il linguaggio R3 è destinato.
Chiunque abbia un certo grado di familiarità con linguaggi di programmazione quali il Basic, il C o altri, impiegherà poche ore per assimilare il linguaggio R3.
Chiunque non abbia dimestichezza coi predetti linguaggi, ma abbia già una certa esperienza di programmazione di PLC impiegherà qualche giorno.
Infine chi non ha nessun tipo di esperienza potrà imparare a programmare in qualche settimana, a patto di essere dotato di senso logico e di essere predisposto per le scienze matematiche. Programmare in linguaggio R3 significa poi conoscere i computer e averne confidenza.
L'operatore dotato delle conoscenze sopra descritte si siederà a tavolino e inizierà a descrivere il programma applicativo per la macchina di interesse.
In questa scrittura avrà a disposizione i cosiddetti text editor, cioè programmi che permettono di scrivere testi, memorizzarli e correggerli. L'insieme di istruzioni scritte dal programmatore si chiamerà listato sorgente e sarà in generale facilmente comprensibile da chiunque. A questo punto il programma dovrà essere "compilato" cioè, come già accennato, tradotto in codici numerici comprensibili all'apparecchiatura elettronica.
Questo file si chiamerà file oggetto. L'apparecchiatura elettronica in cui dovrà essere travasato dovrà essere collegata al personal computer mediante la linea seriale RS232 o ETHERNET di cui ogni personal computer è dotato. Il programma oggetto così generato verrà immagazzinato nelle memorie dell'apparecchiatura elettronica di controllo.
La macchina è pronta per funzionare e il programmatore potrà verificare che il comportamento sia quello da lui previsto. In generale ciò non riesce al primo colpo: l'operatore dovrà quindi verificare il suo programma, trovare gli errori concettuali o formali e correggerli.
Il linguaggio R3 e l'ambiente di sviluppo RDE rendono particolarmente agevole questa operazione. Una volta chiarita la natura degli inconvenienti, lo sviluppatore provvederà a correggere i programmi sorgenti, a ricompilare il programma e a reinserirlo nelle memorie dell'unità.
Requisiti software
Sistema operativo Microsoft Windows 7 (x86), Windows 8 e 8.1 (x86), Windows 10 (x86/x64), Windows 11 (x86/x64).