appnote:an006

In questa sezione si vogliono descrivere le prime operazioni che si troverà a fare l'utente nel primo approccio con il device HEAD2.
Possiamo suddividere nelle seguenti sezioni il procedere dell'operazione:

  • dichiarazione del device nella unit di configurazione
  • introduzione dei parametri al fine di calibrare correttamente ingressi ed uscite
  • sviluppo dell'applicativo secondo le esigenze

Come è stato già spiegato nella sezione di descrizione del device, è necessario programmare correttamente la unit di configurazione dell'applicativo. È molto importante la porzione di codice in cui vengono dichiarati i device, qui infatti si dovranno indicare le risorse hardware da utilizzare per garantire un corretto funzionamento. Sarà compito del programmatore individuare e scegliere ingressi ed uscite più opportune. Ad esempio con la seguente riga di codice:

;--------------------------------- 
; Dichiarazione device interni 
;--------------------------------- 
INTDEVICE 
Teste HEAD2 0002 2.CNT01 3.INP01 X.X X.X 3.OUT01 3.OUT02 3.OUT03 3.OUT04 X.X X.X X.X X.X

Si definisce un device HEAD2 con nome “Teste” il cui tempo di campionamento è di 2 ms. Sono state dichiarate inoltre le seguenti risorse hardware: l'ingresso del contatore bidirezionale ha indirizzo 2.CNT01 (dove 2 indica lo slot di identificazione della sede del morsetto mentre CNT01 è il nome mnemonico dell'ingresso), l'ingresso digitale del sensore di presenza pezzo 3.INP01 (sono stati omessi i rimanenti due ingressi che possono essere impiegati da sensori per rifasamento della posizione del pezzo) e quattro uscite digitali che andranno a comandare le teste levigatrici della macchina.

Un applicativo che abbia soltanto al suo interno la dichiarazione del device nella unit di configurazione ed una unit qcl che non esegua alcuna operazione (salvo quella di WAIT forzato) consente già di compiere le prime operazioni sfruttando le funzionalità del device. Infatti dopo avere scaricato l'applicativo sullo strumento e avendolo fatto girare, sarà già possibile modificare i parametri, osservare gli stati o dare comandi al device tramite il monitor apposito da QView.
Questo risulta molto comodo nelle prime fasi della programmazione quando si vogliono solo verificare alcuni funzionamenti oppure in fase di debug.
Affinché il device operi correttamente è però necessario che siano configurati correttamente alcuni parametri svolgendo una vera e propria operazione di taratura per adattare le capacità dello strumento elettronico alle problematiche di carattere fisico della macchina.

A questo punto è opportuno ricordare come potrebbe essere costituita una macchina controllata dal device HEAD: un nastro trasportatore consente di muovere del materiale al di sotto di alcune teste di lavorazione, questo è collegato ad un encoder che consente allo strumento di conoscere la sua velocità. È opportuno sottolineare che tale velocità è solamente misurata e che non è presente alcun controllo di movimento asse.
All'inizio del nastro viene tipicamente posizionato un sensore (ottico o meccanico) che determina la presenza e la lunghezza di una porzione di materiale da lavorare, vi è la possibilità inoltre di utilizzare ulteriori due sensori a distanze diverse in modo da verificare la presenza del pezzo.
Le teste di lavoro sono comandate tramite delle uscite digitali.

Come si può dedurre dalla riga di dichiarazione del device si identificano tre elementi fondamentali che vengono controllati dal device:

  • i segnali inviati dall'encoder per rilevare la velocità del nastro trasportatore
  • il segnale inviato dal sensore presenza pezzo che determinerà anche la lunghezza della porzione di materiale da lavorare
  • le teste di lavorazione che dovranno essere comandate in modo che scendano quando al di sotto si trova materiale e salgano quando questo finisce

Introduzione di measure e pulse

Prendiamo in considerazione il caso (piuttosto diffuso) in cui il trasduttore bidirezionale sia un encoder digitale direttamente calettato su un asse del rullo che movimenta il nastro. Sarà necessario impostare correttamente i parametri measure e pulse del device in modo che quest'ultimo possa interpretare gli impulsi encoder che arriveranno al QMove, lo strumento quindi potrà calcolare la velocità dell'asse.
L'introduzione di measure e pulse consente di stabilire una corrispondenza tra uno spazio in una unità di misura prescelta ed un determinato numero di impulsi. Nel caso in cui l'utilizzatore conosca già lo spazio percorso in un giro encoder allora potrà procedere direttamente all'inserimento dei valori.
Chiariamo questo concetto con un esempio: se l'encoder genera 1000 impulsi giro e si è a conoscenza che l'asse si muove di 5 cm quando l'encoder compie precisamente un giro allora si potranno inserire i seguenti valori:

