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 in linguaggio QCL) che permette di risolvere particolari problemi, eseguire elaborazioni di dati e fornire specifiche funzionalità a un applicativo QMove. Per poter utilizzare una funzione QCL all'interno di un Task, è sufficiente richiamarla passandole i necessari argomenti, come descritto più avanti in questo semplice manuale. Questo approccio presenta diversi vantaggi: sono disponibili parti di codice già scritte e collaudate, in grado di risolvere in modo ottimizzato alcuni dei problemi più comuni nella stesura di un applicativo per QMove; consentono di riutilizzare la stessa funzione quante volte necessario, senza doverla riscrivere ogni volta; inoltre, è possibile aggiornare facilmente la libreria man mano che vengono aggiunte nuove funzioni, mantenendo sempre la piena compatibilità con gli applicativi già sviluppati.

Le funzioni QCL, per come sono definite, non restituiscono valori di ritorno direttamente; possono farlo solo tramite le variabili passate come argomenti.

- 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(variabile_1, variabile2, ...)

ovvero 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 questa è una caratteristica in più rispetto le normali funzioni o procedure. Ciò 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.

Nella tabella che illustra gli argomenti, alla sezione tipo variabile e dimensione DIM possono esserci più elementi separati da una barra /, ciò significa che la stessa variabile si può configurare in modi diversi in base alle esigenze. 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 è riportata 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 OA10BlinkOut) 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 posseggono un prefisso a due lettere che varia di significato in base alla loro funzionalità.

Le due lettere possono identificare un specifico gruppo di appartenenza 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: 2024/10/07 10:13