Grafcet: Loop di esecuzione |
Grafcet: Introduzione
|
Si Î Bn: Vettore degli Stati: l'elemento i-esimo indica, se pari ad 1, che il relativo stato è attivo; | |
Tj Î Bm: Vettore Transizioni: l'elemento j-esimo indica, se pari ad 1, che le condizioni che rendono attiva la relativa transizione sono soddisfatte; |
A seconda del linguaggio utilizzato per la traduzione, occorrerà effettuare un diverso tipo di dichiarazione, come mostra la tabella che segue:
Tipo di linguaggio | Dichiarazione delle variabili di stato e di transizione | ||||
PLC: LADDER (simbolico) | Occorrerà dichiarare una serie di variabili corrispondenti ai due tipi di variabile. Con questo tipo di linguaggio è possibile riservare una serie di simboli del tipo "S1", "S2" ... "Sn" e "T1", "T2", ..., "Tm" come variabili interne, ovvero variabili di memoria. Normalmente, esiste una zona dell'ambiente di programmazione LADDER dove effettuare questa dichiarazione. | ||||
PLC:
LADDER (non simbolico) |
In questo tipo di linguaggio è necessario allocare una
serie di celle di memoria. La convenzione che può essere scelta è
normalmente casuale. Per il simulatore LADDER presente nelle pagine di
questo sito, ad esempio, potrà essere scelta la corrispondenza variabili
booleane - stati del tipo:
E' importante che i byte scelti per l'allocazione delle variabili di stato siano distanti da quelli scelti per le variabili di transizione, in modo da evitare confusioni o sovrapposizioni nel momento in cui sia necessario definire nuove variabili di transizione o di stato. Può essere utile, per migliorare la leggibilità della traduzione, nominare gli stati allo stesso modo in cui è possibile nominare le variabili. In questo caso, gli stati saranno indicati come: S0.1=MB0.1, ..., S1.3=MB1.3, utilizzando la stessa convenzione per le transizioni: T0.1=MB10.1, T4.1=MB14.1. |
||||
PC: VISUAL BASIC | Per i linguaggi strutturati, la definizione di variabili di
stato si presenta molto semplice. La classica definizione di un array di
booleani risolve il problema:
In questo caso è stato utilizzato N=12 e M=15. Si ricorda che, nel caso si voglia creare un programma in VB non contenuto in un unico Form, sarà necessario creare un modulo (.BAS) nel quale inserire le precedenti definizioni (come Public invece che come Dim). |
||||
PC: linguaggio C | Come per il VB, ma con la difficoltà aggiuntiva di avere
array in base 0 invece che 1, e con il tipo di dato booleano non nativo
(un booleano, al minimo, consiste in un unsigned character). La
definizione più ovvia è la seguente (usando il Visual C):
|
Mentre nel LADDER per PLC, l'interfaccia verso il processo è costituita dalle variabili di ingresso e di uscita che vengono manipolate come qualsiasi altra variabile, nei linguaggi per PC è necessario costruire un programma che permette di accedere ad un'area di memoria condivisa con il processo che rappresenta l'interfaccia di ingresso e di uscita.
Comunque sia, le variabili di ingresso e di uscita devono essere correttamente individuate prima della stesura del programma e, se il loro aggiornamento non viene condotto automaticamente dal sistema operativo (all'inizio ed alla fine di ogni ciclo di programma, come avviene per un PLC), tale operazione deve essere effettuata dal programma in VB o in C attraverso delle specifiche subroutine, se necessario.
Un PLC lavora naturalmente in maniera ciclica, eseguendo alla massima velocità possibile (oppure ad una velocità indicata dall'utente), tutti i gradini che compongono un diagramma LADDER. Per un programma per PC, il funzionamento ciclico non è naturale e deve essere organizzato tramite una delle funzioni tipiche che permettono di modificare il flusso di esecuzione del programma.
Il modo più semplice per fare questo (ma non il migliore) è rappresentato nella tabella che segue (per i programmi per PC):
Tipo di linguaggio | Costruzione del loop di esecuzione |
PC: Visual Basic | Questo loop può essere inserito in un modulo .BAS o in un
form. Consiste nel tipico loop infinito di tipo While, regolato in uscita
da una variabile che ne permette l'interruzione (in questo caso la
variabile di ingresso IB0.5) avente in corrispondenza dell'inizio e della
fine del ciclo la lettura e la scrittura delle strutture di ingresso e di
uscita:
Private Sub Form_Load() |
PC: linguaggio C | Loop inseribile nella funzione main. Deve essere regolato in
uscita da una variabile che ne permette l'interruzione (in questo caso la
variabile di ingresso IB0.5) avente in corrispondenza dell'inizio e della
fine del ciclo la lettura e la scrittura delle strutture di ingresso e di
uscita:
main() |
Per quanto riguarda la descrizione delle funzioni utilizzate per l'interfacciamento verso il processo, si rimanda alla relativa sezione ( in fase di costruzione).
Si è detto che questo non è il modo migliore di operare nella costruzione di un loop. Le strutture di programma riportate si rivelano essere troppo impegnative per una macchina multitasking. Nel caso quindi, in cui anche un altro processo (un'altra applicazione, come lo stesso sistema operativo) debba essere eseguito contemporaneamente alla esecuzione del loop, è opportuno inserire nel loop una funzione di ritardo (definita appositamente nella libreria di interfaccia), detta PLC_Wait
Tipo di linguaggio | Funzione di temporizzazione del loop | ||||||||||
PC: Visual Basic |
|
||||||||||
PC: linguaggio C |
|
||||||||||
Significato degli argomenti |
|
Per un tipico programma, è opportuno utilizzare una priorità di tipo normale.
Questa pagina è stata aggiornata il 19/06/01.
Leonardo
Daga's Warehouseâ, http:/digilander.iol.it/LeoDaga |