Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Entrambe le parti precedenti la revisione Revisione precedente Prossima revisione | Revisione precedente | ||
software:devices:epicpos [2017/01/19 14:57] – [Dichiarazione device nel file di configurazione (.CNF)] qem103 | software:devices:epicpos [2020/07/13 15:11] (versione attuale) – qem103 | ||
---|---|---|---|
Linea 1: | Linea 1: | ||
+ | ====== DEVICE EPICPOS ====== | ||
+ | |||
+ | |||
+ | ====== - Introduzione ====== | ||
+ | |||
+ | * Il device interno EPICPOS é uno tool residente nella CPU che permette di gestire il movimento di un asse meccanico con un comando analogico a rampe epicicloidali. | ||
+ | * La funzione principale del device è quella di generare una traiettoria o profilo di velocità che, opportunamente convertito in un segnale di tensione proporzionale, | ||
+ | * Il profilo di velocità ha unandamento epicicloidale (andamento delle rampe dolce e progressivo) che permette di ridurre gli stress e le sollecitazioni delle parti meccaniche. | ||
+ | * 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 lazionamento 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 dellasse, esiste una speciale procedura di movimentazione detta ricerca di preset. | ||
+ | * Il feed-back é di tipo PID+FF (proporzionale, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | ===== - Installazione ===== | ||
+ | |||
+ | ==== - Dichiarazione device nel file di configurazione (.CNF) ==== | ||
+ | |||
+ | Nel file di configurazione (.CNF), la sezione BUS deve essere dichiarata in modo tale che siano | ||
+ | presenti le risorse hardware necessarie allimplementazione del device EPICPOS. 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 del file .CNF deve essere aggiunta la seguente definizione: | ||
+ | <code QCL> | ||
+ | ; | ||
+ | ; Dichiarazione devices interni | ||
+ | ; | ||
+ | INTDEVICE | ||
+ | .. | ||
+ | < | ||
+ | </ | ||
+ | |||
+ | ^: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.^ | ||
+ | |||
+ | dove: | ||
+ | |<nome device> | ||
+ | |EPICPOS|Parola chiave che identifica il devices posizionatore epicicloidale.| | ||
+ | |TCamp|Tempo campionamento device (1÷255 ms).| | ||
+ | |ICont|Ingresso del contatore bidirezionale.| | ||
+ | |IntL|Numero della linea di interrupt dedicata per l' | ||
+ | |IAZero|Ingresso di l' | ||
+ | |IOutA|Indirizzo hardware del componente DAC dell' | ||
+ | |||
+ | === - Esempio === | ||
+ | <code QCL> | ||
+ | ; | ||
+ | ; Dichiarazione devices interni | ||
+ | ; | ||
+ | INTDEVICE | ||
+ | Asse_X | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== - Funzionamento ===== | ||
+ | |||
+ | ==== - Rilevazione posizione ==== | ||
+ | |||
+ | Il device EPICPOS acquisisce la posizione dellasse 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 dellasse nellunità di misura necessaria per lapplicazione. | ||
+ | Il parametro cntratio viene utilizzato allora per esprimere il rapporto tra gli impulsi | ||
+ | trasduttore ed il corrispondente in unità di misura dellapplicazione. 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.\\ | ||
+ | // | ||
+ | |||
+ | === - Punto decimale === | ||
+ | Se per lunità di misura scelta é prevista anche la presenza di un punto decimale, le posizioni | ||
+ | devono essere rappresentate sempre come valore intero e rappresentare lo spazio nellunità 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 varrà 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 nellunità di tempo scelta. Da questo | ||
+ | si ricava che il device deve comunque conoscere la posizione del punto decimale dellunità di | ||
+ | misura e questo viene fatto con il parametro //decpt//. Questo parametro può assumere valori 0÷3. | ||
+ | |||
+ | === - Esempio === | ||
+ | |||
+ | ^:tip:^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' | ||
+ | cntratio = (18.2 x 101 / 500) x 100000 = 36400 | ||
+ | |||
+ | le impostazioni devono allora essere: | ||
+ | // | ||
+ | // | ||
+ | |||
+ | Per eseguire un posizionamento a 146 centimetri bisogna digitare | ||
+ | // | ||
+ | |||
+ | Per impostare una velocitá di 10 centimetri al secondo bisogna digitare : | ||
+ | // | ||
+ | // | ||
+ | |||
+ | ==== - Calibrazione uscita analogica ==== | ||
+ | |||
+ | ^: | ||
+ | |||
+ | Per la gestione dell' | ||
+ | 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 emergenza con 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 lasse é 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 dallasse.\\ Se impostando una tensione positiva il conteggio si decrementa, é necessario invertire le fasi del trasduttore o invertire la direzione nellazionamento. | ||
+ | * È possibile invertire la direzione del conteggio utilizzando il comando //CNTREV//. | ||
+ | * Se con tensione di uscita uguale a zero lasse 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 delluscita analogica; questa operazione permette di compensare leventuale deriva propria del componente elettronico, | ||
+ | * Per disabilitare lo stato di taratura inviare il comando //CALOFF//. | ||
+ | * Lo stato //st_cal// = 0 | ||
+ | |||
+ | === - Parametrizzazione uscita === | ||
+ | Il device EPICPOS genera il valore di tensione delluscita analogica sulla base di una proporzione | ||
+ | tra la velocitá massima dellasse e la massima tensione di uscita. La proporzionalità è ottenuta | ||
+ | con il parametro //maxvel//, rappresentante la velocitá dellasse relativa alla massima tensione | ||
+ | analogica (10 V). Ovviamente lasse 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 lunità di tempo da | ||
+ | utilizzare per la rappresentazione delle velocitá nel device; il parametro //unitvel// definisce lunità | ||
+ | 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 espressa | ||
+ | nellunità di misura sullunità di tempo scelti.\\ | ||
+ | Introdurre il valore di velocitá massima calcolato nel parametro //maxvel//. | ||
+ | |||
+ | === - Metodo pratico per la determinazione della velocità massima === | ||
+ | Il metodo pratico si basa sulla lettura della velocitá rilevata dal device nel parametro //vel//, | ||
+ | fornendo allazionamento una tensione nota. Per fornire la tensione allazionamento il device | ||
+ | deve essere posto nella condizione di calibratura come descritto nel paragrafo precedente. Se il | ||
+ | sistema lo permette, fornire allazionamento 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 una proporzione.\\ | ||
+ | Introdurre il valore di velocitá massima trovato nel parametro //maxvel//. | ||
+ | |||
+ | ==== - Movimentazione ==== | ||
+ | |||
+ | ^: | ||
+ | |||
+ | Le procedure fin qui descritte hanno permesso di completare la prima fase di parametrizzazione del device. Ora é possibile eseguire una semplice movimentazione dell' | ||
+ | * 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' | ||
+ | * Impostare i parametri che definiscono la posizione dei finecorsa software: //minpos// = 0 e //maxpos// al valore della corsa massima dell' | ||
+ | * Impostare il parametro che definisce il tempo impiegato dall' | ||
+ | * Impostare la velocitá di posizionamento con il parametro //setvel//. | ||
+ | * Impostare la quota di destinazione con il parametro //setpos//. | ||
+ | * Impostare il parametro // | ||
+ | * Se il device é in stato di emergenza (// | ||
+ | * 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 dellasse in maniera continua ed automatica, è necessario | ||
+ | avere un feed-back sulla posizione; per questo motivo viene introdotto lalgoritmo di regolazione | ||
+ | PID+FF comprendente azioni di tipo proporzionale, | ||
+ | valore delluscita analogica è dato dalla sommatoria delle azioni feed forward, proporzionale, | ||
+ | integrativa e derivativa.\\ | ||
+ | Senza entrare nel merito di una descrizione tecnica della teoria della regolazione, | ||
+ | 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; | ||
+ | regolazioni in condizioni particolari. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | === - Azione feed forward === | ||
+ | Il feed-forward contribuisce a rendere il sistema più pronto nei posizionamenti, | ||
+ | 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). | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | === - Azione proporzionale === | ||
+ | Questa azione fornisce unuscita proporzionale allerrore di posizione istantaneo dellasse. Lentità | ||
+ | dellazione 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 | ||
+ | unuscita analogica al massimo valore (10 V) relativamente al massimo errore di velocitá. Per | ||
+ | massimo errore di velocitá si intende lo spazio compiuto dallasse - alla massima velocità - per la | ||
+ | durata del tempo di campionamento del device. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | === - Azione integrale === | ||
+ | Integra lerrore di posizione del sistema nel tempo impostato nel parametro //integt// aggiornando | ||
+ | luscita finché lerrore non viene annullato.\\ | ||
+ | Più basso è il tempo di integrazione dellerrore, | ||
+ | ma il sistema può diventare instabile tendendo ad oscillare. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | === - Azione derivativa === | ||
+ | Anticipa la variazione del moto del sistema tendendo ad eliminare gli overshoot del posizionamento. | ||
+ | Lentità della variazione viene calcolata nel tempo impostato nel parametro // | ||
+ | Più alto è il tempo di derivazione dellerrore e più veloce è il sistema nel recupero dellerrore | ||
+ | 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 dellasse. Può essere eseguita in 3 diversi modi selezionati in base al parametro | ||
+ | // | ||
+ | |||
+ | === - 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, lasse 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 lasse può trovarsi in qualsiasi punto. | ||
+ | * Lasse si deve dirigere verso la camma per eseguire il caricamento del preset. Non sapendo da che parte dirigere lasse per incontrare lingresso di abilitazione, | ||
+ | * Se durante lesecuzione della ricerca di preset viene dato il comando //PRESET//, la direzione di movimento dellasse 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, lasse 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 lingresso ha un filtro hardware che ne ritarda lacquisizione e quindi influenza la precisione del caricamento. Nel modo 1, lacquisizione viene fatta su ingresso in interrupt quindi la velocitá non é determinante. Bisogna assicurare comunque che il tempo di durata dellimpulso di zero sia sufficiente per essere acquisito dalla scheda. Per conoscere i tempi di acquisizione dellingresso 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//, lasse si dirige verso la posizione dove si attiva lingresso di abilitazione impulso di zero trasduttore con velocitá //definita da prsvel//. Lo stato // | ||
+ | A questo punto il comportamento dipende dal modo di caricamento selezionato (Modo 0 o Modo 1). | ||
+ | |||
+ | === - Ricerca di preset - Modo 0 === | ||
+ | |||
+ | ^: | ||
+ | |||
+ | Alla disattivazione dell' | ||
+ | viene caricata sul conteggio (parametro // | ||
+ | Successivamente, | ||
+ | conclusione della ricerca. Questo stato rimane attivo fino all' | ||
+ | di preset; all' | ||
+ | |||
+ | |Figura 1: caricamento preset utilizzando la sola camma di abilitazione.| | ||
+ | |{{ : | ||
+ | |||
+ | === - Ricerca di preset - Modo 1 === | ||
+ | |||
+ | ^: | ||
+ | |||
+ | Alla disattivazione dell' | ||
+ | del primo impulso di zero fornito dal trasduttore e, su questo segnale, viene caricata la quota | ||
+ | di preset nel conteggio (parametro // | ||
+ | Per permettere il caricamento della quota di preset con "Modo 1", la scheda sulla quale é collegato | ||
+ | l' | ||
+ | hardware. Inoltre il device deve essere stato definito per utilizzare la stessa linea di interrupt | ||
+ | hardware (veri definizione nel file .CNF).\\ | ||
+ | Successivamente, | ||
+ | attiva lo stato // | ||
+ | fino all' | ||
+ | sempre a zero. Vedi figura 2. | ||
+ | |||
+ | |Figura 2: caricamento preset utilizzando camma di abilitazione ed impulso di zero trasduttore.| | ||
+ | |{{ : | ||
+ | |||
+ | === - Ricerca di preset "Modo 2" === | ||
+ | |||
+ | ^: | ||
+ | |||
+ | Con questa procedura, la ricerca di preset non esegue nessun posizionamento. Il comando di | ||
+ | caricamento della quota di preset viene fornito dall' | ||
+ | encoder e lo stato // | ||
+ | Se l' | ||
+ | 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 sullinstallazione di un solo azionamento che | ||
+ | a seconda dellasse da posizionare si collega elettricamente al motore interessato al | ||
+ | posizionamento; | ||
+ | Il device EPICPOS permette di controllare laccesso al dispositivo DAC tramite i comandi //REGON// | ||
+ | e //REGOFF//. In questo modo tramite lapplicativo in QCL definisce una serie di device tanti quanti | ||
+ | sono gli assi da posizionare; | ||
+ | (// | ||
+ | Normalmente tutti i device devono essere nello stato // | ||
+ | al dispositivo DAC. Prima di iniziare il posizionamento, | ||
+ | viene portato allo stato di // | ||
+ | completamento, | ||
+ | nessun motivo due device si devono trovare contemporaneamente nello stato di // | ||
+ | Quando il device viene posto nella condizione di //regoff//, luscita analogica rimane fissa allultimo | ||
+ | valore di tensione definito prima del comando //REGOFF//. | ||
+ | |||
+ | ==== - Cambio quota e conteggio in movimento ==== | ||
+ | |||
+ | ^:tip:^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. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | 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 // | ||
+ | |||
+ | ==== - Cambio velocitá e tempo di rampa in movimento ==== | ||
+ | |||
+ | Durante il posizionamento é possibile variare la velocitá dellasse 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//. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Durante il posizionamento possono essere variati anche i tempi di accelerazione/ | ||
+ | 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. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | ==== - Delta conteggio ==== | ||
+ | |||
+ | ^:tip:^Il comando è inviabile solamente se l'asse è fermo, condizione di st_still = 1.^ | ||
+ | |||
+ | Il device visualizza sempre la posizione assoluta dell' | ||
+ | é 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 // | ||
+ | Volendo sottrarre 100 unità di misura al conteggio è possibile: | ||
+ | // | ||
+ | |||
+ | ^:info:^La modifica del valore di risoluzione (// | ||
+ | |||
+ | Questa operazione introduce un errore perché impone la posizione "// | ||
+ | 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' | ||
+ | di un errore non trascurabile.\\ | ||
+ | Il comando //DELCNT// somma al conteggio una quantità pari al parametro //delta// senza perdere la | ||
+ | parte frazionaria della posizione: | ||
+ | // | ||
+ | //DELCNT Asse//\\ | ||
+ | Il comando di //DELCNT// può essere inviato solamente con asse fermo (// | ||
+ | |||
+ | === - Esempio === | ||
+ | La lettura della posizione dellasse risulta essere di 2 unità e si trova nel punto A. Si vuole | ||
+ | sommare al conteggio //posit// tre unità di misura.\\ | ||
+ | Con le istruzioni: | ||
+ | // | ||
+ | lasse assume la nuova posizione B.\\ | ||
+ | Con le istruzioni: | ||
+ | // | ||
+ | //DELCNT Asse//\\ | ||
+ | viene raggiunta la posizione C. | ||
+ | |||
+ | {{: | ||
+ | |||
+ | Si noti che con le prime istruzioni lasse ha compiuto un delta inferiore a 3 unità e quindi è | ||
+ | stato introdotto un errore.\\ | ||
+ | Se si devono inviare comandi //DELCNT// in successione, | ||
+ | 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 === | ||
+ | // | ||
+ | //DELCNT Asse//\\ | ||
+ | //WAIT Asse: | ||
+ | // | ||
+ | //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 dellinizializzazione del device | ||
+ | mantiene lo stato precedentemente definito), oppure lo stato che assume al momento | ||
+ | dellinizializzazione del device.\\ | ||
+ | Se il device non necessita di inizializzazione il campo R indica il valore che il parametro o stato | ||
+ | assume allaccensione della scheda.\\ | ||
+ | R = Ritentivo\\ | ||
+ | 0 = Al momento dellinizializzazione del device il valore viene forzato a zero.\\ | ||
+ | 1 = Al momento dellinizializzazione del device il valore viene forzato a uno.\\ | ||
+ | - = Al momento dellinizializzazione 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 accettat**o.\\ | ||
+ | In alcuni casi vengono specificati dei valori limite per laccettazione del parametro: se vengono | ||
+ | introdotti dei valori esterni ai limiti impostati, il dato viene comunque accettato; pertanto devono | ||
+ | essere previsti opportuni controlli dellapplicativo tali da garantire il corretto funzionamento.\\ | ||
+ | Per lesecuzione di un comando, tutte le relative condizioni devono necessariamente essere | ||
+ | soddisfatte; | ||
+ | |||
+ | **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 = 0|**Initialization**\\ Comando di inizializzazione device.\\ Se il device non é inizializzato non vengono eseguiti i calcoli relativi all' | ||
+ | |EMRG|st_init = 1|**Emergency**\\ Pone in emergenza l'asse interrompendo, | ||
+ | |RESUME|st_init = 1\\ st_emrg = 1|**Resume**\\ Ripristino della condizione di emergenza dell' | ||
+ | |START|st_init = 1\\ st_regoff = 0\\ st_emrg = 0\\ st_emrg = 0\\ st_still = 1|**Start**\\ Comanda il posizionamento alla quota setpos e velocitá // | ||
+ | |STOP|st_init = 1\\ st_regoff = 0\\ st_emrg = 0\\ st_cal = 0\\ st_still = 0|**Stop**\\ Interrompe l' | ||
+ | |LOOPON|st_init = 1|**Loop ON**\\ Abilita la reazione di spazio asse.\\ L' | ||
+ | |LOOPOFF|st_init = 1|**Loop OFF**\\ Disabilita la reazione di spazio asse.\\ L'asse può essere spostato dalla sua posizione senza che l' | ||
+ | |CNTLOCK|st_init = 1|**Counter lock**\\ Blocca l' | ||
+ | |CNTUNLOCK|st_init = 1|**Counter unlock**\\ Sblocca il conteggio dell' | ||
+ | |CNTREV|st_init = 1|**Counter reverse**\\ Consente di invertire le fasi del trasduttore all' | ||
+ | |CNTREV|st_init = 1|**Counter reverse**\\ Consente di invertire le fasi del trasduttore all' | ||
+ | |CNTDIR|st_init = 1|**Counter direct**\\ Il conteggio dell' | ||
+ | |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' | ||
+ | |CALON|st_init = 1|**Calibration ON**\\ L' | ||
+ | |CALOFF|st_init = 1\\ st_cal = 1|**Calibration OFF**\\ L' | ||
+ | |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 backwar**\\ Comanda il posizionamento manuale in indietro (verso minpos) alla velocitá impostata.| | ||
+ | |REGOFF|st_init = 1\\ st_still = 1|**Regulation ON**\\ Disabilita la regolazione e l' | ||
+ | |REGON|st_init = 1\\ st_regoff = 1|**Regulation OFF**\\ Riabilita la regolazione e l' | ||
+ | |DELCNT|st_init = 1\\ st_still = 1|**Delta counter**\\ Questo comando viene accettato solamente se l'asse è fermo; il conteggio (posizione dell' | ||
+ | |||
+ | ==== - 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' | ||
+ | |maxpos|L|R|R-W|st_still = 1|**Maximum position**\\ Definisce la massima quota raggiungibile dall' | ||
+ | |minpos|L|R|R-W|st_still = 1|**Minimum position**\\ Definisce la minima quota raggiungibile dall' | ||
+ | |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' | ||
+ | |prsvel|L|R|R-W|st_still = 1|**Preset velocity**\\ Definisce la velocità dell' | ||
+ | |sprsvel|L|R|R-W|st_still = 1|**Preset search velocity**\\ Nella procedura di ricerca di preset, definisce la velocità dell' | ||
+ | |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' | ||
+ | |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/ | ||
+ | |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/ | ||
+ | |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' | ||
+ | |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' | ||
+ | |tinv|W|R|R-W|Nessuna|**Direction inversion delay**\\ Viene utilizzato per evitare stress meccanici dovuti a troppo rapide inversioni del senso di movimento. Il valore introdotto è espresso in centesimi di secondo.\\ Range valido: da 0 a 999| | ||
+ | |rtype|B|R|R-W|Nessuna|**Reduction type**\\ **0** = I tempi di accelerazione e decelerazione rimangono quelli della velocitá impostata e viene diminuita proporzionalmente la velocitá.\\ **1** = Vengono diminuiti i valori sia dei tempi di accelerazione e decelerazione, | ||
+ | |stopt|B|R|R-W|Nessuna|**Stop type**\\ **0** = Quando di esegue la frenata in rampa viene completata prima l' | ||
+ | |toldly|W|R|R-W|Nessuna|**Tolerance delay**\\ Definisce il tempo che intercorre tra l' | ||
+ | |pgain|W|R|R-W|Nessuna|**Proportional ga**\\ Impostando il valore 1000, il coefficente è 1.000\\ È il coefficente che moltiplicato per l' | ||
+ | |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' | ||
+ | |integt|W|R|R-W|Nessuna|**Integral time**\\ È il tempo, espresso in millisecondi, | ||
+ | |derivt|W|R|R-W|Nessuna|**Derivative time**\\ È il tempo, espresso in millisecondi, | ||
+ | |prsmode|B|R|R-W|Nessuna|**Preset mode**\\ Definisce il tipo di ricerca di preset:\\ **0** = Per la ricerca dell' | ||
+ | |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' | ||
+ | |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' | ||
+ | |offset|W|R|R-W|Nessuna|**Offset**\\ Offset uscita DAC in bit.\\ Definisce il valore in bit della correzione relativa all' | ||
+ | |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 posizionemat.\\ Il parametro viene alterato\\ se eseguita una ricerca di\\ preset con prsmode = 0 o 1.|**Setted position**\\ Definisce la quota di posizionamento raggiungibile dall' | ||
+ | |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' | ||
+ | |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. Valore espresso in decimi di V.\\ Range valido: -100 ÷ 100| | ||
+ | |vel|L|0|R|Nessuna|**Velocity**\\ È il valore della velocitá istantanea dell' | ||
+ | |frq|L|0|R|Nessuna|**Frequency**\\ È il valore della frequenza istantanea dell' | ||
+ | |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' | ||
+ | |follerr|L|0|R|Nessuna|**Following error**\\ É il valore istantaneo dell' | ||
+ | |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.\\ Range valido: 0 ÷ 1024| | ||
+ | |derreg|L|0|R|Nessuna|**Derivative register**\\ È il valore istantaneo del registro derivativo espresso in bit.\\ Range valido: 0 ÷ 1024| | ||
+ | |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.| | ||
+ | |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.| | ||
+ | |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.| | ||
+ | |st_still|F|1|R|Nessuna|**Still**\\ Segnalazione di asse fermo.\\ **0** = asse in movimento.\\ **1** = asse fermo.| | ||
+ | |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 preset in corso.| | ||
+ | |st_movdir|F|0|R|Nessuna|**Movement direction**\\ Segnalazione della direzione del movimento.\\ **0** = avanti.\\ **1** = indietro| | ||
+ | |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.| | ||
+ | |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.| | ||
+ | |st_regoff|F|0|R|Nessuna|**Regulation**\\ Segnala che la regolazione é disabilitata e che l' | ||
+ | |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.| | ||
+ | |st_cntlock|F|R|R|Nessuna|**Counter locked**\\ Segnalazione di asse bloccato\\ **0** = conteggio asse sbloccato\\ **1** = conteggio asse bloccato.| | ||
+ | |st_cntrev|F|R|R|Nessuna|**Counter reversed**\\ Segnalazione di conteggio asse invertito\\ **0** = Conteggio asse non invertito.\\ **1** = Conteggio asse invertito.| | ||
+ | |||
+ | |||
+ | ===== - Limitazioni ===== | ||
+ | |||
+ | * Il parametro //setvel// può essere scritto solamente se lasse é a velocitá costante | ||
+ | * I parametri //rampm//, //tacc//, //tdec// e //taccde//c possono essere scritti solamente se lasse é a velocitá costante; in caso contrario il nuovo valore verrà processato solamente durante la generazione della prossima rampa il cui tempo é stato modificato. | ||
+ | |||
+ | |||
+ | ===== - Esempio applicativo ===== | ||
+ | |||
+ | ==== - File di configurazione ==== | ||
+ | |||
+ | <code QCL> | ||
+ | ; | ||
+ | ; Nome Modulo: Ex_Epic.CNF | ||
+ | ; Autore: QEM srl Data: 01/05/99 | ||
+ | ; Sistema: QMove1 / QCL3 | ||
+ | ; Funzionalità: | ||
+ | ; | ||
+ | ; [1] - Applicativo di esempio per utilizzo device EPICPOS | ||
+ | ; | ||
+ | |||
+ | ; | ||
+ | ; Definizione Costanti | ||
+ | ; | ||
+ | CONST | ||
+ | |||
+ | ; | ||
+ | ; Definizione Variabili SYSTEM | ||
+ | ; | ||
+ | SYSTEM | ||
+ | slQuotaPos | ||
+ | slVelAsse | ||
+ | |||
+ | ; | ||
+ | ; Definizione Variabili GLOBAL | ||
+ | ; | ||
+ | GLOBAL | ||
+ | gfMovMan | ||
+ | ;corso | ||
+ | gfMovAuto | ||
+ | ;in corso | ||
+ | |||
+ | ; | ||
+ | ; Definizione Variabili TIMER | ||
+ | ; | ||
+ | TIMER | ||
+ | |||
+ | ; | ||
+ | ; Definizione DATAGROUP | ||
+ | ; | ||
+ | ;DATAGROUP | ||
+ | |||
+ | ; | ||
+ | ; | ||
+ | ; | ||
+ | BUS | ||
+ | 1 | ||
+ | 2 | ||
+ | 3 . | ||
+ | 4 . | ||
+ | |||
+ | ; | ||
+ | ; Definizione Variabili INPUT | ||
+ | ; | ||
+ | INPUT | ||
+ | ifAvMan | ||
+ | ifInMan | ||
+ | ifStart | ||
+ | ifStop | ||
+ | |||
+ | ; | ||
+ | ; Definizione Variabili OUTPUT | ||
+ | ; | ||
+ | OUTPUT | ||
+ | ofToll | ||
+ | ofAxeFermo | ||
+ | |||
+ | ; | ||
+ | ; Dichiarazione device interni | ||
+ | ; | ||
+ | INTDEVICE | ||
+ | ;Nome | ||
+ | Asse EPICPOS | ||
+ | |||
+ | END | ||
+ | </ | ||
+ | |||
+ | ==== - Gestione EPICPOS ==== | ||
+ | |||
+ | <code QCL> | ||
+ | ; | ||
+ | ; Nome File: TASK_00.MOD | ||
+ | ; Progetto : EX_EPICPOS | ||
+ | ; Descrizione: | ||
+ | ; | ||
+ | |||
+ | ; | ||
+ | ; Operazioni di Inizializzazione Asse | ||
+ | ; | ||
+ | |||
+ | Asse: | ||
+ | ; | ||
+ | Asse:maxvel = 100000 | ||
+ | ; | ||
+ | Asse:maxpos = 999999 | ||
+ | Asse:minpos = -999999 | ||
+ | Asse: | ||
+ | Asse: | ||
+ | Asse:decpt = 0 ; | ||
+ | Asse: | ||
+ | Asse: | ||
+ | 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 ; | ||
+ | ; | ||
+ | Asse:rtype = 1 ;Tipo di riduzione profilo | ||
+ | Asse:stopt = 1 ;Tipo di stop | ||
+ | Asse: | ||
+ | Asse:prspos = 0 ;Quota di preset | ||
+ | Asse:prsdir = 0 ;Direzione della ricerca di preset | ||
+ | Asse:prsvel = (20 * Asse: | ||
+ | Asse: | ||
+ | ;(10% della vel.max.) | ||
+ | Asse:offset = 0 ;Tensione di offset | ||
+ | Asse:pgain = 10 ;Guadagno proporzionale | ||
+ | Asse:feedfw = 1000 ; | ||
+ | Asse:integt = 0 ;Tempo di integrale | ||
+ | Asse:derivt = 0 ;Tempo derivativo | ||
+ | INIT Asse ; | ||
+ | WAIT Asse: | ||
+ | CNTUNLOCK Asse ; | ||
+ | WAIT NOT Asse: | ||
+ | CNTDIR Asse ;Imposta il senso del conteggio | ||
+ | WAIT NOT Asse: | ||
+ | ; | ||
+ | REGON Asse ; | ||
+ | WAIT NOT Asse: | ||
+ | RESUME Asse ;Togli l'asse dallo stato di emergenza | ||
+ | WAIT NOT Asse: | ||
+ | LOOPON Asse ;Aggancia il loop di reazione dell' | ||
+ | WAIT Asse: | ||
+ | ; | ||
+ | IF (slVelAsse EQ 0) ;Nel caso in cui il set di velocità | ||
+ | ; | ||
+ | slVelAsse = 50 ; | ||
+ | ENDIF | ||
+ | IF (slQuotaPos EQ 0) ;Nel caso in cui la quota di posizionamento | ||
+ | ; | ||
+ | slQuotaPos = 2000 ;Imposta una quota di posizionamento | ||
+ | ENDIF | ||
+ | |||
+ | ; | ||
+ | ; Operazioni di Posizionamento | ||
+ | ; ------------------------------ variabili utilizzate -------------------------------- | ||
+ | ; slVelAsse: Variabile impostabile che rappresenta la velocita' | ||
+ | ; (espressa in % della vel.max.) | ||
+ | ; slQuotaPos: Variabile impostabile che rappresenta la quota di posizionamento dell' | ||
+ | ; -------------------------------- flag utilizzati ----------------------------------- | ||
+ | ; gfMovMan: movimento manuale in corso | ||
+ | ; gfMovAuto: Movimento automatico in corso | ||
+ | ; | ||
+ | MAIN: | ||
+ | |||
+ | ; | ||
+ | ; Gestione uscite | ||
+ | ; | ||
+ | ofToll = Asse: | ||
+ | ;stato di tolleranza | ||
+ | ofAxeFermo = Asse: | ||
+ | asse fermo | ||
+ | |||
+ | ; | ||
+ | ; Gestione movimenti automatici | ||
+ | ; | ||
+ | IF ifStart | ||
+ | IF NOT gfMovMan | ||
+ | ;manuali | ||
+ | IF Asse: | ||
+ | Asse: | ||
+ | Asse:setpos = slQuotaPos | ||
+ | START Asse ;Esegue lo start dell' | ||
+ | gfMovAuto = 1 ; | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | |||
+ | IF ifStop | ||
+ | IF NOT Asse: | ||
+ | STOP Asse ; | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | |||
+ | IF gfMovAuto | ||
+ | ;automatico in corso | ||
+ | IF Asse: | ||
+ | gfMovAuto = 0 ; | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | |||
+ | ; | ||
+ | ; Gestione movimenti manuali | ||
+ | ; | ||
+ | IF ifAvMan | ||
+ | IF NOT (gfMovAuto OR gfMovMan) | ||
+ | ;automatici o manuali | ||
+ | IF Asse: | ||
+ | Asse: | ||
+ | MANFW Asse ;Avanti asse in manuale | ||
+ | gfMovMan = 1 ;Segnala movimento manuale in corso | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | IF ifInMan | ||
+ | IF NOT (gfMovAuto OR gfMovMan) | ||
+ | ;autometici o manuali | ||
+ | IF Asse: | ||
+ | Asse: | ||
+ | MANBW Asse ;Avanti asse in manuale | ||
+ | gfMovMan = 1 ;Segnala movimento manuale in corso | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | IF gfMovMan | ||
+ | IF NOT (ifAvMan OR ifInMan) | ||
+ | ;manuale sono OFF | ||
+ | STOP Asse ; | ||
+ | gfMovMan = 0 ;Togli la segnalazione di asse in | ||
+ | ;movimento manuale | ||
+ | ENDIF | ||
+ | ENDIF | ||
+ | |||
+ | ; | ||
+ | ; Operazioni finali | ||
+ | ; | ||
+ | WAIT 1 | ||
+ | JUMP MAIN | ||
+ | | ||
+ | END | ||
+ | </ | ||
+ | |||