appnote:an009

AN009 - Esempio di utilizzo e calibrazione del device OOPOS3

In questa sezione si vogliono descrivere le prime operazioni che si troverà a fare l'utente nel suo primo approccio con il device EANPOS. Inoltre si vuole fornire un semplice esempio in cui si utilizzi il device OOPOS3 per implementare un posizionatore.

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 OOPOS3, è 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 
Asse  OOPOS3  0004  2.CNT01 1 3.INP01 2.OUT01 2.OUT02 X.X X.X 2.OUT3  X.X

Si definisce un device OOPOS3 con nome “Asse” il cui tempo di campionamento è di 4 ms. Sono state dichiarate inoltre le seguenti risorse hardware: l'ingresso del contatore bidirezionale, il numero dell'ingresso digitale per interruzione dedicata all'impulso di zero dell'encoder, un ingresso digitale di abilitazione per l'acquisizione dell'impulso di zero. Le uscite di movimento che sono state dichiarate sono: 2.OUT01 come uscita di avanti, 2.OUT02 come uscita di indietro e 2.OUT03 come uscita di rallentamento.

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.

Il device OOPOS3 necessita di alcune risorse hardware quali un ingresso contatore per trasduttore bidirezionale (CNTxx) e delle uscite digitali.

Verifica del funzionamento della risorsa contatore

La seguente procedura serve per verificare il funzionamento dell'ingresso di conteggio.

  • Inizializzare il device Asse con il comando di INIT
      INIT Asse
     
  • Verificare l'attivazione dello stato st_init
      WAIT Asse:st_init
     
  • Inserire dei valori per measure e pulse
      Asse:measure = 1000
      Asse:pulse = 4000
     
  • Azzerare il valore del parametro posit
      Asse:posit = 0
     
  • Muovere l'asse in avanti facendo percorrere un giro completo all'encoder: verificare che il valore della variabile Asse:posit sia positivo e corrisponda al numero di impulsi giro dell'encoder (con i valori di measure e pulse sopra consigliati)
  • Se il valore di Asse:posit è negativo, scambiare le fasi dell'encoder o dare un il comando CNTREV
  • Se il valore di Asse:posit rimane a zero, controllare i collegamenti elettrici o il flag st_cntlock

Verifica del funzionamento delle uscite digitali

Attenzione:
Prima di movimentare l'asse, verificare il corretto funzionamento dei dispositivi di emergenza e protezione

La seguente procedura serve per verificare il funzionamento delle uscite digitali di avanti, indietro e rallentamento movimentando l'asse con i comandi manuali del device.
Per proseguire, verificare che il device Asse sia inizializzato e con i valori di measure e pulse corretti.

  • Impostare al massimo valore i limiti software del device in modo da consentirne il movimento.
    Inserire il valore 999999 nel parametro maxpos ed il valore -999999 nel parametro minpos.
      Asse:maxpos = 999999
      Asse:minpos = -999999sse:posit = 0
     
  • Dare il comando MANFFW per fare attivare la sola uscita di avanti
      MANFFW Asse
     
  • Per verificare la corretta esecuzione del comando, controllare che st_still = 0 e st_movfwd = 1
      WAIT NOT Asse:st_still AND Asse:st_movfwd
     
  • Verificare che l'asse si muova in avanti e che il conteggio visualizzato in Asse:posit si incrementi, quindi fermare il movimento con il comando STOP
      STOP Asse
     
  • Se l'uscita di avanti, corrispondente ad esempio alla risorsa 2.OUT01, non si attiva, verificare il collegamento elettrico
  • Dare il comando MANFBW per eccitare la sola uscita di indietro
      MANFBW Asse
     
  • Per verificare la corretta esecuzione del comando, controllare che st_still = 0 e st_movbwd = 1
      WAIT NOT Asse:st_still AND Asse:st_movbwd
     
  • Verificare che l'asse si muova all'indietro e che il conteggio visualizzato in Asse:posit si decrementi, quindi interrompere il movimento con il comando STOP.
      STOP Asse
     
  • Se l'uscita di indietro, corrispondente ad esempio alla risorsa 2.OUT02, non si attiva, verificare il collegamento elettrico
  • Dare il comando MANSFW per fare eccitare le uscite di avanti e rallentamento
      MANSFW Asse
     
  • Per verificare la corretta esecuzione del comando, controllare che st_still = 0, st_movfwd = 1 e st_movslow = 1
      WAIT NOT Asse:st_still AND Asse:st_movfwd AND Asse:st_movslow
     
  • Verificare che l'asse si muova in avanti ad una velocità inferiore alla precedente e che il conteggio visualizzato in Asse:posit si incrementi, quindi interrompere il movimento con il comando STOP
      STOP Asse
     
  • Se l'uscita di rallentamento, corrispondente ad esempio alla risorsa 2.OUT03, non si attiva, verificare il collegamento elettrico.

