software:qview:qview_6:qview60

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
Prossima revisioneEntrambe le parti successive la revisione
software:qview:qview_6:qview60 [2015/04/20 11:22] – [Table] qem202software:qview:qview_6:qview60 [2015/04/28 11:18] – [3.11. Le variabili DATAGROUP] qem207
Linea 533: Linea 533:
  
 ===== - Le variabili DATAGROUP ===== ===== - Le variabili DATAGROUP =====
 +Le variabili Datagroup sono una particolare struttura di dati, allocate in memoria in una zona ritentiva. Esse vengono dichiarate nella unit di configurazione e hanno la funzione di semplificare l'accesso e la gestione di un archivio di ricette. \\ Le variabili Datagroup contengono due tipologie di variabili:
 +
 +**Variabili Statiche** 
 +<code QCL>
 +DATAGROUP
 +  <DataGroup Name>
 +  DATAPROGRAM
 +    <number of recipes>
 +;Static variables declaration
 +    <variable name> <F/B/W/L/S>
 +    <variable name> <F/B/W/L/S>
 +    <variable name> <F/B/W/L/S>
 +</code>
 +Le variabili statiche risiedono nel sottosettore di DATAGROUP nominato come DATAPROGRAM. Il primo valore di questo settore è un numero o una costante intera, e indica in numero di ricette dell'archivio. Le variabili statiche sono da considerarsi come contenitori di un determinato valore per ogni ricetta, e sono accessibili come un array, dove l'indice è il numero di ricetta desiderata. Esempio:
 +<code QCL>
 +DATAGROUP
 +  Name
 +  DATAPROGRAM
 +    100
 +;Static variables declaration
 +    Variable1     L
 +    Variable2     S
 +    Variable3     F
 +</code>
 +Per far riferimento alla variabile //Variable3// della ricetta 5, viene usato il codice:
 +<code QCL>
 +Variable3[5]
 +</code>
 +
 +Possiamo immaginare la memoria di una variabile DATAGROUP, nel nostro esempio con variabili STATICHE, come la seguente tabella:
 +^ ^  Variable1  ^  Variable2  ^  Variable3  ^
 +^Ricetta 1| | | |
 +^Ricetta 2| | | |
 +^Ricetta 3| | | |
 +^...| | | |
 +^Ricetta 100| | | |
 +
 +Altre informazioni:
 +  * In un DATAGROUP tutte le variabili, sia statiche che indicizzate, sono ritentive (mantengono il valore allo spegnimento).
 +  * Le variabili Datagroup possono essere più di una, in questo caso è necessario inserire più settori di tipo DATAGROUP.
 +  * La sottosezione DATAPROGRAM è obbligatoria, mentre quella STEP è opzionale.
 +  * Il numero massimo di ricette impostabile è 65534.
 +  * Il numero massimo di passi impostabile è 65534.
 +  * Rispetto a un comune array, le variabili statiche possono supportare anche un dato di tipo Flag (F).
 +===== - Le variabili DATAGROUP old =====
 +
 Le variabili Datagroup sono una particolare struttura di dati. Quando si dichiara un datagroup, si organizza una parte della memoria come una tabella formata da righe e colonne. Le colonne sono chiamate //programmi// o //ricette//, mentre le righe //passi// (in inglese //step//).\\ Le variabili Datagroup sono una particolare struttura di dati. Quando si dichiara un datagroup, si organizza una parte della memoria come una tabella formata da righe e colonne. Le colonne sono chiamate //programmi// o //ricette//, mentre le righe //passi// (in inglese //step//).\\
 Ogni programma (colonna) contiene due tipologie di variabili: Ogni programma (colonna) contiene due tipologie di variabili:
Linea 638: Linea 684:
  
 //num_prog// e //num_step// possono essere un numero (non SINGLE), una costante, una variabile o un’espressione complessa. Nel caso di numero o di costante, viene eseguito il controllo durante la compilazione che l’indice non superi la dimensione massima dichiarata in configurazione (rispettivamente per il numero programmi e il numero step); gli altri indici - //num_prog e num_step// - partono (in valore) da uno. //num_prog// e //num_step// possono essere un numero (non SINGLE), una costante, una variabile o un’espressione complessa. Nel caso di numero o di costante, viene eseguito il controllo durante la compilazione che l’indice non superi la dimensione massima dichiarata in configurazione (rispettivamente per il numero programmi e il numero step); gli altri indici - //num_prog e num_step// - partono (in valore) da uno.
- 
- 
 ===== - Sezione BUS ===== ===== - Sezione BUS =====
 La sezione BUS nell’unità di configurazione è indispensabile per dichiarare quale modello hardware di QMOVE il programmatore ha a disposizione.\\ La sezione BUS nell’unità di configurazione è indispensabile per dichiarare quale modello hardware di QMOVE il programmatore ha a disposizione.\\
