software:qview:qview_6:qcl_library:regole_di_utilizzo_di_una_funzione

REGOLE DI UTILIZZO DI UNA FUNZIONE

Una funzione QCL é un pezzo di codice (scritto appunto in QCL) che permette di risolvere particolari problemi, di eseguire elaborazioni dati, di fornire specifiche funzionalità ad un applicativo QMove. Per poter utilizzare una funzione QCL in un codice task é sufficiente richiamarla passandole i necessari argomenti, come si trova descritto più in seguito in questo semplice manuale. Questo modo di procedere comporta alcuni vantaggi: si trovano parti di codice già scritte, collaudate, che risolvono in maniera ottimizzata alcuni dei più frequenti problemi che si devono affrontare nella stesura di un applicativo per QMove; offrono la possibilità di riutilizzare quante volte si vuole la stessa funzione, senza doversi preoccupare di riscriverla ogni volta; c'è la possibilità di aggiornare semplicemente la libreria man mano che questa viene dotata di nuove funzioni, mantenendo una assoluta compatibilità con gli applicativi già sviluppati.

Per come sono state definite, le funzioni QCL non restituiscono alcun valore direttamente, possono farlo solo attraverso delle variabili che vengono loro passate. Se indichiamo con FuncQCL01(…) una qualsiasi funzione della libreria QCL queste situazioni non si possono verificare e danno un errore in compilazione

- non possono essere usate a destra di un'assegnazione

slType01 = FuncQCL01(...)				ERRORE

- non possono essere usate come parametri di istruzioni IF, FOR, WHILE

IF (FuncQCl01(…) AND …) ERRORE FOR (sInt01 = 1, sInt01 LT FuncQCL01(…), …) ERRORE WHILE (FuncQCL01(…) LT 24) ERRORE

L'unico modo corretto di chiamare una funzione QCL é questo:

FuncQcl01(...)

cioè come se fosse una nuova istruzione QCL. Anche se una funzione QCL non restituisce alcun valore, é tuttavia possibile che una funzione QCL imposti dei valori a parametri passati come argomento e quindi in pratica é come se si avessero più valori di ritorno e questo é una caratteristica in più rispetto le normali funzioni o procedure. Questo si può vedere nella descrizione dei parametri di una funzione, come qui di seguito spiegato:

[IN] indica che il parametro passato dal task QCL viene utilizzato dalla funzione per la sua corretta esecuzione.

[OUT] indica che il parametro passato dal task QCL verrà modificato dalla funzione QCL per indicare possibili errori nella sua esecuzione o per indicare valori di ritorno. In questo modo é possibile ottenere anche più valori di ritorno.

Il tipo variabile e la dimensione (DIM) possono avere più elementi separati da una barra (/) che indicano che la stessa variabile si può configurare in modi diversi in base alle esigenze dell'utilizzatore della funzione. I nomi delle variabili passate alla funzione sono lasciati alla fantasia dell'utilizzatore che deve rispettare soltanto il limite dei 12 caratteri, infatti, i nomi riportati sulla tabella servono solo da esempio.

Vediamo alcuni semplici esempi:

AC10AvergArr (Myarray, val_medio, ok_calc)

La funzione calcola il valore medio di un array passato come argomento. In questo caso (come si può vedere dalla descrizione) MyArray é un parametro di ingresso: é infatti l'array di cui si vuole calcolare il valore medio. val_medio e ok_calc sono parametri di uscita: infatti indicano rispettivamente il valore medio calcolato dalla funzione e un flag che indica quando il calcolo é stato completato. Quando ok_calc assume valore 1 significa che la funzione ha terminato i suoi calcoli e quindi é possibile recuperare tale valore leggendo la variabile val_medio.

Nelle Note, per ciascuna funzione, viene specificato se è necessario chiamarla ad ogni giro logico dell'applicativo. Infatti vi sono funzioni, che proprio per le operazioni che devono svolgere, vanno chiamate in una parte ciclica del codice, mentre alcune altre possono essere chiamate anche in una parte non ciclica del codice, in quanto risolvono “in un colpo solo” il problema. Ricordiamo quali sono queste due parti nelle quali si divide un task QCL

  ; inizio task
  ; parte non ciclica del codice task
  MAIN:
  ; parte ciclica del codice task
  JUMP MAIN
  END

L'indicazione sul “dove” chiamare una funzione é riportato nella descrizione di ciascuna funzione. Vi sono funzioni che possono essere chiamate sia in una zona ciclica che in una non ciclica; nella descrizione allora non sarà fatto alcun riferimento particolare a questo modo di utilizzo. Invece per quelle funzioni che richiedono espressamente l'utilizzo in una zona ciclica (ad esempio la funzione Blink) questo sarà scritto chiaramente nella descrizione.

Un'altra caratteristica da tenere presente per alcune funzioni é il fatto che, quando sono necessarie operazioni lunghe, la funzione stessa si preoccupa di eseguire un'istruzione di WAIT al suo interno, ogni 180 millisecondi. Questo per impedire il “blocco” dell'esecuzione del task QCL dovuto appunto a particolare e gravosi compiti. Solitamente in funzioni di questo tipo é presente un argomento di tipo flag che può essere monitorato per verificare quando la funzione ha terminato il suo compito.

Tutte le funzioni della libreria prossegono un prefisso a due lettere che varia di significato in base alla loro funzionalità.

Le due lettere possono identificare un specifico gruppo di appartenenaza oppure descrivere singolarmente le caratteristiche di tale funzione.
In questo caso le prime due lettere della funzione servono rispettivamente per dare un'indicazione sui dati di utilizzo della funzione e per indicare il tipo di azione che essa compie.

Il loro significato è spiegato di seguito.

Codice unico a due lettere

SY = Funzioni di sistema

Codice a due lettere: prima lettera

A = Array

B = Buffer

C = Counter

D = Device

G = Datagroup

I = Input

O = Output

T = Timer

V = Variable

Codice a due lettere: seconda lettera

C = Funzioni di Calcolo

W= Funzioni di Scrittura

R = Funzioni di Lettura

A = Funzioni che eseguono un'azione

T = Funzioni di Controllo

N = Funzioni contemplate dalle norme IEC1131

1) L'utilizzo delle funzioni può portare ad una modifica del file simboli, quindi, nel caso di utilizzo di una interfaccia che colloquia con Qmove (pc o terminali vari), c'è la necessità di reimportare i simboli nel progetto.

2) Le variabili interne utilizzate dalle funzioni QCL assumono nomi che iniziano con ZZ_ZZqem_ nnn dove con nnn si indica un numero interno di riferimento. L'uso di variabili con tale nome da parte dell'applicativo è sconsigliato, in quanto il comportamento del sistema stesso, risulterebbe impredicibile.

  • Ultima modifica: 2019/08/29 17:01