Una volta dichiarate correttamente le risorse hardware da utilizzare è necessario impostare alcuni parametri in base alle componenti che sono collegate al prodotto Qmove.

Introduzione di measure e pulse

Prendiamo in considerazione il caso (piuttosto diffuso) in cui il trasduttore bidirezionale sia un encoder digitale. Supponiamo che l'encoder sia direttamente calettato su un motore che debba movimentare un asse. 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 posizione 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:

  • dare il comando di INIT al device, verificare che lo stato st_init commuti a 1
  • 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.

Un'ulteriore operazione importante da compiere è impostare i parametri maxpos e minpos che definiscono rispettivamente la massima e la minima posizione raggiungibile dall'asse.

Scelta dell'unità di misura della velocità

L'unità di misura della velocità istantanea dell'asse 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.

Parametrizzazioni base

Per fare funzionare correttamente il device OOPOS3, è necessario inserire alcuni parametri base.

  • Determinare i limiti software da introdurre nei parametri maxpos e minpos
      Asse:minpos = xxx (xxx = valore minimo dell’asse espresso in Um)
      Asse:maxpos = yyy (yyy = valore massimo dell’asse espresso in Um)
     
  • Se si utilizza un sistema a due velocità, impostare lo spazio necessario all'asse per passare dalla velocità alta alla velocità lenta all'eccitazione dell'uscita di rallentamento; introdurre il dato nel parametro slowpos
      Asse:slowpos = zzz (zzz = valore di rallentamento dell'asse espresso in Um)
     
  • Impostare il tempo di disattivazione dell'uscita di movimento quando l'asse entra nella fascia di rallentamento in modo che l'eccitazione dell'uscita di rallentamento non provochi scompensi elettrici. Introdurre il dato nel parametro slowdly.
      Asse:slowdly = ttt (ttt = tempo di rallentamento espresso in s/100)
     
  • Impostare i limiti di tolleranza che si vogliono ottenere durante il posizionamento nei parametri tollp e tolln. Come prima impostazione, introdurre dei valori superiori alle precisioni richieste.
      Asse:tollp = tpx (tpx = valore di tolleranza positiva espresso in Um/10)
      Asse:tolln = tnx (tpn = valore di tolleranza negativa espresso in Um/10)
     
  • Impostare il tempo d'inversione dell’asse nel parametro tinv
      Asse:tinv = tempo di inversione espresso in s/100
     
  • Considerare un'unica fascia di inerzia per tutto l'asse, impostare quindi il parametro ninert ad 1
      Asse:ninert = 1
     
  • Abilitare il ricalcolo dell'inerzia quando il posizionamento si conclude fuori tolleranza: impostare quindi il parametro inertmode ad 1
      Asse:inertmode = 1
     
  • Impostare il tempo di ritardo attivazione tolleranza, considerando il tempo che impiega l'asse per decelerare fino a fermarsi; impostare quindi il parametro toldly
      Asse:toldly = tdly (tdly = tempo di ritardo attivazione tolleranza espresso in ms)
     

Impostazione parametro maxvel

Se non si è a conoscenza della velocità massima dichiarata del motore si deve procedere in questo modo:

  • entrare nella modalità di calibrazione (come descritto precedentemente)
  • se il sistema lo permette fornire all'azionamento tensione nota e leggere il valore del parametro vel
  • calcolare la velocità massima con la proporzione vout : 10 V = vel : maxvel

Ora è quindi possibile introdurre il valore della velocità massima nel parametro maxvel

Le procedure fin qui descritte hanno permesso di completare le fasi di definizione delle risorse hardware necessarie al device, di verifica dei collegamenti elettrici, di impostazione dei parametri fondamentali del device.
Ora è possibile eseguire una semplice movimentazione dell'asse.

  • Spostare l'asse in una posizione tale per cui possa compiere un determinato spazio senza incontrare i finecorsa di quota massima
  • Azzerare il conteggio (parametro posit = 0)
  • Impostare la quota di posizionamento (parametro setpos)
      Asse:setpos = quota di posizionamento (in Um compresa tra minpos e maxpos)
      Start posizionamento (comando di START) 
      START Asse
     
  • Per interrompere il posizionamento utilizzare il comando di STOP

Nella sezione precedente è stato spiegato quali sono i primi passi da seguire per una procedura di movimentazione di un asse. Tale esempio impiega solo un ristretto spettro dei parametri impostabili del device, in questa sezione inseriamo un codice di esempio, dettagliatamente commentato, da cui l'utilizzatore può prendere spunto per sviluppare un applicativo.
Il modo in cui il device va dichiarato è spiegato precedentemente, e perciò in questa sezione è omessa la unit di configurazione. Vedi qui.

;*************************************************************************************
; Unit di configurazione (sono riportate solo le dichiarazioni di variabili e 
; sono omesse le dichiarazioni del bus e del device)
;*************************************************************************************
;-------------------------------------------------------------------------------------
; Definizione Variabili SYSTEM
;-------------------------------------------------------------------------------------
SYSTEM
slQuotaPos L                  ;Variabile per quota di posizionamento
;-------------------------------------------------------------------------------------
; Definizione Variabili GLOBAL
;-------------------------------------------------------------------------------------
GLOBAL
gfMovMan F                    ;Flag segnalazione movimenti manuali in corso
gfMovAuto F                   ;Flag segnalazione movimenti automatici in corso
;-------------------------------------------------------------------------------------
; Definizione Variabili INPUT
;-------------------------------------------------------------------------------------
INPUT
ifAvMan F 2.INP01             ;Ingresso di avanti manuale
ifInMan F 2.INP02             ;Ingresso di indietro manuale
ifStart F 2.INP03             ;Ingresso di START asse
ifStop  F 2.INP04             ;Ingresso di STOP asse
;-------------------------------------------------------------------------------------
; Definizione Variabili OUTPUT
;-------------------------------------------------------------------------------------
OUTPUT
ofToll F 2.OUT01              ;Uscita di asse in tolleranza
 
;*************************************************************************************
; Unit qcl
;*************************************************************************************
;-------------------------------------------------------------------------------------
; Operazioni di parametrizzazione del device
;-------------------------------------------------------------------------------------
Asse:measure = 10000        
Asse:pulse = 40000            ;come calcolare measure e pulse è spiegato nel paragrafo apposito.*
Asse:maxvel = 100000          ;come calcolare maxvel è spiegato nel paragrafo apposito.*
Asse:maxpos = 999999          ;Quota massima
Asse:minpos = -999999         ;Quota minima
Asse:slowpos = 100            ;Quota di rallentamento
Asse:tollp = 10               ;Tolleranza positiva
Asse:tolln = 50               ;Tolleranza negativa
Asse:slowdly = 50             ;Tempo di rallentamento
Asse:tbrake = 30              ;Tempo di intervento freno
Asse:overpos = 0              ;Oltrequota recupero giochi
Asse:bklashmode = 0           ;Modalità recupero giochi
Asse:ninert = 1               ;Numero fasce d'inerzia
Asse:maxiner = 100            ;Massima inerzia dopo ricalcolo
Asse:inertmode = 1            ;Modalità ricalcolo inerzia
Asse:tool = 0                 ;Spessore utensile
Asse:dobiner = 0              ;Modalità inerzia avanti/indietro
Asse:enstol = 0               ;Abilitazione START con asse in tolleranza
Asse:unitvel = 0              ;Unità di tempo della velocità (velocità in Um/min)
Asse:decpt = 0                ;Cifre decimali nel calcolo della velocità
Asse:tinv = 50                ;Tempo di inversione asse
Asse:toll = 5                 ;Tolleranza (impostata in Um)
Asse:toldly = 10              ;Tempo di ritardo attivazione stato di tolleranza
Asse:prsmode = 0              ;Modalità di funzione di homing
Asse:prspos = 0               ;Homing offset
Asse:prsdir = 0               ;Direzione di movimento per la ricerca di posizione di home
Asse:prsvel = (20 * Asse:maxvel)/100  ;Velocità per la ricerca di attivazione ingresso digitale di abilitazione (20% della vel.max.)
Asse:sprsvel = (10 * Asse:maxvel)/100 ;Velocità per la ricerca della posizione di home (10% della vel.max.)
Asse:breaktype = 0            ;Logica di intervento del freno
Asse:slowtype = 0             ;Tipo di calcolo rallentamento
Asse:maxslow = 8              ;Rallentamento calcolato massimo
Asse:minslow = 80             ;Rallentamento calcolato minimo
 
INIT Asse                     ;Inizializza il device
WAIT Asse:st_init             ;Attendi che il device sia inizializzato
CNTUNLOCK Asse                ;Sblocca acquisizione posizione
WAIT NOT Asse:st_cntlock      ;Attendi che l'acquisizione della posizione sia sbloccato
CNTDIR Asse                   ;Imposta il senso dell'acquisizione di posizione
WAIT NOT Asse:st_cntrev       ;Attendi che sia impostato il senso dell'acquisizione di posizione
REGON Asse                    ;Abilita la regolazione
WAIT NOT Asse:st_regoff       ;Attendi l'abilitazione alla regolazione
 
IF (slQuotaPos EQ 0)          ;Nel caso in cui la quota di posizionamento dell'asse sia zero
  slQuotaPos = 2000           ;Imposta una quota di posizionamento
ENDIF
 
;-------------------------------------------------------------------------------------
; Operazioni di Posizionamento
;-------------------------------------------------------------------------------------
; ------------------------------- variabili utilizzate ------------------------------
; slQuotaPos: Variabile impostabile che rappresenta la quota di posizionamento dell'asse
; ---------------------------------- flag utilizzati --------------------------------
; gfMovMan:   Movimento manuale in corso
; gfMovAuto:  Movimento automatico in corso
;-------------------------------------------------------------------------------------
 
MAIN:
;-------------------------------------------------------------------------------------
; Gestione uscite
;-------------------------------------------------------------------------------------
ofToll = Asse:st_toll         ;Imposto l'uscita di tolleranza come lo stato di tolleranza
 
;-------------------------------------------------------------------------------------
; Gestione movimenti automatici
;-------------------------------------------------------------------------------------
IF ifStart                          ;Attende l'ingresso di START
  IF NOT gfMovMan                   ;Controlla che non ci siano movimenti manuali
    IF Asse:st_still                ;Controlla che l'asse sia fermo
      Asse:setpos = slQuotaPos      ;Imposta la quota di posizionamento
      START Asse                    ;Esegue lo start dell'asse
      gfMovAuto = 1                 ;Segnala movimento automatico in corso
    ENDIF
  ENDIF
ENDIF
IF ifStop                           ;Attende l'ingresso di STOP
  IF NOT Asse:st_still              ;Controlla che l'asse NON sia fermo
    STOP Asse                       ;Esegue lo stop dell'asse
  ENDIF
ENDIF
IF gfMovAuto                        ;Controlla segnalazione movimento automatico in corso
  IF Asse:st_still                  ;Controlla che l'asse sia fermo
    gfMovAuto = 0                   ;Resetta stato di movimento Automatico
  ENDIF
ENDIF
 
;-------------------------------------------------------------------------------------
; Gestione movimenti manuali (JOG)
;-------------------------------------------------------------------------------------
IF ifAvMan                          ;Attende l'ingresso di movimento manuale
  IF NOT (gfMovAuto OR gfMovMan)    ;Controlla che non ci siano movimenti automatici o manuali in corso
    IF Asse:st_still                ;Controlla che l'asse sia fermo
      MANFFW Asse                    ;Avanti asse in manuale
      gfMovMan = 1                  ;Segnala movimento manuale in corso
    ENDIF
  ENDIF
ENDIF
IF ifInMan                          ;Attende l'ingresso di movimento manuale
  IF NOT (gfMovAuto OR gfMovMan)    ;Controlla che non ci siano movimenti automatici o manuali in corso
    IF Asse:st_still                ;Controlla che l'asse sia fermo
      MANFBW Asse                    ;Avanti asse in manuale
      gfMovMan = 1                  ;Segnala movimento manuale in corso
    ENDIF
  ENDIF
ENDIF
IF gfMovMan                         ;Se l'asse si muove in manuale
  IF NOT (ifAvMan OR ifInMan)       ;Se gli ingressi di avanti e indietro manuale sono OFF
    STOP Asse                       ;Ferma l'asse
    gfMovMan = 0                    ;Togli la segnalazione di asse in movimento manuale
  ENDIF
ENDIF
 
;-------------------------------------------------------------------------------------
; Operazioni finali
;-------------------------------------------------------------------------------------
WAIT 1
JUMP MAIN
END

Come calcolare measure e pulse è spiegato nel paragrafo apposito.

  • Ultima modifica: 2019/08/29 17:00