Differenze

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

Link a questa pagina di confronto

Prossima revisione
Revisione precedente
software:devices:counter3 [2014/10/23 14:57] – modifica esterna 127.0.0.1software:devices:counter3 [2020/07/13 15:06] (versione attuale) qem103
Linea 1: Linea 1:
 +====== DEVICE COUNTER3 ======
 +
 +
 +====== - Introduzione ======
 +
 +Il device COUNTER3 permette di acquisire un'informazione proveniente da un contatore bidirezionale. Le principali caratteristiche del device sono:
 +
 +  * conversione degli impulsi nell'unità di misura scelta dall'utente;
 +  * aggiornamento della posizione con recupero della frazione dell'unità di misura;
 +  * cattura del valore di posizione su attivazione di un ingresso digitale in interruzione;
 +  * comparazione tra la posizione rilevata e un valore di soglia per l'attivazione di uscite digitali.
 +
 +
 +===== - Dichiarazione del device=====
 +
 +Per poter usufruire del device è necessario eseguirne la dichiarazione nell'apposita sezione INTDEVICE della unit di configurazione. 
 +
 +<code QCL>
 +INTDEVICE
 +<device name> COUNTER3 <TCamp> <ICont> <IdxA> <Out1> <Out2>
 +</code>
 +
 +Dove:
 +^Nome campo^Descrizione^Esempio^Note^
 +|<device name>|Nome assegnato al device.|Count|-|
 +|COUNTER3|Parola chiave che identifica il device contatore bidirezionale.|-|-|
 +|<TCamp>|Tempo di campionamento device (1÷255 ms).|4|-|
 +|<ICont>|Indirizzo contatore presente nella scheda.|3.CNT01|Inserendo il valore X.X il campo viene ignorato|
 +|<IdxA>|Numero della linea di interrupt hardware per la cattura del conteggio|1|Inserendo il valore X il campo viene ignorato|
 +|<Out1>|Indirizzo uscita 1 di comparazione|3.OUT01|Inserendo il valore X.X il campo viene ignorato|
 +|<Out2>|Indirizzo uscita 2 di comparazione|3.OUT02|Inserendo il valore X.X il campo viene ignorato|
 +
 +** Esempio: **
 +<code QCL>
 +INTDEVICE
 +Count  COUNTER3  2  2.CNT02  3    2.OUT01  2.OUT02
 +</code>
 +
 +^:important:^Tutti i campi della dichiarazione sono obbligatori e devono essere presenti sulla stessa linea. Impostare "X.X" oppure "X" nel caso una risorsa non sia disponibile o non venga utilizzata. Disabilitare una risorsa significa disabilitare tutte le funzionalità del device che la utilizzano.^
 +
 +
 +===== - Descrizione del funzionamento =====
 +Lo schema a blocchi del device è presentato di seguito:\\
 +{{:software:devices:counter3:counter3_001.png?nolink&600|}}
 +
 +=== - Factors ===
 +Il blocco "Factors" calcola i fattori di conversione di posizione e velocità.
 +Il "position factor" (PF) è un coefficente per la conversione della posizione espressa con l'unità di misura del trasduttore nell'unità di misura della posizione(Um), e viceversa. Tipicamente l'unità di misura della posizione può essere ad esempio metri piuttosto che millimetri piuttosto che centesimi, mentre l'unità di misura del trasduttore, l'encoder, è sempre impulsi. I parametri che concorrono al calcolo del position factor sono //pulse// e //measure// ed è calcolato come rapporto tra questi due.
 +
 +=== - Acquisizione della posizione attuale su ingresso digitale per interruzione ===
 +
 +I comandi //INTENBL// e //INTDSBL// abilitano (//st_intenbl//=1) e disabilitano (//st_intenbl//=0) la linea di interrupt collegata all’impulso di zero del trasduttore o ad un altro sensore presente. 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//. Lo stato //st_capture// segnala che la cattura è avvenuta.
 +
 +=== - Comparatori ===
 +Il device mette a disposizione anche due comparatori che possono essere utilizzati per confrontare il valore corrente del parametro //posit// con due valori (//setpoint1// e //setpoint2//) introdotto dall'utente. Di conseguenza i comparatori agiranno su due uscita digitali, andando rispettivamente ad attivarle o disattivarle quando le soglie introdotte verranno superate secondo diverse condizioni.
 +Le uscite disponibili sono due (come si evince anche dalla dichiarazione del device e dallo schema) ed il livello di personalizzazione è molto elevato: si può scegliere per ogni comparatore quale uscita comandare, in base a quali condizioni.
 +Il parametro //mode1// (che controlla il comparatore 1) sceglie la politica di attivazione o disattivazione dell'uscita corrispondete rispettando determinate regole.
 +
 +{{:software:devices:counter3:counter3.png?nolink&600|}}
 +
 +Nella figura sono esemplificate le diverse modalità di funzionamento:
 +  * mode 0: l'uscita resta nel suo stato;
 +  * mode 1: l'uscita viene attivata quando la posizione in impulsi primari diventa maggiore del setpoint;
 +  * mode 2: l'uscita viene disattivata quando la posizione in impulsi primari diventa maggiore del setpoint;
 +  * mode 3: l'uscita viene attivata quando la posizione in impulsi primari diventa minore del setpoint;
 +  * mode 4: l'uscita viene disattivata quando la posizione in impulsi primari diventa minore del setpoint;
 +  * mode 5: l'uscita viene attivata quando la posizione in impulsi primari diventa maggiore del setpoint e viene disattivata quando la posizione in impulsi primari diventa minore del setpoint;
 +  * mode 6: l'uscita viene disattivata quando la posizione in impulsi primari diventa maggiore del setpoint e viene attivata quando la posizione in impulsi primari diventa minore del setpoint.
 +  * 
 +=== - Delta posizione attuale ===
 +
 +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:\\
 +<code QCL >
 +  Count.posit = Count.posit - 100
 +</code>
 +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.\\
 +A tale scopo esiste invece il comando DELCNT che permette di modificare il posit di un valore impostabile tramite il parametro //delta//.\\
 +Per esempio supponiamo di aver configurato //pulse// e //measure// in modo che la posizione sia espressa in decimi di grado. Se //posit// esprime la posizione angolare e vogliamo che questa sia sempre compresa tra zero e 360 gradi dovremmo aggiungere il seguente codice:
 +<code QCL >
 +  IF Count.posit GE 3600
 +    Count.delta = -3600
 +    Count.DELCNT
 +  ENDIF  
 +</code>
 +
 +Per le condizioni di esecuzione del comando vedere la descrizione dello stesso.
 +Il funzionamento del comando DELCNT è assicurato anche nel caso in cui una unità di misura non sia esprimibile in un numero finito di impulsi primari. Per esempio con i parametri measure = 1000 e pulse = 1024, il valore 3600 dell'esempio precedente corrisponde a 3686,4 impulsi. Grazie ad un sofisticato algoritmo interno il device riesce a considerare la parte frazionaria di questo valore e tramite degli accumulatori interni essa diventa parte dell'informazione utilizzata per modificare il valore di posit.\\
 +** Esempio: **\\
 +si supponga la seguente impostazione: //pulse// = 10, //measure// = 1. Si supponga inoltre che la lettura della posizione dell'asse risulti essere 2 e si trovi nel punto A. Si vogliono sommare alla posizione //posit// due unità di misura.
 +Con le istruzioni:
 +<code QCL>
 +  Count.posit = Count.posit + 2
 +</code>
 +l'asse assume la nuova posizione B.
 +Con le istruzioni:
 +<code QCL>
 +  Count.delta = 2
 +  Count.DELCNT Asse
 +</code>
 +viene raggiunta la posizione C.\\
 +
 +Si noti che se viene modificato direttamente //posit// senza utilizzare il comando //DELCNT// (come nel primo esempio) è introdotto un errore.
 +
 +{{:software:devices:counter3:counter3_02.png?nolink450|}}
 +
 +^:info:^Se si devono inviare comandi //DELCNT// in successione, è conveniente calcolare la grandezza da sommare ed inviare una sola volta il comando. Se ciò non fosse possibile bisogna prestare attenzione a non inviare comandi successivi senza interporre una istruzione di lettura su parametro device.\\ Esempio:\\ <code QCL>
 +Count.delta = 3
 +Count.DELCNT
 +WAIT Count.delta
 +Count.delta = 40
 +Count.DELCNT
 +</code>^
 +
 +
 +===== - Gestione errori device =====
 +
 +La presenza di un errore nel device viene segnalato dallo stato //st_error//.\\
 +Quando //st_error// è uguale a 1, troviamo presente sulla variabile //errcode// il tipo di errore intervenuto (vedi tabella) e nella variabile //errvalue// una indicazione sulla causa dell’errore.\\
 +Se il device va in errore, per poter riprendere la lavorazione bisogna cancellare lo stato //st_error// attraverso il comando //RSERR//.
 +
 +
 +===== - Gestione warning device =====
 +
 +La presenza di un warning nel device viene segnalato dallo stato //st_warning//.\\
 +Quando //st_warning// è uguale a 1, troviamo presente sulla variabile //wrncode// il tipo di warning intervenuto (vedi tabella) e nella variabile //wrnvalue// una indicazione sulla causa che ha provocato il warning.
 +
 +^Codice^Priorità^Descrizione^
 +|1|0|Comando non eseguito|
 +
 +Per cancellare lo stato //st_warning// bisogna inviare il comando //RSWRN//.
 +
 +
 +===== - Elenco Parametri =====
 +
 +===measure===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Misura di riferimento per il calcolo del fattore di conversione tra impulsi primari ed unità di misura|
 +|dim=Long|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=Um|
 +|id= - |
 +|range=1÷999999|
 +|wrcond=-|
 +|longdescr=Indica lo spazio, in unità di misura, percorso dall'asse per ottenere gli impulsi primari impostati nel parametro pulse. Questo parametro è utilizzato per il calcolo del fattore di conversione tra impulsi primari ed unità di misura.\\
 +//posit// = //encoder// * //measure// / //pulse// \\
 +Il rapporto //measure// / //pulse// deve avere un valore compreso tra 0.00935 e 1.}}
 +
 +----
 +===pulse===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Numero di impulsi primari per il calcolo del fattore di conversione tra impulsi primari e unità di misura|
 +|dim=Long|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um= - |
 +|id= - |
 +|range=1÷999999|
 +|wrcond=-|
 +|longdescr=Indica il numero di impulsi primari che genererà il trasduttore bidirezionale per ottenere un movimento pari a measure. Questo parametro è utilizzato per il calcolo del fattore di conversione tra impulsi primari ed unità di misura.\\
 +//posit// = //encoder// * //measure// / //pulse// \\
 +Il rapporto  //measure// / //pulse// deve avere un valore compreso tra 0.00935 e 1.}}
 +
 +----
 +===posit===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Posizione attuale in unità di misura|
 +|dim=Long|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=Um|
 +|id= - |
 +|range= - |
 +|wrcond=-|
 +|longdescr=È il valore della posizione istantanea dell'asse in unità di misura.\\
 +//posit// = //encoder// * //measure// / //pulse//.}}
 +
 +----
 +===encoder===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Posizione attuale in impulsi primari|
 +|dim=Long|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=Impulsi primari|
 +|id= - |
 +|range=-|
 +|wrcond=-|
 +|longdescr=Esprime la posizione attuale in impulsi primari.}}
 +
 +----
 +===delta===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Variazione della posizione attuale per l'utilizzo del comando DELCNT|
 +|dim=Long|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=Um|
 +|id= - |
 +|range=-999999÷999999|
 +|wrcond=-|
 +|longdescr=È il valore che viene sommato alla posizione attuale quando viene inviato un comando DELCNT. Inoltre sul parametro //delta// viene memorizzata la posizione quando si utilizza l'acquisizione sull'attivazione di un ingresso digitale per interruzione.}}
 +
 +----
 +===axetype===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Tipo di asse|
 +|dim=Flag|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=-|
 +|id= - |
 +|range=-999999÷999999|
 +|wrcond=-|
 +|longdescr=Permette di selezionare il tipo di asse con cui si sta lavorando:
 +  * 0: asse lineare,
 +  * 1: asse circolare (angolare). Il conteggio riparte da zero dopo aver raggiunto il valore di //measure//.}}
 +
 +----
 +===capture===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Modalità di cattura della posizione su attivazione di un ingresso digitale per interruzione|
 +|dim=Byte|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=-|
 +|id= - |
 +|range=0÷2|
 +|wrcond=-|
 +|longdescr=Il parametro definisce il modo di cattura della posizione in impulsi primari sull'attivazione di un ingresso digitale per interruzione :
 +  * 0: disabilitato,
 +  * 1: One-shot su fronte di discesa. Viene catturata la posizione istantanea in impulsi primari sul primo fronte di discesa del segnale dell'ingresso digitale;
 +per interruzione dopo l'attivazione di //st_intenbl//;
 +  * 2: One-shot su fronte di salita. Viene catturata la posizione istantanea in impulsi primari sul primo fronte di salita del segnale dell'ingresso digitale per interruzione dopo l'attivazione di //st_intenbl//.}}
 +
 +----
 +===tbf===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Tempo di campionamento del frequenzimetro|
 +|dim=Byte|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=-|
 +|id= - |
 +|range=0÷5|
 +|wrcond=-|
 +|longdescr=Definisce il tempo di campionamento del frequenzimetro:
 +  * 0: 240 ms,
 +  * 1: 480 ms,
 +  * 2: 24 ms,
 +  * 3: 120 ms,
 +  * 4: 960 ms,
 +  * 5: 1200 ms.
 +Il device, per il calcolo della frequenza dei segnali in ingresso al contatore bidirezionale (parametro frq), conta il numero di impulsi ricevuti in un intervallo di tempo definito tramite il parametro //tbf// e calcola un valore medio. Minore è il tempo di campionamento più veloce sarà l'aggiornamento del parametro //frq//, ma bisogna prestare attenzione a basse frequenze perché il tempo di campionamento non potrebbe essere sufficientemente lungo per raccogliere campioni.}}
 +
 +----
 +===frq===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Frequenza dei segnali di ingresso|
 +|dim=Long|
 +|default=0|
 +|accesstype=Read|
 +|um=Hz|
 +|id= - |
 +|range=-|
 +|wrcond=-|
 +|longdescr=È il valore della frequenza dei segnali in ingresso al contatore bidirezionale. L'aggiornamento è eseguito con frequenza dettata dal tempo di campionamento
 +scelto tramite il parametro //tbf//.}}
 +
 +----
 +===mode1===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Modalità di comando dell'uscita indicata in selout1 da parte del comparatore|
 +|dim=Byte|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=-|
 +|id= - |
 +|range=0÷6|
 +|wrcond=-|
 +|longdescr=Con questo parametro si decidono le regole di attivazione e disattivazione dell'uscita indicata nel parametro //selout1// da parte del comparatore.}}
 +
 +----
 +===selout1===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Uscita comandata dal comparatore 1|
 +|dim=Byte|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=-|
 +|id= - |
 +|range=0÷1|
 +|wrcond=-|
 +|longdescr=Indica quale uscita viene comandata dal comparatore 1:
 +  * 0: Out1,
 +  * 1: Out2.}}
 +
 +----
 +===setpoint1===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Soglia di comparazione per il comparatore 1|
 +|dim=Long|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=Um|
 +|id= - |
 +|range=-999999÷999999|
 +|wrcond=-|
 +|longdescr=Definisce il setpoint (la soglia) con cui viene confrontato il valore istantaneo di posizione in impulsi primari. L'uscita modificata di conseguenza è quella
 +indicata dal parametro //selout1//.}}
 +
 +----
 +===timer1===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Tempo di ritardo di attivazione dell'uscita selout1|
 +|dim=Word|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=ms|
 +|id= - |
 +|range=-999999÷999999|
 +|wrcond=-|
 +|longdescr=Relativamente all'uscita indicata da //selout1//, questo parametro definisce un intervallo di tempo che intercorre tra l'evento che comanda la commutazione dell'uscita e la commutazione vera e propria (in altre parole viene introdotto un ritardo alla attivazione o disattivazione dell'uscita digitale.)}}
 +
 +----
 +===mode2===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Modalità di comando dell'uscita indicata in selout1 da parte del comparatore|
 +|dim=Byte|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=-|
 +|id= - |
 +|range=0÷6|
 +|wrcond=-|
 +|longdescr=Con questo parametro si decidono le regole di attivazione e disattivazione dell'uscita indicata nel parametro //selout2// da parte del comparatore.}}
 +
 +----
 +===selout2===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Uscita comandata dal comparatore 1|
 +|dim=Byte|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=-|
 +|id= - |
 +|range=0÷1|
 +|wrcond=-|
 +|longdescr=Indica quale uscita viene comandata dal comparatore 2:
 +  * 0: Out1,
 +  * 1: Out2.}}
 +
 +----
 +===setpoint2===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Soglia di comparazione per il comparatore 1|
 +|dim=Long|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=Um|
 +|id= - |
 +|range=-999999÷999999|
 +|wrcond=-|
 +|longdescr=Definisce il setpoint (la soglia) con cui viene confrontato il valore istantaneo di posizione in impulsi primari. L'uscita modificata di conseguenza è quella
 +indicata dal parametro //selout2//.}}
 +
 +----
 +===timer2===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Tempo di ritardo di attivazione dell'uscita selout1|
 +|dim=Word|
 +|default=Ritentivo|
 +|accesstype=Read - Write|
 +|um=ms|
 +|id= - |
 +|range=-999999÷999999|
 +|wrcond=-|
 +|longdescr=Relativamente all'uscita indicata da //selout2//, questo parametro definisce un intervallo di tempo che intercorre tra l'evento che comanda la commutazione dell'uscita e la commutazione vera e propria (in altre parole viene introdotto un ritardo alla attivazione o disattivazione dell'uscita digitale.)}}
 +
 +----
 +===errcode===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Codice di identificazione errore|
 +|dim=Byte|
 +|default=0|
 +|accesstype=Read|
 +|um=-|
 +|id= - |
 +|range=0÷100|
 +|wrcond=-|
 +|longdescr=Indica il tipo di errore intervenuto nel sistema. Quando //st_error = 1// si trova presente sulla variabile errcode il tipo di errore intervenuto e nella variabile errvalue una indicazione sulla causa dell'errore. Se il device va in errore, per riprendere la lavorazione bisogna cancellare lo stato st_error attraverso il comando //RSERR//.\\
 +Questo device non prevede alcun codice di errore.)}}
 +
 +----
 +===errvalue===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Codice di identificazione della causa dell'errore|
 +|dim=Byte|
 +|default=0|
 +|accesstype=Read|
 +|um=-|
 +|id= - |
 +|range=0÷100|
 +|wrcond=-|
 +|longdescr=Indica la causa dell'errore intervenuto nel sistema. Il codice è valido solo se //st_error// = 1.)}}
 +
 +----
 +===wrncode===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Codice di identificazione warning|
 +|dim=Byte|
 +|default=0|
 +|accesstype=Read|
 +|um=-|
 +|id= - |
 +|range=0÷100|
 +|wrcond=-|
 +|longdescr=Indica il tipo di warning intervenuto nel sistema. Lo stato //st_warning// indica un evento non grave che garantisce comunque il funzionamento del device.
 +Quando //st_warning// è uguale a 1, troviamo presente nella variabile //wrncode// il tipo di warning intervenuto (vedi tabella) e nella variabile //wrnvalue// una indicazione sulla causa che ha provocato il warning. Per cancellare lo stato //st_warning// bisogna inviare il comando //RSWRN//.)}}
 +
 +^Codice^Priorità^Descrizione^
 +|  1  |  0  |Comando non eseguito|
 +----
 +===wrnvalue===
 +{{template>lib:tpl:tpl-s-tapardev-010
 +|shortdescr=Codice di identificazione della causa del warning|
 +|dim=Byte|
 +|default=0|
 +|accesstype=Read|
 +|um=-|
 +|id= - |
 +|range=0÷100|
 +|wrcond=-|
 +|longdescr=Indica la causa del warning intervenuto nel sistema.)}}
 +
 +----
 +
 +===== - Elenco Stati =====
 +===st_cntlock===
 +{{template>lib:tpl:tpl-s-statedev-010
 +|shortdescr=Stato di aggiornamento posizione disabilitato|
 +|default= Ritentivo|
 +|id= -|
 +|longdescr=Segnalazione di aggiornamento posizione bloccato:
 +  * 0: aggiornamento posizione abilitato,
 +  * 1: aggiornamento posizione disabilitato }}
 +------
 +
 +===st_cntrev===
 +{{template>lib:tpl:tpl-s-statedev-010
 +|shortdescr=Stato di inversione aggiornamento posizione|
 +|default= Ritentivo|
 +|id= -|
 +|longdescr=Segnalazione di aggiornamento posizione invertito:
 +  * 0: aggiornamento posizione non invertito,
 +  * 1: aggiornamento posizione invertito }}
 +------
 +
 +===st_intenbl===
 +{{template>lib:tpl:tpl-s-statedev-010
 +|shortdescr=Stato di attivazione dell'ingresso digitale per interruzione|
 +|default= 0|
 +|id= -|
 +|longdescr=Segnala l'abilitazione alla cattura della posizione istantanea dell'ingresso digitale per interruzione; viene attivato dal comando //INTENBL// e disattivato dal comando //INTDSBL// o sul fronte di salita di //st_capture//.}}
 +------
 +
 +===st_capture===
 +{{template>lib:tpl:tpl-s-statedev-010
 +|shortdescr=Attivazione della cattura della posizione istantanea|
 +|default= 0|
 +|id= -|
 +|longdescr=Viene attivato alla cattura della posizione istantanea, è resettato tramite il comando //RSCAPTURE//.}}
 +------
 +
 +===st_int===
 +{{template>lib:tpl:tpl-s-statedev-010
 +|shortdescr=Stato dell'ingresso digitale per interruzione|
 +|default= 0|
 +|id= -|
 +|longdescr=Indica lo stato dell'ingresso digitale per interruzione :
 +  * 0: ingresso digitale per interruzione disattivo,
 +  * 1: ingresso digitale per interruzione attivo.}}
 +------
 +
 +===st_cmp1===
 +{{template>lib:tpl:tpl-s-statedev-010
 +|shortdescr=Stato della comparazione 1|
 +|default= 0|
 +|id= -|
 +|longdescr=Segnalazione di attivazione della comparazione 1:
 +  * 0: comparazione 1 disattiva,
 +  * 1: comparazione 1 attiva}}
 +------
 +
 +===st_cmp2===
 +{{template>lib:tpl:tpl-s-statedev-010
 +|shortdescr=Stato della comparazione 2|
 +|default= 0|
 +|id= -|
 +|longdescr=Segnalazione di attivazione della comparazione 2:
 +  * 0: comparazione 2 disattiva,
 +  * 1: comparazione 2 attiva}}
 +------
 +
 +===st_error===
 +{{template>lib:tpl:tpl-s-statedev-010
 +|shortdescr=Presenza di un errore|
 +|default= 0|
 +|id= -|
 +|longdescr=Indica lo stato di errore del device, per riconoscere il tipo di errore si deve far riferimento alle variabili //errcode// ed //errvalue//:
 +  * 0: errore non presente,
 +  * 1: errore presente}}
 +------
 +
 +===st_warning===
 +{{template>lib:tpl:tpl-s-statedev-010
 +|shortdescr=Presenza di un warning|
 +|default= 0|
 +|id= -|
 +|longdescr=Indica lo stato di warning del device, per riconoscere il tipo di warning si deve far riferimento alle variabili //wrncode// e //wrnalue//:
 +  * 0: warning non presente,
 +  * 1: warning presente}}
 +------
 +
 +===== - Elenco Comandi =====
 +I comandi a disposizione per gestire il device sono qui elencati in ordine di piorità decrescente. Esistono due vie alternative per eseguire un comando:
 + * Tramite i pannelli watches di QView
 + * Con una istruzione QCL
 +
 +Nel secondo caso l'esecuzione del programma QCL sarà bloccata fino al termine del comando stesso la cui durata è comunque compresa fra 0 e 2 tempi di campionamento. 
 +
 +===CNTLOCK===
 +{{template>lib:tpl:tpl-s-cmddevice-010
 +|cond= - |
 +|shortdescr=Disabilita l'aggiornamento della posizione attuale|
 +|id= -|
 +|longdescr=Disabilita l'aggiornamento della posizione attuale. In questa situazione l'eventuale spostamento dell'asse non viene rilevato.}}
 +---------
 +
 +===CNTUNLOCK===
 +{{template>lib:tpl:tpl-s-cmddevice-010
 +|cond= - |
 +|shortdescr=Abilita l'aggiornamento della posizione attuale|
 +|id= -|
 +|longdescr=Abilita l'aggiornamento della posizione attuale.}}
 +---------
 +
 +===CNTREV===
 +{{template>lib:tpl:tpl-s-cmddevice-010
 +|cond= - |
 +|shortdescr=Inversione dell'aggiornamento posizione|
 +|id= -|
 +|longdescr=Consente di invertire il segno dell'aggiornamento posizione; lo stato //st_cntrev// è posto a 1.}}
 +---------
 +
 +===CNTDIR===
 +{{template>lib:tpl:tpl-s-cmddevice-010
 +|cond= - |
 +|shortdescr=Aggiornamento posizione non invertita|
 +|id= -|
 +|longdescr=Disabilita una eventuale inversione dell'aggiornamento posizione; lo stato //st_cntrev// è posto a zero.}}
 +---------
 +
 +===INTENBL===
 +{{template>lib:tpl:tpl-s-cmddevice-010
 +|cond= capture>0 |
 +|shortdescr=Abilitazione della cattura della posizione istantanea su attivazione dell'ingresso digitale per interruzione|
 +|id= -|
 +|longdescr=Attiva la cattura della posizione attuale sulla attivazione dell'ingresso digitale per interruzione dedicata, il valore verrà memorizzato nel parametro delta.
 +Attiva lo stato //st_intenbl//.}}
 +
 +===INTDSBL===
 +{{template>lib:tpl:tpl-s-cmddevice-010
 +|cond= - |
 +|shortdescr=Disabilitazione della cattura della posizione attuale su attivazione dell'ingresso digitale per interruzione|
 +|id= -|
 +|longdescr=Disattiva la cattura della posizione attuale sulla attivazione dell'ingresso digitale per interruzione dedicata.
 +Disattiva lo stato //st_intenbl//.}}
 +---------
 +
 +===RSCAPTURE===
 +{{template>lib:tpl:tpl-s-cmddevice-010
 +|cond= - |
 +|shortdescr=Disattivazione dello stato di cattura|
 +|id= -|
 +|longdescr=Disattiva lo stato di capture //st_capture//.}}
 +---------
 +
 +===DELCNT===
 +{{template>lib:tpl:tpl-s-cmddevice-010
 +|cond= st_intenbl=0 |
 +|shortdescr=Comando di modifica di //posit// di un valore pari a //delta//|
 +|id= -|
 +|longdescr=La posizione dell'asse viene modificata sommandogli algebricamente il valore specificato nella variabile //delta//.}}
 +---------
 +
 +===SETCMP1===
 +{{template>lib:tpl:tpl-s-cmddevice-010
 +|cond= - |
 +|shortdescr=Attivazione della comparazione 1|
 +|id= -|
 +|longdescr=Forza l'attivazione dello stato //st_cmp1//.}}
 +---------
 +
 +===RESCMP1===
 +{{template>lib:tpl:tpl-s-cmddevice-010
 +|cond= - |
 +|shortdescr=Reset della comparazione 1|
 +|id= -|
 +|longdescr=Azzera lo stato //st_cmp1//.}}
 +---------
 +
 +===SETCMP2===
 +{{template>lib:tpl:tpl-s-cmddevice-010
 +|cond= - |
 +|shortdescr=Attivazione della comparazione 2|
 +|id= -|
 +|longdescr=Forza l'attivazione dello stato //st_cmp2//.}}
 +---------
 +
 +===RESCMP2===
 +{{template>lib:tpl:tpl-s-cmddevice-010
 +|cond= - |
 +|shortdescr=Reset della comparazione 2|
 +|id= -|
 +|longdescr=Azzera lo stato //st_cmp2//.}}
 +---------
 +
 +===RSERR===
 +{{template>lib:tpl:tpl-s-cmddevice-010
 +|cond= - |
 +|shortdescr=Reset dello stato di errore|
 +|id= -|
 +|longdescr=Azzera lo stato //st_error//.}}
 +---------
 +
 +===RSWRN===
 +{{template>lib:tpl:tpl-s-cmddevice-010
 +|cond= - |
 +|shortdescr=Reset dello stato di warning|
 +|id= -|
 +|longdescr=Azzera lo stato //st_warning//.}}
 +---------
 +
 +===== - Limitazioni =====
 +
 +Se vengono modificati i parametri //measure// o //pulse// successivamente all’invio del comando //DELCNT//, vengono azzerati i resti della conversione del “delta spazio” in impulsi.
 +
 +
 +===== - Esempio applicativo =====
 +
 +^:info:^Questo esempio è compilabile nell'ambiente QView 6.0 o superiori.^
 +
 +==== - Unit di configurazione ====
 +
 +<code QCL>
 +;*************************************************************************************
 +; COUNTER3 example
 +;*************************************************************************************
 +
 +; Bus declaration
 +BUS
 +  1  1K31F    20
 +  2  .        .
 +  3  1MG8F    .
 +  4  .
 +
 +; Input declaration
 +INPUT
 +  ifEnableZ         3.INP01        ;Zero pulse capture enabling
 +  ifEnableComp  F     3.INP03        ;Comparation enabling
 +
 +; Output declaration
 +OUTPUT
 +  out201      F     3.OUT01        ;Comparation output #1
 +  out202      F     3.OUT02        ;Comparation output #2 
 +
 +; Device declaration
 +INTDEVICE
 +Count    COUNTER3         3.CNT01           3.OUT01  3.OUT02
 +
 +END
 +</code>
 +
 +==== - Unit di gestione del COUNTER3 ====
 +
 +<code QCL>
 +SYSTEM
 +  slPrsPos    IN               ;Quota di preset
 +  slSet1      IN               ;Setpoint 1
 +  slSet2      IN               ;Setpoint 2
 +
 +GLOBAL
 +  gfApp01    F
 +  gfApp02    F
 +
 +BEGIN
 +;-------------------------------------------------------------------------------------
 +; Initialization
 +;-------------------------------------------------------------------------------------
 +Count.measure = 1000             ;measure per round
 +Count.pulse = 1000               ;pulse per round
 +
 +Count.capture = 1                ;set capture on rise edge
 +IF slSet1 EQ 0
 +  slSet1 = 500                   ;Default value 
 +ENDIF
 +IF slSet2 EQ 0
 +  slSet2 = 100                   ;Default value
 +ENDIF
 +
 +MAIN:
 +
 +
 +  IF ifEnableZ                                 ;If the input is ON
 +    Count.INTENBL                              ;Zero pulse enabling
 +  ELSE
 +    Count.INTDSBL                              ;Zero pulse disabling
 +  ENDIF
 +
 +  IF Count.st_capture                          ;When the count has captured
 +    Count.delta = -(Count.delta - slPrsPos)    ;load delta
 +    Count.DELCNT                               ;Set the new position
 +    Count.RSCAPTURE                            ;Reset the capture
 +  ENDIF
 +
 +  IF ifEnableComp                              ;When it is enabled
 +    IF NOT gfApp01
 +      Count.mode1 = 5                           ;Set Mode1 for comparation 1
 +      Count.selout1 = 0                         
 +      Count.setpoint1 = slSet1
 +      Count.timer1 = 0
 +      Count.mode2 = 6                           ;Set Mode2 for comparation 2
 +      Count.selout2 = 1                         
 +      Count.setpoint2 = slSet2
 +      Count.timer2 = 0
 +      gfApp01 = 1
 +      gfApp02 = 0
 +    ENDIF
 +  ELSE                                         ;When it is not enabled
 +    IF NOT gfApp02
 +      Count.mode1 = 0                           ;Comparation 1 disabled
 +      RESOUT out201                            ;Reset output
 +      Count.selout1 = 0
 +      Count.mode2 = 0                           ;Comparation 1 disabled  
 +      RESOUT out202                            ;Reset output
 +      Count.selout2 = 1
 +      gfApp01 = 0
 +      gfApp02 = 1
 +    ENDIF
 +  ENDIF
 +
 +  WAIT 1
 +  JUMP MAIN
 +
 +END
 +</code>
 +