Linea 1156: Linea 1200:
   ENDSWITCH   ENDSWITCH
 </code> </code>
- 
 ==== - WAIT ==== ==== - WAIT ====
 Attende il verificarsi di una condizione o di un evento. L'istruzione WAIT è una istruzione molto Attende il verificarsi di una condizione o di un evento. L'istruzione WAIT è una istruzione molto
Linea 1210: Linea 1253:
 incontrata una istruzione di chiamata a subroutine (CALL). La subroutine viene identificata da incontrata una istruzione di chiamata a subroutine (CALL). La subroutine viene identificata da
 un nome preceduto dalla parola chiave SUB e deve terminare con la parola chiave ENDSUB. Vedi un nome preceduto dalla parola chiave SUB e deve terminare con la parola chiave ENDSUB. Vedi
-anche istruzione CALL.+anche istruzione CALL.\\ Per interrompere una subroutine prima del termine della stessa inserire la parola chiave RETURN.
  
 ==== - CALL ==== ==== - CALL ====
Linea 1414: Linea 1457:
 </code> </code>
  
 +==== - Shift logico a sinistra ====
 +Esegue una operazione di shift a sinistra di //n// bit sull'argomento.\\ {{:software:qview:qview_6:qview60:shll.png?nolink|}}\\ La sintassi è:\\
 +<code QCL>
 +  SHLL(<variable>,<bits>)
 +</code>
 +Esempio:
 +<code QCL>
 +  glValue = SHLL(glValue, 1)
 +</code>
 +
 +==== - Shift logico a destra ====
 +Esegue una operazione di shift a destra di //n// bit sull'argomento.\\ {{:software:qview:qview_6:qview60:shlr.png?nolink|}}\\ La sintassi è:\\
 +<code QCL>
 +  SHLR(<variable>,<bits>)
 +</code>
 +Esempio:
 +<code QCL>
 +  glValue = SHLR(glValue, 1)
 +</code>
 +
 +==== - Moltiplicazione e divisione ====
 +Esegue una moltiplicazione di valori interi a 32 bit con risultato a 64 bit e una successiva divisione per valore intero a 32 bit. Il risultato è un valore di 32 bit.\\ **N.B.** Se viene eseguita una divisione per zero, la CPU andrà in stato "Division by zero error".\\ La sintassi è:\\
 +<code QCL>
 +  MULDIV(<factor1>,<factor2>,<divisor>)
 +</code>
 +Esempio: glValue = a * b / c
 +<code QCL>
 +  glValue = MULDIV(a, b, c)
 +</code>
 +
 +==== - Resto di moltiplicazione e divisione ====
 +Esegue una moltiplicazione di valori interi a 32 bit con risultato a 64 bit e una successiva divisione per valore intero a 32 bit. Il risultato è il resto della divisione.\\ **N.B.** Se viene eseguita una divisione per zero, la CPU andrà in stato "Division by zero error".\\ La sintassi è:\\
 +<code QCL>
 +  RMULDIV(<factor1>,<factor2>,<divisor>)
 +</code>
 +Esempio: glValue = a * b % c
 +<code QCL>
 +  glValue = RMULDIV(a, b, c)
 +</code>
 +
 +==== - Arrotondamenti all'intero più vicino ====
 +|ROUND|Esegue un arrotondamento di un valore in floating point all'intero più vicino.|
 +|TRUNC|Esegue un arrotondamento di un valore in floating point all'intero più vicino non maggiore di grandezza rispetto al valore dato.|
 +|FLOOR|Esegue un arrotondamento di un valore in floating point all'intero più vicino non superiore al valore dato.|
 +|CEIL|Esegue un arrotondamento di un valore in floating point all'intero più vicino non inferiore al valore dato.|
 +La sintassi è:\\
 +<code QCL>
 +  ROUND(<variable>)
 +  TRUNC(<variable>)
 +  FLOOR(<variable>)
 +  CEIL(<variable>)
 +</code>
 +Esempio:
 +<code QCL>
 +  gsValue = ROUND(2.7)     ;risulta 3.0
 +  gsValue = ROUND(-2.7)    ;risulta -3.0
 +  gsValue = TRUNC(2.7)     ;risulta 2.0
 +  gsValue = TRUNC(-2.7)    ;risulta -2.0
 +  gsValue = FLOOR(2.7)     ;risulta 2.0
 +  gsValue = FLOOR(-2.7)    ;risulta -3.0
 +  gsValue = CEIL(2.7)      ;risulta 3.0
 +  gsValue = CEIL(-2.7)     ;risulta -2.0
 +</code>
 +
 +==== - Operatori di classificazione ====
 +|ISFINITE|Controlla se il numero dato ha valore finito.|
 +|ISINF|Controlla se il numero dato ha valore infinito.|
 +|ISNAN|Controlla se il numero dato ha valore NaN.|
 +|ISNORMAL|Controlla se il numero dato ha valore normale.|
 +La sintassi è:\\
 +<code QCL>
 +  ISFINITE(<variable>)
 +  ISINF(<variable>)
 +  ISNAN(<variable>)
 +  ISNORMAL(<variable>)
 +</code>
 +Esempio:
 +<code QCL>
 +  gfValue = ISFINITE(gsValue)     ;risulta 1 se gsValue è un valore finito, altrimenti 0
 +  gfValue = ISINF(gsValue)        ;risulta 1 se gsValue è un valore infinito, altrimenti 0
 +  gfValue = ISNAN(gsValue)        ;risulta 1 se gsValue è un NaN (Not a Number), altrimenti 0
 +  gfValue = ISNORMAL(gsValue)     ;risulta 1 se gsValue è un valore normale (non zero, non infinito, non NaN), altrimenti 0
 +</code>
 ===== - Funzioni trigonometriche ===== ===== - Funzioni trigonometriche =====
  
