software:devices:aninp2

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:aninp2 [2016/10/03 16:04] – [8.9.3. Stati] qem103software:devices:aninp2 [2025/01/21 11:23] (versione attuale) – [1.8.1 Unit di configurazione] qem218
Linea 1: Linea 1:
 +====== DEVICE ANINP2 ======
 +
 +
 +====== - Introduzione ======
 +
 +  * Il device gestisce la lettura ed elaborazione di un ingresso analogico.
 +  * Il dato letto è una word a 16 bit con segno alla quale è possibile sommare un offset, inserire un fattore di scala ed attivare un filtro software passa basso del tipo RC.
 +  * Le specifiche di risoluzione dell’ingresso vengono riportate nel fascicolo hardware della scheda.
 +  * Le uscite sono programmabili per eseguire comparazioni sull’ingresso analogico
 +
 +{{ :software:devices:aninp2:aninp2_01.png?nolink500 |}}
 +
 +===== - Installazione =====
 +
 +Dichiarazione del device nella unit di configurazione
 +Nella unit di configurazione, la sezione BUS deve essere dichiarata in modo tale che siano
 +presenti le risorse hardware necessarie all’implementazione del device ANINP2. Deve essere
 +presente almeno un ingresso analogico con risoluzione massima di 16 bit.\\
 +Nella sezione INTDEVICE della unit di configurazione deve essere aggiunta la seguente definizione:
 +
 +<code QCL>
 +;---------------------------------
 +; Dichiarazione devices
 +;---------------------------------
 +INTDEVICE
 +...
 +<nome device>   ANINP2   Tcamp   IChn   Type     Out1 Out2
 +</code>
 +
 +dove:
 +|<nome device>|Nome assegnato al device|
 +|ANINP2|Parola chiave che identifica il device ingresso analogico|
 +|Tcamp|Tempo campionamento device (1÷255 ms)|
 +|IChn|indirizzo ingresso ADC|
 +|Type|Numero indentificativo tipo di ingresso (fare riferimento alla scheda tecnica hardware)|
 +|Out1|Indirizzo uscita 1 di comparazione (per evitare che il device utilizzi questa risorsa inserire il carattere X.X)|
 +|Out2|Indirizzo uscita 2 di comparazione (per evitare che il device utilizzi questa risorsa inserire il carattere X.X)|
 +
 +===== - Esempio =====
 +
 +<code QCL>
 +;---------------------------------
 +; Dichiarazione devices
 +;---------------------------------
 +INTDEVICE
 +Asse_X   ANINP2     2.AI01     2.OUT01   2.OUT02
 +</code>
 +
 +===== - Funzionamento =====
 +
 +All'accensione del sistema, il device controlla la corretta dichiarazione del tipo di ingresso da
 +utilizzare, definito nella unit di configurazione (Type).\\
 +Se la diagnostica del canale si conclude con successo, viene eseguito l'aggiornamento dei dati
 +sulla base del tempo di campionamento. Nel caso vengano riscontrati errori o imprecisioni, lo
 +stato //st_errcfg// viene impostato a uno ed il valore della variabile //outbit// viene forzato a zero.
 +La conversione del dato in uscita dal device (//outbit//), nell'unità di misura necessaria per l'applicazione,
 +viene eseguita ricorrendo a dei fattori di scala (//scaleA//, //scaleB// e //scaleC//) secondo la
 +formula:
 +
 +//**outUm = (scaleA x outbit / scaleB) + scaleC**//
 +
 +Oltre a questa uscita aggiornata sulla base del tempo di campionamento del device, è disponibile
 +l'uscita //outUmF//, filtrata con un tempo di carica programmabile (espresso in ms).
 +
 +^:info:^Questa funzionalità permette di filtrare eventuali disturbi e fluttuazioni sovrapposte al segnale utile con la possibilità di personalizzare il tempo di carica del filtro (//tfilter//).^
 +
 +{{:software:devices:aninp2:aninp2_02.png?nolink500}}
 +
 +==== - Gestione uscite ====
 +
 +Il device ha la possibilità di gestire delle comparazioni sull’ingresso analogico mediato (//outUmF//)
 +e variare lo stato delle uscite programmabili in modalità one shot (singola attivazione).\\
 +Ogni uscita ha la possibilità di essere gestita nei modi seguenti:
 +
 +|{{:software:devices:aninp2:aninp2_03.png?nolink250}}|Attivazione al superamento del setpoint con l’ingresso che si incrementa|
 +|{{:software:devices:aninp2:aninp2_04.png?nolink250|}}|Disattivazione al superamento del setpoint con l’ingresso che si incrementa|
 +|{{:software:devices:aninp2:aninp2_05.png?nolink250|}}|Attivazione al superamento del setpoint con l’ingresso che si decrementa|
 +|{{:software:devices:aninp2:aninp2_06.png?nolink250|}}|Disattivazione al superamento del setpoint con l’ingresso che si decrementa|
 +|{{:software:devices:aninp2:aninp2_07.png?nolink250|}}|Attivazione al superamento del setpoint con l’ingresso che si incrementa e disattivazione al superamento del setpoint con l’ingresso che si decrementa|
 +|{{:software:devices:aninp2:aninp2_08.png?nolink250|}}|Disattivazione al superamento del setpoint con l’ingresso che si incrementa e attivazione al superamento del setpoint con l’ingresso che si decrementa|
 +
 +==== - Isteresi ====
 +
 +Il device ha la possibilità di gestire le comparazioni delle uscite con un interesi.\\
 +Ogni volta che il device varia lo stato di un uscita, la comparazione viene disabilitata finché
 +l’ingresso non si discosta dal punto del setpoint del valore di isteresi.\\
 +Nello specifico la comparazione si ri-arma quando l’ingresso assume i valori riportati negli esempi
 +a seguito:\\
 +|Mode = 1|outUmF = setpoint - hysteresis|
 +|Mode = 2|outUmF = setpoint - hysteresis|
 +|Mode = 3|outUmF = setpoint + hysteresis|
 +|Mode = 4|outUmF = setpoint + hysteresis|
 +Se si utilizzano i modi 5 e 6, l’uscita si comporterà nel modo seguente:
 +| |Attivazione|Disattivazione|
 +|Mode = 5|outUmF = setpoint|outUmF = setpoint - hysteresis|
 +|Mode = 6|outUmF = setpoint - hysteresis|outUmF = setpoint|
 +
 +===== - 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
 +
 +^Codice^Priorità^Descrizione^
 +|-|-|-|
 +
 +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 sistema camming viene segnalato dallo stato //st_warning//.\\
 +Essendo causato da un evento non grave ed essendo garantita in questa situazione la gestione
 +dell’asse slave, l’asse slave continua il suo lavoro.\\
 +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//.
 +
 +===== - 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 indica lo stato che assume al momento
 +dell’inizializzazione del device.\\
 +Se il device non necessita di inizializzazione il campo “R” indica il valore che il parametro o stato
 +assume all’accensione della scheda.\\
 +R = Ritentivo\\
 +0 = Al momento dell’inizializzazione del device il valore viene forzato a zero.\\
 +1 = Al momento dell’inizializzazione del device il valore viene forzato a uno.\\
 +- = Al momento dell’inizializzazione del device viene presentato il valore significativo.
 +
 +**D**\\
 +Indica la dimensione del parametro.\\
 +F = Flag\\
 +B = Byte\\
 +W = Word\\
 +L = Long\\
 +S = Single Float
 +
 +=== - Condizioni ===
 +Vengono descritte tutte le **condizioni necessarie affinché il parametro sia considerato corretto o perché il comando venga accettato**.\\
 +In alcuni casi vengono specificati dei valori limite per l’accettazione del parametro: se vengono introdotti dei valori esterni ai limiti impostati, il dato viene comunque accettato; pertanto devono essere previsti opportuni controlli dell’applicativo tali da garantire il corretto funzionamento.\\
 +Per l’esecuzione di un comando, tutte le relative condizioni devono necessariamente essere soddisfatte; in caso contrario il comando non viene eseguito.
 +
 +**A**\\
 +Indica la modalità di accesso.\\
 +R = Read (lettura).\\
 +W = Write (scrittura).\\
 +RW = Read / Write.\\
 +
 +==== - Parametri ====
 +
 +^Nome^D^R^A^Condizioni^Descrizione^
 +|outbit|W|-|R|Nessuna|**Output measure in bits**\\ Valore letto dal canale di ingresso compensato dell'Offset.\\ Range valido: 0 ÷ 32767|
 +|offset|W|R|RW|Nessuna|**Offset compensation**\\ Offset uscita DAC in bit. Definisce il valore in bit della correzione relativa all'ingresso analogico in modo da compensare l'eventuale deriva del sistema.\\ Range valido: -32768 ÷ 32767|
 +|scaleA|W|R|RW|Nessuna|**Scale A**\\ Valore intero parametro A formula di scaling.\\ Range valido: -32768 ÷ 32767|
 +|scaleB|W|R|RW|Nessuna|**Scale B**\\ Valore parametro B utilizzato nella formula di scaling. Deve essere necessariamente diverso da zero.\\ Range valido: -32768 ÷ 32767|
 +|scaleC|W|R|RW|Nessuna|**Scale C**\\Valore parametro C utilizzzato nella formula di scaling.\\ Range valido: -32768 ÷ 32767|
 +|outUm|L|-|R|Nessuna|**Output measure in unity**\\ Uscita derivata dalla formula di scaling.\\ Range valido: -32768 ÷ 32767|
 +|tfilter|W|R|RW|Nessuna|**Filter time**\\ Tempo di carica del filtro RC. Se tfilter < = Tcamp device, il filtro è disattivato. Valore espresso in unità ms.\\ Range valido: 0 ÷ 32767|
 +|outUmF|L|-|R|Nessuna|**Filtered output in unity of measure**\\ Uscita in unità di misura, filtrata.\\ Range valido: -32768 ÷ 32767|
 +|hysteresis|L|R|RW|Nessuna|**Comparation hysteresis**\\ Isteresi delle comparazioni per la gestione delle uscite. Vedi capitolo dedicato.\\ Range valido: -32768 ÷ 32767|
 +|mode1|B|R|R-W|Nessuna|**Function mode 1**\\ Definisce il tipo di comparazione da eseguire sull'uscita indicata nel parametro //selout1//.\\ **0** = L'uscita permane nello stato in cui si trova\\ **1** = Attivazione al passaggio per il setpoint con l'ingresso che si incrementa\\ **2** = Disattivazione al passaggio per il setpoint con il conteggio che si incrementa\\ **3** = Attivazione al passaggio per il setpoint con l'ingresso che si decrementa\\ **4** = Disattivazione passaggio per il setpoint con l'ingresso che si decrementa\\ **5** = Attivazione passaggio per il setpoint con l'ingresso che si incrementa e disattivazione passaggio per il setpoint con l'ingresso che si decrementa\\ **6** = Disattivazione passaggio per il setpoint con l'ingresso che si incrementa e attivazione al passaggio per il setpoint con l'ingresso che si decrementa\\ Range valido: 0 ÷ 6.|
 +|selout1|B|R|R-W|Nessuna|**Output selection1**\\ Indica su quale uscita viene eseguita l'azione della prima comparazione\\ **0** = Out1\\ **1** = Out2\\ Range valido: 0 ÷ 1.|
 +|setpoint1|L|R|R-W|Nessuna|**Set point 1**\\ Definisce il setpoint della comparazione da eseguire sull'uscita indicata nel parametro //selout1//.\\ Range valido: -999999 ÷ 999999.|
 +|timer1|W|R|R-W|Nessuna|**Timer 1**\\ Definisce il timer da porre in esecuzione sull'uscita indicata nel parametro //selout1//.\\ Range valido: 0 ÷ 32767.|
 +|mode2|B|R|R-W|Nessuna|**Function mode 2**\\ Definisce il tipo di comparazione da eseguire sull'uscita indicata nel parametro //selout2//.\\ **0** = L'uscita permane nello stato in cui si trova\\ **1** = Attivazione al passaggio per il setpoint con l'ingresso che si incrementa\\ **2** = Disattivazione al passaggio per il setpoint con l'ingresso che si incrementa\\ **3** = Attivazione al passaggio per il setpoint con l'ingresso che si decrementa\\ **4** = Disattivazione passaggio per il setpoint con l'ingresso che si decrementa\\ **5** = Attivazione passaggio per il setpoint con l'ingresso che si incrementa e disattivazione passaggio per il setpoint con l'ingresso che si decrementa\\ **6** = Disattivazione passaggio per il setpoint con l'ingresso che si incrementa e attivazione al passaggio per il setpoint con il conteggio che si decrementa\\ Range valido: 0 ÷ 6.|
 +|selout2|B|R|R-W|Nessuna|**Output selection2**\\ Indica su quale uscita viene eseguita l'azione della seconda comparazione\\ **0** = Out1\\ **1** = Out2\\ Range valido: 0 ÷ 1.|
 +|setpoint2|L|R|R-W|Nessuna|**Set point 2**\\ Definisce il setpoint della comparazione da eseguire sull'uscita indicata nel parametro //selout2//.\\ Range valido: -999999 ÷ 999999.|
 +|timer2|W|R|R-W|Nessuna|**Timer 2**\\ Definisce il timer da porre in esecuzione sull'uscita indicata nel parametro //selout2//.\\ Range valido: 0 ÷ 32767.|
 +
 +
 +==== - Stati ====
 +
 +^NOME^D^R^A^Condizioni^Descrizione^
 +|st_errcfg|F|-|R|Nessuna|**Configuration error**\\ Segnala che è stato rilevato un errore nella configurazione dell'ingresso.\\ **0** = Non è stato rilevato nessun errore.\\ **1** = È stato rilevato un errore.|
 +|st_cmp1|F|0|R|Nessuna|**Status of first comparation**\\ Segnalazione di comparazione 1.\\ **0** = Comparazione 1 disattiva.\\ **1** = Comparazione 1 attiva.\\ All'accensione per default viene posto a zero.|
 +|st_cmp2|F|0|R|Nessuna|**Status of second comparation**\\ Segnalazione di comparazione 2.\\ **0** = Comparazione 2 disattiva.\\ **1** = Comparazione 2 attiva.\\ All'accensione per default viene posto a zero.|
 +|st_error|F|0|R|Nessuna|**Status of device error**\\ Indica lo stato di errore nel device.\\ Per la decodifica dell'errore si deve fare riferimento alla variabile errcode ed errvalue.\\ **0** = Errore non presente.\\ **1** = Errore presente.\\ All'accensione per default viene posto a zero.|
 +|st_warning|F|0|R|Nessuna|**Status of device warning**\\ Indica lo stato di warning nel device.\\ Per la decodifica del warning si deve fare riferimento alla variabile wrncode e wrnvalue.\\ **0** = Warning non presente.\\ **1** = Warning presente\\ All'accensione per default viene posto a zero.|
 +
 +==== - Comandi ====
 +
 +I comandi sono stati ordinati con priorità decrescente. Ad esempio, in caso di contemporaneità dei comandi //SETCMP1// ed //RESCMP1//, viene acquisito per primo il comando //SETCMP1//.
 +
 +^Nome^Descrizione^Descrizione^
 +|SETCMP1|Nessuna|**Set of comparation 1**\\ Attiva lo stato st_cmp1.|
 +|RESCMP1|Nessuna|**Reset of comparation 1**\\ Azzera lo stato st_cmp1.|
 +|SETCMP2|Nessuna|**Set of comparation 2**\\ Attiva lo stato st_cmp2.|
 +|RESCMP2|Nessuna|**Reset of comparation 2**\\ Azzera lo stato st_cmp2.|
 +|RSERR|Nessuna|**Reset error**\\ Azzera lo stato st_error.|
 +|RSWRN|Nessuna|**Reset warning**\\ Azzera lo stato st_warning.|
 +
 +
 +===== - Limitazioni =====
 +
 +==== - Scaling ====
 +
 +//ScaleB// deve essere impostato diverso da zero, in caso contrario //OutUm// viene forzato a 0.
 +
 +==== - Filtro ====
 +
 +Il tempo di carica del filtro RC //tfilter// deve essere impostato maggiore o uguale al tempo di
 +campionamento del device (Tcamp), in caso contrario viene disattivato il filtro ed il parametro
 +//OutUmF// viene aggiornata con lo stesso valore di //OutUm//.
 +
 +==== - Offset ====
 +
 +Il parametro //offset// viene sommato all’ingresso analogico acquisito (//outbit//), non viene eseguito
 +il controllo sull‘overflow della somma.
 +
 +==== - Configurazione ====
 +
 +^:info:^Nel caso che un singolo canale venga gestito da più device ANINP aventi //Type// diversi, il compilatore non rileva errori e il canale viene impostato con l'ultimo //Type// dichiarato.^
 +
 +Una singola risorsa hardware (ogni singolo ingresso) può essere gestita da più device ANINP contemporaneamente,
 +a condizione che il numero identificativo dell'ingresso (Type), inserito nella
 +dichiarazione del device (file di configurazione), sia uguale; in caso contrario l'ingresso analogico
 +viene configurato come l'ultimo device dichiarato nel file di configurazione.
 +
 +
 +===== - Esempio applicativo =====
 +
 +==== - Unit di configurazione ====
 +
 +<code QCL>
 +;************************************************************************************* 
 +; Nome Modulo: Ex_Aninp2.CNF                Progetto: Ex_ANINP2
 +; Autore: QEM srl                           Data : 01/05/99
 +; Sistema: QMove1 / QCL3                    Libreria: 1LIB4001
 +; Funzionalità: Esempio gestione ANINP2     Release: 0
 +;------------------------------------- Note ------------------------------------------
 +; [1] - Applicativo di esempio per utilizzo device ANINP2
 +;*************************************************************************************
 +
 +;-------------------------------------------------------------------------------------
 +; Definizione Costanti
 +;-------------------------------------------------------------------------------------
 +CONST
 +
 +;-------------------------------------------------------------------------------------
 +; Definizione Variabili SYSTEM
 +;-------------------------------------------------------------------------------------
 +SYSTEM
 +slSet1                                        ;Setpoint 1
 +slSet2                                        ;Setpoint 2
 +
 +;-------------------------------------------------------------------------------------
 +; Definizione Variabili GLOBAL
 +;-------------------------------------------------------------------------------------
 +GLOBAL
 +
 +;-------------------------------------------------------------------------------------
 +; Definizione Variabili TIMER
 +;-------------------------------------------------------------------------------------
 +TIMER
 +
 +;-------------------------------------------------------------------------------------
 +; Definizione DATAGROUP
 +;-------------------------------------------------------------------------------------
 +DATAGROUP
 +
 +;-------------------------------------------------------------------------------------
 +; Configurazione Bus
 +;-------------------------------------------------------------------------------------
 +BUS
 +    1CPUD   01
 +    1AI8B   00
 +    1MIXA   00
 +    .
 +   
 +;-------------------------------------------------------------------------------------
 +; Definizione Variabili INPUT
 +;-------------------------------------------------------------------------------------
 +INPUT
 +ifAbilComp       3.INP01                      ;Abilitazione comparazioni
 +
 +;-------------------------------------------------------------------------------------
 +; Definizione Variabili OUTPUT
 +;-------------------------------------------------------------------------------------
 +OUTPUT
 +out301           3.OUT01                      ;Segnalazione setpoint 1
 +out302           3.OUT02                      ;Segnalazione setpoint 2
 +
 +;-------------------------------------------------------------------------------------
 +; Dichiarazione device interni
 +;-------------------------------------------------------------------------------------
 +INTDEVICE
 +;Nome    Tipo    TCamp    Contatore Type
 +Asse     ANINP2   0004     2.AI01 2  3.OUT01  3.OUT02
 +
 +END
 +</code>
 +
 +==== - Gestione ANINP2 ====
 +
 +<code QCL>
 +;************************************************************************************* 
 +; Nome File: TASK_00.MOD
 +; Progetto: EX_ANINP2
 +; Descrizione: Gestione Posizionamento
 +;*************************************************************************************
 +
 +;-------------------------------------------------------------------------------------
 +; Operazioni di Inizializzazione Asse
 +;-------------------------------------------------------------------------------------
 +Asse:offset = 0                                 ;Tensione di offset
 +
 +;-------------------------------------------------------------------------------------
 +; Fattore di scala: (scaleA * outbit / scaleB) + scaleC
 +; outUm minima = (4 * 0 / 8 ) + 3 = 3
 +; outUm massima = (4 * 4095 / 8) + 3 = 2050
 +;-------------------------------------------------------------------------------------
 +Asse: scaleA = 4                                ;Fattore di scala A
 +Asse: scaleB = 8                                ;Fattore di scala B
 +Asse: scaleC = 3                                ;Fattore di scala C
 +Asse: tfilter = 10                              ;Tempo del filtro di acquisizione
 +Asse: hysteresis = 0                            ;Isteresi dell’uscita
 +
 +IF   slSet1 EQ 0
 + sl   Set1 = 1500
 +ENDIF
 +IF   slSet2 EQ 0
 + sl   Set2 = 300
 +ENDIF
 +
 +MAIN:
 +;-------------------------------------------------------------------------------------
 +; Comparazioni sul conteggio solo se ifAbilComp attivo, altrimenti le uscite
 +; sono disattive
 +; ----------------------------- variabili utilizzate --------------------------------
 +; slSet1: Quota di comparazione per uscita 2.OUT01
 +; slSet1: Quota di comparazione per uscita 2.OUT02
 +;-------------------------------------------------------------------------------------
 +
 +IF ifAbilComp
 +     IF NOT gfApp01
 +       Asse: mode1 = 5                         ;Attiva out1 se posit>setpoint1
 +       Asse: selout1 = 0                       ;e disattiva out1 se posit<setpoint1
 +       Asse: setpoint1 = slSet1
 +       Asse: timer1 = 0
 +       Asse: mode2 = 6                         ;Disattiva out2 se posit<setpoint2
 +       Asse: selout2 = 1                       ;e attiva out2 se posit<setpoint2
 +       Asse: setpoint2 = slSet2
 +       Asse: timer2 = 0
 +       gfApp01 = 1
 +       gfApp02 = 0
 +     ENDIF
 +ELSE
 +     IF NOT gfApp02
 +       Asse:mode1 = 0
 +       RESOUT out201                           ;Disattiva out1
 +       Asse: selout1 = 0
 +       Asse: mode2 = 0
 +       RESOUT out202                           ;Disattiva out2
 +       Asse: selout2 = 1
 +       gfApp01 = 0
 +       gfApp02 = 1
 +     ENDIF
 +ENDIF
 +
 +;-------------------------------------------------------------------------------------
 +; Operazioni finali
 +;-------------------------------------------------------------------------------------
 +  WAIT 1
 +  JUMP MAIN
 +END
 +</code>
 +