appnote:an008

AN008 - Esempio di utilizzo e calibrazione del device JOINT

JOINT può essere considerato un device che include le funzionalità di tre device EANPOS per controllare rispettivamente tre assi che sono chiamate X, Y e Z. Perciò i posizionamenti sono effettuati utilizzando un controllo di tipo P.I.D. così come per il device EANPOS.
L'elemento di novità rispetto il semplice posizionatore monoasse è la possibilità di effettuare dei movimenti interpolati: con questo si intende disegnare degli archi in modo preciso per raccordare ad esempio due segmenti di retta.

In questa sezione si vogliono descrivere le prime operazioni che si troverà a fare l'utente nel suo primo approccio con il device. Inoltre si vuole fornire un semplice esempio in cui si utilizzi il device JOINT in modo che l'utilizzatore possieda un punto di partenza da cui sviluppare il proprio applicativo.

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 JOINT, è 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> JOINT 0002 3 20000 
                    1.CNT01 1 1.INP01 1.AN01
                    1.CNT02 2 1.INP02 1.AN02
                    2.CNT01 3 2.INP01 2.AN01
                    3.OUT01 3.OUT02 3.OUT03 3.OUT04

Si definisce un device JOINT con nome “Asse” il cui tempo di campionamento è di 2 ms. Successivamente è introdotto il numero di assi che si vogliono controllare (in questo caso 3) e la dimensione del buffer interno che si utilizza per effettuare i calcoli dell'interpolazione.
Seguono quindi tre righe in cui vanno inseriti i parametri di configurazione degli assi (rispettivamente X, Y e Z) così come andrebbe fatto per un device EANPOS. Vi sono: l'indirizzo hardware del contatore bidirezionale per l'acquisizione della posizione, l'indirizzo digitale per interruzione ed un indirizzo digitale per l'abilitazione da utilizzare nella procedura di homing ed infine l'indirizzo dell'uscita analogica per il controllo dell'azionamento collegato al motore che si intende muovere. Questa configurazione va ripetuta per i rimanenti due assi (nel caso ne vengano utilizzati 3, altrimenti si utilizza il simbolo X o X.X come di consueto se non si utilizza una qualsiasi risorsa).
Infine si ha la possibilità di dichiarare 4 uscite digitali che si possono sfruttare con questo device.

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.

Nota:
In questo documento i vari parametri e comandi sono riferiti ad un generico asse, perciò bisogna ricordare di utilizzare parametri e comandi relativi all'asse che si intende comandare

Una volta dichiarate correttamente le risorse hardware da utilizzare è necessario impostare alcuni parametri in base alle componenti che sono collegate al prodotto Qmove per configurare correttamente ciascun asse. Le operazioni andranno quindi ripetute per i tre assi. I parametri ricavati dal device EANPOS hanno lo stesso nome con posposta una lettera che indica l'asse che si sta configurando.

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 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:

Asse:measurex = 50;
Asse:pulsex = 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 (cioè il numero di fronti generati dall'encoder). 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 da un 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.

Calibrazione uscita analogica

Attenzione:
Prima di effettuare dei posizionamenti veri e propri è necessario verificare che collegamenti ed organi meccanici non siano causa di malfunzionamenti.

Esaminiamo il caso in cui il device utilizzi un'uscita analogica implementata con un dispositivo DAC: questo assumerà in ingresso valori discreti con risoluzione 16 bit (perciò compresi fra -32768 e 32767) per dare in uscita una tensione analogica con range ±10V. Con la funzione di calibrazione questa uscita analogica può essere pilotata con un valore costante con lo scopo di verificare collegamenti e funzionalità.

In questa sezione vengono descritte le operazioni da effettuare per verificare la correttezza dei collegamenti e la funzionalità del sistema che è stato costruito.

  • dare il comando di INIT al device, verificare che lo stato st_init commuti a 1
  • dare il comando RESUME per togliere un'eventuale condizione di emergenza (st_emrg = 1)
  • abilitare lo stato di calibrazione asse dando il comando CALON, lo stato st_cal commuta a 1
  • in queste condizioni è possibile impostare la tensione analogica tramite il parametro vout: il valore è espresso in decimi di Volt (perciò il range di valori introducibili è ±100). Si consiglia di introdurre valori bassi (5, 10, 15 …)
  • poiché ora il device è utilizzato come “generatore di tensione” l'asse dovrebbe iniziare a muoversi. Se ciò non accade è opportuno verificare la correttezza dei collegamenti. Quando l'asse è in movimento il parametro frq indica il valore della frequenza di uno dei segnali in ingresso al contatore bidirezionale, vel indica la velocità dell'asse mentre posit la posizione secondo l'unità di misura scelta. Se dando tensione positiva la posizione decrementa è necessario invertire le fasi del trasduttore (o fisicamente spostando i cavi, oppure tramite il comando CNTREV) o invertire la direzione dell'azionamento
  • se con tensione di uscita pari a 0 V si nota comunque che l'asse è in movimento a causa di tensioni di offset, queste si possono controbilanciare agendo sul parametro offset. Per un ottimale esito della taratura, l'operazione deve essere eseguita con il sistema in regime di temperatura
  • ora è possibile disabilitare lo stato di calibrazione con il comando CALOFF (lo stato st_cal commuta a 0).

Il device genera il valore di tensione dell'uscita analogica sulla base di una proporzione tra la velocità massima dell'asse e la massima tensione di uscita. Per fare ciò è necessario impostare il parametro maxvel, ovvero la velocità con cui si muove l'asse quando viene data tensione massima all'azionamento. Ovviamente l'asse deve avere un comportamento simmetrico rispetto al valore zero di tensione analogica, quindi la velocità deve essere la stessa (in modulo) alla tensione massima sia positiva che negativa.
Per conoscere la velocità massima esistono due vie: il “metodo teorico” presuppone di conosce la velocità massima del motore (giri massimi dichiarati) da cui si può ricavare facilmente la velocità lineare. 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 massima e leggere il valore del parametro vel
  • è possibile anche fornire una tensione minore e calcolare la velocità massima con la proporzione vout : 10 V = vel : maxvel

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

Prima movimentazione

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

Le procedure fin qui descritte hanno permesso di completare la prima fase di parametrizzazione del device. Ora è possibile eseguire una semplice movimentazione dell'asse. Seguire ad esempio i seguenti passi:

  • dare il comando di INIT al device, verificare che lo stato st_init commuti a 1
  • spostare l'asse in una posizione tale per cui si possa compiere un determinato spazio senza incontrare finecorsa
  • impostare il parametro che definisce il tempo impiegato dall'asse a raggiungere la velocità massima da 0 (e viceversa) taccdec=50
  • impostare la velocità di posizionamento con il parametro setvel
  • impostare la quota di posizionamento con il parametro setpos
  • impostare il parametro feedfw a 1000 (100%)
  • resettare l'eventuale stato di emergenza con il comando RESUME
  • avviare il posizionamento con il comando START, per arrestare il movimento dare il comando STOP (oppure EMRG).

Questa prima movimentazione è stata eseguita senza attivare l'anello di reazione di spazio, quindi qualsiasi errore introdotto da valori di tensione di offset o da agenti esterni non viene corretto.

Utilizzo del device RECDATA per calibrare correttamente il controllore PID

Quando il programmatore intende regolare finemente i parametri del regolatore PID, egli può servirsi di un device interno (residente sul QMove) che permette di registrare dati del tipo: posizione in impulsi primari, posizioni virtuali asse, uscite analogiche, errori di inseguimento, stati di ingressi e uscite. Questo tool si chiama RECDATA e sfrutta la RAM della CPU del prodotto QMove, perciò, quando viene impiegato, l'utilizzo della memoria dei dati non deve superare il 50% di quella totale.

Poiché gli effetti della regolazione PID producono manifestazioni molto difficili da apprezzare ad occhio nudo, il device RECDATA diventa molto utile quando si vogliono tarare parametri quali pgain, integt o derivt. Infatti fenomeni come l'overshoot o un rallentamento dovuto ad un valore eccessivo del tempo integrale devono essere tenuti in considerazione nella fase di parametrizzazione.

L'utilizzo di un device RECDATA risulta molto semplice, è sufficiente infatti che esso sia dichiarato correttamente nella unit di configurazione con una riga del tipo:

;--------------------------------- 
; Dichiarazione device interni 
;--------------------------------- 
INTDEVICE 
Recorder  RECDATA  TCamp  QCTL1  QCTL2  IOutA1  IOutA2  IntL1  IntL2  Ing1  Ing2  Out1  Out2 

il device è particolarmente indicato a monitorare i parametri del device infatti consente di visualizzare: i valori di posizione in impulsi primari (prendendo direttamente i dati provenienti dal trasduttore bidirezionale), i valori di posizione teorica che il generatore di profilo di velocità sta generando, i valori di una uscita analogica. L'utente può quindi comodamente accorgersi se i parametri che ha inserito sono corretti per le sue esigenze.

Una descrizione più approfondita del device RECDATA si può trovare nella sezione apposita, qui ci limitiamo ad elencare i passi da seguire per utilizzarlo:

  • dichiarazione del device nella unit di configurazione inserendo come parametri ingressi ed uscite utilizzati anche dal device JOINT
  • dare il comando STARTR nel momento in cui si vuole iniziare la registrazione, e STOPR quando la si vuole arrestare
  • ad operazioni completate dal menu “Monitor” di QView selezionare “Device Panels”, e da lì il valore relativo al device RECDATA
  • nella finestra che si aprirà sono disponibili diverse opzioni, l'operazione più importante da compiere è dare il comando “Start data acquiring” tramite l'apposito icona
  • sugli assi cartesiani, a fine caricamento, compariranno i valori dei parametri che sono stati monitorati

Nota:
Il device RECDATA registra una notevole quantità di dati all'interno della RAM del prodotto QMove, al momento dell'acquisizione da parte del pc il trasferimento avviene via seriale. Questa operazione potrebbe risultare molto lunga a causa della bassa velocità intrinseca del protocollo di comunicazione seriale. L'utente quindi può adottare alcuni accorgimenti come:

  • prestare attenzione a registrare solo le variabili che necessitano effettivamente di essere monitorate
  • abbassare il tempo di campionamento del device RECDATA.

Nella sezione precedente è stato spiegato quali sono i primi passi da seguire. 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.

Supponiamo di dovere effettuare dei posizionamenti con interpolazione di tre assi secondo il percorso indicato in figura, analizziamo quale potrebbe essere il codice del programma.

;*************************************************************************************
; Unit di configurazione (sono riportate solo le dichiarazioni di variabili e 
; sono omesse le dichiarazioni del bus e del device)
;*************************************************************************************
;---------------------------------------------
;  Definizione Array GLOBAL
;---------------------------------------------
ARRGBL
awPosX    W   5                 ;quote di posizionamento asseX
awPosY    W   5                 ;quote di posizionamento asseY
awPosZ    W   5                 ;quote di posizionamento asseZ
awCodeSt  W   5                 ;codici passo in interpolazione
;-------------------------------------------------------------------------------------
; Definizione Variabili SYSTEM
;-------------------------------------------------------------------------------------
SYSTEM
 
;-------------------------------------------------------------------------------------
; Definizione Variabili GLOBAL
;-------------------------------------------------------------------------------------
GLOBAL
gbi B
 
;-------------------------------------------------------------------------------------
; Definizione Variabili INPUT
;-------------------------------------------------------------------------------------
INPUT
ifStart  F 1.INP01
 
;-------------------------------------------------------------------------------------
; Definizione Variabili OUTPUT
;-------------------------------------------------------------------------------------
OUTPUT
 
 
;*************************************************************************************
; Unit qcl
;*************************************************************************************
 
;************************
; parametrizzazione assi
;************************
;****AsseX****
Asse:measurex = 10000        
Asse:pulsex = 40000            ;come calcolare measure e pulse è spiegato nel paragrafo apposito.*
Asse:maxvelx = 100000          ;come calcolare maxvel è spiegato nel paragrafo apposito.*
Asse:mxrlvelx = 15000          ;velocità massima raggiungibile in interpolazione
Asse:maxposx = 1000            ;Quota massima
Asse:minposx = -100            ;Quota minima
Asse:maxfollerrx = 10000       ;Errore di inseguimento massimo
Asse:unitvelx = 0              ;Unità di tempo della velocità (velocità in Um/min)
Asse:decptx = 0                ;Cifre decimali nel calcolo della velocità
Asse:rampmodex = 0             ;Tipo di rampe utilizzate (in questo caso stesso tempo di accelerazione 
                               ;o decelerazione da velocità zero a velocità massima)
Asse:taccdecx = 100            ;Tempo di accelerazione e di decelerazione (durante movimenti non interpolati)
Asse:tinvx = 0                 ;Tempo di inversione asse
Asse:tollx = 5                 ;Tolleranza (impostata in Um)
Asse:toldlyx = 10              ;Tempo di ritardo attivazione stato di tolleranza
Asse:offsetx = 0               ;Tensione di offset
Asse:pgainx = 10               ;Guadagno proporzionale
Asse:feedfwx = 1000            ;Feedforward
Asse:integtx = 0               ;Tempo integrale
Asse:derivtx = 0               ;Tempo derivativo
 
;****AsseY****
Asse:measurey = 10000        
Asse:pulsey = 40000            ;come calcolare measure e pulse è spiegato nel paragrafo apposito.*
Asse:maxvely = 100000          ;come calcolare maxvel è spiegato nel paragrafo apposito.*
Asse:mxrlvely = 15000          ;velocità massima raggiungibile in interpolazione
Asse:maxposy = 1000            ;Quota massima
Asse:minposy = -100            ;Quota minima
Asse:maxfollerry = 10000       ;Errore di inseguimento massimo
Asse:unitvely = 0              ;Unità di tempo della velocità (velocità in Um/min)
Asse:decpty = 0                ;Cifre decimali nel calcolo della velocità
Asse:rampmodey = 0             ;Tipo di rampe utilizzate (in questo caso stesso tempo di accelerazione 
                               ;o decelerazione da velocità zero a velocità massima)
Asse:taccdecy = 100            ;Tempo di accelerazione e di decelerazione (durante movimenti non interpolati)
Asse:tinvy = 0                 ;Tempo di inversione asse
Asse:tolly = 5                 ;Tolleranza (impostata in Um)
Asse:toldlyy = 10               ;Tempo di ritardo attivazione stato di tolleranza
Asse:offsety = 0               ;Tensione di offset
Asse:pgainy = 10               ;Guadagno proporzionale
Asse:feedfwy = 1000            ;Feedforward
Asse:integty = 0               ;Tempo integrale
Asse:derivty = 0               ;Tempo derivativo
 
;****AsseZ****
Asse:measurez = 10000        
Asse:pulsez = 40000            ;come calcolare measure e pulse è spiegato nel paragrafo apposito.*
Asse:maxvelz = 100000          ;come calcolare maxvel è spiegato nel paragrafo apposito.*
Asse:mxrlvelz = 15000          ;velocità massima raggiungibile in interpolazione
Asse:maxposz = 1000            ;Quota massima
Asse:minposz = -100            ;Quota minima
Asse:maxfollerrz = 10000       ;Errore di inseguimento massimo
Asse:unitvelz = 0              ;Unità di tempo della velocità (velocità in Um/min)
Asse:decptz = 0                ;Cifre decimali nel calcolo della velocità
Asse:rampmodez = 0             ;Tipo di rampe utilizzate (in questo caso stesso tempo di accelerazione 
                               ;o decelerazione da velocità zero a velocità massima)
Asse:taccdecz = 100            ;Tempo di accelerazione e di decelerazione (durante movimenti non interpolati)
Asse:tinvz = 0                 ;Tempo di inversione asse
Asse:tollz = 5                 ;Tolleranza (impostata in Um)
Asse:toldlyz = 10              ;Tempo di ritardo attivazione stato di tolleranza
Asse:offsetz = 0               ;Tensione di offset
Asse:pgainz = 10               ;Guadagno proporzionale
Asse:feedfwz = 1000            ;Feedforward
Asse:integtz = 0               ;Tempo integrale
Asse:derivtz = 0               ;Tempo derivativo
 
;****Parametri device****
Asse:setveli = 10000           ;Velocità in interpolazione
Asse:maxveli = 15000           ;Velocità massima in interpolazione
Asse:tacci = 100               ;Tempo di accelerazione di interpolazione
Asse:prgmode = 0               ;impostazione delle quote come assolute
 
 
;****Inizializzazione del device****
INIT Asse                     ;Inizializza il device
WAIT Asse:st_init             ;Attendi che il device sia inizializzato
CNTUNLOCKX Asse               ;Sblocca acquisizione posizione asse X
WAIT NOT Asse:st_cntlockx     ;Attendi che l'acquisizione della posizione sia sbloccato
CNTUNLOCKY Asse               ;Sblocca acquisizione posizione asse Y
WAIT NOT Asse:st_cntlocky     ;Attendi che l'acquisizione della posizione sia sbloccato
CNTUNLOCKZ Asse               ;Sblocca acquisizione posizione asse Z
WAIT NOT Asse:st_cntlockz     ;Attendi che l'acquisizione della posizione sia sbloccato
CNTDIRX Asse                  ;Imposta il senso dell'acquisizione di posizione asse X
WAIT NOT Asse:st_cntrevx      ;Attendi che sia impostato il senso dell'acquisizione di posizione
CNTDIRY Asse                  ;Imposta il senso dell'acquisizione di posizione asse Y
WAIT NOT Asse:st_cntrevy      ;Attendi che sia impostato il senso dell'acquisizione di posizione
CNTDIRZ Asse                  ;Imposta il senso dell'acquisizione di posizione asse Z
WAIT NOT Asse:st_cntrevz      ;Attendi che sia impostato il senso dell'acquisizione di posizione
REGONX Asse                   ;Abilita la regolazione asse X
WAIT NOT Asse:st_regoffx      ;Attendi l'abilitazione alla regolazione
REGONY Asse                   ;Abilita la regolazione asse Y
WAIT NOT Asse:st_regoffx      ;Attendi l'abilitazione alla regolazione
REGONZ Asse                   ;Abilita la regolazione asse Z
WAIT NOT Asse:st_regoffx      ;Attendi l'abilitazione alla regolazione
RESUMEX Asse                  ;Togli l'asse x da eventuale stato di emergenza
WAIT NOT Asse:st_emrgx        ;Attendi che l'asse non sia in emergenza
RESUMEY Asse                  ;Togli l'asse y da eventuale stato di emergenza
WAIT NOT Asse:st_emrgx        ;Attendi che l'asse non sia in emergenza
RESUMEZ Asse                  ;Togli l'asse z da eventuale stato di emergenza
WAIT NOT Asse:st_emrgx        ;Attendi che l'asse non sia in emergenza
LOOPONX Asse                  ;Aggancia loop di reazione dell'asse x
WAIT Asse:st_looponx          ;Attendi che sia agganciato il loop di reazione dell'asse
LOOPONY Asse                  ;Aggancia loop di reazione dell'asse y
WAIT Asse:st_looponx          ;Attendi che sia agganciato il loop di reazione dell'asse
LOOPONZ Asse                  ;Aggancia loop di reazione dell'asse z
WAIT Asse:st_looponx          ;Attendi che sia agganciato il loop di reazione dell'asse
 
;***********************************************
; impostazione del programma di posizionamenti
;***********************************************
;coordinate asse X
awPosX[1] = 0
awPosX[2] = 100
awPosX[3] = 600
awPosX[4] = 500
awPosX[5] = 300
 
;coordinate asse Y
awPosY[1] = 0
awPosY[2] = 200
awPosY[3] = 200
awPosY[4] = 0
awPosY[5] = 100
 
;coordinate asse Z
awPosZ[1] = 0
awPosZ[2] = 0
awPosZ[3] = 0
awPosZ[4] = 0
awPosZ[5] = 600
 
;codici passo in intepolazione
awCodeSt[1] = 0
awCodeSt[1] = 0 
awCodeSt[1] = 0
awCodeSt[1] = 3000        ;attesa di 1 secondo dopo il 4 posizionamento
awCodeSt[1] = 10001       ;accensione dell'uscita 1 al termine dell'ultimo posizionamento
 
;*************************************
; scrittura dei passi nel programma
;*************************************
Asse:stepnum = 1          ;memorizzo una coordinata alla volta
FOR (gbi=1, gbi LE 5, 1) 
  Asse:stepin = gbi
  Asse:codex1 = awPosX[gbi]     ;coordinata asse X
  Asse:codey1 = awPosY[gbi]     ;coordinata asse Y
  Asse:codez1 = awPosZ[gbi]     ;coordinata asse Z
  Asse:codestp1 = awCodeSt[gbi] ;codice passo in interpolazione
  Asse:stepout = 0
  WRITESTEP Asse
  WAIT Asse:stepout EQ Asse:stepin
NEXT
 
;ora è completa la tabella del programma dei posizionamenti
 
Asse:stepbeg = 1      ;passo di inizio programma
Asse:stepend = 5      ;passo di fine programma
Asse:setveli = 8000   ;velocità di interpolazione
 
MAIN:
IF ifStart        ;se do il comando di start da ingresso digitale
  STARTPRG Asse  
ENDIF

Come calcolare measure e pulse è spiegato nel paragrafo apposito.

Per effettuare dei posizionamenti semplici le operazioni da svolgere sono le stesse che sono state analizzate nella descrizione del device EANPOS.

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