AsseX:measure = 50;
AsseX:pulse = 4000

Il valore di measure introdotto inoltre implica la scelta di un'unità di misura del millimetro per misurare le posizioni, nel parametro pulse sì è introdotto un valore pari al numero di impulsi encoder moltiplicato per 4. Si ricorda che il rapporto measure/pulse deve avere un valore compreso tra 0.00935 e 1 (per rispetto dei limiti di precisione del device e del prodotto QMove). È importante sottolineare che i valori appena descritti sono presi come riferimento: non è necessario introdurre i parametri prendendo come riferimento un giro encoder come si andrà a descrivere di seguito.

Quando l'utilizzatore non conosce preventivamente i parametri di misura, potrà comunque effettuare la corretta calibrazione seguendo questi passi:

  • tramite il “device monitor” di QView visualizzare sul pc il valore del parametro posit
  • impostare measure e pulse entrambi al valore 1
  • movimentare l'asse manualmente facendogli compiere uno spostamento di una posizione facilmente misurabile
  • leggere il valore di posit
  • a questo punto inserire con la unità di misura desiderata il valore misurato nel parametro measure ed il valore del parametro posit nel parametro pulse

La risoluzione dell'encoder è ora correttamente impostata.

Calcolo della velocità del nastro

Il device, per calcolare la velocità con cui si muove il nastro, conta il numero di impulsi ricevuti dall'encoder su un breve intervallo di tempo (tempo di campionamento), dividendo tale valore per la durata dell'intervallo si ottiene la velocità media all'interno del periodo.
Il parametro tbf consente di scegliere la durata del tempo di campionamento, è stata data questa possbilità all'utente perché, nel caso in cui il nastro si muova a velocità molto bassa si dovrà impostare un tempo lungo. In caso contrario potrebbe accadere che nel tempo di campionamento non si ricevano sufficienti campioni per poter determinare la velocità.
Si ricorda che, ovviamente, un tempo di campionamento lungo comporta un aggiornamento della velocità piuttosto lento.

È stato introdotto inoltre un filtro software che può essere utilizzato nel calcolo della velocità del nastro. Questo filtro è di tipo passabasso e la sua costante di tempo può essere impostata con il parametro tfilter, inoltre si può scegliere se attivare questo filtro quando la velocità del nastro subisce una variazione in un tempo di campionamento superiore ad un certo parametro. Questo parametro è impostato tramite dvelf. Questo filtro ritorna utile per evitare un valore misurato della velocità che oscilli troppo, si può affermare che la sua funzione è di “mediare” la velocità calcolata.

L'unità di misura della velocità istantanea del nastro viene scelta tramite i parametri unitvel e decpt. È possibile scegliere l'unità di tempo della velocità con il parametro unitvel: se questo è pari a 0 allora la velocità è misurata in Um/min, se è pari a 1 allora è misurata in Um/s. Il parametro decpt invece stabilisce se misurare i valori di velocità in multipli dell'unità di misura fondamentale Um. Ad esempio, se l'unità di misura fondamentale Um=mm, ed unitvel=1 si ottiene la visualizzazione della velocità nella variabile vel in:
mm/s (con decpt = 0),
cm/s (con decpt = 1),
dm/s (con decpt = 2),
m/s (con decpt = 3).
In seguito, se necessario, bisognerà configurare correttamente la visualizzazione sul terminale operatore per aggiustare la corretta posizione del punto decimale.

I sensori di presenza pezzo hanno una posizione fissa nella configurazione della macchina: il primo, posto all'inizio del nastro trasportatore, ha il compito di identificare inizio e fine del pezzo, eventualmente possono essere utilizzati altri due sensori posti ad una certa distanza dall'inizio del nastro per effettuare un “rifasamento” della posizione del pezzo.
I parametri disti02 e disti03 consentono di impostare la distanza dei sensori 2 e 3 dal primo.

