Analisi del processo di modellazione nel linguaggio χ
e sua applicazione in un sistema di assemblaggio radar
- studio dei meccanismi di avanzamento nel tempo (capitolo 3);
- conduzione del progetto di benchmarking con il generico simulatore ad
oggetti (capitoli 4 e 5);
- valutazione della metodologia di progettazione di un modello in χ
(capitolo 6);
- costruzione del modello di simulazione del sistema di assemblaggio
preso in esame (capitolo 6,7,8,9,10 e 11).
Analisi del processo di modellazione nel linguaggio χ
e sua applicazione in un sistema di assemblaggio radar
Gli elementi fondamentali di
modellazione in χ
1.5 Processi, funzioni e sistemi
Il χ (chi) è un linguaggio di simulazione per la modellazione di sistemi complessi
caratterizzati da fenomeni che variano nel tempo sia in modo discreto che continuo.
Gli elementi fondamentali di modellazione che lo caratterizzano sono:
• i processi
• le funzioni
• i sistemi
I componenti elementari (building blocks) che costituiscono i modelli in χ sono i
processi (processes). I processi sono composti da più sezioni opzionali e sono dichiarati
nella forma seguente:
proc nome (dichiarazione dei parametri) =
|[dichiarazione delle variabili; inizializzazione
| collegamenti
| corpo del processo (parte continua e parte discreta)
]|
1
Analisi del processo di modellazione nel linguaggio χ
e sua applicazione in un sistema di assemblaggio radar
Le variabili dichiarate all’interno di un processo sono esclusivamente locali e
vengono tutte esplicitamente dichiarate: le variabili continue utilizzando il simbolo “::”,
mentre quelle discrete con “:”. Esistono dei tipi di variabili discrete predefiniti, come bool
(booleana), int (intera) e real (reale). Le variabili, se reali, possono essere dichiarate con
l’unità di misura (v::[m/s]).
Nel corpo del processo vengono dettagliate le operazioni che il processo esegue
sulle variabili discrete o continue a disposizione. Il comportamento di un processo può
variare a seconda della diversa specificazione di alcune variabili. Per questa ragione un
processo è parametrizzato ed i parametri sono esplicitamente dichiarati per specificare il
sottoinsieme di variabili di configurazione del processo stesso.
Il valore assunto dalle variabili viene modificato dalle operazioni interne al corpo
del processo oppure dai messaggi ricevuti da altri processi.
All’interno di un processo può essere richiamata anche una funzione, del tutto
analoga ad un processo per quanto concerne la forma ma caratterizzata dal fatto di
restituire esclusivamente un dato del tipo (type) dichiarato. Invocando una funzione, al
processo viene restituito il risultato della funzione stessa, sotto la condizione che vengano
rispettati i vincoli di compatibilità tra tipo di dato richiesto dal processo e tipo di dato
fornito dalla funzione.
Ad esempio la funzione:
func quadrato (n : nat) → nat =
|[↑ n x n]|
nella quale il simbolo “↑ ” è caratterizzato dallo stesso significato assunto dal comando
return nelle funzioni in C++ [Pez96], restituisce un valore naturale che rappresenta il
quadrato del parametro n; quindi sarà:
quadrato (4) = 16
quadrato (13) = 169
Analisi del processo di modellazione nel linguaggio χ
e sua applicazione in un sistema di assemblaggio radar
Il sistema è definito da una serie di processi, opportunamente parametrizzati, che
funzionano in parallelo tra loro e viene dichiarato come segue:
syst nome (dichiarazione dei parametri)=
|[dichiarazione dei canali di comunicazione e di sincronizzazione
| nome processo(parametri processo) || nome processo(parametri processo)
||....
]|
Mentre nella parte dichiarativa dei processi vengono indicate le variabili locali, nel
sistema si elencano i canali di comunicazione e di sincronizzazione che consentono la
trasmissione di messaggi tra i processi che compongono il modello. Il simbolo che separa i
vari processi richiamati (“||”) evidenzia volutamente il funzionamento concorrente dei
processi. Tra i processi interessati nella dichiarazione di un sistema possono comparire
anche altri sistemi, ma non funzioni.
I processi sono appunto i moduli base della costruzione di un modello di
simulazione in χ . La dichiarazione del sistema adempie i compiti di cui in SIMAN
[Noè98] si occupa l’experimental frame: si elencano infatti l’insieme dei blocchi
elementari, processi e sistemi, che costituiscono il modello, e si definiscono anche le
specifiche sperimentali. In realtà il modello è definito dal comando xper, che si limita a
richiamare il sistema a sua volta parametrizzato.
Per comprendere meglio il legame tra processi, sistemi e xper riportiamo il
seguente esempio:
proc intface (a1,i1,c1,p1:! nat , a2,i2,c2,p2:? nat )=
|[dichiarazione delle variabili; inizializzazione
| collegamenti
| corpo del processo (parte continua e parte discreta)
]|
Analisi del processo di modellazione nel linguaggio χ
e sua applicazione in un sistema di assemblaggio radar
proc attrezzature ( in:?nat , out:!nat , N: nat)=
|[dichiarazione delle variabili; inizializzazione
| collegamenti
| corpo del processo (parte continua e parte discreta)
]|
Le operazioni che ogni singolo processo compie, inclusi i riferimenti alle funzioni,
vengono descritti nel corpo del processo e dipendono dai vari parametri, esplicitati nel
sistema:
syst SRU (Na,Ni,Nc,Np: nat)=
|[ a1,a2,i1,i2,c1,c2,p1,p2: nat
| intface (a1,i1,c1,p1,a2,i2,c2,p2)
|| attrezzature (a1,a2,Na)
|| attrezzature (i1,i2,Ni)
|| attrezzature (c1,c2,Nc)
|| attrezzature (p1,p2,Np)
]|
In questo caso i parametri del processo “attrezzature” dipendono a loro volta dai
parametri di tipo naturale (nat) assegnati al sistema SRU, che solo con xper vengono
definitivamente specificati nel valore assunto:
xper=
|[ SRU (3,2,1,3) ]|
Nel nostro semplice esempio, il terzo parametro del processo attrezzature, che è
stato duplicato (ossia istanziato più volte) nel sistema, assumerà i valori 3, 2, 1 e 3, grazie
alla definizione dei parametri del sistema SRU avvenuta con xper.
Analisi del processo di modellazione nel linguaggio χ
e sua applicazione in un sistema di assemblaggio radar
Se il sistema non fosse parametrizzato, si otterrebbe lo stesso risultato ma senza la
necessità di esplicitare i parametri con xper:
syst SRUb=
|[ a1,a2,i1,i2,c1,c2,p1,p2: nat
| intface (a1,i1,c1,p1,a2,i2,c2,p2)
|| attrezzature (a1,a2,3)
|| attrezzature (i1,i2,2)
|| attrezzature (c1,c2,1)
|| attrezzature (p1,p2,3)
]|
In questo caso con xper ci si limiterebbe ad indicare il sistema che rappresenta il
modello di simulazione:
xper=
|[ SRUb ]|
La prima modalità di rappresentazione, al contrario della seconda, consente la
modifica del valore dei parametri Na, Ni, Nc ed Np senza la necessità di alcun intervento
sul sistema.
A parte questa differenza nel modo di esplicitare i parametri che non costituiscono
canali di comunicazione o di sincronizzazione, entrambi i sistemi (SRU e SRUb)
rappresentano la stessa unità indipendente (sistema chiuso): infatti per potersi connettere
ad altri processi o sistemi è necessaria l’esistenza di almeno un canale di comunicazione
con l’esterno. Solo dopo aver introdotto i canali di comunicazione e sincronizzazione si
introdurrà anche il concetto di sistema aperto (o sottosistema) e si opereranno le dovute
comparazioni tra i due differenti tipi di sistemi.
Analisi del processo di modellazione nel linguaggio χ
e sua applicazione in un sistema di assemblaggio radar
1.6 I canali di comunicazione e di sincronizzazione
La composizione di un modello costituito da sottomodelli operanti in maniera
concorrente avviene introducendo variabili di connessione per specificare l’interfaccia dei
sub-models stessi (processi o sottosistemi). Questi elementi di connessione, equivalenti
degli streams (in gPROMS [gPr98] ed in ASCEND [Asc98]) e dei terminals (in Dymola
[Dym99]), sono detti canali di comunicazione (channels).
Il modello di un sistema è quindi composto da una insieme di processi e di canali
che li connettono tra loro. I canali, attraverso i quali si realizzano tutte le interazioni
possibili tra i processi, possono essere:
• Canali di comunicazione discreti: servono a trasmettere il tipo di dato
indicato da un processo ad un altro. E’ necessario peraltro distinguere i canali
in uscita dal processo (p:!int) da quelli in entrata al processo (p:?int).
Nell’esempio di seguito riportato, il processo A è in grado di trasmettere al
processo B una variabile intera attraverso il canale p: l’effettivo collegamento
tra A e B avviene nell’ambito della dichiarazione di sistema, attraverso la
specificazione del parametro p scambiato dai due processi.
syst S = |[ p: int | A(p) || B(p) ]|
proc A (p:!int) proc B (p:?int)
p
Figura 1.1: canale di comunicazione discreto
Analisi del processo di modellazione nel linguaggio χ
e sua applicazione in un sistema di assemblaggio radar
• Canali discreti di sincronizzazione (s:˜void), che a differenza dei canali di
comunicazione sono simmetrici, ossia collegano due processi in entrambe le
direzioni. Come si può notare qui di seguito, proprio per la sua simmetria il
canale non è direzionale. Tali canali non scambiano alcun tipo di dato tra
processi.
syst S = |[ s: void | A(s) || B(s) ]|
L’esecuzione del comando s˜ in un processo implica il suo arresto
momentaneo, in attesa del segnale di ritorno di avvenuta sincronizzazione
proveniente dal processo collegato. Contemporaneamente alla risposta di
sincronizzazione il processo si sblocca, eseguendo le operazioni
immediatamente successive.
• Canali di comunicazione continui (h::⊸[m³/s]), per la trasmissione continua di
informazioni. Un canale continuo è identificato col simbolo “⊸”. Analogamente
ai casi precedenti, il legame fra i vari building blocks viene definito nel sistema
eguagliando i parametri che identificano il canale di comunicazione dei due
processi interessati. Nel caso seguente (in figura 1.3), in cui il canale viene
rappresentato da una linea continua con un piccolo cerchio per indicare la
direzione del flusso o la relazione causa-effetto, il sistema sarà del tipo:
proc A (s:˜void) proc B (s:˜void)
s
Figura 1.2: canale discreto di sincronizzazione
Analisi del processo di modellazione nel linguaggio χ
e sua applicazione in un sistema di assemblaggio radar
syst S = |[ h::[m³/s] | A(h) || B(h) ]|
Praticamente, se al parametro a dichiarato formalmente nel processo A viene
assegnato il valore h, anche il parametro b dichiarato formalmente nel processo
B dovrà assumere il medesimo valore. Ciò avviene in virtù del collegamento
continuo tra i processi A e B dichiarato nel sistema S.
1.7 Variabili locali e variabili condivise
In un modello in χ , per quanto detto finora, le variabili sono locali ai processi, in
conformità con la filosofia del linguaggio che ricerca l’indipendenza dei singoli processi
per ottenere un sistema nel complesso robusto ed affidabile. Ogni processo è cioè un sub-
model che elabora le proprie variabili localmente. Gli scambi informativi fra i sub-models
sono permessi esclusivamente dai canali di comunicazione. La dichiarazione dei parametri
di interfaccia dei processi include, come appena visto, canali continui o discreti.
Consideriamo ora nel dettaglio le combinazioni possibili ottenute incrociando il
tipo di variabili (continue o discrete) con il rispettivo canale (continuo o discreto), per
comprenderne meglio il significato ed il tipo di dati scambiati tra i processi. Siamo in
grado perciò di distinguere tra le 4 situazioni rappresentate in figura 1.4:
proc A (a::⊸[m³/s]) proc B (b::⊸[m³/s])
h
Figura 1.3: canale di comunicazione continuo
Analisi del processo di modellazione nel linguaggio χ
e sua applicazione in un sistema di assemblaggio radar
Variabile continua condivisa
Nella sezione di collegamento di un processo (link section) le
variabili continue vengono collegate ai canali (sempre con il simbolo “⊸”):
naturalmente le variabili di processi differenti saranno connesse tra loro solo
se collegate dallo stesso canale. Collegando due variabili con un canale
continuo, le si vincola ad assumere una relazione di equivalenza: il legame
tra le 2 variabili collegate è tale che una di esse dipenda direttamente dal
valore dell’altra. Il canale di comunicazione continuo consente perciò ad
una variabile continua di assumere lo stesso valore di una variabile continua
appartenente ad un altro processo. Per questa ragione si può parlare di
variabili condivise.
variabile
continua
variabile
discreta
canale discreto canale continuo
variabile
continua locale
variabile
continua
condivisa
variabile
discreta
condivisa
variabile
discreta locale
Figura 1.4: la tipologia delle variabili in χ
Analisi del processo di modellazione nel linguaggio χ
e sua applicazione in un sistema di assemblaggio radar
Variabile discreta condivisa
E’ la situazione analoga alla precedente nel caso di variabile di tipo
discreto. Trattandosi di una variabile discreta si otterrebbe lo stesso effetto
se la comunicazione tra i due processi fosse permessa da un canale discreto
(si veda la combinazione “variabile discreta locale”). La differenza
sostanziale tra le due possibilità consiste nel fatto che con un canale
continuo non è necessario il comando di comunicazione ad ogni
modificazione del valore della variabile considerata. La comunicazione
avviene con certezza ad ogni cambiamento di valore della variabile,
aumentando il numero di transazioni di comunicazione ma, nel contempo,
supportando la condivisione virtuale della variabile tra i 2 processi, utile nel
caso in cui sia necessario mantenere l'informazione strettamente allineata.
Variabile continua locale
In questo caso una variabile di tipo continuo appartenente ad un
processo viene spedita ad un altro processo senza continuità, bensì ad
intervalli di tempo discreti. Un esempio di utilizzo di questa combinazione
può essere la modellazione di un sistema fisico continuo controllato in
maniera discreta: in questo caso la frequenza di campionamento del
controllore necessita di un canale di comunicazione tempificabile in maniera
discreta. Ovviamente allo stesso risultato si giungerebbe utilizzando un
canale continuo ed effettuando il campionamento con la cadenza voluta nel
processo destinatario: se infatti la variabile continua fosse virtualmente
condivisa, basterebbe leggere i valori assunti dalla variabile con la
frequenza desiderata per ottenere lo stesso risultato (anche se la
comunicazione dell’andamento del valore della variabile tra 2 istanti
successivi di campionamento attraverso il canale continuo risulterebbe del
tutto inutile).
Analisi del processo di modellazione nel linguaggio χ
e sua applicazione in un sistema di assemblaggio radar
Variabile discreta locale
E’ il caso più elementare di comunicazione tra processi: la variabile
discreta è effettivamente locale al processo perché la condivisione con un
altro processo è subordinata alla presenza di un comando di scambio
informativo nei due processi. In effetti la variabile potrebbe modificarsi
senza necessariamente venire spedita: l’utilizzo di un canale discreto di
comunicazione non garantisce al processo destinatario di conoscere
l’evoluzione del dato trasmesso nell’intervallo compreso tra due
comunicazioni consecutive.
Grazie all’analisi effettuata siamo in grado di escludere l’esistenza di variabili
globali in un modello in χ . Solo l’adozione del canale continuo è in grado di consentire
l’allineamento tra variabili appartenenti a due differenti processi, mentre l’utilizzo di un
canale discreto consente esclusivamente uno scambio informativo nell’istante in cui viene
eseguito il comando di comunicazione relativo.
1.8 Sistemi chiusi e sistemi aperti
Nella descrizione di modelli complessi, grazie all’impiego di canali di
comunicazione e di sincronizzazione, può risultare conveniente raggruppare alcuni
processi in sottosistemi. Se, ad esempio, in un sistema produttivo esistessero numerosi
macchinari dello stesso tipo dotati ciascuno di un buffer in entrata e di uno in uscita, si
potrebbero collegare in un sottosistema il processo che descrive il funzionamento del
macchinario con quelli che modellizzano i buffer. Il sistema, invece che istanziare i tre
processi più volte, si limiterebbe così ad utilizzare il sottosistema creato con l’opportuna
interfaccia. La modularità ottenuta dovrebbe consentire la riduzione del codice prodotto ed
Analisi del processo di modellazione nel linguaggio χ
e sua applicazione in un sistema di assemblaggio radar
buffer in
ingresso
macchina
tipo A
buffer in
uscita
una facile estendibilità del modello: infatti, parte del codice potrebbe essere riutilizzato per
modellizzare altri sistemi/sottosistemi analoghi sia in termini di operazioni svolte, sia in
termini di interfaccia con il resto del sistema modellizzato.
Iniziamo a rappresentare gli ipotetici processi appena citati, nei quali i canali a, f e
d fungono da interfaccia con il resto del sistema produttivo:
La creazione del sottosistema avviene dichiarando il sistema gruppo macchina A di
seguito riportato:
syst gruppo macchina A (a:?nat, d:!nat, f::⊸[m/s])=
|[ a,d: nat , b,c:real, e:void, f::⊸[m/s] , g::⊸[m³/s]
| buffer IN (a , b , e)
|| macchina A (b , c , g , f , e)
|| buffer OUT (c , d , g)
]|
a
b
f
e
c d
g
proc buffer IN (a:?nat, b:!real, e:˜void) proc buffer OUT (c:?real, d:!nat, g::⊸[m³/s])
proc macchina A (b:?real, c:!real, g::⊸[m³/s], f::⊸[m/s], e:˜void)
Figura 1.5: modello in χ della singola macchina di tipo A, dotata di un
buffer in entrata e di uno in uscita
Analisi del processo di modellazione nel linguaggio χ
e sua applicazione in un sistema di assemblaggio radar
sistema
gruppo
macchina
A
Dalla configurazione precedente, si giunge ad una situazione semplificata in cui il
sottosistema rappresenta un modulo in grado di collegarsi alla restante parte del sistema
attraverso i canali di comunicazione che venivano utilizzati dai tre processi ora accorpati.
I canali che fanno da interfaccia con il resto del sistema sono infatti gli stessi dei processi
(a, f e d). Nel sistema verrà richiamato il sottosistema gruppo macchina A, specificandone
ogni volta i canali di comunicazione. Se, ad esempio, le macchine del tipo A fossero
solamente 2 e lo schema logico rappresentativo del modello fosse quello in figura 1.7, il
sistema avrebbe la forma sotto riportata:
syst ciclo produttivo=
|[ a,b,c,d,g :nat, e,f::⊸[m/s]
| stazione di loading (a , c , g , f , e)
|| gruppo macchina A (a , b , e)
|| gruppo macchina A (c , d , f)
|| stazione di unloading (b , d , g)
]|
xper=
|[ ciclo produttivo ]|
a d
f
syst gruppo macchina A (a:?nat, d:!nat, f::⊸[m/s])
Figura 1.6: il gruppo macchina A modellizzato
come un sottosistema
Analisi del processo di modellazione nel linguaggio χ
e sua applicazione in un sistema di assemblaggio radar
processo
stazione
di loading
sistema
gruppo
macchina
A
sistema
gruppo
macchina
A
processo
stazione
di
unloading
Alla luce di quanto detto, risulta possibile distinguere due differenti tipologie di
sistemi:
1. I sistemi chiusi (o sistemi indipendenti), come il sistema ciclo produttivo o i
sistemi SRU e SRUb del paragrafo precedente, che funzionano come unità
autonome, non essendo in grado di interagire con altri processi o sistemi.
2. I sistemi aperti (o sottosistemi), come il sistema gruppo macchina A, il cui
funzionamento necessita il collegamento ad altri processi o sistemi.
Dualmente al caso dei sistemi indipendenti, questa seconda tipologia di
sistemi non può sussistere senza la presenza di altri building blocks.
g
f
c
a
e
b
d
Figura 1.7: schema logico di un sistema dotato di 2
macchine di tipo A