Linea 3450: Linea 3576:
  
 In questo capitolo vengono riassunte le parole chiave del QCL. In questo capitolo vengono riassunte le parole chiave del QCL.
-^ABS|valore assoluto| +^ ABS          | valore assoluto                                     
-^ACOS|arcocoseno| +^ ACOS         | arcocoseno                                          
-^AND|AND logico| +^ AND          | AND logico                                          
-^ANDB|And logico bit a bit| +^ ANDB         | And logico bit a bit                                
-^APPLICATION|Radice implicita di ogni simbolo utilizzato| +^ APPLICATION  | Radice implicita di ogni simbolo utilizzato         
-^ARRGBL|sezione file di configurazione| +^ ARRGBL       | sezione file di configurazione                      
-^ARRSYS|sezione file di configurazione| +^ ARRSYS       | sezione file di configurazione                      
-^ASIN|arcoseno| +^ ASIN         | arcoseno                                            
-^ATAN|arcotangente| +^ ATAN         | arcotangente                                        
-^B|byte| +^ B            | byte                                                
-^BEGIN|sezione codice operativo nella unit| +^ BEGIN        | sezione codice operativo nella unit                 
-^BREAK|break| +^ BREAK        | break                                               
-^BUS|sezione file di configurazione| +^ BUS          | sezione file di configurazione                      
-^CALL|chiamata subroutine| +^ CALL         | chiamata subroutine                                 
-^CASE|istruzione SWITCH-CASE| +^ CASE         | istruzione SWITCH-CASE                              | 
-^CONST|sezione file di configurazione| +^ CEIL         | arrotondamento a intero non inferiore a quello dato 
-^COS|coseno| +^ CONST        | sezione file di configurazione                      
-^COT|cotangente| +^ COS          | coseno                                              
-^DATAGROUP|sezione file di configurazione| +^ COT          | cotangente                                          | 
-^DATAPROGRAM|sezione file di configurazione| +^ D            | double                                              
-^DEVGROUP|inizio raggruppamento device| +^ DATAGROUP    | sezione file di configurazione                      
-^ELSE|"altrimenti" nell'istruzione IF| +^ DATAPROGRAM  | sezione file di configurazione                      
-^END|fine task| +^ DEVGROUP     | inizio raggruppamento device                        
-^ENDDEVGROUP|fine raggruppamento device| +^ ELSE         | "altrimenti" nell'istruzione IF                     
-^ENDIF|fine istruzione IF| +^ END          | fine task                                           
-^ENDSUB|fine subroutine| +^ ENDDEVGROUP  | fine raggruppamento device                          
-^ENDSWITCH|fine SWITCH| +^ ENDIF        | fine istruzione IF                                  
-^ENDWHILE|fine while| +^ ENDSUB       | fine subroutine                                     
-^EQ|uguale| +^ ENDSWITCH    | fine SWITCH                                         
-^EXP|esponenziale| +^ ENDWHILE     | fine while                                          
-^EXTDEVICE|sezione file di configurazione| +^ EQ           | uguale                                              
-^F|flag| +^ EXP          | esponenziale                                        
-^FOR|istruzione FOR| +^ EXTDEVICE    | sezione file di configurazione                      
-^FPROG|istruzione FPROG| +^ F            | flag                                                | 
-^FSTEP|istruzione FSTEP| +^ FLOOR        | arrotondamento a intero non superiore a quello dato 
-^GE|maggiore uguale +^ FOR          | istruzione FOR                                      
-^GLOBAL|sezione file di configurazione| +^ FPROG        | istruzione FPROG                                    
-^GT|maggiore| +^ FSTEP        | istruzione FSTEP                                    
-^IF|istruzione IF| +^ GE           | maggiore uguale                                     | 
-^INPUT|sezione file di configurazione| +^ GLOBAL       | sezione file di configurazione                      
-^INTDEVICE|sezione file di configurazione| +^ GT           | maggiore                                            
-^JUMP|istruzione JUMP| +^ IF           | istruzione IF                                       
-^LE|minore o uguale| +^ INPUT        | sezione file di configurazione                      
-^LN|logaritmo naturale| +^ INTDEVICE    | sezione file di configurazione                      | 
-^LT|minore| +^ ISFINITE     | controlla se il valore è finito                     | 
-^NEG|negazione (inversione del segno o complemento a 2)| +^ ISINF        | controlla se il valore è infinito                   | 
-^NEQ|operatore| +^ ISNAN        | controlla se il valore è Nan (Not a Number)         | 
-^NEXT|istruzione NEXT| +^ ISNORMAL     | controlla se il valore è normale                    
-^NOP|istruzione NOP| +^ JUMP         | istruzione JUMP                                     
-^NOT|negazione| +^ LE           | minore o uguale                                     
-^NOTB|negazione bit a bit (complemento a 1)| +^ LN           | logaritmo naturale                                  
-^OR|OR logico| +^ LT           | minore                                              | 
-^ORB|OR logico bit a bit| +^ MULDIV       | moltiplicazione e divisione                         
-^OUTPUT|sezione file di configurazione| +^ NEG          | negazione (inversione del segno o complemento a 2)  
-^POW|potenza| +^ NEQ          | operatore                                           
-^REFERENCE|proprietà di "riferimento" di un simbolo| +^ NEXT         | istruzione NEXT                                     
-^REFERENCE|inizio dell'elenco dei riferimenti| +^ NOP          | istruzione NOP                                      
-^RESOUT|reset uscite| +^ NOT          | negazione                                           
-^S|singola precisione+^ NOTB         | negazione bit a bit (complemento a 1)               
-^SETOUT|setta uscita| +^ OR           | OR logico                                           
-^SIN|seno| +^ ORB          | OR logico bit a bit                                 
-^SQRT|radice quadrata| +^ OUTPUT       | sezione file di configurazione                      
-^STEP|sezione file di configurazione| +^ POW          | potenza                                             
-^SUB|subroutine| +^ REFERENCE    | proprietà di "riferimento" di un simbolo            
-^SWITCH|istruzione SWITCH-CASE| +REFERENCES   | inizio dell'elenco dei riferimenti                  
-^SYSTEM|sezione file di configurazione+^ RESOUT       | reset uscite                                        | 
-^RESTART|istruzione di restart| +^ RESTART      | istruzione di restart                               | 
-^RESUME|istruzione di resume| +^ RESUME       | istruzione di resume                                | 
-^SUSPEND|istruzione di sospensione+^ RETURN       | istruzione di return (su subroutine)                | 
-^TAN|tangente| +^ RMULDIV      | resto di moltiplicazione e divisione                | 
-^TIMER|sezione file di configurazione| +^ ROUND        | arrotondamento a intero più vicino                  
-^W|word| +^ S            single                                              
-^WAIT|istruzione di wait| +^ SETOUT       | setta uscita                                        | 
-^WHILE|istruzione di while| +^ SHLL         | shift a sinistra                                    | 
-^XORB|OR esclusivo bit a bit|+^ SHLR         | shift a destra                                      
 +^ SIN          | seno                                                
 +^ SQRT         | radice quadrata                                     
 +^ STEP         | sezione file di configurazione                      
 +^ SUB          | subroutine                                          | 
 +^ SUSPEND      | istruzione di sospensione                           
 +^ SWITCH       | istruzione SWITCH-CASE                              
 +^ SYSTEM       | sezione file di configurazione                      
 +^ TAN          | tangente                                            
 +^ TIMER        | sezione file di configurazione                      | 
 +^ TRUNC        | arrotondamento a intero non maggiore di grandezza   
 +^ W            | word                                                
 +^ WAIT         | istruzione di wait                                  
 +^ WHILE        | istruzione di while                                 
 +^ XORB         | OR esclusivo bit a bit                              | 
  
 Oltre a queste vanno considerate le direttive del precompilatore Oltre a queste vanno considerate le direttive del precompilatore
Linea 3536: Linea 3677:
  
 <html><pagebreak /></html> <html><pagebreak /></html>
- 
 ====== - Appendice E: Tasti caldi ====== ====== - Appendice E: Tasti caldi ======
  
  • Ultima modifica: 2024/03/22 14:06