software:devices:anpos

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisione Revisione precedente
Prossima revisione
Revisione precedente
software:devices:anpos [2017/01/18 16:53] – [3.2. Calibrazione uscita analogica] qem103software:devices:anpos [2020/07/13 15:01] (versione attuale) qem103
Linea 1: Linea 1:
 +====== DEVICE ANPOS ======
 +
 +
 +====== - Introduzione ======
 +
 +  * Il device interno ANPOS è un tool residente nella CPU che permette di gestire il movimento di un asse meccanico con un comando analogico a rampe trapezoidali.
 +  * La funzione principale del device è quella di generare una traiettoria o “profilo di velocità” che, opportunamente convertito in un segnale di tensione proporzionale, comanda un azionamento e quindi l’asse ad esso collegato, per portarlo alla posizione desiderata.
 +  * Il device include anche un processo di feed-back sulla misura rilevata dal trasduttore di posizione. Questa misura opportunamente confrontata viene utilizzata per generare la retroazione.
 +  * La tensione di comando per l’azionamento viene generata da un dispositivo hardware DAC (Digital to Analogic Converter) presente sul BUS QMOVE.
 +  * Per la sincronizzazione della posizione rilevata dal device con quella reale dell’asse, esiste una speciale procedura di movimentazione detta “ricerca di preset”.
 +  * Il feed-back è di tipo PID+FF (proporzionale, integrale, derivativa e feed-forward).\\
 +I cablaggi e collegamenti dell’apparecchiatura descritta nel presente manuale, devono rispettare la Normativa Europea EN60204-1.
 +
 +{{ :software:devices:anpos:anpos_01.png?nolink700 |}}
 +
 +
 +===== - Installazione =====
 +
 +==== - Dichiarazione device nella unit di configurazione ====
 +
 +Nella unit di configurazione, la sezione BUS deve essere dichiarata in modo tale che siano
 +presenti le risorse hardware necessarie all'implementazione del device ANPOS. Devono essere
 +presenti almeno un contatore bidirezionale ed una uscita analogica con risoluzione 16 bit. Il
 +device può utilizzare anche un ingresso e una linea di interrupt per le funzioni di ricerca di
 +preset.\\
 +Nella sezione INTDEVICE della unit di configurazione deve essere aggiunta la seguente definizione:
 +<code QCL>
 +;---------------------------------
 +; Dichiarazione devices
 +;---------------------------------
 +INTDEVICE
 +..
 +<nome_device>  ANPOS  TCamp  ICont  IntL  IAZero  IOutA
 +</code>
 +
 +^:info:^È necessario che tutte le voci di definizione siano presenti sulla stessa linea. Nel caso in cui non si desideri associare una risorsa, ad esempio IAZero, si deve comunque inserire nel relativo campo la stringa X.X oppure X.^
 +
 +dove:
 +^<nome device>^Nome assegnato al device^
 +|ANPOS|Parola chiave che identifica il devices posizionatore analogico.|
 +|TCamp|Tempo di campionamento device 1÷255 ms)|
 +|ICont|Ingresso contatore bidirezionale|
 +|IntL|Numero della linea di interrupt dedicata per l'impulso di zero dell'encoder durante la fase di ricerca di preset.\\ Valori ammessi: 1÷8 (per evitare che il device utilizzi questa risorsa, inserire il carattere X)|
 +|IAZero|Ingresso di __abilitazione__ per l'acquisizione dell'impulso di zero del trasduttore durante la fase di ricerca di preset (per evitare che il device utilizzi questa risorsa inserire i caratteri X.X)|
 +|IOutA|Indirizzo hardware del componente DAC dell'uscita analogica|
 +
 +<code QCL>
 +;---------------------------------
 +; Dichiarazione devices
 +;---------------------------------
 +INTDEVICE
 +Asse_X    ANPOS 2   2.CNT02  3  3.INP01  3.AN01
 +</code>
 +
 +
 +===== - Funzionamento =====
 +
 +==== - Rilevazione posizione ====
 +
 +Il device ANPOS acquisisce la posizione dell’asse tramite i segnali di un trasduttore bidirezionale;
 +questi segnali vengono utilizzati da un contatore interno. Il valore di questo contatore non
 +esprime, in genere, direttamente la posizione dell’asse nell’unità di misura necessaria per l’applicazione.
 +Il parametro //cntratio// viene utilizzato allora per esprimere il rapporto tra gli impulsi
 +trasduttore ed il corrispondente in unità di misura dell’applicazione. I valori ammessi per questo
 +parametro sono 0,00374 ÷ 4 con cinque cifre di precisione. Il rapporto deve essere introdotto nel
 +parametro come valore intero e quindi moltiplicato per 100000.\\
 +//cntratio// = (valore in um) x 10 <sup>cifre decimali</sup> / (impulsi trasduttore corrispondenti) x 100000
 +
 +=== - Punto decimale ===
 +Se per l’unità di misura scelta é prevista anche la presenza di un punto decimale, le posizioni
 +devono essere rappresentate sempre come valore intero e rappresentare lo spazio nell’unità di
 +misura senza punto decimale. La risoluzione deve quindi essere calcolata con la stessa formula
 +e al numeratore la grandezza senza punto decimale. Il punto decimale verrà poi inserito nei
 +visualizzatori in fase di rappresentazione del valore (es. come proprietà nel terminale operatore).
 +
 +=== - Velocità ===
 +Le velocità sono sempre espresse in unità di misura intere nell’unità di tempo scelta. Da questo
 +si ricava che il device deve comunque conoscere la posizione del punto decimale dell’unità di
 +misura e questo viene fatto con il parametro //decpt//. Questo parametro può assumere valori 0÷3.
 +
 +=== - Esempio ===
 +
 +^:info:^Per rendere attivo il device inviare il comando INIT.^
 +
 +  * Si vuole rappresentare le posizioni in centimetri con un punto decimale.
 +  * Nello spazio di 18,2 centimetri il trasduttore genera 500 impulsi.
 +
 +Come detto per il calcolo della risoluzione si deve considerare lo spazio eseguito rappresentato
 +nell’unità di misura millimetri. Per questo la risoluzione risulta:\\
 +**cntratio = (18.2 x 10<sup>1</sup> / 500) x 100000 = 36400**
 +
 +le impostazioni devono allora essere:\\
 +//Asse:cntratio// = 36400\\
 +//Asse:decpt// = 1
 +
 +Per eseguire un posizionamento a 146 centimetri bisogna digitare\\
 +//Asse:setpos// = 1460
 +
 +Per impostare una velocità di 10 centimetri al secondo bisogna digitare:\\
 +//Asse:unitvel// = 1\\
 +//Asse:setvel// = 10
 +
 +==== - Calibrazione uscita analogica ====
 +
 +^:info:^Prima di iniziare dei posizionamenti veri e propri è necessario verificare che collegamenti elettrici ed organi meccanici non siano causa di malfunzionamenti.^
 +
 +Per la gestione dell'asse, il device ANPOS utilizza un'uscita analogica con range ±10 V e risoluzione
 +16 bit con segno; con la funzione di calibrazione questa uscita analogica può essere pilotata
 +con un valore costante con lo scopo di verificare collegamenti e funzionalità.
 +
 +=== - Movimentazione preliminare ===
 +  * Togliere la condizione di emergenzacon il comando RESUME.
 +  * Lo stato //st_emrg// = 0
 +  * Abilitare lo stato di taratura asse con il comando //CALON//; lo stato //st_cal// deve quindi assumere il valore 1.
 +  * É ora possibile impostare la tensione analogica con il parametro vout; il valore é espresso in decimi di volt (-100 ÷ 100 = -10 ÷ 10 V). Si consiglia di introdurre valori bassi (5, 10, 15 ... pari a 0.5, 1, 1,5 V).
 +  * Quando l’asse é in movimento il parametro //frq// indica la frequenza in Hz delle fasi del trasduttore.
 +  * Il parametro posit che visualizza la posizione, varia indicando lo spazio compiuto dall’asse. Se impostando una tensione positiva il conteggio si decrementa, é necessario invertire le fasi del trasduttore o invertire la direzione nell’azionamento.
 +  * È possibile invertire la direzione del conteggio utilizzando il comando //CNTREV//.
 +  * Se con tensione di uscita uguale a zero l’asse non é fermo, agire sul parametro //offset// per correggere la tensione finché il movimento non si arresta. Il valore introdotto (ogni bit corrisponde a circa 0.3 mV), viene sommato algebricamente al valore dell’uscita analogica; questa operazione permette di compensare l’eventuale deriva propria del componente elettronico, sia in uscita da QMOVE che in ingresso all’azionamento. Il valore é espresso in bit con segno.\\ Per un ottimale risultato della taratura l’operazione deve essere eseguita con il sistema a regime di temperatura.
 +  * Per disabilitare lo stato di taratura inviare il comando //CALOFF//.
 +  * Lo stato //st_cal// = 0
 +
 +=== - Parametrizzazione uscita ===
 +Il device ANPOS 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. La proporzionalità è ottenuta
 +con il parametro //maxvel//, rappresentante la velocità dell’asse relativa alla massima tensione
 +analogica (10 V). Ovviamente l’asse deve avere un comportamento simmetrico rispetto al valore
 +zero di tensione analogica, quindi la velocità deve essere la stessa sia alla tensione massima
 +positiva che alla massima negativa.\\
 +Prima di determinare il valore della velocità massima, bisogna stabilire l’unità di tempo da
 +utilizzare per la rappresentazione delle velocità nel device; il parametro //unitvel// definisce l’unità
 +di tempo della velocità (Um/min oppure Um/s).
 +
 +=== - Metodo teorico per la determinazione della velocità massima. ===
 +Il metodo teorico è un calcolo eseguito sulla base della velocità massima del motore. Una volta
 +stabiliti i giri massimi al minuto dichiarati del motore, si ricava la velocità massima.\\
 +Introdurre nel parametro //maxvel// il valore di velocità massima calcolato.
 +
 +=== - Metodo pratico per la determinazione della velocità massima. ===
 +Il metodo pratico si basa sulla lettura della velocità rilevata dal device nella variabile //vel//, fornendo
 +all’azionamento una tensione nota. Per fornire la tensione all’azionamento il device deve
 +essere posto nella condizione di calibratura come descritto nel paragrafo precedente. Se il sistema
 +lo permette, fornire all’azionamento una tensione di 10 V e leggere il valore di velocità nel
 +parametro //vel//. Se, al contrario, viene fornita una porzione della tensione in uscita (1, 2, ... 5 V),
 +calcolare la velocità massima con la proporzione: //vout// : 10 [V] = //vel : maxvel//
 +
 +Introdurre il valore di velocità massima trovato nel parametro //maxvel//.
 +
 +==== - Movimentazione ====
 +
 +^:info:^Prima di movimentare l'asse, verificare il corretto funzionamento dei dispositivi di 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.\\
 +  * Spostare l'asse in una posizione tale per cui possa compiere un determinato spazio senza toccare i finecorsa di quota massima.
 +  * Impostare la posizione attuale dell'asse al valore zero, settando il parametro //posit// = 0.
 +  * Impostare i parametri che definiscono la posizione dei finecorsa software: //minpos// = 0 e //maxpos// al valore della corsa massima dell'asse.
 +  * Impostare il parametro che definisce il tempo impiegato dall'asse per raggiungere la velocitá massima //taccdec// = 100. Questo parametro é espresso in centesimi di secondo (100 = 1 sec.)
 +  * Impostare la velocitá di posizionamento con il parametro //setvel//.
 +  * Impostare la quota di destinazione con il parametro //setpos//.
 +  * Impostare il parametro //feedforward// = 1000 (100%)
 +  * Se il device é in stato di emergenza (st_emrg = 1) dare il comando //RESUME//.
 +  * Avviare il posizionamento con il comando //START//. In per arrestare il movimento dare il comando //EMRG//.
 +
 +Questa prima movimentazione é stata eseguita senza la retroazione di spazio. Il posizionamento
 +potrebbe essere stato eseguito con un certo errore introdotto dalla non linearità dei componenti
 +o da una imperfezione nella taratura della velocitá massima. Successivamente abilitando la
 +retroazione di spazio questo errore scompare.
 +
 +==== - Taratura PID+FF ====
 +
 +Il posizionamento eseguito nel paragrafo precedente é stato realizzato senza considerare eventuali
 +errori di posizione.\\
 +Per controllare la corretta posizione dell’asse in maniera continua ed automatica, è necessario
 +avere un feed-back sulla posizione; per questo motivo viene introdotto l’algoritmo di regolazione
 +PID+FF comprendente azioni di tipo proporzionale, integrale, derivativo e feed-forward; il
 +valore dell’uscita analogica è dato dalla sommatoria delle azioni feed forward, proporzionale,
 +integrativa e derivativa.\\
 +Senza entrare nel merito di una descrizione tecnica della teoria della regolazione, in questo
 +paragrafo vengono descritte una serie di operazioni per regolare i parametri che influenzano
 +questo controllo.\\
 +Per realizzare una regolazione soddisfacente è sufficiente utilizzare solamente le azioni
 +feedforward e proporzionale; le azioni integrale e derivativa vengono utilizzate solamente per
 +regolazioni in condizioni particolari.
 +
 +{{:software:devices:anpos:anpos_02.png?nolink600|}}
 +
 +=== - Azione feed forward ===
 +Il feed-forward contribuisce a rendere il sistema più pronto nei posizionamenti, fornendo all’uscita
 +analogica un valore di tensione proporzionale alla velocità teorica di posizionamento. In
 +pratica è la componente grazie alla quale sono stati eseguiti i posizionamenti del capitolo precedente.\\
 +Può essere regolato il contributo di questa azione mediante il parametro //feedfw//; questo parametro
 +è espresso come porzione millesimale della velocità teorica; quindi, per introdurre ad
 +esempio 98.5 % è necessario impostare 985 (millesimi).
 +
 +{{:software:devices:anpos:anpos_03.png?nolink600|}}
 +
 +=== - Azione proporzionale ===
 +Questa azione fornisce un’uscita proporzionale all’errore di posizione istantaneo dell’asse. L’entità
 +dell’azione proporzionale è definita dal parametro //pgain// che definisce la sensibilità del
 +sistema.\\
 +Il parametro //pgain// viene introdotto in millesimi; il valore unitario del guadagno (1000) fornisce
 +un’uscita analogica al massimo valore (10 V) relativamente al massimo errore di velocità. Per
 +massimo errore di velocità si intende lo spazio compiuto dall’asse - alla massima velocità - per la
 +durata del tempo di campionamento del device.
 +
 +{{:software:devices:anpos:anpos_04.png?nolink600|}}
 +
 +=== - Azione integrale ===
 +Integra l’errore di posizione del sistema nel tempo impostato nel parametro //integt// aggiornando
 +l’uscita finché l’errore non viene annullato.\\
 +Più basso è il tempo di integrazione dell’errore, più veloce è il sistema nel recupero dell’errore,
 +ma il sistema può diventare instabile tendendo ad oscillare.
 +
 +{{:software:devices:anpos:anpos_05.png?nolink600|}}
 +
 +=== - Azione derivativa ===
 +Anticipa la variazione del moto del sistema tendendo ad eliminare gli overshoot del posizionamento.
 +L’entità della variazione viene calcolata nel tempo impostato nel parametro //derivt//.\\
 +Più alto è il tempo di derivazione dell’errore e più veloce è il sistema nel recupero dell’errore
 +nei transitori, ma se viene inserito un valore troppo alto il sistema diventa instabile tendendo
 +quindi ad oscillare.
 +
 +==== - Ricerca preset ====
 +
 +La ricerca di preset é una procedura atta a sincronizzare il conteggio (parametro //posit//) con la
 +posizione reale dell’asse. Può essere eseguita in 3 diversi modi selezionati in base al parametro
 +//prsmode//.
 +
 +=== - Considerazioni preliminari ===
 +  * Per poter eseguire una ricerca preset é necessario disporre di un ingresso (acquisito tramite il BUS QMOVE) che definiamo “abilitazione zero trasduttore”. Nella sua corsa, l’asse deve attivare questo ingresso in un punto prestabilito.
 +  * La procedura di ricerca di preset viene avviata con il comando //PRESET//; nella fase iniziale il conteggio acquisito da QMOVE può avere un qualsiasi valore e l’asse può trovarsi in qualsiasi punto.
 +  * L’asse si deve dirigere verso la camma per eseguire il caricamento del preset. Non sapendo da che parte dirigere l’asse per incontrare l’ingresso di abilitazione, la ricerca di preset permette di scegliere con il parametro prsdir due soluzioni:\\ //prsdir// =0 l’asse attuerá sempre un movimento avanti\\ //prsdir// =1 l’asse attuerá sempre un movimento indietro
 +  * Se durante l’esecuzione della ricerca di preset viene ridato il comando //PRESET//, la direzione di movimento dell’asse viene invertita.
 +  * E‘ da sottolineare che la quota di preset contenuta nel parametro //prspos// deve essere sempre compresa tra la quota minima e la quota massima e che, dopo il caricamento della quota di preset, l’asse si posiziona automaticamente alla quota di preset.
 +  * Durante la ricerca preset i limiti software //maxpos// e //minpos// non sono abilitati.
 +  * Quando si imposta la velocitá di ricerca impulso di zero - //sprsvel// - bisogna considerare che nel Modo 0 l’ingresso ha un filtro hardware che ne ritarda l’acquisizione e quindi influenza la precisione del caricamento. Nel modo 1, l’acquisizione viene fatta su ingresso in interrupt quindi la velocitá non é determinante. Bisogna assicurare comunque che il tempo di durata dell’impulso di zero sia sufficiente per essere acquisito dalla scheda. Per conoscere i tempi di acquisizione dell’ingresso e il tempo minimo di segnale impulso di zero fare riferimento alla documentazione tecnica delle schede utilizzate.
 +
 +Una volta fatta partire la ricerca di preset con il comando //PRESET//, l’asse si dirige verso la posizione dove si attiva l’ingresso di abilitazione impulso di zero trasduttore con velocitá //definita da prsvel//. Lo stato //st_prson// si attiva per segnalare il preset in corso. Quando, nella sua corsa, l’asse attiva questo ingresso, inverte la direzione e riparte con velocitá //sprsvel//.\\ A questo punto il comportamento dipende dal modo di caricamento selezionato (Modo 0 o Modo1).
 +
 +=== - Ricerca di preset - Modo 0 ===
 +
 +^:info:^Questa procedura prevede la movimentazione dell'asse e l'utilizzo dell'ingresso di abilitazione impulso di zero trasduttore.^
 +
 +Alla disattivazione dell'ingresso abilitazione impulso di zero trasduttore, la quota di preset viene caricata sul conteggio (parametro //posit//=//prspos//).\\
 +Successivamente, si disattiva lo stato //st_prson// e si attiva lo stato //st_prsok// per segnalare la conclusione della ricerca. Questo stato rimane attivo fino all'avviamento di una nuova procedura di preset; all'accensione del sistema questo stato è sempre a zero. Vedi figura 1.
 +
 +|Figura 1: caricamento preset utilizzando la sola camma di abilitazione.|
 +|{{ :software:devices:anpos:anpos_07.png?nolink500 |}}|
 +
 +=== - Ricerca di preset - Modo 1 ===
 +
 +^:info:^Questa procedura prevede la movimentazione dell'asse e l'utilizzo degli ingressi impulso di zero ed abilitazione impulso di zero trasduttore.^
 +
 +Alla disattivazione dell'ingresso abilitazione impulso di zero trasduttore, viene abilitata la lettura
 +del primo impulso di zero fornito dal trasduttore e, su questo segnale, viene caricata la quota
 +di preset nel conteggio (parametro //posit//=//prspos//).\\
 +Per permettere il caricamento della quota di preset con "Modo 1", la scheda sulla quale è collegato
 +l'impulso di zero traduttore deve trasmettere questo segnale su una delle 8 linee di interrupt
 +hardware. Inoltre il device deve essere stato definito per utilizzare la stessa linea di interrupt
 +hardware (veri definizione nel file .CNF).\\
 +Successivamente, l'asse poi si posiziona alla quota di preset, si disattiva lo stato //st_prson// e si
 +attiva lo stato //st_prsok// per segnalare la conclusione della ricerca; questo stato rimane attivo
 +fino all'avviamento di una nuova procedura di preset. All'accensione del sistema //st_prsok// è
 +sempre a zero. Vedi figura 2.
 +
 +|Figura 2: caricamento preset utilizzando camma di abilitazione ed impulso di zero trasduttore.|
 +|{{ :software:devices:anpos:anpos_08.png?nolink500 |}}|
 +
 +=== - Ricerca di preset "Modo 2" ===
 +
 +^:info:^Questa procedura NON prevede la movimentazione dell'asse e l'utilizzo dell'ingresso di abilitazione impulso di zero trasduttore.^
 +
 +Con questa procedura, la ricerca di preset non esegue nessun posizionamento. Il comando di
 +caricamento della quota di preset viene fornito dall'attivazione dell'ingresso di abilitazione zero
 +encoder e lo stato //st_prsok// viene impostato a uno.\\
 +Se l'ingresso rimane attivo il caricamento è continuo mentre, se all'accensione l'ingresso è già
 +attivo, il primo caricamento viene eseguito solo dopo una sua disattivazione e successiva attivazione.
 +
 +
 +===== - Funzioni speciali =====
 +
 +==== - Gestione multiasse ====
 +
 +In alcune applicazioni viene richiesto di posizionare un numero elevato di assi movimentando
 +un singolo asse alla volta. La scelta progettuale ricade sull’installazione di un solo azionamento
 +che a seconda dell’asse da posizionare si collega elettricamente al motore interessato al
 +posizionamento; il trasduttore é sempre vincolato al relativo asse.\\
 +Il device ANPOS permette di controllare l’accesso al dispositivo DAC tramite i comandi //REGON// e
 +//REGOFF//. In questo modo tramite l’applicativo in QCL definisce una serie di device tanti quanti
 +sono gli assi da posizionare; nella definizione, tutti i device utilizzano la stessa risorsa DAC
 +(//IOutA//).\\
 +Normalmente tutti i device devono essere nello stato //st_regoff// = 1 in modo da non avere accesso
 +al dispositivo DAC. Prima di iniziare il posizionamento, con il comando //REGON//, il device
 +interessato viene portato allo stato di //st_regoff// = 0. Viene eseguito il posizionamento e, al suo
 +completamento, il device viene riportato nello stato di //st_regoff// = 1 con il comando //REGOFF//.
 +Per nessun motivo due device si devono trovare contemporaneamente nello stato di //st_regoff// =0.\\
 +Quando il device viene posto nella condizione di regoff, l’uscita analogica rimane fissa all’ultimo
 +valore di tensione definito prima del comando //REGOFF//.
 +
 +==== - Cambio quota e conteggio in movimento ====
 +
 +^:info:^Il cambio della quota viene accettato solamente se la nuova posizione é raggiungibile con la direzione in uso e se l'asse non é già in fase di decelerazione per raggiungere la quota precedentemente impostata.^
 +
 +In alcune applicazioni viene richiesto di definire la quota di destinazione durante il posizionamento,
 +in base ad eventi esterni al device. Questa caratteristica si traduce nella possibilità di
 +scrittura nel parametro setpos anche con posizionamenti in corso.
 +
 +{{:software:devices:anpos:anpos_09.png?nolink500}}
 +
 +Durante il posizionamento é possibile anche modificare il valore del conteggio //posit//. Questa
 +funzione viene utilizzata solitamente quando un device deve, in particolari condizioni, continuare
 +un profilo di velocitá per un tempo molto lungo, superiore al tempo che l'asse impiega per
 +raggiungere la quota limite (//maxpos// o //minpos//).
 +
 +==== - Cambio velocitá e tempo di rampa in movimento ====
 +
 +Durante il posizionamento é possibile variare la velocitá dell’asse senza influenzare la posizione
 +da raggiungere. Questa operazione può determinare un aumento o una diminuzione della velocitá,
 +anche più punti dello stesso posizionamento. Questa operazione viene eseguita con nuova scrittura
 +nel parametro //setvel//.
 +
 +{{:software:devices:anpos:anpos_10.png?nolin500}}
 +
 +Durante il posizionamento possono essere variati anche i tempi di accelerazione/decelerazione. Per esempio il device può avviare un posizionamento con una rampa molto breve e, una volta raggiunta la velocitá impostata, viene variato il parametro //tacc// ed eseguito un cambio di velocitá con una rampa molto lunga.\\
 +Per applicazioni particolari il tempo di rampa può essere variato anche durante una variazione di velocitá, in questo caso il nuovo tempo viene messo in esecuzione immediatamente.
 +
 +{{:software:devices:anpos:anpos_11.png?nolink500}}
 +
 +==== - Delta conteggio ====
 +
 +^:info:^Il comando è inviabile solamente se l'asse è fermo, condizione di st_still = 1.^
 +
 +Il device visualizza sempre la posizione assoluta dell'asse; per eseguire posizionamenti incrementali
 +è necessario disporre di uno strumento per sottrarre o sommare un determinato valore
 +al conteggio (posit) senza introdurre errori. Il cambio di conteggio può essere eseguito anche
 +con una scrittura diretta nel nuovo valore nel parametro posit.\\
 +Volendo sottrarre 100 unità di misura al conteggio è possibile:\\
 +//Asse:posit = Asse:posit - 100//
 +
 +^:info:^La modifica del valore di risoluzione (//cntratio//) o la scrittura della variabile //posit//, provoca l'azzeramento dei resti della conversione.^
 +
 +Questa operazione introduce un errore perché impone la posizione "//posit// = -100", quando l'asse poteva avere una posizione intermedia tra una unità di misura e la successiva (es. 100.3). Questa frazione (0.3) viene persa ed il ripetersi di queste operazioni provocano l'accumularsi di un errore non trascurabile.\\
 +Il comando //DELCNT// somma al conteggio una quantità pari al parametro delta senza perdere la parte frazionaria della posizione:\\
 +//Asse:delta = -100//\\
 +//DELCNT Asse//\\
 +Il comando di //DELCNT// può essere inviato solamente con asse fermo (//st_still=1//)
 +
 +=== - Esempio ===
 +La lettura della posizione dell’asse risulta essere di 2 unità e si trova nel punto A. Si vuole sommare al conteggio //posit// tre unità di misura.\\
 +Con le istruzioni:\\
 +//Asse:posit = Asse:posit + 2//\\
 +l’asse assume la nuova posizione B.\\
 +Con le istruzioni :\\
 +//Asse:delta = 2//\\
 +//DELCNT Asse//\\
 +viene raggiunta la posizione C.
 +
 +{{:software:devices:anpos:anpos_12.png?nolink400}}
 +
 +Si noti che con le prime istruzioni l’asse ha compiuto un delta inferiore a 3 unità e quindi è stato introdotto un errore.\\
 +Se si devono inviare comandi //DELCNT// in successione, è conveniente calcolare la grandezza da sommare ed inviare una sola volta il comando; in caso contrario prestare attenzione a non inviare comandi successivi senza interporre una istruzione di lettura su parametro device.
 +
 +=== - Esempio ===
 +//Asse:delta = 3//\\
 +//DELCNT Asse//\\
 +//WAIT Asse:st_init//\\
 +//Asse:delta = 40//\\
 +//DELCNT Asse//
 +
 +
 +===== - Tabella comandi e parametri =====
 +
 +==== - Simbologia adottata ====
 +
 +Il nome del parametro, stato o comando viene riportato alla sinistra della tabella.
 +
 +**R**\\
 +Indica se il relativo parametro o stato è ritentivo (al momento dell’inizializzazione del device mantiene lo stato precedentemente definito), oppure lo stato che assume al momento dell’inizializzazione del device.\\
 +Se il device non necessita di inizializzazione il campo “R” indica il valore che il parametro o stato assume all’accensione della scheda.\\
 +R = Ritentivo\\
 +0 = Al momento dell’inizializzazione del device il valore viene forzato a zero.\\
 +1 = Al momento dell’inizializzazione del device il valore viene forzato a uno.\\
 +- = Al momento dell’inizializzazione del device viene presentato il valore significativo.
 +
 +**D**\\
 +Indica la dimensione del parametro.\\
 +F = Flag\\
 +B = Byte\\
 +W = Word\\
 +L = Long\\
 +S = Single Float
 +
 +=== - Condizioni ===
 +Vengono descritte tutte le condizioni necessarie affinché il parametro sia considerato corretto o perché il comando venga accettato.\\
 +In alcuni casi vengono specificati dei valori limite per l’accettazione del parametro: se vengono
 +introdotti dei valori esterni ai limiti impostati, il dato viene comunque accettato; pertanto devono
 +essere previsti opportuni controlli dell’applicativo tali da garantire il corretto funzionamento.\\
 +Per l’esecuzione di un comando, tutte le relative condizioni devono necessariamente essere
 +soddisfatte; in caso contrario il comando non viene eseguito.
 +
 +**A**\\
 +Indica la modalità di accesso.\\
 +R = Read (lettura).\\
 +W = Write (scrittura).\\
 +RW = Read / Write.
 +
 +==== - Comandi ====
 +
 +I comandi sono stati ordinati con priorità decrescente. Ad esempio, in caso di contemporaneità
 +dei comandi //INIT// ed //EMRG//, viene acquisito per primo il comando //INIT//.
 +
 +^Nome^Condizioni^Descrizione^
 +|INIT|st_init = 1|**Initialization**\\ Comando di inizializzazione device.\\ Se il device non é inizializzato non vengono eseguiti i calcoli relativi all'asse e quindi rimane inattivo.\\ All'accensione è possibile scaricare tutti i parametri in DPR; successivamente, con comando INIT l'asse verrà inizialiazzato, eseguendo i calcoli una sola volta.\\ Attiva lo stato //st_init//.|
 +|EMRG|st_init = 1|**Emergency**\\ Pone in emergenza l'asse interrompendo, senza rampa di decelerazione, l'eventuale posizionamento in corso. Viene inoltre disabilitata la reazione di spazio dell'asse.|
 +|RESUME|st_init = 1\\ st_emrg = 1|**Resume**\\ Ripristino della condizione di emergenza dell'asse; viene riabilitata la reazione di spazio.\\ All'acquisizione dello start, l'asse riprende il posizionamento.|
 +|START|st_init = 1\\ st_regoff = 0\\ st_emrg = 0\\ st_cal = 0\\ st_still = 1|**Start**\\ Comanda il posizionamento alla quota //setpos// e velocitá //setvel//.|
 +|STOP|st_init = 1\\ st_regoff = 0\\ st_emrg = 0\\ st_cal = 0\\ st_still = 0|**Stop**\\ Interrompe l'eventuale posizionamento in corso dell'asse.\\ La fermata dell'asse avviene seguendo la rampa di decelerazione in uso. L'asse rimane in reazione di spazio.|
 +|LOOPON|st_init = 1|**Loop ON**\\ Abilita la reazione di spazio asse.\\ L'uscita analogica contrasta ogni azione esterna che tenti di spostare l'asse dalla posizione raggiunta (deriva, operatore, ...). Queta operazione azzera l'eventuale errore di inseguimento //follerr//.|
 +|LOOPOFF|st_init = 1|**Loop OFF**\\ Disabilita la reazione di spazio asse.\\ L'asse può essere spostato dalla sua posizione senza che l'uscita analogica contrasti il movimento.|
 +|CNTLOCK|st_init = 1|**Counter lock**\\ Blocca l'acquisizione del conteggio asse anche se il trasduttore continua ad inviare i segnali. In questa fase l'eventuale spostamento dell'asse non viene rilevato. Disabilita il caricamento della quota di preset sul conteggio.\\ Attiva lo stato //st_cntlock//|
 +|CNTUNLOCK|st_init = 1|**Counter unlock**\\ Sblocca il conteggio dell'asse.\\ Viene ripresa la lettura dei segnali inviati dal trasduttore e l'aggiornamento del conteggio.\\ Disattiva lo stato //st_cntloc//k.|
 +|CNTREV|st_init = 1|**Counter reverse**\\ Consente di invertire le fasi del trasduttore all'interno della scheda.\\ Viene quindi invertito il senso del conteggio(incremento/decremento).\\ Attiva lo stato //st_cntrev//.|
 +|CNTDIR|st_init = 1|**Counter direct**\\ Il conteggio dell'asse non viene invertito.\\ Disattiva lo stato //st_cntrev//.|
 +|PRESET|st_init = 1\\ st_regoff = 0\\ st_emrg = 0\\ st_cal = 0\\ st_still = 1|**Preset**\\ Start ricerca preset asse.\\ Viene dato inizio alla procedura di ricerca di preset con le modalità impostate con i parametri //prsmode// e //prsdir//. Se la ricerca di preset è già in esecuzione, il comando esegue l'inversione del senso di ricerca.\\ Attiva lo stato //st_prson// e disattiva lo stato //st_prsok//.|
 +|CALON|st_init = 1|**Calibration ON**\\ L'uscita analogica viene impiegata come generatore di tensione; in questo caso non è possibile usarla per posizionare l'asse. Il valore in uscita è settabile a piacere tramite la variabile //vout//.|
 +|CALOFF|st_init = 1\\ st_cal = 1|**Calibration OFF**\\ L'uscita analogica non viene gestita come generatore di tensione, pertanto può essere nuovamente usata per la gestione dei posizionamenti.|
 +|MANFW|st_init = 1\\ st_regoff = 0\\ st_prson = 0\\ st_still = 1|**Manual forward**\\ Comanda il posizionamento manuale in avanti (verso maxpos) alla velocitá impostata.|
 +|MANBW|st_init = 1\\ st_regoff = 0\\ st_prson = 0\\ st_still = 1|**Manual backward**\\ Comanda il posizionamento manuale in indietro (verso minpos) alla velocitá impostata.|
 +|REGOFF|st_init = 1\\ st_still = 1|**Regulation OFF**\\ Disabilita la regolazione e l'aggiornamento del DAC, nonché tutti i comandi di movimento.|
 +|REGON|st_init = 1\\ st_regoff = 1|**Regulation ON**\\ Riabilita la regolazione e l'aggiornamento del DAC, nonché tutti i comandi di movimento.|
 +|DELCNT|st_still = 1\\ st_init = 1|**Delta counter**\\ Questo comando viene accettato solamente se l'asse è fermo; il conteggio (posizione dell'asse) viene modificato sommandogli algebricamente il valore specificato nella variabile delta.|
 +
 +==== - Parametri ====
 +
 +^Nome^D^R^A^Condizioni^Descrizione^
 +|cntratio|L|R|R-W|st_still = 1|**Counter ratio**\\ Definisce per quanto vanno moltiplicati gli impulsi del trasduttore in modo che l'acquisizione degli spostamenti venga espressa nell'unità di misura desiderata. Impostando 100000 la variazione del conteggio è di 1 bit per impulso trasduttore.\\ Range valido: 347 ÷ 400000|
 +|maxpos|L|R|R-W|st_still = 1|**Maximum position**\\ Definisce la massima quota raggiungibile dall'asse; il valore impostato è da considerarsi anche come limite massimo per l'introduzione delle quote di lavoro. Valore espresso in unità di misura (Um).\\ Range valido: -999999 ÷ 999999|
 +|minpos|L|R|R-W|st_still = 1|**Minimum position**\\ Definisce la minima quota raggiungibile dall'asse; il valore impostato è da considerarsi anche come limite minimo per l'introduzione delle quote di lavoro. Valore espresso in unità di misura (Um).\\ Range valido: -999999 ÷ 999999|
 +|prspos|L|R|R-W|st_still = 1|**Preset position**\\ Definisce il valore che viene caricato sul conteggio con la procedura di ricerca di preset.\\ Range valido: //minpos//÷//maxpos//|
 +|maxvel|L|R|R-W|st_still = 1|**Maximum velocity**\\ Definisce la massima velocità dell'asse (relativa al riferimento analogico di +/-10V). Il valore introdotto è nell'unità di tempo della velocità impostata //Velocity unit//. Valore espresso in Um/s o Um/min.\\ Range valido: 0 ÷ 999999|
 +|prsvel|L|R|R-W|st_still = 1|**Preset velocity**\\ Definisce la velocità dell'asse durante la procedura di ricerca di preset.\\ Il valore introdotto è nell'unità di tempo della velocità impostata (//Velocity unit//).\\ Range valido: 0 ÷ maxvel|
 +|sprsvel|L|R|R-W|st_still = 1|**Preset search velocity**\\ Nella procedura di ricerca di preset, definisce la velocità dell'asse nella fase di acquisizione dell'impulso di zero. Il valore introdotto è nell'unità di tempo della velocità impostata (//Velocity unit//).\\ Range valido: 0 ÷ //prsvel//|
 +|toll|L|R|R-W|st_still = 1|**Tolerance**\\ Definisce una fascia di conteggio intorno alle quote di posizionamento.\\ Se il posizionamento si conclude entro tale fascia, è da considerarsi corretto. Valore espresso in unità di misura (Um).\\ Range valido: -999999 ÷ 999999|
 +|maxfollerr|L|R|R-W|Nessuna|**Maximum following error**\\ Definisce il massimo scostamento accettabile tra la posizione teorica e la posizione reale dell'asse. Valore espresso in bit trasduttore.\\ Range valido: 0 ÷ 2147483648|
 +|rampmode|B|R|R-W|se st_still = 1\\ scrittura sempre\\ abilita, se st_still =\\ 0 il nuovo valore\\ viene memorizzato ma\\ processato\\ solamente se i\\ nuovi tempi di\\ acc.e dec.\\ permettono di\\ raggiungere la\\ quota impostata.|**Acceleration/deceleration time mode**\\ Utilizzato per la scelta tra rampe di accelerazione e decelerazione uguali o differenziate.\\ Valori ammessi:\\ 0 = rampe uguali\\ 1 = rampe differenziate|
 +|taccdec|W|R|R-W|se st_still = 1 scrittura\\ sempre abilita, se st_still\\ = 0 il nuovo valore viene\\ memorizzato ma\\ processato solamente se i\\ nuovi tempi di acc. e\\ dec. permettono di\\ raggiungere la quota\\ impostata.|**Acceleration/deceleration time**\\ É il tempo necessario per passare da velocitá 0 a velocitá massima e viceversa; il parametro è utilizzato se //rampmode// = 0. Valore espresso in centesimi di secondo.\\ Range valido: da 0 a 999|
 +|tacc|W|R|R-W|se st_still = 1 scrittura\\ sempre abilita, se st_still\\ = 0 il nuovo valore viene\\ memorizzato ma\\ processato solamente se il\\ nuovo tempo permette di\\ raggiungere la quota\\ impostata.|**Acceleration time**\\ Definisce il tempo necessario all'asse per accellerare dalla velocità massima a zero (condizione di asse fermo)alla velocità massima. Valore espresso in centesimi di secondo.\\ Range valido: da 0 a 999|
 +|tdec|W|R|R-W|se st_still = 1 scrittura\\ sempre abilita, se st_still\\ = 0 il nuovo valore viene\\ memorizzato ma\\ processato solamente se il\\ nuovo tempo permette di\\ raggiungere la quota\\ impostata.|**Deceleration time**\\ Definisce il tempo necessario all'asse per decelerare dalla velocità massima a zero (condizione di asse fermo). Valore espresso in centesimi di secondo.\\ Range valido: da 0 a 999|
 +|tinv|W|R|R-W|Nessuna|**Direction inversion delay**\\ Viene utilizzato per evitare stress meccanici dovuti a troppo rapide inversioni del senso di movimento. Valore espresso in centesimi di secondo.\\ Range valido: da 0 a 999|
 +|toldly|W|R|R-W|Nessuna|**Tolerance delay**\\ Definisce il tempo che intercorre tra l'arrivo dell'asse nella fascia di tolleranza e la relativa segnalazione di stato. Valore espresso in centesimi di secondo.\\ Range valido: da 0 a 999|
 +|pgain|W|R|R-W|Nessuna|**Proportional gain**\\ Impostando il valore 1000, il coefficente è 1.000\\ È il coefficiente che moltiplicato per l'errore di inseguimento genera la parte proporzionale dell'uscita di regolazione.\\ Range valido: da 0 a 32767|
 +|feedfw|W|R|R-W|Nessuna|**Feed forward**\\ Impostando il valore 1000, la percentuale è del 100%.\\ È il coefficiente percentuale che, moltiplicato per la velocità, genera la parte feed-forward dell'uscita di regolazione.\\ Range valido: da 0 a 32767|
 +|integt|W|R|R-W|Nessuna|**Integral time**\\ È il tempo, espresso in millisecondi, che produce il coefficiente di integrazione dell'errore di inseguimento.\\ L'integrazione di tale errore moltiplicata per tale coefficente genera la parte integrale dell'uscita di regolazione.\\ Range valido: da 0 a 32767|
 +|derivt|W|R|R-W|Nessuna|**Derivative time**\\ È il tempo, espresso in millisecondi, che produce il coefficiente derivativo dell'errore di inseguimento. La derivazione di tale errore moltiplicata per tale coefficiente genera la parte integrale dell'uscita di regolazione.\\ Range valido: da 0 a 32767|
 +|prsmode|B|R|R-W|Nessuna|**Preset mode**\\ Definisce il tipo di ricerca di preset:\\ **0** = Per la ricerca dell'abilitazione impulso di zero, l'asse inizia il movimento in veloce, incontra la camma di abilitazione, inverte la direzione rallentando e, sul fronte di discesa relativo al segnale di camma, carica la quota di preset.\\ **1** = Per la ricerca dell'abilitazione impulso di zero, l'asse inizia il movimento in veloce, incontra la camma di abilitazione, inverte la direzione ed in lento acquisisce il primo impulso di zero (dopo la disattivazione del segnale di camma).\\ **2** = Non viene attivata la procedura di ricerca preset con movimentazione dell'asse. Il conteggio viene aggiornato alla quota di preset all'attivazione dell'abilitazione impulso di zero.|
 +|prsdir|B|R|R-W|Nessuna|**Preset direction**\\ Definisce la direzione del movimento asse per la ricerca della camma di abilitazione impulso di zero.\\ **0** = l'asse si dirige in avanti.\\ **1** = l'asse si dirige indietro|
 +|unitvel|B|R|R-W|st_still = 1|**Velocity unit**\\ Definisce se l'unità di tempo della velocità è espressa in minuti o secondi.\\ **0** = Um/min\\ **1** = Um/sec|
 +|decpt|B|R|R-W|st_still = 1|**Decimal point**\\ Definisce la precisione con la quale si intendono impostare le preselezioni e visualizzare i conteggi relativamente all'asse.\\ Range valido: da 0 a 3.|
 +|offset|W|R|R-W|Nessuna|**Offset**\\ Offset uscita DAC in bit.\\ Definisce il valore in bit della correzione relativa all'uscita analogica in modo da compensare l'eventuale deriva del sistema. Valore espresso in bit DAC.\\ Range valido: da -32768 a 32767|
 +|setpos|L|R|R-W|se st_still = 1 scrittura\\ sempre abilitata , se\\ st_still = 0 scrittura\\ abilitata se la nuova\\ quota puó essere\\ raggiunta con la stessa\\ direzione di\\ posizionemato.\\ Il parametro viene\\ alterato se eseguita\\ una ricerca di preset\\ con prsmode = 0 o 1.|**Setted position**\\ Definisce la quota di posizionamento raggiungibile dall'asse x alla velocità //setvelx//.\\ Range valido: da minpos a maxpos\\ N.B. Il valore viene alterato se si comanda una procedura di ricerca preset con prsmode = 0 o 1.|
 +|setvel|L|R|R-W|se st_still = 1 scrittura\\ sempre abilita, se\\ st_still = 0 il nuovo\\ valore viene\\ memorizzato ma\\ processato solamente\\ se l'asse non é in\\ decelerazione per\\ raggiungere la quota\\ impostata.\\ Il parametro viene\\ alterato se eseguita\\ una ricerca di preset\\ con prsmode = 0 o 1.|**Setted velocity**\\ É il valore della velocitá di posizionamento. Valore espresso in Um/s o Um/min.\\ Range valido: 0 ÷ maxvel|
 +|vout|B|0|R-W|st_cal = 1|**Volt out**\\ É il valore della tensione di uscita, espressa in decimi di volts, da usare nella procedura di calibrazione.\\ Range valido: -100 ÷ 100|
 +|vel|L|0|R|Nessuna|**Velocity**\\ É il valore della velocitá istantanea dell'asse. Valore espresso in Um/s o Um/min.|
 +|frq|L|0|R|Nessuna|**Frequency**\\ É il valore della frequenza istantanea dell'asse. Valore espresso in Hz.|
 +|posit|L|R|R-W|se st_still = 1 scrittura\\ sempre abilita, se st_still = 0\\ il nuovo valore viene\\ processato solamente se\\ l'asse non é in decelerazione\\ per raggiungere la quota\\ impostata.|**Actual position**\\ É il valore della posizione istantanea dell'asse. Valore espresso in unità di misura (Um).|
 +|follerr|L|0|R|Nessuna|**Following error**\\ É il valore istantaneo dell'errore di inseguimento. Valore espresso in bit trasduttore.|
 +|ffwdreg|L|0|R|Nessuna|**Feed-forward register**\\ È il valore istantaneo del registro di feed-forward espresso in bit.|
 +|propreg|L|0|R|Nessuna|**Proportional register**\\ È il valore istantaneo del registro proporzionale espresso in bit.|
 +|intreg|L|0|R|Nessuna|**Integral register**\\ È il valore istantaneo del registro integrale espresso in bit.|
 +|derreg|L|0|R|Nessuna|**Derivative register**\\ È il valore istantaneo del registro derivativo espresso in bit.|
 +|delta|L|R|R-W|Nessuna|**Delta counter**\\ È il valore che viene sommato al conteggio quando viene inviato un comando DELCNT. Valore espresso in unità di misura (Um).\\ Range valido: -999999 ÷ 999999|
 +
 +==== - Stati ====
 +
 +^Nome^D^R^A^Condizioni^Descrizione^
 +|st_init|F|0|R|Nessuna|**Initialization**\\ Segnalazione di device inizializzato.\\ **0** = device non inizializzato.\\ **1** = device inizializzato.\\ All'accensione per default viene caricato il valore zero.|
 +|st_emrg|F|0|R|Nessuna|**Emergency**\\ Segnalazione di asse in emergenza.\\ **0** = asse non in emergenza.\\ **1** = asse in emergenza.|
 +|st_toll|F|0|R|Nessuna|**Tolerance**\\ Segnalazione di asse in tolleranza rispetto alla quota posta in esecuzione dal comando di START. La segnalazione di asse in tolleranza può essere ritardata tramite il parametro toldly.\\ **0** = asse non in tolleranza.\\ **1** = asse in tolleranza.\\ All'accensione per default viene caricato il valore zero.|
 +|st_prsok|F|0|R|Nessuna|**Preset Ok**\\ Segnalazione di asse in tolleranza rispetto alla quota posta in esecuzione dal comando di START. La segnalazione di asse in tolleranza può essere ritardata tramite il parametro toldly.\\ **0** = asse non in tolleranza.\\ **1** = asse in tolleranza.\\ All'accensione per default viene caricato il valore zero.|
 +|st_still|F|0|R|Nessuna|**Still**\\ Segnalazione di asse fermo.\\ **0** = asse in movimento.\\ **1** = asse fermo.\\ All'accensione per default viene caricato il valore 1.|
 +|st_prson|F|0|R|Nessuna|**Preset ON**\\ Segnalazione di ricerca di preset asse in corso.\\ **0** = ricerca di preset non in corso.\\ **1** = ricerca di prest in corso.\\ All'accensione per default viene caricato il valore zero.|
 +|st_movdir|F|0|R|Nessuna|**Movement direction**\\ Segnalazione della direzione del movimento.\\ **0** = avanti.\\ **1** = indietro.\\ All'accensione per default viene caricato il valore zero.|
 +|st_loopon|F|0|R|Nessuna|**Loop ON**\\ Segnalazione di asse in reazione di spazio.\\ **0** = asse non in reazione di spazio.\\ **1** = asse in reazione di spazio.\\ All'accensione per default viene caricato il valore zero.|
 +|st_foller|F|0|R|Nessuna|**Following error**\\ Segnalazione di asse in errore di inseguimento (ritenuta 500 ms).\\ **0** = asse non in errore di inseguimento.\\ **1** = asse in errore di inseguimento.\\ All'accensione per default viene caricato il valore 1.|
 +|st_regoff|F|0|R|Nessuna|**Regulation**\\ Segnala che la regolazione é disabilitata e che l'aggiornamento del DAC non viene effettuato.|
 +|st_cal|F|0|R|Nessuna|**Calibration**\\ Segnalazione di asse come generatore di tensione.\\ **0** = generatore di tensione asse disattivo.\\ **1** = generatore di tensione asse attivo.\\ All'accensione per default viene caricato il valore zero.|
 +|st_cntlock|F|R|R|Nessuna|**Counter locked**\\ Segnalazione di asse sbloccato.\\ **0** = conteggio asse sbloccato.\\ **1** = conteggio asse bloccato|
 +|st_cntrev|F|R|R|Nessuna|**Counter revers**\\ Segnalazione di conteggio asse invertito.\\ **0** = Conteggio asse non invertito.\\ **1** = Conteggio asse invertito.\\ All'accensione viene mantenuto lo stato presente allo spegnimento.|
 +|st_cntrev|F|R|R|Nessuna|**Counter revers**\\ Segnalazione di conteggio asse invertito.\\ **0** = Conteggio asse non invertito.\\ **1** = Conteggio asse invertito.\\ All'accensione viene mantenuto lo stato presente allo spegnimento.|
 +
 +
 +===== - Limitazioni =====
 +
 +Nessuna limitazione
 +
 +
 +===== - Esempio applicativo =====
 +
 +==== - File di configurazione ====
 +
 +<code QCL>
 +;*************************************************************************************
 +; Nome Modulo: Ex_Anpos.CNF              Progetto: Ex_ANPOS
 +; Autore: QEM srl                        Data: 01/05/99
 +; Sistema: QMove1 / QCL3                 Libreria: 1LIB3B04
 +; Funzionalità: Esempio gestione ANPOS   Release: 0
 +;------------------------------------- Note ------------------------------------------
 +; [1] - Applicativo di esempio per utilizzo device ANPOS
 +**************************************************************************************
 +
 +;-------------------------------------------------------------------------------------
 +; Definizione Costanti
 +;-------------------------------------------------------------------------------------
 +CONST
 +
 +;-------------------------------------------------------------------------------------
 +; Definizione Variabili SYSTEM
 +;-------------------------------------------------------------------------------------
 +SYSTEM
 +slQuotaPos                            ;Variabile per quota di posizionamento
 +slVelAsse                             ;Variabile per velocità asse
 +
 +;-------------------------------------------------------------------------------------
 +; Definizione Variabili GLOBAL
 +;-------------------------------------------------------------------------------------
 +GLOBAL
 +gfMovMan                              ;Flag segnalazione movimenti
 +                                        ;manuali in corso
 +gfMovAuto                             ;Flag segnalazione movimenti
 +                                        ;automatici in corso
 +                                        
 +;-------------------------------------------------------------------------------------
 +; Definizione Variabili TIMER
 +;-------------------------------------------------------------------------------------
 +TIMER
 +
 +;-------------------------------------------------------------------------------------
 +; Definizione DATAGROUP
 +;-------------------------------------------------------------------------------------
 +;DATAGROUP
 +;-------------------------------------------------------------------------------------
 +; Configurazione Bus
 +;-------------------------------------------------------------------------------------
 +BUS
 +      1CPUB   02
 +      1MIXA   00
 +      .
 +      .
 +     
 +;-------------------------------------------------------------------------------------
 +; Definizione Variabili INPUT
 +;-------------------------------------------------------------------------------------
 +INPUT
 +ifAvMan        2.INP01                ;Ingresso di avanti manuale
 +ifInMan        2.INP02                ;Ingresso di indietro manuale
 +ifStart        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
 +ofAxeFermo  F    2.OUT02                ;Uscita di asse fermo
 +
 +;-------------------------------------------------------------------------------------
 +; Dichiarazione device
 +;-------------------------------------------------------------------------------------
 +INTDEVICE
 +;Nome   Tipo   TCamp   Contatore   Inter   AbilZero  OutAnal
 +Asse    ANPOS  0004    2.CNT01           2.INP01   2.AN01
 +
 +END
 +</code>
 +
 +==== - Gestione ANPOS ====
 +
 +<code QCL>
 +;*************************************************************************************
 +; Nome File: TASK_00.MOD
 +; Progetto : EX_ANPOS
 +; Descrizione: Gestione Posizionamento
 +;*************************************************************************************
 +
 +;-------------------------------------------------------------------------------------
 +; Operazioni di Inizializzazione Asse
 +;-------------------------------------------------------------------------------------
 +Asse:cntratio = 100000                     ;Risoluz.encoder = Spazio in 1 giro
 +                                           ;encoder(Um) / impulsi giro encoder
 +Asse:maxvel = 100000                       ;Velocita` max. = Velocità Asse con
 +                                           ;uscita analogica a 10V (CALON/
 +vout=100)
 +Asse:maxpos = 999999                       ;Quota massima
 +Asse:minpos = -999999                      ;Quota minima
 +Asse:maxfollerr = 10000                    ;Errore di inseguimento
 +Asse:unitvel = 0                           ;Unita di tempo della velocità
 +Asse:decpt = 0                             ;Cifre decimali
 +Asse:rampmode = 0                          ;Tipo di rampe utilizzate
 +Asse:taccdec = 100                         ;Tempo di accelerazione e di decelerazione
 +Asse:tacc = 0                              ;Tempo di accelerazione (non utilizzato)
 +Asse:tdec = 0                              ;Tempo di decelerazione (non utilizzato)
 +Asse:tinv = 0                              ;Tempo di inversione asse
 +Asse:toll = 5                              ;Tolleranza
 +Asse:toldly = 10                           ;Tempo di ritardo attivaz. tolleranza
 +Asse:prsmode = 0                           ;Tipo di ricerca di preset
 +Asse:prspos = 0                            ;Quota di preset
 +Asse:prsdir = 0                            ;Direzione della ricerca di preset
 +Asse:prsvel = (20 * Asse:maxvel)/100       ;Velocità di preset (20% della
 +vel.max.)
 +Asse:sprsvel = (10 * Asse:maxvel)/100      ;Velocità di ricerca impulso di
 +                                           ;zero (10% della vel.max.)
 +Asse:offset = 0                            ;Tensione di offset
 +Asse:pgain = 10                            ;Guadagno proporzionale
 +Asse:feedfw = 1000                         ;Feedforward
 +Asse:integt = 0                            ;Tempo di integrale
 +Asse:derivt = 0                            ;Tempo derivativo
 +INIT Asse                                  ;Inizializza il device
 +WAIT Asse:st_init                          ;Attendi che il device sia inizializzato
 +CNTUNLOCK Asse                             ;Sblocca conteggio
 +WAIT NOT Asse:st_cntlock                   ;Attendi che il conteggio sia sbloccato
 +CNTDIR Asse                                ;Imposta il senso del conteggio
 +WAIT NOT Asse:st_cntrev                    ;Attendi che sia impostato il senso
 +                                           ;del conteggio
 +REGON Asse                                 ;Abilita la regolazione
 +WAIT NOT Asse:st_regoff                    ;Attendi l'abilitazione alla regolazione
 +RESUME Asse                                ;Togli l'asse dallo stato di emergenza
 +WAIT NOT Asse:st_emrg                      ;Attendi che l'asse non sia in emergenza
 +LOOPON Asse                                ;Aggancia loop di reazione dell'asse
 +WAIT Asse:st_loopon                        ;Attendi che sia agganciato il loop di
 +                                           ;reazione dell'asse
 +IF (slVelAsse EQ 0)                        ;Nel caso in cui il set di velocità
 +                                           ;dell'asse sia zero
 +  slVelAsse = 50                           ;Imposta una velocità di posizionamento
 +ENDIF
 +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 ------------------------------
 +; slVelAsse: Variabile impostabile che rappresenta la velocità dell'asse
 +; (espressa in % della vel.max.)
 +; 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
 +ofAxeFermo = Asse:st_still              ;Imposto l'uscita di asse fermo come
 +                                        ;lo stato di asse fermo
 +
 +;-------------------------------------------------------------------------------------
 +; 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:setvel=(slVelAsse*Asse:maxvel)/100   ;Imposta la velocità dell'asse
 +      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
 +;-------------------------------------------------------------------------------------
 +IF ifAvMan                                      ;Attende l'ingresso di movimento manuale
 +  IF NOT (gfMovAuto OR gfMovMan)                ;Controlla che non ci siano movimenti
 +                                                ;automatici o manuali
 +    IF Asse:st_still                            ;Controlla che l'asse sia fermo
 +      Asse:setvel=(slVelAsse*Asse:maxvel)/100   ;Imposta la velocita` dell'asse
 +        MANFW 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
 +                                                ;autometici o manuali
 +    IF Asse:st_still                            ;Controlla che l'asse sia fermo
 +      Asse:setvel=(slVelAsse*Asse:maxvel)/100   ;Imposta la velocita` dell'asse
 +      MANBW 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
 +</code>
 +