Il primo sensore identificherà anche l'inizio del nastro, ogni volta che questo sarà attivato i parametri posit ed encoder viene azzerato.
Nel caso in cui il sensore di presenza pezzo sia un finecorsa meccanico potrebbe essere necessario introdurre un anticipo o un ritardo della fine del pezzo rispetto il fronte di discesa del segnale. Questo può essere impostato con il parametro offseti01.
Il parametro beltlength consente di impostare la lunghezza del nastro, il device quando identificherà la presenza di materiale manterrà attiva l'uscita del soffiatore.

La modalità per configurare le teste di lavorazione si discosta dalla semplice introduzione di un valore in un parametro. Infatti è necessario utilizzare degli appositi comandi (WRITESET, WRITEPRG e WRITEVAR), questo è dovuto all'implementazione interna del device.
I primi parametri da introdurre saranno quelli tramite il comando WRITESET:
dist determina la distanza tra il primo sensore presenza pezzo e il centro della testa di lavoro in questione,
mode consente di determinare la funzione che dovrà svolgere la testa,
i parametri riseadv e downlag configurano gli anticipi/ritardi di salita/discesa teste con la modalità descritta nel manuale del device.

La procedura per introdurre i parametri è la seguente:

[...]
Teste:headin = 2                       ;configurazione della testa 2
Teste:dist = 100                       ;distanza impostata a 100 Um dal sensore presenza pezzo
Teste:mode = 1                         ;testa impostata come levigatrice
Teste:riseadv1 = 5                     ;impostazione dell'anticipo salita testa legato alla velocità correvel1
Teste:riseadv2 = 7                     ;impostazione dell'anticipo salita testa legato alla velocità correvel2
Teste:riseadv3 = 10                    ;impostazione dell'anticipo salita testa legato alla velocità correvel3
Teste:downlag1 = 6                     ;impostazione del ritardo discesa testa legato alla velocità correvel1
Teste:downlag2 = 8                     ;impostazione del ritardo discesa testa legato alla velocità correvel2
Teste:downlag3 = 12                    ;impostazione del ritardo discesa testa legato alla velocità correvel3
Teste:headout = 0                      ;imposto headout a 0
WRITESET Teste                         ;invio comando di scrittura
WAIT Teste:headout EQ Teste:headin     ;attesa comando eseguito
[...]

Questa procedura (scelta della testa da impostare con il parametro headin, modifica dei parametri, invio del comando) va effettuata anche quando si utilizzano i comandi di lettura e scrittura WRITEPRG, READPRG, WRITEVAR, READVAR.

Tramite WRITEPRG è possibile inserire le configurazioni relative alla modalità di lavorazione della testa.

WRITEVAR invece consente di leggere dei parametri relativi alla lavorazione in corso.
Lo stesso meccanismo di lettura dei parametri funziona con il comando READPIECE che consente di conoscere delle informazioni su uno specifico pezzo in lavorazione.

Quando si desidera leggere continuamente i valori dei parametri relativi a tutte le teste, si può semplicemente utilizzare un ciclo for per leggere e memorizzare in un array i parametri a cui si è interessati:

[...]
FOR (gbCount=1, gbCount LE 8, 1)      ;inizializzazione ciclo for
  Teste:headin = gbCount              ;configuro tutte le teste da 1 a 8
  Teste:dist = gbCount * 10           ;teste equispaziate di 10 Um
  Teste:mode = 1                      ;tutte teste levigatrici
  WRITESET Teste                      ;invio comando di scrittura
  WAIT Teste:headout EQ Teste:headin  ;attesa comando eseguito
NEXT
[...]
[...]
FOR (gbCount=1, gbCount LE 8, 1)      ;inizializzazione ciclo for
  Teste:headin = gbCount              ;configuro tutte le teste da 1 a 8
  READVARSET Teste                    ;invio comando di lettura
  WAIT Teste:headout EQ Teste:headin  ;attesa comando eseguito
  Teste:actriseadv = garray[1]        ;memorizzo la correzione di anticipo nella prima posizione di un array
  Teste:actdownlag = garray[2]        ;memorizzo la correzione di ritardo nella seconda posizione di un array
  Teste:actpiece = garray[3]          ;memorizzo il numero del pezzo in lavorazione nella terza posizione di un array
NEXT
[...]
  • Ultima modifica: 2019/08/29 17:00