Nella seconda parte di questo tutorial abbiamo imparato a dichiarare le variabili del nostro modello andando a specificarne il tipo. In questa terza parte vedremo come assegnare un significato fisico alle nostre variabili.
Nel campo della fisica e dell’ingegneria è solitamente molto importante andare a definire e gestire correttamente le unità di misura relative alle variabili in gioco.
Ora andiamo quindi a riscriere il modello precedente , questa volta assegnando un significato fisico ed un unità di misura a ciascuna variabile:

model MassaForza_2 "Massa spinta da una forza costante"
 parameter Real m(unit="kg", min=0)=2 "Massa del blocco";
 parameter Real f(unit="N")=6 "Forza applicata";
 Real s(unit="m") "Posizione del blocco";
 Real v(unit="m/s") "Velocità del bloco";
 annotation(Diagram(Rectangle(extent=)));
 equation
 v = der(s);
 m*der(v) = f;
end MassaForza;

L’attributo “unit” definisce che le equazioni in cui sarà utilizzato saranno corrette solamente se i
valori utilizzati saranno espressi nella medesima unità di misura. In altre parole il tool di modellazione (nel nostro caso Dymola) avrà cura automaticamente di effettuare le conversioni di unità di misura e le equazioni dimensionali per garantire la coerenza e consistenza del modello.
In aggiunta all’attributo relativo all’unità di misura, è possibile andare a definirne altri come ad esempio “min“, che va ad introdurre un valore minimo per la variabile. Bisogna però dire che da solo l’attributo “unit” non è sufficiente per definire una quantità fisica, in quanto differenti quantità possono avere la stessa unità di misura come ad esempio:

quantity unit in unità SI
Coppia Nm Kgm2/s2
Energia J Kgm2/s2

E’ per questo motivo che è possibile andare a specificare in Modelica differenti attributi relativi alle unità di misura e quantità fisiche:

quantity Tipologia di quantità fisica
unit Unità nella quale vengono definite le equazioni
displayUnit Unità che viene utilizzata di default per gli input ed output

In Modelica le quantità e le unità di misura vengono definite come stringhe, e la sintassi per la loro definizione segue le norme ISO standard:

Unità di misura Sintassi Modelica
Kgm2/s2 “kg.m2/s2″ oppure “kg.m.m/(s.s)”
rad/s “rad/s”
1/s “1/s” oppure “s-1″

Come abbiamo detto gli attribti relativi alle unità di misura non sono i soli che possono venire definiti in fase di dichiarazione delle variabili, eccone qui di seguito una lista esaustiva:

Attributo Significato
min Valore minimo della variabile
max Valore massimo della variabile
start Valore iniziale della variabile
fixed = true: il valore definito come valore iniziale è fissato
= false: il valore definito come valore iniziale è un valore di riferimento per il metodo iterativo
nominal Valore nominale di riferimento per gli algoritmi numerici
stateSelect Influenza la scelta di quelle che saranno le variabili di stato nelle singole equazioni: StateSelect.never, .avoid, .default, .prefer, .always

Ecco quindi un esempio di dichiarazione di variabili contenenti la definizione di alcuni degli attributi che abbiamo visto:

 parameter Real m(unit="kg", min=0, quantity="mass") = 2 "Massa del blocco";
 Real v(unit="m/s", start=3, fixed=true, quantity="velocity") = 2 "Massa del blocco";

Definire le unità di misura in questo modo non è certamente comodissimo, ed è per questo motivo che in Modelica è stato definito un metodo alternativo che sfrutta la programmazione ad oggetti. Infatti in Modelica è possibile andare a definire una serie di tipi di variabili derivanti dai quattro tipi fondamentali che abbiamo visto nell’articolo precedente (Real, Integer, Boolean, String). Ecco qui alcuni esempi:

 type Angle = Real(final quantity = "Angle", final unit = "rad", displayUnit = "deg");
type Torque = Real(final quantity = "Torque", final unit="N.m");
type Mass = Real(final quantity = "Mass" , final unit="kg", min=0);
type Pressure = Real(final quantity = "Pressure", final unit="Pa", displayUnit = "bar", nominal = 1e5);

In queste definizioni possamo notare la presenza della keyword “final” che serve ad indicare che quel dato modificatore non potrà essere più modificato in fase di dichiarazione.
Utilizzando questa metodologia possiamo definire le nostre variabili in questo modo:

parameter Mass m = 2;
parameter Angle phi = 0.1;
Pressure p (start = 1e6, fixed = true, displayUnit = "mPa");

Possiamo notare che l’attributo “displayUnit” sia stato modificato in fase di inizializzazione in quanto nella definizione del tipo “Pressure” esso NON era stato definito come “final“.