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:counter2 [2017/01/19 14:47] – [14.1. Dichiarazione device nel file di configurazione (.CNF)] qem103software:devices:counter2 [2024/04/18 08:18] (versione attuale) – [1. Introduzione] documentazione
Linea 1: Linea 1:
 +====== DEVICE COUNTER2 ======
 +
 +====== - Introduzione ======
 +
 +  * Il device interno COUNTER2 é uno tool residente nella CPU che permette di gestire l'acquisizione del conteggio di un trasduttore bidirezionale incrementale.
 +  * Il valore acquisito viene convertito internamente in spazio e proposto nell‘unità di misura scelta dall‘utilizzatore.
 +  * Sono incluse le funzioni di delta conteggio DELCNT per posizionamenti incrementali e cattura del conteggio su interrupt hardware.\\ I cablaggi e collegamenti dell’apparecchiatura descritta nel presente manuale, devono rispettare la Normativa Europea EN60204-1.
 +
 +{{ :software:devices:counter2:counter2_01.png?nolink650 |}}
 +
 +
 +===== - 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 all'implementazione del device COUNTER2. Deve essere
 +presente almeno un contatore bidirezionale. Il device può utilizzare anche una linea di interrupt
 +per le funzioni di cattura conteggio su interrupt ad esempio caricamento quota di preset).\\
 +Nella sezione INTDEVICE del file .CNF deve essere aggiunta la seguente definizione:
 +<code QCL>
 +;---------------------------------
 +; Dichiarazione devices interni
 +;---------------------------------
 +INTDEVICE
 +..
 +<nome_device> COUNTER2 TCamp QCTL IntL
 +</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 IntL, si deve comunque inserire nel relativo campo la stringa X.^
 +
 +dove:
 +|<nome device>|Nome assegnato al device.|
 +|COUNTER2|Parola chiave che identifica il device contatore bidirezionale.|
 +|TCamp|Tempo di campionamento device (1÷255 ms).|
 +|QCTL|Indirizzo contatore presente nella scheda.|
 +|IntL|Numero della linea di interrupt hardware dedicata per l'impulso di zero del trasduttore durante la fase di cattura del conteggio (per evitare che il device utilizzi questa risorsa inserire il carattere X).|
 +
 +=== - Esempio ===
 +<code QCL>
 +;---------------------------------
 +; Dichiarazione devices interni
 +;---------------------------------
 +INTDEVICE
 +Count  COUNTER2  2  2.CNT02  3
 +</code>
 +
 +
 +===== - Funzionamento =====
 +
 +==== - Risoluzione trasduttore ====
 +
 +Per l’utilizzo del device è necessario definire la risoluzione del trasduttore.\\
 +//cntratio// = (spazio percorso in unità di misura / impulsi giro encoder) x 100000\\
 +Questa costante di conversione permette di trasdurre gli impulsi letti in spazio percorso dall‘asse.
 +Il rapporto spazio/impulsi può assumere valori tra 0,00374 e 4,00000 ma, dovendo essere
 +introdotto nel parametro in valore intero, deve essere moltiplicato per 100000.\\
 +Una volta impostata correttamente la risoluzione sarà possibile leggere la posizione istantanea
 +dell‘asse (in unità di misura) nel parametro //posit//.
 +
 +==== - Operazioni con il conteggio ====
 +
 +È possibile bloccare e sbloccare l‘aggiornamento del conteggio con i comandi //CNTLOCK// e //CNTUNLOCK//.\\
 +E’ possibile invertire e ripristinare la direzione del conteggio con //CNTREV// e //CNTDIR//.
 +
 +==== - Acquisizione veloce del conteggio su interrupt hardware ====
 +
 +I comandi //INTENBL// e //INTDSBL// abilitano e disabilitano la linea di interrupt collegata all’impulso
 +di zero del trasduttore . Il valore del parametro //capture// definisce su quale fronte di tale impulso
 +verrà congelato il conteggio istantaneo; il conteggio catturato viene posto nel parametro //delta//.
 +
 +==== - Delta conteggio ====
 +
 +^:info:^La modifica del valore di risoluzione (//cntratio//) o la scrittura della variabile //posit//, provoca l'azzeramento dei resti della conversione.^
 +
 +Il device visualizza sempre la posizione assoluta dell'asse; 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//
 +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//
 +
 +=== - 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:counter2:counter2_02.png?nolink450|}}
 +
 +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 inviato.
 +
 +**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 //CNTLOCK// ed //CNTUNLOCK//, viene acquisito per primo il comando //CNTLOCK//.
 +
 +^Nome^Condizioni^Descrizione^
 +|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.\\ Attiva lo stato //st_cntlock//.|
 +|CNTUNLOCK|st_init = 1|**Counter unlock**\\ Sblocca il conteggio dell'asse. Viene riabilitato l'aggiornamento del conteggio.\\ Disattiva lo stato //st_cntlock//.|
 +|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//.|
 +|INTENBL|st_init = 1\\ capture>0\\ 1£ IntL £ 8|**Interrupt enable**\\ Abilita cattura del conteggio che verrà memorizzato in delta.\\ Attiva lo stato //st_intenbl//.|
 +|INTDSBL|st_init = 1|**Interrupt disable**\\ Disabilita la cattura del conteggio.\\ Disattiva lo stato //st_intenbl//.|
 +|RSCAPTURE|st_init = 1|**Reset capture**\\ Disattiva lo stato di //st_capture//|
 +|DELCNT|st_init = 1\\ st_intenbl = 0|**Delta counter**\\ Il conteggio (posizione dell'asse) viene modificato sommandogli algebricamente il valore specificato nel parametro delta (//posit = posit + delta//).|
 +
 +==== - Parametri ====
 +
 +^Nome^D^R^A^Condizioni^Descrizione^
 +|cntratio|L|R|R-W|Nessuna|**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: 374 ÷ 400000|
 +|posit|L|R|R-W|Nessuna|**Actual position**\\ È il valore della posizione istantanea dell'asse.\\ Valore espresso in unità di misura (Um).\\ Range valido: -999999 ÷ 999999|
 +|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.|
 +|capture|B|R|R-W|Nessuna|**Capture mode**\\ Definisce il modo di cattura del conteggio su interrupt hardware.\\ **0** = Disabilitato.\\ **1** = Singola cattura sul fronte di discesa.\\ **2** = Singola cattura sul fronte di salita.\\ **N.B.** La cattura del conteggio è abilitata se lo stato st_intenbl = 1.|
 +
 +==== - Stati ====
 +
 +^Nome^D^R^A^Condizioni^Descrizione^
 +|st_cntlock|F|R|R|Nessuna|**Counter locked**\\ Segnalazione di conteggio 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.|
 +|st_intenbl|F|0|R|Nessuna|**Interrupt enabled**\\ Segnala l'abilitazione alla cattura del conteggio da linea di interrupt hardware. Viene attivato dal comando INTENBL e disattivato dal comando INTDSBL. viene disattivato automaticamente a cattura avvenuta.\\ **0** = Cattura del conteggio non è abilitata.\\ **1** = Cattura del conteggio abilitata.|
 +|st_capture|F|0|R|Nessuna|**Counter capture**\\ Viene attivato alla cattura del conteggio; viene resettato dal comando //RSCAPTURE//.\\ **0** = Cattura del conteggio non eseguita.\\ **1** = Eseguita cattura conteggio.|
 +
 +
 +===== - Limitazioni =====
 +
 +Se viene modificato il parametro //cntratio// successivamente all’invio del comando //DELCNT//, vengono azzerati i resti della conversione del “delta spazio” in impulsi.
 +
 +
 +===== - Esempio applicativo =====
 +
 +==== - File di configurazione ====
 +
 +<code QCL>
 +;*************************************************************************************
 +; Nome Modulo: Ex_Count.CNF                        Progetto: Ex_COUNT
 +; Autore: QEM srl                                  Data : 01/05/99
 +; Sistema: QMove1 / QCL3                           Libreria: 1LIB3B04
 +; Funzionalità: Esempio gestione CPUNTER           Release: 0
 +;------------------------------------- Note ------------------------------------------
 +; [1] - Applicativo di esempio per utilizzo device COUNTER 2
 +;*************************************************************************************
 +
 +;-------------------------------------------------------------------------------------
 +; Definizione Costanti
 +;-------------------------------------------------------------------------------------
 +CONST
 +
 +;-------------------------------------------------------------------------------------
 +; Definizione Variabili SYSTEM
 +;-------------------------------------------------------------------------------------
 +SYSTEM
 +slPrsPos  L                               ;Quota di preset
 +slSet1    L                               ;Setpoint 1
 +slSet2    L                               ;Setpoint 2
 +
 +;-------------------------------------------------------------------------------------
 +; Definizione Variabili GLOBAL
 +;-------------------------------------------------------------------------------------
 +GLOBAL
 +
 +;-------------------------------------------------------------------------------------
 +; Definizione Variabili TIMER
 +;-------------------------------------------------------------------------------------
 +TIMER
 +
 +;-------------------------------------------------------------------------------------
 +; Definizione DATAGROUP
 +;-------------------------------------------------------------------------------------
 +;DATAGROUP
 +
 +;-------------------------------------------------------------------------------------
 +; Configurazione Bus
 +;-------------------------------------------------------------------------------------
 +BUS
 +    1   1CPUB   02
 +    2   1MIXA   00
 +    3   .
 +    4   .
 +
 +;-------------------------------------------------------------------------------------
 +; Definizione Variabili INPUT
 +;-------------------------------------------------------------------------------------
 +INPUT
 +ifAbilZ        2.INP01                 ;Abilitazione cattura impulso di zero
 +ifAxeFermo  F    2.INP02                 ;Segnalazione asse fermo
 +
 +;-------------------------------------------------------------------------------------
 +; Definizione Variabili OUTPUT
 +;-------------------------------------------------------------------------------------
 +OUTPUT
 +ofGTSet1    F    2.OUT01                 ;Segnalazione superamento setpoint 1 ->
 +ofLTSet2    F    2.OUT02                 ;Segnalazione superamento setpoint 2 <-
 +
 +;-------------------------------------------------------------------------------------
 +; Dichiarazione device interni
 +;-------------------------------------------------------------------------------------
 +INTDEVICE
 +;Nome  Tipo     TCamp   Contatore   Inter
 +Asse   COUNTER2 2       2.CNT01     1
 +
 +END
 +</code>
 +
 +==== - Gestione COUNTER2 ====
 +
 +<code QCL>
 +;*************************************************************************************
 +; Nome File: TASK_00.MOD
 +; Progetto : EX_COUNT
 +; Descrizione:Gestione Posizionamento
 +;*************************************************************************************
 +
 +;-------------------------------------------------------------------------------------
 +; Operazioni di Inizializzazione Asse
 +;-------------------------------------------------------------------------------------
 +Asse:cntratio = 100000                          ;Risoluz.encoder = Spazio in 1 giro
 +                                                ;encoder(Um) / impulsi giro encoder
 +Asse:capture = 1
 +IF slSet1 EQ 0
 +  slSet1 = 500
 +ENDIF
 +IF slSet2 EQ 0
 +  slSet2 = 100
 +ENDIF
 +
 +;-------------------------------------------------------------------------------------
 +; Ricerca di preset abilitata ad ogni passaggio sul finecorsa
 +; ---------------------------- variabili utilizzate ---------------------------------
 +; slPrsPos : Quota di preset impostata
 +;--------------------------------------------------------------------------------------
 +MAIN:
 +  IF ifAbilZ                                    ;Attende l'ingresso di abilitazione
 +                                                ;impulso di zero trasduttore
 +    INTENBL Asse                                ;Abilita la cattura dell'impulso di zero
 +                                                ;trasduttore
 +  ELSE
 +    INTDSBL Asse                                ;Disabilita la cattura dell'impulso di
 +                                                ;zero trasduttore
 +  ENDIF
 +  
 +IF Asse:st_capture                              ;Se è stato catturato il conteggio
 +  IF ifAxeFermo                                 ;Se l'asse è fermo
 +    Asse:delta = -(Asse:delta-slPrsPos)         ;Calcolo quota da sommare al conteggio
 +    DELCNT Asse                                 ;Imposto il nuovo valore del conteggio
 +    RSCAPTURE Asse                              ;Resetto st_capture dell'Asse
 +  ENDIF
 +ENDIF
 +
 +;-------------------------------------------------------------------------------------
 +; Comparazioni sul conteggio
 +; ----------------------------- variabili utilizzate --------------------------------
 +; slSet1: Quota di comparazione per uscita ofGTSet1
 +; slSet1: Quota di comparazione per uscita ofLTSet2
 +;-------------------------------------------------------------------------------------
 +IF Asse:posit GT slSet1                         ;Se il conteggio è > del setpoint 1
 +  SETOUT ofGTSet1                               ;Attiva l'uscita ofGTSet1
 +ELSE
 +  RESOUT ofGTSet1                               ;Disattiva l'uscita ofGTSet1
 +ENDIF
 +IF Asse:posit LT slSet2                         ;Se il conteggio è < del setpoint 2
 +  SETOUT ofLTSet2                               ;Attiva l'uscita ofLTSet2
 +ELSE
 +  RESOUT ofLTSet2                               ;Disattiva l'uscita ofLTSet2
 +ENDIF
 +
 +;-------------------------------------------------------------------------------------
 +; Operazioni finali
 +;-------------------------------------------------------------------------------------
 +  WAIT 1
 +  JUMP MAIN
 +  
 +END
 +</code>
 +