Dal complesso dell'edificio al singolo elemento e viceversa
In Architettura la ricerca della forma assume un ruolo essenziale. Negli ultimi anni le costruzioni contemporanee hanno spesso auspicato a quelle che vengono chiamate "forme complesse".
In realtà una forma complessa non è altro che l'unione di molteplici forme semplici che ne scaturisce una complessa. Non solo l'Architettura esplora questo panorama di ricerca formale ma anche alcune correnti artistiche, come il cubismo o il futurismo.
BRAQUE - violin and pitcher, 1910 | BOCCIONI - Forme uniche della continuità nello spazio, 1913 |
Nel campo architettonico sorge un problema in più rispetto a quello artistico, ovvero una volta ideata una forma complessa, come è possibile produrla? Quali tecnologie e materiali possono essere impiegati per realizzare questa forma, e a seconda di questi, come cambia l'idea iniziale? E soprattutto, come realizzo le forme semplici che andranno a comporre la forma complessa finale?
In aiuto alla risoluzione di queste domande vi sono i software di progettazione. Il compito attuale di questi non è più quindi quello di rappresentare graficamente il progetto, ma di operare una vera e propria simulazione dell'edificio e di ogni particolare costruttivo. Questi software fanno parte del settore del BIM (Building Information Modeling), dove vengono gestiti gli elementi costruttivi (travi, pareti, ecc) con i loro elementi geometrici, ma vengono introdotti anche parametri di tipo fisico (peso) o gestionale (costo, consumi, ecc).
A questi vengono affiancati i software atti a generare e controllare le geometrie delle forme complesse. Queste, se intese come superfici curve, possono essere di due tipi: NURBS o MESH. Rhinoceros è uno dei primi software che ha introdotto una geometria basata su superfici NURBS, dove il controllo della superficie è gestito da curve e punti, mentre le superfici MESH sono geometrie basate su triangoli. Inoltre lo stesso software rende possibile un disegno attraverso lo scripting, ovvero un metodo secondo il quale le geometrie non sono create nel modello stesso ma tramiti codici di programmazione che agiscono nel modello ma sono progettati fuori da questo. Come risultato le superfici o gli elementi creati sono soggetti a regole matematiche e per quanto possano essere complesse, possono sempre essere controllate modificando direttamente il codice senza intervenire graficamente.
Il passaggio dall'ideazione della forma alla realizzazione di questa è breve. Per questo viene richiesto che l'ideazione stessa della forma tenga in considerazione quella che sarà la tecnologia produttiva, in modo da poter assemblare pezzi prodotti in fabbrica direttamente nel cantiere, senza affidarsi alle conoscenze dell'impresa, ottimizzando così processo costruttivo del progetto.
In merito alla realizzazione delle forme complesse, c'è un ulteriore passo fondamentale da affrontare: è necessario che la geometria ideata tramite il software possa essere "trasformata" in dati trasferibili a macchine a controllo numerico (CNC). Inoltre questi dati devono essere letti da un altro software CAM (Computer Aided Manufacturing) che produce file di percorsi di taglio in un linguaggio chiamato G-CODE.
Il G-CODE
Il linguaggio G-CODE fa riferimento a uno standard ISO 6983, ma non costituisce obbligo per tutte le macchine CNC, infatti molto spesso il linguaggio fa riferimento allo standard ma viene integrato con codici proprietari.
Il codice ha una struttura gerarchica: la funzione è la parte più piccola, definita da una lettera e un numero, e a seconda di questi viene interpretata come un comando specifico. Un insieme di funzioni viene chiamato blocco, e una sequenza ordinata di blocchi costituisce un programma.
Le funzioni possono essere di molteplici tipi:
funzioni coordinate
La sintassi per esplicitare una funzione coordinata è tramite i caratteri X Y Z, che rappresentano 3 assi destrorsi nel piano. Oltre a questi vi sono gli assi A B C che rappresentano i 3 assi di rotazione paralleli agli assi X Y Z.
Le macchine CNC (come anche Revit del resto) hanno un duplice sistema di coordinate, uno globale e uno relativo. Alcune macchine utilizzano caratteri diversi (UVW) per indicare spostamenti relativi, altre usano funzioni specifice per cambiare lo spostamento da assoluto (G90) a relativo (G91). Come nella maggior parte dei linguaggi di programmazione, lo spazio non ha valore, quindi scrivere X 1 Y 5 Z 3 oppure X1Y5Z3 o ancora X1 Y5 Z3 non influisce nel risultato letto dalla macchina, mentre invece può influire sulla chiarezza del codice letto da un programmatore, aspetto da non sottovalutare se si lavora in un team.
funzioni preparatorie
Le funzioni preparatorie sono delle modalità che la macchina ricorda dall'ultima volta che le sono state impartite. Sono comandi che gestiscono il moto della macchina e la predispongono all'esecuzione di alcune operazioni.
Ad esempio, la funzione G00 è un comando che impone che tutti i movimenti vengano fatti alla velocità massima che la macchina è in grado di compiere, mentre G01 cambia questa modalità da "movimenti rapidi" a "interpolazione lineare" per poter specificare la velocità a cui si vuol procedere tramite una funzione feedrate (avanzamento), lettera F seguita dalla velocità espressa in unità al minuto.
Ad esempio, "G01 F50" fa si che la macchina si muova di 50 unità al minuto (unità di misura a seconda dell'impostazione: G20 per pollici e G21 per millimetri).
funzioni miscellanee
Le funzioni miscellanee individuate dal carattere M controllano il mandrino e li liquido di raffreddamento.
Per quanto riguarda la velocità di rotazione, questa può essere specificata tramite una funzione speed (lettera S).
Ad esempio, per far girare in senso orario il mandrino a 4000 giri al minuto, la riga di codice è S4000 M03. Per fermare la rotazione c'è il comando M05. L'erogazione refrigerante può essere controllata con le funzioni M07 - M08 - M09, rispettivamente attivando l'erogazione sotto forma di nebbia, come liquido e per interromperla. Esistono funzioni che combinano la rotazione del mandrino e l'erogazione refrigerante.
funzioni cambio utensile
Per effettuare un cambio utensile il comando è M06, seguito dalla posizione del nuovo utensile, che si può specificare grazie al comando tool, carattere T.
l'elenco dettagliato di tutte le funzioni si può trovare in moltissimi siti di aziende di CNC o anche nella pagina wikipedia inglese: http://en.wikipedia.org/wiki/G-code
Il Programma
Un programma si compone di queste fasi:
1. Assegnazione numero al programma - funzione O001
2. Impostazioni generali di inizio programma - tramite funzioni preparatorie per specificare il tipo di coordinate, le velocità di spostamento del braccio, ecc.
3. Scelta e caricamento utensile - con la funzione T01 e M06 si specifica alla macchina l'utensile da prendere
4. Scelta della velocità di rotazione del mandrino - tramite S6000 si specifica la velocità in giri/min e M03 - M04 se il mandrino deve ruotare in senso orario o antiorario
5. Cancellazione compensazioni - tramite funzioni preparatorie come G40 o G80 vengono annullate delle lavorazioni residue d programmi precedenti
6. Impostazione piano di lavoro - G17 imposta il piano di lavoro orizzontale, assi XY. G18 e G19 sono i piani verticali XZ e YZ
7. Posizionamento iniziale tavola portapezzo - in questa fase si posiziona l'origine del pezzo. Va quindi mosso il braccio tramite funizioni di movimento e poi tramite G54 viene confermato il punto iniziale della tavola. ES: "G00 X-30 Y20 G54"
8. Compensazione lunghezza utensile - ad ogni cambio utensile va specificata qual è la compensazione del mandrino a seconda del tipo di utensile in utilizzo. Viene utilizzato il comando G43 in combinazione con H01 (che indica la posizione in memoria dell'utensile T01).
9. Posizionamento iniziale utensile - Per posizionare l'asse del mandrino va usata una funzione di spostamento verticale, ad esempio Z-1, così per effettuare una spianatura di 1 mm di profondità. A questo punto si può comandare l'apertura del rubinetto del refrigerante tramite M08
10. Inizio lavorazione e scelta della velocità d avanzamento - impostando un'interpolazione lineare (G01) si può procedere verso un punto predefinito tramite le funzioni X e Y e una velocità di avanzamento specificata con la funzione F. Una volta completato il percorso di taglio, va specificato il comando M09 per la chiusura del rubinetto del refrigerante.
11. Allontanamento utensile dalla zona di lavoro - una volta finito il corpo del programma con le istruzioni di spostamento, va allontanato l'utensile con un comando di traslazione verticale, es Z100
--- per eventuali altre lavorazioni con utensile diverso ripetere i punti da 3 a 11 ---
12. Fine programma - comando M30
Programmi di questo genere vengono generalmente creati automaticamente da software di tipo CAM abbinati alle macchine CNC, che leggono file digitali di estensione DXF a cui vengono impostati determinati tipi di lavorazione. E' comunque importante per chi utilizza questo tipo di tecnologia, conoscere il significato del codice, non per poterlo creare da zero, ma per poter agire direttamente sullo stesso in caso di errori che al monitor non compaiono o che graficamente non si riescono a percepire. La logica è la stessa a cui accennavo precedentemente in merito alle superfici create in Rhinoceros con Rhinoscript, il risultato (nel primo caso digitale, in questo caso fisico) può essere controllato e modificato a prescindere dalla grafica e segue una serie di regole imposte dall'utente.
EDIT
Avendo accesso a un software di tipo CAM, ho provato a mettere a frutto le nozioni trovate per "interpretare" il codice che lo stesso programma genera.
Il modello creato è molto semplice, ho inserito solamente una linea orizzontale in un pannello di 1000x500x80 mm a cui ho applicato una fresa generica di profondità 10 mm, praticamente un'incisione:
Premettendo che non so se il procedimento è corretto, ho cliccato su "genera programma ISO", che mi sembra essere il comando più inerente per poter vedere il codice. Mi fa salvare il file in formato PRG (normalmente salva in TLF). Aprendo questo file con notepad leggo questo:
%
|1
|2 0
|3 1
|4 1000
|5 80
|6 500
|7 0 0 0 0
|8
|9 0
|10
|11
|12
|13
|14
|15
|16
|17
|18
|19
:1
G120 K1
#910=DX
#911=DY
G165 Z80
( ----------
#902=#911-(321.57)
G172 X863.09 Y=#902 Z10 T99999 E1 S6 J90
%
Ipotizzo che tutti i valori numerici iniziali siano delle impostazioni che il software da alla macchina per la lettura del file, ad esempio i numeri 4, 5 e 6 sono i dati dimensionali del pezzo.
Le funzioni preparatorie che utilizza sono tutte con G e un numero superiore a 99, che trovo essere il limite dello standard ISO6983, quindi non le conosco.
penso che i primi DX e DY siano dei movimenti iniziali del braccio, magari dal centro globale della macchina, per posizionarsi all'inizio della linea che ho disegnato, inoltre il programma comanda di abbassarsi di 80 mm... però non è questo il punto dove fa l'incisione
questa X presumo sia la lunghezza della mia linea, infatti la Z10 mi fa pensare che il braccio stia incidendo. Non avendo selezionato lo strumento, la T(tool) penso abbia un valore casuale (infatti salvando il file PRG il software mi avverte che lo strumento non è stato controllato)
Contrariamente all'esempio precedente dove ho illustrato la composizione tipica di un programma, in questo caso la Z positiva indica un abbassamento della macchina. Cercando in rete su vari forum ho trovato conferma che questo software ha una terna di assi sinistrorsi e quindi l'asse Z positivo indica uno spostamento verso il basso.
RIFERIMENTI:
Articolo: I. Paoletti, S. Converso, Da Gehry... in avanti in: “Modulo” Giugno 2010, pp.513-520
Corso che spiega i fondamenti per iniziare a programmare in g-code: http://www.cnccookbook.com/CCCNCGCodeCourse.htm
Sperimentazione eseguita da S.Converso, M. Pontani, G. M. Todesco e M. Mondello sulla macchina della nostra facoltà: http://design.rootiers.it/2009/?q=node/395
Politecnico di Milano, Dipartimento di Scienze e Tecnologie Aerospaziali: "CENNI DI MACCHINE A CONTROLLO NUMERICO", http://www.aero.polimi.it/~sala/bacheca/CONTROLLO_NUMERICO.pdf