Η Real Time Java στην ανάπτυξη ενσωματωμένων συστημάτων

transportdingdongSoftware and s/w Development

Jul 14, 2012 (5 years and 2 months ago)

260 views

ΠΑΝΕΠΙ΢ΣΗΜΙΟ ΠΑΣΡΩΝ


ΠΟΛΤΣΕΥΝΙΚΗ ΢ΥΟΛΗ


ΣΜΗΜΑ ΗΛΕΚΣΡΟΛΟΓΩΝ
ΜΗΥΑΝΙΚΩΝ & ΣΕΥΝΟΛΟΓΙΑ΢
ΤΠΟΛΟΓΙ΢ΣΩΝ


ΣΟΜΕΑ΢: ΗΛΕΚΣΡΟΝΙΚΗ΢ ΚΑΙ
ΤΠΟΛΟΓΙ΢ΣΩΝ





ΔΙΠΛΩΜΑΣΙΚΗ ΕΡΓΑ΢ΙΑ


ηνπ θνηηεηή ηνπ Τκήκαηνο Ζιεθηξνιφγσλ Μεραληθψλ θαη


Τερλνινγ
ίαο Υπνινγηζηψλ ηεο Πνιπηερληθήο ζρνιήο ηνπ Παλεπηζηεκίνπ Παηξψλ:



Αζζι ούπα Ιυάννη


Απι θμόρ Μηηπώος:5593


Θέμα:


«Η
Real

Ti me

Java

ζηην ανάπηςξη ενζυμαηυμένυν
ζςζηημάηυν»



Επιβλέπυν:


Κλεάνθηρ Θπαμποςλίδηρ


ΠΑΣΡΑ, ΙΟΤΛΙΟ΢ 2010











ΠΙ΢ΣΟΠΟΙΗ΢Η



Πηζην
πνηείηαη φηη ε δηπισκαηηθή εξγαζία κε ζέκα:



«Η
Real

Ti me

Java

ζηην ανάπηςξη ενζυμαηυμένυν ζςζηημάηυν»



ηνπ θνηηεηή ηνπ ηκήκαηνο

Ζιεθηξνιφγσλ Μεραληθψλ θαη Τερλνινγίαο Υπνινγηζηψλ

Αζζηνχξα Ησάλλε ηνπ Ζιία

(Α.Μ. 5593)

παξνπζηάζηεθε δεκφζηα θαη εμεηάζηεθε
ζην ηκήκα

Ζιεθηξνιφγσλ Μεραληθψλ θαη Τερλνινγίαο Υπνινγηζηψλ ζηηο

05/07/2010


Ο Δπηβιέπσλ Ο Γηεπζπληήο ηνπ



Τνκέα






Κ. Θξακπνπιίδεο
Δ. Φνχζνο

Καζεγεηήο

K
αζεγεηήο














Αξη ζκφο Γη πισκαηη θήο Δξγαζί αο:




Σίηλορ:



Η
Real

Ti me

Java

ζηην ανάπηςξη ενζυμαηυμένυν ζςζηημάηυν





Φνη ηεηήο:

Αζζη νχξαο Ησάλλεο

Δπη βιέπσλ:

Κιεάλζεο Θξακπνπιί δεο





Πεπίλητη




Ζ
Rea
l

time

Specification

of

Java

(
RTSJ
) μεπεξλάεη ηνπο πεξηνξηζκνχο ηεο
Java

πνπ ηελ θξίλνπλ
αθαηάιιειε γηα ηελ αλάπηπμε ζπζηεκάησλ πξαγκαηηθνχ ρξφλνπ.
H

Real

Time

Java

έρεη ήδε
ρξεζηκνπνηεζεί ζηελ αλάπηπμε βηνκεραληθψλ ζπζηεκάησλ ειέγρνπ κε ζεηηθά απνηειέζκαη
α. Ωζηφζν,
ε επξεία ρξήζε ζηελ αλάπηπμε εθαξκνγψλ ηνπ πεδίνπ απηνχ πεξηνξίδεηαη ζεκαληηθά απφ ην γεγνλφο
φηη νη κεραληθνί ζπζηεκάησλ ειέγρνπ δελ είλαη εμνηθνησκέλνη κε ηηο ζχγρξνλεο ηερλνινγίεο αλάπηπμεο
ινγηζκηθνχ.

Τν
IEC
61499
RTSJ
-
Based

Framework
, ην νπ
νίν παξνπζηάδεηαη θαη επεθηείλεηαη ζηελ παξνχζα
δηπισκαηηθή εξγαζία αμηνπνηεί ην λέν
IEC
61499 πξφηππν, ην νπνίν είλαη βαζηζκέλν ζηελ έλλνηα ηνπ
Function

Block
. Τν
framework

απηφ επηηξέπεη ζηνλ κεραληθφ ζπζηεκάησλ ειέγρνπ λα δνπιέςεη ζην
επίπεδν ζρεδίαζεο
ρξεζηκνπνηψληαο ηελ επξέσο δηαδεδνκέλε έλλνηα ηνπ
FB
, εθκεηαιιεπφκελνο ην
απηφκαηα παξαγφκελν
Real

time

Java

κνληέιν πινπνίεζεο ηνπ ζπζηήκαηνο.

Σηελ παξνχζα δηπισκαηηθή εξγαζία αξρηθά παξνπζηάδνληαη νη επεθηάζεηο πνπ πξνζθέξεη ην
RTSJ

ζηελ
Standard

Java

ψζ
ηε λα κπνξεί λα ρξεζηκνπνηεζεί ζε εθαξκνγέο πξαγκαηηθνχ ρξφλνπ. Σηελ
ζπλέρεηα παξνπζηάδεηαη ην
IEC
61499
RTSJ
-
Based

Framework

θαη νη επεθηάζεηο πνπ έγηλαλ ζε απηφ,
ψζηε λα κπνξεί λα ππνζηεξηρζεί ε αλάπηπμε θαηαλεκεκέλσλ εθαξκνγψλ. Αθνινπζεί ε αλάιπζε ηεο
απ
φδνζεο ηνπ πεξηβάιινληνο εθηέιεζεο ηνπ
framework

θαη ε πεξίπησζε ρξήζεο ελφο ζπζηήκαηνο
γξακκήο παξαγσγήο, ηνπ
Festo

MPS
.








Π
ΡΟΛΟΓΟ΢






Ζ
Java

απφ ην μεθίλεκα ηεο ην 1995 κέρξη θαη ζήκεξα έρεη γλσξίζεη κεγάιε απνδνρή ζηελ αλάπηπμε
ζπζηεκάησλ δηαθφξσλ πεδ
ίσλ. Φαξαθηεξηζηηθά ηεο φπσο ε αζθάιεηα, ν ρεηξηζκφο εμαηξέζεσλ, ην
πνιπλεκαηηθφ πεξηβάιινλ, θαη ην
garbage

collection

έθαλαλ ηε γιψζζα δεκνθηιή θαη επηηπρεκέλε.
Ωζηφζν,
Java

εθαξκνγέο πνπ εθηεινχληαη ζε γεληθνχ ζθνπνχ
JVMs

θαη ζε γεληθνχ ζθνπνχ
ιεηηνπξγη
θφ ζχζηεκα κπνξνχλ λα αληαπνθξηζνχλ ζηελ θαιχηεξε πεξίπησζε κφλν ζε απαηηήζεηο
ειαζηηθνχ πξαγκαηηθνχ ρξφλνπ ηνπ επηπέδνπ ησλ 100
msec
. Σηνηρεία ηεο γιψζζαο φπσο ε δπλακηθή
θφξησζε θιάζεσλ, ην
garbage

collection

θαη ην
just

in

time

compilation

είλαη νη πην

ζεκαληηθνί
παξάγνληεο γηα ηελ κε ληεηεξκεληζηηθή ζπκπεξηθνξά, ε νπνία θαη θξίλεη ηελ γιψζζα αθαηάιιειε γηα
ηελ αλάπηπμε εθαξκνγψλ ζπζηεκάησλ πξαγκαηηθνχ ρξφλνπ. Παξά ηα κεηνλεθηήκαηα απηά, πνιινί
εξεπλεηέο έρνπλ αλαγλσξίζεη ηελ πξννπηηθή ηεο
Java

ζηελ αλά
πηπμε
real

time

εθαξκνγψλ, θαη έρνπλ
πξνηείλεη ηερληθέο γηα λα αληηκεησπηζηνχλ ηα παξαπάλσ πξνβιήκαηα. Μηα
ζπζηεκαηηθή
πξνζέγγηζε
γηα ηελ παξνρή κηαο επέθηαζεο πξνθεηκέλνπ λα αληηκεησπηζηνχλ νη πεξηνξηζκνί ηεο
Java

θαηέιεμαλ
ζηνλ νξηζκφ ηνπ
RTSJ
.
To

RTSJ

ν
ξίδεη ηξνπνπνηήζεηο θαη λέα ραξαθηεξηζηηθά ζηα
semantics

ηεο
JVM
,
φπσο
scheduling

properties
, πνπ είλαη θαηάιιειεο γηα εθαξκνγέο πξαγκαηηθνχ ρξφλνπ, ππνζηήξημε γηα
deadlines

θαη
CPU

time

budgets

θαζψο θαη ηξφπνπο γηα ηελ απνθπγή θαζπζηεξήζεσλ ιφγσ ηνπ
Garb
age

Collector
.

Δπηπιένλ παξέρεη απνδνηηθφηεηα, θνξεηφηεηα θαη επηηξέπεη ηελ ελζσκάησζε ζην ίδην πεξηβάιινλ
εθηέιεζεο θψδηθα απζηεξνχ, ειαζηηθνχ θαη κε πξαγκαηηθνχ ρξφλνπ. Τα ραξαθηεξηζηηθά απηά είλαη
πνιχ ζεκαληηθά γηα κεγάιεο θιίκαθαο θαηαλεκεκέλα ελζσκαη
σκέλα ζπζηήκαηα πξαγκαηηθνχ ρξφλνπ.

Σηα πιαίζηα ηεο εξγαζίαο απηήο

κειεηήζεθαλ ηα ζπζηήκαηα πξαγκαηηθνχ ρξφλνπ θαη νη ηδηαηηεξφηεηεο
πνπ εηζάγνπλ ζηελ αλάπηπμε εθαξκνγψλ πξαγκαηηθνχ ρξφλνπ.Μειεηήζεθε επίζεο ην
RTSJ

θαη νη
επεθηάζεηο πνπ πξνζθέξεη ζηελ
stan
dard

Java

ψζηε λα κπνξεί λα ρξεζηκνπνηεζεί γηα ηελ αλάπηπμε
ζπζηεκάησλ πνπ αλήθνπλ ζην πεδίν απηφ.Τέινο, κειεηήζεθε θαη επεθηάζεθε ην
IEC

61499
RTSJ
-
Based

framework

πνπ αλαπηήρζεθε απν ηνλ θ.Αιθηβηάδε Ενχπα θαη ηνλ θ.Κιεάλζε Θξακπνπιίδε θαη
επηηξέπεη ηελ α
πηφκαηε παξαγσγή
real

time

Java

θψδηθα απν ην κνληέιν ζρεδηαζκνχ ηνπ ζπζηήκαηνο
πνπ ζε απηή ηελ πεξίπησζε βαζίδεηαη ζηελ έλλνηα ηνπ
Function

Block
.

H

εθπφλεζε ηεο δηπισκαηηθήο εξγαζίαο έγηλε ην δηάζηεκα 3/2009
-
6/2010.

Σε απηφ ην ζεκείν, ζα ήζεια λα επραξηζ
ηήζσ ζεξκά ηνλ θ. Κιεάλζε Θξακπνπιίδε. Ζ ζπλεξγαζία καο
ήηαλ άξηζηε θαη ηδηαίηεξα επνηθνδνκεηηθή θαη κέζα απφ απηή θέξδηζα πνιχηηκεο εκπεηξίεο πνπ ζα κε
ζπλνδεχζνπλ ζηε κειινληηθή κνπ θαξηέξα σο κεραληθνχ ινγηζκηθνχ.

Απηή ε δηπισκαηηθή εξγαζία βαζίζηεθε θα
η επέθηεηλ
ε

πξνεγνχκελεο εξγαζίεο ησλ θ.Αιθηβηάδε Ενχπα
θαη θ.Γηψξγν Γνχθα ηνπο νπνίνπο επραξηζηψ.











Πίνακαρ Πεπιεσομένυν





ΕΙ΢ΑΓΩΓΗ

................................
................................
............

1

ΚΕΦΑΛΑΙΟ 1

................................
................................
.........

3

Η
Real

Time

Java

ζηην ανάπηςξη ζςζηημάηων
ππαγμαηικού σπόνος

................................
..............................

3

1.1 Φαξαθηεξηζηηθά ησλ ζπζηεκάησλ πξαγκαηηθνχ ρξφλνπ

................................
..............................

3

1.2 Ζ Real
-
Time Specification of Java

................................
................................
................................
.

5

ΚΕΦΑΛΑΙΟ 2

................................
................................
.......

14

To IEC61499 RTSJ
-
Based Framework

...............................

14

2.1 Τν
IEC
61499
Function

Block

κνληέιν

................................
................................
.......................

14

2.2 Tν IEC61499 RTSJ
-
Based Framework

................................
................................
.......................

15

2.2.1 Τν implementation model framework

................................
................................
.................

16

2.2.2 Ζ δη
αδηθαζία αλάπηπμεο

................................
................................
................................
.......

21

2.2.3
To

πεξηβάιινλ
Run
-
Time

................................
................................
................................
......

2
2

ΚΕΦΑΛΑΙΟ 3

................................
................................
.......

24

Σο extended IEC61499 RTSJ
-
Based Framework

...............

24

3.1

Γεληθά

................................
................................
................................
................................
.......

24

3.2

Δ
πηθνηλσλία κε ην ππφ έιεγρν ζχζηεκα.

................................
................................
..................

26

3.3

Παξάδεηγκα Φξήζεο

................................
................................
................................
................

39

3.4

Δπηθνηλσλία κεηαμχ ησλ ζηαζκψλ κηαο θαηαλεκεκέλεο εθαξκνγήο.

................................
......

42

3.5

Παξάδεηγκα Φξήζεο

................................
................................
................................
................

49

3.6 Δλαιιαθηηθνί ηξφπνη αλάπηπμεο θαηαλεκεκέλσλ εθαξκνγψλ πξαγκαηηθνχ ρξφλνπ

.................

50

3.7

Υινπνίεζε ηνπ
CompositeFB

................................
................................
................................
..

54

3.8

Memory Management

................................
................................
................................
..............

58

ΚΕΦΑΛΑΙΟ 4

................................
................................
.......

60

Ανάλςζη ηηρ απόδοζηρ ηος πεπιβάλλονηορ εκηέλεζηρ ηος


IEC

61499
................................
................................
.............

60

4.1 Αλάιπζε ηεο απφδνζεο ηνπ ζηηγκηνηχπνπ ηνπ
FB

................................
................................
.......

60

4.2 Αλάιπζε απφδνζεο ηνπ δηθηχνπ ησλ
FB
.

................................
................................
...................

63

ΚΕΦΑΛΑΙΟ 5

................................
................................
.......

74

Πεπίπηωζη σπήζηρ ηος ζςζηήμαηορ FestoMPS

................

74

5.1 Τν ζχζηεκα Festo MPS

................................
................................
................................
...............

74

5.1.1 Πεξηγξαθή ηνπ ζπζηήκαηνο

................................
................................
................................
.

74

5.1.2 Μνλάδα δηαλν
κήο

................................
................................
................................
...............

75

5.1.3 Μνλάδα ειέγρνπ

................................
................................
................................
...................

76

5.1.4 Μνλάδα επεμεξγαζίαο

................................
................................
................................
.........

78

5.1.5 Μνλάδα απνζήθεπζεο

................................
................................
................................
..........

80

5.2 Τν κνληέιν ζρεδηαζκν
χ ηνπ ζπζηήκαηνο

................................
................................
..................

81

5.3 Υινπνίεζε ηεο εθαξκνγήο ειέγρνπ ζε
Real

Time

Java

θαη έιεγρνο ζσζηήο ιεηηνπξγίαο ηεο

.

89

5.3.1 Υινπνίεζε ηεο εθαξκνγήο ειέγρνπ ζε
Real

Time

Java

................................
....................

89

5.3.2 Έιεγρνο νξζφηεηαο ηεο εθαξκνγήο ειέγρνπ

................................
................................
.......

95

΢ςμπεπάζμαηα

................................
................................
.....

96

Αναθοπέρ

................................
................................
..............

97


















ΕΙ΢ΑΓΩΓΗ





Σήκεξα, νη γιψζζε
ο πξνγξακκαηηζκνχ πνπ είλαη νη πην δεκνθηιείο γηα ηελ αλάπηπμε ελζσκαησκέλσλ
ζπζηεκάησλ πξαγκαηηθνχ ρξφλνπ είλαη ε
C
, ε
C
++ θαη ε
Ada
. Ωζηφζν, ηα πιενλεθηήκαηα ηεο
Java

φπσο ε αλεμαξηεζία ηεο απφ ηελ πιαηθφξκα εθηέιεζεο, ε δεκνηηθφηεηα, ε επθνιία ρξήζεο θ
αη ν
κεγάινο αξηζκφο ησλ βηβιηνζεθψλ πνπ πξνζθέξεη θίλεζαλ ην ελδηαθέξνλ ηεο
real

time

θνηλφηεηαο.

Σαλ απνηέιεζκα, ηνλ Μάξηην ηνπ 2001 δεκνζηεχζεθε απφ ην
Real
-
Time

Expert

Group

ε
Real
-
Time

Specification

of

Java

(
RTSJ
).
To

RTSJ

παξέρεη έλα λέν
API

θαη επε
θηάζεηο ζηελ
standard

Java

ψζηε λα
κπνξεί λα ρξεζηκνπνηεζεί γηα ηελ αλάπηπμε ζπζηεκάησλ πξαγκαηηθνχ ρξφλνπ. Οη ζεκαληηθφηεξεο απφ
ηηο επεθηάζεηο απηέο είλαη
o

θαζνξηζκφο λέσλ πεξηνρψλ κλήκεο πνπ είλαη έμσ απφ ηελ επίδξαζε ηνπ
garbage

collector
, ε βειηίσζε
ηνπ ρξνλνπξνγξακκαηηζκνχ ησλ λεκάησλ, θαη ε εηζαγσγή κεραληζκψλ
πνπ παξέρνπλ ππνζηήξημε γηα αζχγρξνλε κεηαθνξά ηνπ ειέγρνπ. [1]


Σηελ παξνχζα δηπισκαηηθή εξγαζία παξνπζηάδεηαη ην
RTSJ

θαη νη ζεκαληηθφηεξεο επεθηάζεηο πνπ
πξνζθέξεη ζηελ
standard

Java

ψζηε λ
α κπνξεί λα ρξεζηκνπνηεζεί γηα ηελ αλάπηπμε ζπζηεκάησλ
πξαγκαηηθνχ ρξφλνπ. Σηελ ζπλέρεηα παξνπζηάδεηαη ην
IEC
61499
RTSJ
-
based

framework

πνπ έρεη
αλαπηπρζεί ζηα πιαίζηα ηεο πιαηθφξκαο
Archimedes
, θαη ην νπνίν επηηξέπεη ηελ απηφκαηε παξαγσγή
real

time

java

θψδηθα απφ ην κνληέιν ζρεδηαζκνχ ηνπ ζπζηήκαηνο, ην νπνίν βαζίδεηαη ζηα
function

blocks
. Παξνπζηάδνληαη επίζεο νη ηξνπνπνηήζεηο πνπ έγηλαλ ζην
IEC
61499
RTSJ
-
based

framework

θαη αλαιχεηαη ε απφδνζε ηεο
Java

εθαξκνγήο πνπ πξνθχπηεη κε βάζε ην λέν
framework
. Τέινο, ζαλ
πεξίπησζε ρξήζεο, κνληεινπνηείηαη θαη αλαπηχζζεηαη ε εθαξκνγή ειέγρνπ ελφο ζπζηήκαηνο γξακκήο
παξαγσγήο, ηνπ
Festo

Μ
odular

Production

System

(
MPS
).



Σην
K
εθάλαιο 1

γίλεηαη κηα εηζαγσγή ζηα ζπζηήκαηα πξαγκαηηθνχ ρξφλνπ θαη αλαιχνληαη ηα
ζηνη
ρεία ηεο
standard

Java

πνπ ηελ θξίλνπλ αθαηάιιειε γηα λα ρξεζηκνπνηεζεί ζηελ αλάπηπμε
ζπζηεκάησλ πνπ αλήθνπλ ζην πεδίν απηφ. Σηελ ζπλέρεηα παξνπζηάδεηαη ην
RTSJ

θαη νη
ζεκαληηθφηεξεο επεθηάζεηο πνπ πξνζθέξεη ζηελ
standard

Java

ψζηε λα κπνξεί λα ρξεζηκνπνη
εζεί γηα
ηελ αλάπηπμε ζπζηεκάησλ πξαγκαηηθνχ ρξφλνπ.


Σην
K
εθάλαιο 2
παξνπζηάδεηαη ην
IEC
61499
RTSJ
-
based

framework

ην νπνίν έρεη αλαπηπρζεί ζηα
πιαίζηα ηεο πιαηθφξκαο
Archimedes

θαη επηηξέπεη ηελ εθκεηάιιεπζε ηνπ
RTSJ

γηα ηε βαζηζκέλε ζε
κνληέια αλάπηπμε

θαηαλεκεκέλσλ εθαξκνγψλ ειέγρνπ. Σπγθεθξηκέλα ην
IEC
61499
RTSJ
-
based

framework

επηηξέπεη ηελ απηφκαηε παξαγσγή
real

time

java

θψδηθα απφ ην
function

block

κνληέιν
ζρεδηαζκνχ ηνπ ζπζηήκαηνο.


Σην
Κεθάλαιο 3
παξνπζηάδνληαη νη ηξνπνπνηήζεηο πνπ έγηλαλ ζην
I
EC
61499
RTSJ
-
based

framework
.
Οη ηξνπνπνηήζεηο απηέο πεξηιακβάλνπλ ηελ δεκηνπξγία ππνδνκήο γηα ηελ απηνκαηνπνίεζε ηεο
παξαγσγήο θψδηθα πνπ αθνξά ηελ επηθνηλσλία κε ην ππν έιεγρν ζχζηεκα, θαζψο θαη ησλ ζηαζκψλ
κεηαμχ ηνπο ζηελ πεξίπησζε θαηαλεκεκέλεο εθαξκ
νγήο.
E
πηπιένλ, έρεη πξνζηεζεί ε πινπνίεζε ηνπ
Composite

Function

Block
, θαζψο θαη ππνζηήξημε γηα ηελ εμαζθάιηζε ηεο ζσζηήο ζεηξάο παξαιαβήο
ησλ κελπκάησλ απφ ην ειεγρφκελν ζχζηεκα.

2




Σην
Κεθάλαιο 4
αλαιχεηαη ε απφδνζε ηνπ λένπ πεξηβάιινληνο εθηέιεζεο. Αλα
ιχνληαη ε ζπκπεξηθνξά
ηνπ ζηηγκηνηχπνπ ηνπ
FB

θαζψο θαη ηνπ δηθηχνπ ησλ
FB

θαη γίλεηαη κέηξεζε ηνπ ρξφλνπ πνπ
απαηηείηαη γηα λα εθηειεζηνχλ ιεηηνπξγίεο φπσο ε αλάγλσζε δεδνκέλσλ απφ ηηο εηζφδνπο ηνπ
FB
, ε
εθηίκεζε ησλ κεηαβάζεσλ απφ κηα θαηάζηαζε ηνπ
FB
, θ
αζψο θαη ε εθηέιεζε ησλ ελεξγεηψλ κηαο
θαηάζηαζεο ηνπ
FB
. Δπηπιένλ κεηξηέηαη ν ρξφλνο πνπ κεζνιαβεί απφ ηελ ζηηγκή πνπ ελεξγνπνηείηαη
θάπνην
event

εμφδνπ ελφο
FB

παξαγσγνχ κέρξη λα ιάβεη ην
event

ην
FB

θαηαλαισηήο ηφζν ζηελ
πεξίπησζε πνπ ηα
function

blocks

βξίζθνληαη ζηνλ ίδην φζν θαη ζε δηαθνξεηηθνχο ζηαζκνχο.


Σην
Κεθάλαιο 5
αξρηθά πεξηγξάθεηαη έλα ζχζηεκα γξακκήο παξαγσγήο, ην
FestoMPS

θαη ζηελ
ζπλέρεηα θαηαζθεπάδεηαη ην κνληέιν ζρεδηαζκνχ ηεο εθαξκνγήο ειέγρνπ ηνπ ζπζηήκαηνο ην νπνίν
είλαη βαζηζκέλν ζη
ελ έλλνηα ηνπ
Function

Block
. Σηελ ζπλέρεηα παξνπζηάδεηαη ν
java

θψδηθαο ηεο
θαηαλεκεκέλεο εθαξκνγήο πνπ πξνθχπηεη απφ ην κνληέιν ζρεδηαζκνχ κε βάζε ην λέν
framework
.
































3


ΚΕΦΑΛΑΙΟ 1



Η
Real

Time

Java

ζηην ανάπηςξη ζςζηημάηυν
ππ
αγμαηικού σπόνος



1.1 Υαπακηηπιζηικά ηυν ζςζηημάηυν ππαγμαηικού σπόνος


Σπζηήκαηα πξαγκαηηθνχ ρξφλνπ είλαη ηα ζπζηήκαηα ηα νπνία πξέπεη λα αληαπνθξίλνληαη ζε έλα
εμσηεξηθφ εξέζηζκα κέζα ζε έλα πεπεξαζκέλν θαη θαζνξηζκέλν ρξνληθφ δηάζηεκα. Σηα ζπζηήκαηα
απηά ε νξζφηεηα ηνπ ζπζηήκαηνο εμαξηάηαη φρη κφλν απφ ην ινγηθφ απνηέιεζκα ηνπ ππνινγηζκνχ,
αιιά θαη απφ ην ρξφλν ζηνλ νπνίν ην απνηέιεζκα παξάγεηαη. Τα ζπζηήκαηα απηά, ηα νπνία ηηο
πεξηζζφηεξεο πεξηπηψζεηο είλαη ελζσκαησκέλα, πινπνηνχληαλ αξρηθά απνθιεηζη
ηθά ζε
hardware
.
Σήκεξα ππάξρεη κηα έθδειε ηάζε πξνο ηελ αλάπηπμε ζπζηεκάησλ πξαγκαηηθνχ ρξφλνπ ζηα νπνία φιν
θαη πεξηζζφηεξε ιεηηνπξγηθφηεηα παξέρεηαη απφ ινγηζκηθφ, γεγνλφο πνπ έρεη σο απνηέιεζκα πην
εχθνιε θαη νηθνλνκηθή αλάπηπμε ηνπ ζπζηήκαηνο θαζψο θ
αη πην γξήγνξε δηάζεζή ηνπ ζηελ αγνξά.

Δπηπιένλ ιφγνο γηα ηελ απμαλφκελε ρξήζε ινγηζκηθνχ ζηελ αλάπηπμε ηέηνησλ ζπζηεκάησλ είλαη ην
γεγνλφο φηη νη θαηαζθεπαζηέο εηζάγνπλ φιν θαη πεξηζζφηεξε ιεηηνπξγηθφηεηα ζηα πξντφληα ηνπο κε
ζηφρν λα εμππεξεηήζνπλ ηηο α
λάγθεο ησλ πειαηψλ.

Κάζε ελζσκαησκέλν ζχζηεκα, απφ θηλεηά
ηειέθσλα θαη ςεθηαθέο θσηνγξαθηθέο κεραλέο κέρξη απηνθίλεηα θαη αεξνζθάθε, αθνινπζεί απηή ηελ
ηάζε ρσξίο εμαίξεζε. Λφγσ ηεο απμαλφκελεο πνιππινθφηεηαο ε πινπνίεζε ησλ ζπζηεκάησλ απηψλ ζε
hardware

γί
λεηαη φιν θαη δπζθνιφηεξε.


Τα ζπζηήκαηα πξαγκαηηθνχ ρξφλνπ ζρεηίδνληαη ζπρλά κε ηνλ φξν “πςειή ηαρχηεηα”, σζηφζν, ηα
ζπζηήκαηα απηά έρνπλ λα θάλνπλ πεξηζζφηεξν κε ηνλ φξν “πξνβιεςηκφηεηα ”, ηελ εμαζθάιηζε
δειαδή φηη ην ζχζηεκα πάληα ζα παξάγεη απνηειέζ
καηα κέζα ζε έλα απζηεξά θαζνξηζκέλν πιαίζην
ρξφλνπ. Τα ζπζηήκαηα πξαγκαηηθνχ ρξφλνπ δηαθξίλνληαη ζε ζπζηήκαηα απζηεξνχ θαη ζπζηήκαηα
ειαζηηθνχ πξαγκαηηθνχ ρξφλνπ.


Τα ζπζηήκαηα
αςζηηπού ππαγμαηικού σπόνος

είλαη ηα ζπζηήκαηα εθείλα ζηα νπνία είλαη απνιχησο

επηηαθηηθφ ε απφθξηζε λα ζπκβαίλεη κέζα ζε κηα πξνθαζνξηζκέλε ρξνληθή πξνζεζκία (
deadline
). Γηα
παξάδεηγκα, ν έιεγρνο πηήζεο ελφο αεξνζθάθνπο ραξαθηεξίδεηαη σο ζχζηεκα απζηεξνχ πξαγκαηηθνχ
ρξφλνπ θαζψο έλα ρακέλν
deadline

κπνξεί λα νδεγήζεη ζε θαηαζηξνθη
θφ απνηέιεζκα.


Ωο ζπζηήκαηα
ελαζηικού ππαγμαηικού σπόνος

ραξαθηεξίδνληαη ηα ζπζηήκαηα εθείλα ζηα νπνία ν
ρξφλνο απφθξηζεο είλαη ζεκαληηθφο, αιιά ην ζχζηεκα ζπλερίδεη λα ιεηηνπξγεί ζσζηά, ζχκθσλα κε ηηο
πξνδηαγξαθέο ηνπ, αλ ράλεη θαηά θαηξνχο θάπνηα
deadli
nes
. Γηα παξάδεηγκα, έλα ζχζηεκα κεηαγσγήο
ηειεθσληθήο επηθνηλσλίαο είλαη έλα ζχζηεκα ειαζηηθνχ πξαγκαηηθνχ ρξφλνπ. Δάλ ραζεί θαηά θαηξνχο
4


θάπνην
deadline

νδεγεί ζε απνδεθηή απνηπρία, φπσο θαζπζηεξεκέλε απνθαηάζηαζε ηεο θιήζεο ή
δηαθνπέο ήρνπ. Τα ζπζηήκαηα

πξαγκαηηθνχ ρξφλνπ ηππηθά θαζνξίδνπλ ηί πνζνζηφ απφ ηα
deadlines

κπνξεί λα ραζεί, ή πφζν ζπρλά θάηη ηέηνην είλαη απνδεθηφ.


Τα πξνγξάκκαηα πνπ έρνπλ πινπνηεζεί κε
standard

Java

ζηεξνχληαη πξνβιεςηκφηεηαο, κε απνηέιεζκα
λα κε κπνξνχλ λα ρξεζηκνπνηεζνχλ γηα

εθαξκνγέο πξαγκαηηθνχ ρξφλνπ. Μεξηθνί παξάγνληεο πνπ
θαζηζηνχλ ηελ εθηέιεζε ελφο
standard

Java

πξνγξάκκαηνο απξφβιεπηε είλαη νη εμήο:



Garbage

Collection
:

Όινη νη
Garbage

Collection

αιγφξηζκνη πνπ ρξεζηκνπνηνχλ νη
standard

JVM

ζπκπεξηιακβάλνπλ κηα θάζε θ
αηά ηελ νπνία φια ηα λήκαηα ηεο εθαξκνγήο ζηακαηάλε ηελ εθηέιεζε
ηνπο, ψζηε ν
garbage

collector

λα ηξέμεη ρσξίο παξελφριεζε (
stop

the

world

phase
).

Δθαξκνγέο κε απζηεξέο απαηηήζεηο ρξφλνπ απφθξηζεο δελ κπνξνχλ λα αλερζνχλ κεγάιεο παχζεηο
ιφγσ ηνπ
GC
. Παξά
ηε
κεγάιε πξνζπάζεηα πνπ έρεη γίλεη γηα λα κεησζεί ε δηάξθεηα ηεο
stop

the

world

phase
, αθφκα θαη απηφ δελ είλαη
ηθαλφ λα εγγπεζεί ηελ πξνβιεςηκφηεηα ηεο εθαξκνγήο.


Class

loading
:
Ζ ηεθκεξίσζε ηεο
Java

απαηηεί νη θιάζεηο λα θνξηψλνληαη θαη λα αξρηθνπνηνχλ
ηαη
φηαλ ε εθαξκνγή αλαθεξζεί ζε απηέο γηα πξψηε θνξά. Γηα ην ιφγν φηη ην θφξησκα κηαο θιάζεο
κπνξεί λα απαηηεί πξφζβαζε ζην δίζθν ή ζην δίθηπν γηα ηελ εχξεζε ηνπ νξηζκνχ ηεο θιάζεο, ε
αλαθνξά γηα πξψηε θνξά ζε κηα θιάζε κπνξεί λα πξνθαιέζεη απξφζκελε θαη
πηζαλφλ ηεξάζηηα
θαζπζηέξεζε.


Just
-
in
-
time

(
JIT
)
dynamic

compilation
:
Πνιιέο
JVM

ρξεζηκνπνηνχλ δπλακηθφ
compilation

ησλ
κεζφδσλ απφ
interpreted

Java

bytecodes

ζε
native

machine

εληνιέο θαηά ηε δηάξθεηα εθηέιεζεο ηεο
εθαξκνγήο. Τππηθά, ε κέζνδνο γίλεηαη
compiled

αλ εθηειείηαη αξθεηά ζπρλά. Ζ δηαδηθαζία ηνπ
compile

κπνξεί λα πξνθαιέζεη πξνζσξηλή θαζπζηέξεζε, εκπνδίδνληαο ηνλ θψδηθα ηεο εθαξκνγήο απφ
ην λα εθηειεζηεί.


Priority

Inversion
:
Δάλ έλα λήκα ρακειήο πξνηεξαηφηεηαο κνηξάδεηαη έλαλ πφξν κε έλα λήκ
α πςειήο
πξνηεξαηφηεηαο θαη ν πφξνο θπιάζζεηαη κε έλα θιεηδί, ηφηε ππάξρεη πεξίπησζε ην λήκα ρακειήο
πξνηεξαηφηεηαο λα θξαηά ην θιεηδί ηνπ πφξνπ ηελ ζηηγκή πνπ ην λήκα πςειήο πξνηεξαηφηεηαο ην
ρξεηάδεηαη. Σε απηή ηελ πεξίπησζε, ην λήκα πςειήο πξνηεξαηφηεηα
ο δε κπνξεί λα ζπλερίζεη έσο φηνπ
ην λήκα ρακειήο πξνηεξαηφηεηαο παξαδψζεη ην θιεηδί ηνπ πφξνπ. Απηφ κπνξεί λα νδεγήζεη ην λήκα
πςειήο πξνηεξαηφηεηαο ζε απψιεηα ηνπ
deadline

ηνπ.

Δπηπιένλ, εάλ έλα λήκα κεζαίαο πξνηεξαηφηεηαο πνπ δελ έρεη λα θάλεη κε ηνλ πφ
ξν εθηειεζηεί, ηφηε ζα
πάξεη πξνηεξαηφηεηα εηο βάξνπο θαη ηνπ λήκαηνο ρακειήο, φπσο επίζεο θαη ηνπ λήκαηνο πςειήο
πξνηεξαηφηεηαο.


Scheduling
:

Σηελ
standard

Java
, ε εθαξκνγή δηαζέηεη ειάρηζην βαζκφ ειέγρνπ πάλσ ζηνλ
ρξνλνπξνγξακκαηηζκφ ησλ λεκάησλ ηεο, φ
πσο επίζεο θαη ηνλ ρξνλνπξνγξακκαηηζκφ ηεο ίδηαο ηεο
εθαξκνγήο ζρεηηθά κε ηηο άιιεο εθαξκνγέο πνπ εθηεινχληαη ζην ίδην ιεηηνπξγηθφ ζχζηεκα.

Γηα παξάδεηγκα, ε
standard

Java

δελ εγγπάηαη γηα κηα εθαξκνγή ζηελ νπνία εθηεινχληαη λήκαηα
δηαθνξεηηθψλ πξνηεξαηνη
ήησλ φηη ην λήκα κε ηελ πςειφηεξε πξνηεξαηφηεηα ζα είλαη θαη απηφ πνπ
πάληα ζα εθηειείηαη
εηο βάξνο
ησλ λεκάησλ ρακειφηεξεο πξνηεξαηφηεηαο.




5


1.2 Η Real
-
Time Specification of Java



Ζ Real
-
Time Specification of Java (RTSJ) [2] επεθηείλεη ηελ Java ζηνπο πα
ξαθάησ ηνκείο:




memory management


time values and clocks


schedulable objects and scheduling


real time threads


asynchronous event handling and timers


asynchronous tranfer of control


synchronization and resource sharing


physical and raw memory access

Σηελ ζ
πλέρεηα πεξηγξάθνληαη αλαιπηηθφηεξα νη επεθηάζεηο πνπ παξέρεη ην
RTSJ

ζε θάζε έλαλ απφ
ηνπο παξαπάλσ ηνκείο.


Υπονοππογπαμμαηιζμόρ ηυν ανηικειμένυν:


Ο ρξνλνπξνγξακκαηηζκφο ησλ λεκάησλ είλαη κηα βαζηθή πηπρή φισλ ησλ ζπζηεκάησλ πξαγκαηηθνχ
ρξφλνπ. Ζ
Java

ε
πηηξέπεη ζε θάζε
thread

λα έρεη πξνηεξαηφηεηα, ε νπνία ρξεζηκνπνηείηαη απφ ηε
JVM

γηα λα θαζνξηζηεί π
o
ηφ
thread

ζα εθηειεζηεί ζε κηα δεδνκέλε ρξνληθή ζηηγκή. Παξφια απηά, ε
standard

Java

δελ εγγπάηαη φηη ην λήκα πςειφηεξεο πξνηεξαηφηεηαο πνπ είλαη έηνηκν γ
ηα εθηέιεζε ζα είλαη
απηφ πνπ ζα εθηειεζηεί.

Απηφο ν αζζελήο νξηζκφο ηνπ ρξνλνπξνγξακκαηηζκνχ ζηελ
standard

Java
, ζε ζπλδπαζκφ κε ηνλ
πεξηνξηζκέλν αξηζκφ, 10 δηαθνξεηηθψλ πξνηεξαηνηήησλ πνπ απηή πξνζθέξεη, ζεκαίλεη φηη ηα
πξνγξάκκαηα
Java

ζηεξνχληαη πξνβιε
ςηκφηεηαο.


Τν
RTSJ

γεληθεχεη ηηο νληφηεηεο πνπ κπνξνχλ λα ρξνλνπξνγξακκαηηζηνχλ εηζάγνληαο ηελ έλλνηα ηνπ
Schedulable

object
.
Schedulable

object

είλαη θάζε αληηθείκελν πνπ πινπνηεί ην
Schedulable

interface
.
Κάζε
schedulable

object

θαζνξίδεη ηηο δηθέο ηνπ
απαηηήζεηο ζρεηηθά κε :



Τν πφηε ην αληηθείκελν λα γίλεηαη έηνηκν γηα εθηέιεζε



Τε δέζκεπζε κλήκεο (γηα παξάδεηγκα ην ξπζκφ κε ηνλ νπνίν δεζκεχεη κλήκε απφ ην
heap
)


Τν ρξνλνπξνγξακκαηηζκφ ηνπ (γηα παξάδεηγκα ηελ πξνηεξαηφηεηα κε ηελ νπνία ζα
ρξνλνπξνγξακκαη
ηζηεί)



Οη
απαηηήζεηο γηα ην πφηε ην αληηθείκελν γίλεηαη έηνηκν γηα εθηέιεζε θαζνξίδνληαη απφ ηελ θιάζε
ReleaseParameters

(Σρήκα 1.3). Οη θιάζεηο
PeriodicParameters
,
AperiodicParameters

θαη
SporadicParameters

πνπ θιεξνλνκνχλ ηελ
ReleaseParameters

αλαπ
αξηζηνχλ δηάθνξνπο ηχπνπο
δηάζεζεο ηνπ
Schedulable

αληηθεηκέλνπ: ηελ πεξηνδηθή
release
, ηελ απεξηνδηθή, θαη ηελ ζπνξαδηθή
(αθαλφληζηε δηάζεζε αιιά κε ειάρηζην ρξφλν κεηαμχ δχν δηαδνρηθψλ δηαζέζεσλ) αληίζηνηρα.


Όιεο νη θιάζεηο πνπ θιεξνλνκνχλ ηελ
ReleasePa
rameters

ελζσκαηψλνπλ κηα ηηκή θφζηνπο (
cost
), θαη
κηα ηηκή πξνζεζκίαο (
deadline
). Τν θφζηνο είλαη ν κέγηζηνο ρξφλνο
CPU

πνπ ρξεηάδεηαη γηα λα
εθηειεζηεί ην
Schedulable

Object

θάζε θνξά πνπ γίλεηαη έηνηκν γηα εθηέιεζε. Ζ πξνζεζκία είλαη ν
ρξφλνο ζηνλ νπνίν

ην αληηθείκελν πξέπεη λα έρεη ηειεηψζεη ηελ εθηέιεζή ηνπ. Ζ θιάζε
PeriodicParameters

ζπκπεξηιακβάλεη επηπιένλ ην ρξφλν αξρήο (
start

time
) ηεο πξψηεο δηάζεζεο, θαη ην
6


ρξνληθφ δηάζηεκα (πεξίνδν) κεηαμχ δχν δηαδνρηθψλ
δηαζέζεσλ
, ελψ ε
SporadicParameters

ηνλ
ειάρηζην ρξφλν κεηαμχ δπν δηαδνρηθψλ δηαζέζεσλ ηνπ
schedulable

αληηθεηκέλνπ.



Οη απαηηήζεηο ρξνλνπξνγξακκαηηζκνχ θαζνξίδνληαη απφ ηελ θιάζε
SchedulingParameters
.
To

αληηθείκελν απηφ ην ρξεζηκνπνηεί ν
scheduler

γηα λα θαζνξίζεη πνηφ αληηθείκελν πξέπεη λα ε
πηιερζεί
ηε δεδνκέλε ρξνληθή ζηηγκή γηα εθηέιεζε. Απφ ηελ αθεξεκέλε θιάζε
SchedulingParameters

κπνξεί
λα πξνθχςεη κηα ζεηξά απφ θξηηήξηα ρξνλνπξνγξακκαηηζκνχ. Τν
RTSJ

νξίδεη έλα κφλν θξηηήξην,
απηφ ηεο πξνηεξαηφηεηαο κέζσ ηεο θιάζεο
PriorityParameters
.



O

scheduler

είλαη ππεχζπλνο γηα ην ρξνλνπξνγξακκαηηζκφ ησλ
schedulable

objects
. Τν
RTSJ

ππνζηεξίδεη άκεζα ρξνλνπξνγξακκαηηζκφ βαζηζκέλν ζε πξνηεξαηφηεηεο κέζσ ηεο θιάζεο
PriorityScheduler
, πνπ αλαπαξηζηά έλαλ
fixed

preemptive

βαζηζκέλν ζηελ πξνηεξαηφηεη
α
scheduler

κε
28 δηαθνξεηηθέο πξνηεξαηφηεηεο.

H

ζρέζε κεηαμχ ησλ παξαπάλσ θιάζεσλ θαίλεηαη ζην δηάγξακκα θιάζεσλ ηνπ Σρήκαηνο 1.1.



΢σήμα 1.1


Γηάγξακκα ησλ ζρεηηθψλ κε ηνλ ρξνλνπξνγξακκαηηζκφ θιάζεσλ [2]



Νήμαηα ππαγμαηικού σπόνος:
Τν
RealtimeThread

είλαη έλα
schedulable

object

θαη αλαπαξίζηαηαη
απφ ηελ θιάζε
RealTimeThread
, ε νπνία θιεξνλνκεί ηελ θιάζε
Thread

(Σρήκα 1.2).

Έλα πεξηνδηθφ real time thread έρεη πεξηνδηθέο release parameters.
Οκνίσο, έλα απεξηνδηθφ (ή
ζπνξαδηθφ)
real

time

thread

έρεη απεξ
ηνδηθέο ή ζπνξαδηθέο
release

parameters

αληίζηνηρα. Τν
no

heap

real

time

thread

αλαπαξίζηαηαη απφ ηελ θιάζε
NoHeapRealTimeThread
, ε νπνία είλαη ππνθιάζε ηεο
RealTimeThread
. Ζ εθηέιεζε ηνπ λήκαηνο απηνχ είλαη ηειείσο αλεμάξηεηε απφ ηνλ
garbage

collector
,
θα
ζψο ην λήκα δελ αλαθέξεηαη ζε αληηθείκελα πνπ βξίζθνληαη ζην
heap
, νχηε δεκηνπξγεί αληηθείκελα
ζην
heap
, αιιά ζηνπο λένπο ηχπνπο
Scoped

θαη
Immortal

Memory

πνπ εηζάγεη ην
RTSJ
.


7



΢σήμα 1.2

Ζ θιάζε
RealtimeThread

θαη νη ζρεηηθέο κε απηήλ παξάκεηξνη [2]



Υειπιζμόρ αζύγσπονυν γεγονόηυν:


Σπρλά είλαη ζεκαληηθφ ε εθαξκνγή λα αληηδξά ζε γεγνλφηα πνπ ζπκβαίλνπλ αζχγρξνλα κε ηε
δξαζηεξηφηεηα ελφο λήκαηνο. Απηά ηα
events

κπνξεί λα πξνέξρνληαη απφ ην πεξηβάιινλ ελφο
ελζσκαησκέλνπ ζπζηήκαηνο ή λα είλαη εηδνπνηήζεη
ο πνπ ιακβάλνληαη απφ εζσηεξηθέο
δξαζηεξηφηεηεο ηεο εθαξκνγήο. Δίλαη θπζηθά δπλαηφ λα νξηζηνχλ επηπιένλ λήκαηα πνπ πεξηκέλνπλ
γηα απηά ηα
events
, φκσο είλαη πξνθαλέο φηη απηή ε πξνζέγγηζε είλαη κε απνηειεζκαηηθή θαζψο
κπνξεί λα νδεγήζεη ζε ππέξκεηξε αχμεζε

ηνπ αξηζκνχ ησλ λεκάησλ ζε κηα εθαξκνγή.


Σηα ζπζηήκαηα πξαγκαηηθνχ ρξφλνπ ηα
events

ζπλήζσο απαηηνχλ απφ ηνπο
handlers

ηνπο λα αληηδξνχλ
κέζα ζε θάπνηα θαζνξηζκέλε ρξνληθή πξνζεζκία. Με άιια ιφγηα, ρξεηάδεηαη πεξηζζφηεξνο έιεγρνο
ζηελ ζεηξά κε ηελ νπνία

πξαγκαηνπνηείηαη ν ρεηξηζκφο ησλ
events
. Γηα ηνλ ιφγν απηφ ην
RTSJ

νξίδεη
ηνπο
event

handlers

σο ρξνλνπξνγξακκαηηδφκελεο νληφηεηεο ζηηο νπνίεο αληηζηνηρεί, φπσο θαη ζηα
λήκαηα πξαγκαηηθνχ ρξφλνπ, κηα πνηθηιία απφ παξακέηξνπο (
MemoryParmaters
,
ReleaseParam
eters
,
SchedulingParameters
)(Σρήκα 1.3).




Thread
Runnable
Schedulable
RealtimeThread
SchedulingParameters
ReleaseParameters
Scheduler
ProcessingGroup
MemoryArea
MemoryParameters
Parameters
i mplement s
extends
has
enters
has
has
has
has
implements
NoHeapRealtimeThread
standard Java interface
RTSJ class
RTSJ abstract class or interface
standard Java
class
Schedulable
AsyncEventHandler
SchedulingParameters
ReleaseParameters
ProcessingGroup
MemoryParameters
Parameters
has
has
has
has
implements
AsyncEvent
handles
*
*
Scheduler
has
8



΢σήμα 1.3
Ζ θιάζε
AsyncEventHandler

θαη νη ζρεηηθέο κε απηήλ παξάκεηξνη [2]



Έλαο
AsyncEventHandler

κπνξεί λα ρεηξίδεηαη έλα ή πεξηζζφηεξα
AsyncEvents
. Δπηπιένλ ππάξρεη ε
δπλαηφηεηα θάζε
AsyncEvent

λα ρε
ηξίδεηαη απφ πεξηζζφηεξνπο ηνπ ελφο
handlers
. Όηαλ ζπκβεί
θάπνην
event

(γίλεη
fire
), φινη νη
handlers

πνπ ζρεηίδνληαη κε απηφ, εθηεινχληαη κε βάζε ηηο
SchedulingParameters

πνπ έρνπλ. Τα αζχγρξνλα
events

κπνξνχλ λα ζπζρεηηζηνχλ κε δηαθνπέο, κε
POSIX

ζήκαηα
ή κπνξνχλ λα ζπλδεζνχλ κε θάπνην
timer
, έηζη ψζηε φηαλ πεξάζεη θάπνηνο
θαζνξηζκέλνο ρξφλνο ην
event

λα γίλεη
fire
.
To

Σρήκα 1.4 παξνπζηάδεη ηηο θιάζεηο πνπ είλαη ζρεηηθέο
κε ηα
events

θαη ηνπο
handlers

ηνπο.



΢σήμα 1.4

Οη θιάζεηο ηνπ
RTSJ

πνπ ππνζηε
ξίδνπλ ηνλ ρεηξηζκφ αζχγρξνλσλ
events

[2]



Διασείπιζη μνήμηρ:


To

RTSJ

αλαγλσξίδεη φηη είλαη απαξαίηεην λα επηηξαπεί δηαρείξηζε κλήκεο, ε νπνία λα κελ
επεξεάδεηαη απφ ηνλ
garbage

collector
. Γηα ηνλ ιφγν απηφ, εηζάγεη ηελ έλλνηα ησλ
περιοχών μνήμης
(
memory

areas
), νη νπνίεο βξίζθνληαη έμσ απφ ην
heap
. Τα λήκαηα πνπ αιιειεπηδξνχλ κε αληηθείκελα
ηα νπνία βξίζθνληαη έμσ απφ ην
heap

θαη δελ δέρνληαη ηελ επίδξαζε ηνπ
garbage

collector

κπνξνχλ λα
θάλνπλ
preempt

ηνλ
GC

νπνηαδήπνηε ρξνληθή ζηηγκή, θαη γηα απηφ ην ι
φγν δελ ππνθέξνπλ απφ
garbage

collection
.


H

θιάζε
Memory

Area

είλαη κηα αθεξεκέλε θιάζε ηελ νπνία θιεξνλνκνχλ νη δηάθνξεο πεξηνρέο
κλήκεο πνπ εηζάγεη ην
RTSJ

(Σρήκα 1.1). Όηαλ ε εθαξκνγή κπαίλεη ζε κηα ζπγθεθξηκέλε πεξηνρή
κλήκεο, ηφηε ε δεκηνπξγία ησλ αλ
ηηθεηκέλσλ γίλεηαη κέζα ζε απηή ηελ πεξηνρή κέρξη ε εθαξκνγή λα
βγεη απφ απηήλ.


Οη πεξηνρέο κλήκεο

είλαη νη εμήο:


Heap

Memory
:
H

κλήκε
heap

επηηξέπεη ηε δεκηνπξγία αληηθεηκέλσλ ζην
standard

Java

heap
.


Immortal

Memory
:
H

Immortal

Μ
emory

κπνξεί λα ρξεζηκν
πνηεζεί απφ φια ηα
threads

ηεο εθαξκνγήο.
Τα αληηθείκελα πνπ δεκηνπξγνχληαη ζηελ
ImmortalMemory

δελ ζπιιέγνληαη πνηέ απφ ηνλ
garbage

9


collector

θαη θαηαζηξέθνληαη κφλν κεηά ηνλ ηεξκαηηζκφ ηνπ πξνγξάκκαηνο.


Scoped

Μ
emory
: Ζ
Scoped
Μ
emory

είλαη κηα πεξηνρή κλ
ήκεο ζηελ νπνία αληηθείκελα κε απζηεξά
θαζνξηζκέλν ρξφλν δσήο κπνξνχλ λα δεκηνπξγεζνχλ. Έλαο δείθηεο αλαθνξψλ είλαη ζπζρεηηζκέλνο κε
κηα
ScopedMemory

θαη δείρλεη πφζεο
real

time

νληφηεηεο (
real

time

threads

,
asynchronous

event

handlers
) βξίζθνληαη ζηελ
sco
ped

memory

αλα πάζα ζηηγκή. Όηαλ ε ηηκή ηνπ δείθηε γίλεη 0, ε κέζνδνο
finalize

φισλ ησλ αληηθεηκέλσλ πνπ βξίζθνληαη ζηελ
ScopedMemory

εθηειείηαη θαη ε πεξηνρή κλήκεο
ειεπζεξψλεηαη. Ζ θιάζε
Scoped
Μ
emory

είλαη
abstract

θαη έρεη ζαλ ππνθιάζεηο ηελ
VTMemory

θα
η ηελ
LTMemory
.


VTMemory
:
O

ρξφλνο πνπ ρξεηάδεηαη γηα ηε δεκηνπξγία αληηθεηκέλσλ ζηελ
VTMemory

είλαη
κεηαβιεηφο.


LTMemory
:
O

ρξφλνο πνπ ρξεηάδεηαη γηα ηε δεκηνπξγία αληηθεηκέλσλ ζηελ
LTMemory

είλαη αλάινγνο
ηνπ κεγέζνπο ηνπ αληηθεηκέλνπ.



Έλα αληηθείκελ
ν
MemoryParameters

κπνξεί λα πεξαζηεί ζαλ παξάκεηξνο θαηά ηελ ζηηγκή
δεκηνπξγίαο ησλ
RealTimeThreads

ή ησλ
AsynchronousEventHandlers
. Δπηπιένλ, ε παξάκεηξνο απηή
κπνξεί λα ηξνπνπνηεζεί φηαλ ηα παξαπάλσ λήκαηα εθηεινχληαη.
To αληηθείκελν
MemoryParameters

ν
ξίδεη:



Τε κέγηζηε πνζφηεηα κλήκεο πνπ έλα λήκα ζα θαηαλαιψζεη ζηελ πξνθαζνξηζκέλε ηνπ πεξηνρή
κλήκεο.




Τελ κέγηζηε πνζφηεηα
Immortal

memory

πνπ ζα θαηαλαισζεί.




Τν άλσ φξην ηνπ ξπζκνχ δέζκεπζεο κλήκεο ζην
heap

(ζε
bytes

αλα
sec
).


Τν Σρήκα 1.5 παξνπζηάδε
η ηηο θιάζεηο ηνπ
RTSJ

πνπ ππνζηεξίδνπλ ηελ δηαρείξηζε ηεο κλήκεο


΢σήμα 1.5
Οη θιάζεηο πνπ ππνζηεξίδνπλ ηελ δηαρείξηζε ηεο κλήκεο [2]



10


Time

values

and

clocks
:


To

RTSJ

νξίδεη κηα ηεξαξρία απφ θιάζεηο ζρεηηθέο κε ην ρξφλν (Σρήκα 1.6), νη νπνίεο θιεξνλ
νκνχλ
ηελ αθεξεκέλε θιάζε
HighResolutionTime
, ε νπνία ελζσκαηψλεη ηηκέο ρξφλνπ ηεο ηάμεο ηνπ
nanosecond
. Ζ θιάζε απηή έρεη ηξεηο ππνθιάζεηο:

Τελ
AbsoluteTime
, ε νπνία αλαπαξηζηά ηελ ψξα ζρεηηθά κε έλα ζηαζεξφ ρξνληθφ ζεκείν (
Epoch
) πνπ
εμαξηάηαη απφ ην ξν
ιφη.

Τελ
relativeTime
, ε νπνία αλαπαξηζηά έλα κεζνιαβνχλ δηάζηεκα ρξφλνπ αλάκεζα ζε δπν ρξνληθά
ζεκεία.

Τελ
rationalTime
, ε νπνία αλαπαξηζηά ην ξπζκφ κε ηνλ νπνίν ζπκβαίλνπλ δηάθνξα γεγνλφηα (γηα
παξάδεηγκα ε πεξηνδηθή εθηέιεζε ελφο λήκαηνο).


΢σήμα 1.6

Οη θιάζεηο ηνπ
RTSJ

πνπ ζρεηίδνληαη κε ηνλ ρξφλν [2]

Αζύγσπονη μεηαθοπά ηος ελέγσος:


Αζχγρξνλε κεηαθνξά ηνπ ειέγρνπ ζπκβαίλεη φηαλ ην ζεκείν εθηέιεζεο ελφο
schedulable

object

(
real
-
time

thread

ή
asynchronous

event

handler
) κεηαβάιιεηαη απφ ηελ ελέξγεηα

θάπνηνπ άιινπ
schedulable

object
. Σπλεπψο, ππάξρεη πεξίπησζε έλα
schedulable

object

λα εθηειεί κηα κέζνδν θαη ηφηε μαθληθά,
ρσξίο θάπνηα δηθή ηνπ ελέξγεηα, λα εθηειέζεη κηα άιιε κέζνδν.


Σηελ
standard

java

o

κεραληζκφο
interrupt

παξέρεη κηα κνξθή αζχγρξν
λεο εηδνπνίεζεο.

Σηελ πξαγκαηηθφηεηα ν κεραληζκφο απηφο είλαη ζχγρξνλνο αθνχ ην λήκα πξέπεη λα ειέγρεη ζπλερψο
αλ έρεη γίλεη
interrupted
, θαη γη’ απηφ ηνλ ιφγν δελ είλαη δπλαηή ε αληίδξαζε ζην
interrupt

κέζα ζε
θαζνξηζκέλα ρξνληθά πιαίζηα.


Τν
RTSJ

παξέρεη

κηα ελαιιαθηηθή πξνζέγγηζε ζην λα εηδνπνηεζεί έλα λήκα πνπ εθηειείηαη
ρξεζηκνπνηψληαο αζχγρξνλε κεηαθνξά ειέγρνπ (
ATC
).

To

κνληέιν αζχγρξνλεο κεηαθνξάο ειέγρνπ ηνπ
RTSJ

βξίζθεηαη ελζσκαησκέλν ζηνλ κεραληζκφ
ρεηξηζκνχ εμαηξέζεσλ ηεο
Java
. Μηα κέζνδνο δειψλ
εη φηη κπνξεί λα δηαθνπεί νξίδνληαο ην ζηελ
δήισζή ηεο (
throws

AsynchronouslyInterruptedException
). Τν
RTSJ

θαιεί ηηο κεζφδνπο απηέο
AI
-
κέζνδνπο (
Asynchronously

Interruptible
). Όιεο νη άιιεο κέζνδνη ραξαθηεξίδνληαη ζαλ
ATC
-
deferred
.
11


Ζ αζχγρξνλε κεηαθνξά ην
π ειέγρνπ ζεκαηνδνηείηαη απφ ηελ έγεξζε κηαο
AsynchronouslyInterruptedException

(ΑΗΔ). Δάλ ηελ ζηηγκή έγεξζεο ηεο
AIE

θάπνην λήκα εθηειεί κηα
κέζνδν ε νπνία δειψλεη φηη κπνξεί λα δηαθνπεί, ηφηε ζηακαηάεη ε εθηέιεζε ηεο κεζφδνπ θαη ν έιεγρνο
κεηαδίδεηαη ζην

calling

chain

κέρξη λα βξεζεί θάπνην
catch

block

ζε κηα
ATC
-
deferred

κέζνδν πνπ λα
πηάλεη ηελ εμαίξεζε.


Αλ ην λήκα εθηειεί κηα
ATC
-
deferred

κέζνδν ηελ ζηηγκή ηεο έγεξζεο ηεο εμαίξεζεο, ηφηε ε εμαίξεζε
δελ παξαδίδεηαη κέρξη ην λήκα λα εθηειέζεη κηα
AI

κέζ
νδν.

Έλα ζεκαληηθφ πιενλέθηεκα πνπ πξνζθέξεη ν κεραληζκφο απηφο είλαη φηη ν θψδηθαο πνπ έρεη γξαθηεί
ρσξίο λα ιακβάλεη ππφςε ηνπ θάπνηα αζχγρξνλε κεηαθνξά ειέγρνπ πνπ ελδερνκέλσο λα ζπκβεί,
κπνξεί κε αζθαιή ηξφπν λα εθηειεζηεί λα έλα πεξηβάιινλ ζην νπνίν π
πάξρεη αζχγρξνλε κεηαθνξά
ειέγρνπ.

Ο ρεηξηζκφο ησλ
ATCs

κπνξεί λα γίλεη κε πην δνκεκέλν ηξφπν κε ηελ βνήζεηα ηνπ
Interruptible

interface

ην νπνίν πινπνηεί θάζε αληηθείκελν πνπ παξέρεη κηα κέζνδν πνπ κπνξεί λα δηαθνπεί.


H

θιάζε
Timed
, ε νπνία είλαη κηα ππ
νθιάζε ηεο ΑΗΔ, επηηξέπεη ζην λα δεκηνπξγεζεί αζχγρξνλε
κεηαθνξά ειέγρνπ ζε ζπγθεθξηκέλν ρξνληθφ ζεκείν (απφιπην ή ζρεηηθφ). Τν Σρήκα 1.7 παξνπζηάδεη
ηηο θιάζεηο ηνπ
RTSJ

πνπ ππνζηεξίδνπλ ηνλ κεραληζκφ ηεο αζχγρξνλεο κεηαθνξάο ηνπ ειέγρνπ.




΢σήμα 1.7


Κιάζεηο πνπ ππνζηεξίδνπλ ηελ αζχγρξνλε κεηαθνξά ηνπ ειέγρνπ [2]



΢ςγσπονιζμόρ και διαμοιπαζμόρ πόπυν:



Πξνθεηκέλνπ λα απνθεπρζεί ην
priority

inversion
, ην
RTSJ

ππνζηεξίδεη δπν αιγνξίζκνπο
priority

inheritance
: Τελ
Simple

priority

inheritance

θαη ηελ
prio
rity

ceiling

emulation

inheritance
.
To

RTSJ

ππνζηεξίδεη ηνπο δπν παξαπάλσ αιγνξίζκνπο κέζσ ηεο ηεξαξρίαο θιάζεσλ
MonitorControl

πνπ
θαίλεηαη ζην Σρήκα 1.8.




Interruptible
InterruptedException
AsynchronouslyInterruptedException
uses
doInterruptible
fire
RTSJ class
RTSJ interface
Java interface
Timed
MonitorControl
PriorityInheritance
PriorityCeilingEmulation
12


΢σήμα 1.8


Κιάζεηο πνπ ππνζηεξίδνπλ ην
Priority

Inheritance

[2]

Σηελ πεξίπησζε πνπ ππάξρεη επηθν
ηλσλία κεηαμχ
non
-
real

time

threads

θαη
schedulable

objects

(φηαλ
γηα παξάδεηγκα ηα δχν αληηθείκελα κνηξάδνληαη κηα δψλε ακνηβαίνπ απνθιεηζκνχ), ηφηε ππάξρεη
πεξίπησζε ελψ θξαηάεη ην θιεηδί ηνπ αληηθεηκέλνπ ην
non
-
real

time

thread

λα γίλεη
preempted

απφ η
νλ
garbage

collector
.
To

schedulable

object

κπνξεί λα θάλεη
preempt

ηνλ
GarbageCollector
, φκσο δελ
κπνξεί λα ζπλερίζεη γηαηί ην
non
-
real

time

thread

θξαηά αθφκα ην θιεηδί ηνπ αληηθεηκέλνπ. Έηζη, ην
schedulable

object

πεξηκέλεη λα νινθιεξσζεί ην
garbage

col
lection

ψζηε ην
non
-
real

time

thread

λα
ζπλερίζεη ηελ εθηέιεζε ηνπ θαη λα βγεη απφ ηελ δψλε ακνηβαίνπ απνθιεηζκνχ.


Έλαο ηξφπνο λα απνθεπρζνχλ νη απξφβιεπηεο αιιειεπηδξάζεηο κε ηνλ
garbage

collector

είλαη ε
παξνρή ελφο κεραληζκνχ
non
-
blocking

επηθνηλσλίαο
κεηαμχ
non

real

time

threads

θαη
real

time

threads
.

Τν
RTSJ

παξέρεη ηξεηο
wait

free

nonblocking

θιάζεηο νη νπνίεο κπνξνχλ λα ρξεζηκνπνηεζνχλ γηα
επηθνηλσλία ηέηνηνπ είδνπο:


WaitFreeWriteQueue
: Δίλαη έλαο
bounded

buffer

πξννξηδφκελνο γηα ηελ πεξίπησζε πνπ
ην
schedulable

object

ζέιεη λα ζηείιεη θάπνηα πιεξνθνξία
ζην
non

real

time

thread
.
H

δηαδηθαζία
read

είλαη
synchronized

θαη θάλεη
blocking

read

ελψ αληίζεηα ε δηαδηθαζία
write

δελ είλαη
synchronized

θαη
δείρλεη αλ ε εγγξαθή έγηλε επηηπρψο.


WaitFreeReadQue
ue
: Δίλαη έλαο
bounded

buffer

πξννξηδφκελνο γηα ηελ πεξίπησζε πνπ ην
non

real

time

thread

ζέιεη λα ζηείιεη θάπνηα πιεξνθνξία ζην
schedulable

object
.
H

δηαδηθαζία
write

είλαη
synchronized
, ελψ αληίζεηα ε
read

δελ είλαη
synchronized

θαη επηζηξέθεη είηε έλα α
ληηθείκελν είηε
null

αλ ν
buffer

είλαη άδεηνο.


WaitFreeDeQueue
: Δίλαη έλαο
bounded

buffer

πνπ επηηξέπεη
blocking

θαη
non

blocking

read

θαη
write

ιεηηνπξγίεο.



Πποζπέλαζη θςζικών διεςθύνζευν μνήμηρ:


Τα
embedded

real

time

ζπζηήκαηα ζπλήζσο ππνζηεξίδνπλ πε
ξηζζφηεξνπο απφ έλαλ ηχπνπο κλήκεο (κε
δηαθνξεηηθά ραξαθηεξηζηηθά πξφζβαζεο). Δπηπιένλ, πνιιέο εθαξκνγέο πξαγκαηηθνχ ρξφλνπ
ρξεηάδεηαη λα είλαη ηθαλέο λα πξνζπειάζνπλ άκεζα θπζηθέο δηεπζχλζεηο ζηελ πεξίπησζε πνπ έρνπλ λα
αιιειεπηδξάζνπλ κε
memory
-
mapped

πι
ηθφ.

Δπνκέλσο, ην
RTSJ

πξέπεη λα ππνζηεξίδεη δχν θπξίσο κεραληζκνχο:


1)Μεραληζκνχο πνπ επηηξέπνπλ ηελ ηνπνζέηεζε αληηθεηκέλσλ ζε πεξηνρέο ηεο κλήκεο νη νπνίεο έρνπλ
ζπγθεθξηκέλεο ηδηφηεηεο ή απαηηήζεηο πξφζβαζεο (
DMA

memory
,
shared

memory
). Τν
RTSJ

παξέρ
εη
επεθηάζεηο ησλ πεξηνρψλ
ScopedMemory
. Απηέο νη επεθηάζεηο παξέρνπλ ζηνλ πξνγξακκαηηζηή ηελ
δπλαηφηεηα λα θαζνξίζεη ηα αληηθείκελα πνπ ζα δεκηνπξγεζνχλ ζε κλήκε κε ηδηαίηεξα
ραξαθηεξηζηηθά.


2)
Μεραληζκνχο πνπ επηηξέπνπλ ζηνλ πξνγξακκαηηζηή λα πξνζπειάζεη

θπζηθέο δηεπζχλζεηο κλήκεο νη
νπνίεο ρξεζηκνπνηνχληαη γηα ηελ επηθνηλσλία ηνπ ζπζηήκαηνο κε ην πεξηβάιινλ ηνπ. Τν
RTSJ

παξέρεη
θιάζεηο κε ηελ ρξήζε ησλ νπνίσλ ν πξνγξακκαηηζηήο κπνξεί λα γξάςεη ή λα δηαβάζεη κεηαβιεηέο ή
πίλαθεο απφ
primitive

ηχπνπο δεδν
κέλσλ (
int
,
long
,
float
) ζε θπζηθέο δηεπζχλζεηο κλήκεο.

Ζ ζρέζε ησλ παξαπάλσ θιάζεσλ θαίλεηαη ζην Σρήκα 1.9.

13



΢σήμα 1.9
Κιάζεηο πνπ ππνζηεξίδνπλ ηελ πξνζπέιαζε θπζηθψλ δηεπζχλζεσλ κλήκεο [2]













14


ΚΕΦΑΛΑΙΟ 2


To IEC61499 RTSJ
-
Based Framework



2.1

Σο
IEC
61499
Function

Block

μονηέλο


Ζ δνκή ηνπ
Function

Block

έρεη ήδε ρξεζηκνπνηεζεί επξέσο απφ ηνπο κεραληθνχο ζπζηεκάησλ
ειέγρνπ. Αξρηθά εηζήρζεθε απφ ην πξφηππν
IEC
1131 [3] θαη πξννξηδφηαλ λα ρξεζηκνπνηεζεί γηα
γιψζζεο πξνγξακκαηηζκνχ ζην πεδίν ησ
λ
PLCs
. Αξγφηεξα επεθηάζεθε απφ ην
IEC
61499 [4], ψζηε λα
αμηνπνηήζεη πνιιά απφ ηα επξέσο αλαγλσξηζκέλα πιενλεθηήκαηα ηεο ηερλνινγίαο αληηθεηκέλσλ.


Έλα
FB

απνηειείηαη απφ ην
head

θαη ην
body

φπσο θαίλεηαη ζην Σρήκα 2.1.






΢σήμα 2.1
Γξαθηθή αλαπαξάζη
αζε ηνπ
Function

Block

[5]


Αιγφξηζκνη ππν ηελ κνξθή εζσηεξηθψλ ιεηηνπξγηψλ νξίδνπλ ηελ ιεηηνπξγηθφηεηα ηνπ
FB
.
Δπεμεξγάδνληαη δεδνκέλα εηζφδνπ θαη εζσηεξηθά δεδνκέλα θαη δεκηνπξγνχλ δεδνκέλα εμφδνπ. Ζ
ζεηξά εθηέιεζεο ησλ αιγνξίζκσλ θαζνξίδεηαη απφ ην
head

ηνπ
function

block
, ην νπνίν δέρεηαη
event

εηζφδνπ θαη παξάγεη
event

εμφδνπ. Τν
execution

control

chart

(
ECC
), κηα παξαιιαγή ηνπ
statechart
,
απνηειείηαη απφ Δ
C

states
,
EC

transitions

θαη
EC

actions

θαη ρξεζηκνπνηείηαη γηα λα θαζνξίζεη ηελ
ζπκπεξηθνξά ηνπ
head
. Οη εθαξκνγέο ειέγρνπ νξίδνληαη σο δίθηπα απφ
Function

Blocks

δηαζπλδεδεκέλα κε
event

θαη
data

ζπλδέζεηο. Τν Σρήκα 2.2 δείρλεη ην δίθηπν ησλ
function

blocks

ηεο
εθαξκνγήο ειέγρνπ κηαο ππνκνλάδαο ελφο ζπζηήκαηνο γξακκήο παξαγσγήο , ηνπ
Festo

MPS
.

To

Fe
sto

MPS

είλαη έλα βηνκεραληθφ ζχζηεκα γξακκήο παξαγσγήο πνπ ρξεζηκνπνηείηαη γηα
15


εθπαηδεπηηθνχο θαη εξεπλεηηθνχο ζθνπνχο. Απνηειείηαη απφ ηξείο ππνκνλάδεο: ηελ κνλάδα δηαλνκήο,
ειέγρνπ θαη επεμεξγαζίαο. Ζ κνλάδα δηαλνκήο, πνπ απνηειείηαη απφ έλαλ πλεπκαηηθφ

θχιηλδξν
(
feeder
) θαη έλαλ κεηαθνξέα (
converter
), πξνσζεί θπιηλδξηθά
workpieces

απφ κηα ζηνίβα ζηελ κνλάδα
ειέγρνπ. Ζ κνλάδα ειέγρνπ απνηειείηαη απφ έλαλ αληρλεπηή (
detector
), κηα πιαηθφξκα αλχςσζεο θαη
έλαλ πλεπκαηηθφ θχιηλδξν (
shift

out

cylinder
). Ο αλη
ρλεπηήο ειέγρεη ηα πξντφληα κε βάζε ην χςνο, ηνλ
ηχπν ηνπ πιηθνχ θαη ην ρξψκα. Τα πξντφληα ηα νπνία πεξλνχλ επηηπρψο απφ ηνλ έιεγρν πξνσζνχληαη
ζηνλ πεξηζηξεθφκελν δίζθν (
rotating

disc
) ηεο κνλάδαο επεμεξγαζίαο, φπνπ εθηειείηαη ε δηαζηθαζία
ηξππήκαηνο ηνπ

πξντφληνο. Τν απνηέιεζκα απηήο ηεο δηαδηθαζίαο ειέγρεηαη απφ ηελ κεραλή ειέγρνπ
(
checking

machine
) θαη ζηελ ζπλέρεηα ην πξντφλ κεηαθέξεηαη ζε κηα κνλάδα απνζήθεπζεο.
Ζ
αλαιπηηθή πεξηγξαθή ηνπ ζπζηήκαηνο δίλεηαη ζην Κεθάιαην 5.



΢σήμα 2.2
To

FB

Netw
ork

Diagram

(
FND
) ηεο κνλάδαο ειέγρνπ ηνπ ζπζηήκαηνο
Festo

MPS

[3]



2.2 Tο IEC61499 RTSJ
-
Based Framework


To IEC61499 RTSJ
-
Based Framework [4] απνηειείηαη απφ:




Δλα
FB

implementation

model

framework
, ην νπνίν απνηειείηαη απφ έλα ζχλνιν απφ θιάζεηο
θαη κ
εηαηξνπείο κνληέισλ νη νπνίνη απηφκαηα ζπλζέηνπλ ην κνληέιν πινπνίεζεο ηνπ
ζπζηήκαηνο απφ ην κνληέιν ζρεδηαζκνχ.



Δλα
run
-
time

environment

πνπ απαηηείηαη γηα η
o

deployment

θαη ηελ εθηέιεζε ηνπ κνληέινπ
πινπνίεζεο.



Δλα εξγαιείν, ηνλ
RTSJ

Launcher

πνπ επηηξέ
πεη ηελ πξνεηνηκαζία θαη εθθίλεζε ηεο εθαξκνγήο
ζε έλα πεξηβάιινλ πνπ νξίδεηαη σο έλα δίθηπν απφ δηαζπλδεδεκέλνπο θφκβνπο.


Τν Σρήκα 2.3 παξνπζηάδεη ηελ αξρηηεθηνληθή ηνπ ζπζηήκαηνο
Festo

MPS
, ην νπνίν έρεη αλαπηπρζεί
ρξεζηκνπνηψληαο ην
framework
. Οη κεραλ
ηθέο ζπζθεπέο πνπ απνηεινχλ ην ππν έιεγρν ζχζηεκα
16


ζπλδένληαη κε θφκβνπο πνπ είλαη εμνπιηζκέλνη κε ην
run

time

environment
. Δδψ έλαο θφκβνο
ρξεζηκνπνηείηαη γηα θάζε κηα κνλάδα ηνπ ζπζηήκαηνο (Μνλάδα δηαλνκήο, ειέγρνπ,θαη επεμεξγαζίαο).
Ο ζηαζκφο αλάπηπμεο (
Development

station
) είλαη εμνπιηζκέλνο κε ην ζχζηεκα
Archimedes
, ην
implementation

model

framework

θαη ηνλ
RTSJ

Launcher
.
H

εθαξκνγή ειέγρνπ αλαπηχζζεηαη ζηνλ
ζηαζκφ αλάπηπμεο θαη χζηεξα δηαηίζεηαη ζην δίθηπν ησλ δηαζπλδεδεκέλσλ θφκβσλ.



΢σήμα 2.3
Ζ

Αξρηηεθηνληθή ελφο ζπζηήκαηνο ην νπνίν έρεη αλαπηπρζεί κε ην
RTSJ
-
based



IEC61499 Framework [5]



2.2.1 Σο implementation model framework


To

implementation

model

framework

απνηειείηαη απφ δπν κεηακνληέια θαη έλαλ κεηαηξνπ
έα
κνληέισλ πνπ πινπνηεί ηνπο θαλφλεο αληηζηνίρηζεο ησλ δπν πεδίσλ (Σρήκα 2.4).


17



΢σήμα 2.4
H

δηαδηθαζία παξαγσγήο ηνπ κνληέινπ πινπνίεζεο [6

Τν
IEC
61499 κεηα
-
κνληέιν ζπιιακβάλεη ηηο ζεκαληηθφηεξεο έλλνηεο ηνπ
IEC
61499
FB

κνληέινπ
ζρεδηαζκνχ φπσο απηέο
νξίδνληαη απφ ην αληίζηνηρν πξφηππν. Ηδηαίηεξα εζηηάδεη ζηα
FB

types

θαη
FB

networks

πνπ νξίδνπλ ην κνληέιν ζρεδηαζκνχ ηεο εθαξκνγήο ειέγρνπ. Τν
RTSJ

implementation

meta
-

model
, πνπ πεξηγξάθεηαη αλαιπηηθά ζηελ ζπλέρεηα, ζπιιακβάλεη ηα θχξηα ζηνηρεία ηνπ
R
TSJ

θαη
ρξεζηκεχεη ζηελ δεκηνπξγία ηνπ κνληέινπ πινπνίεζεο ηεο εθαξκνγήο ειέγρνπ.


Οη ζεκαληηθφηεξεο θιάζεηο ηνπ
implementation

model

framework

απεηθνλίδνληαη ζην δηάγξακκα
θιάζεσλ ηνπ Σρήκαηνο 2.5.




΢σήμα 2.5
Μέξνο ηνπ δηαγξάκκαηνο θιάζεσλ ηνπ
impleme
ntation

model

framework

[6]


Ζ θιάζε
BasicFBType

θιεξνλνκεί ηελ θιάζε
FBType

θαη πινπνηεί ην
FB

interface
.
H

θιάζε
BasicFBType

δηαζέηεη
data

members

πνπ αλαπαξηζηνχλ ηα
events

θαη
data

εηζφδνπ θαη εμφδνπ, θαζψο
θαη ηηο εζσηεξηθέο κεηαβιεηέο ηνπ
FB
.

Κάζε
f
unction

block

ηεο εθαξκνγήο ειέγρνπ αληηζηνηρίδεηαη ζε κηα θιάζε πνπ θιεξνλνκεί ηελ
BasicFBType
.

18



Ζ θιάζε απηή έρεη έλαλ δεκηνπξγφ ν νπνίνο αξρηθνπνηεί δηάθνξεο κεηαβιεηέο πνπ ρξεηάδνληαη γηα ηελ
πινπνίεζε ηνπ
FB
. Δπηπιένλ, δηαζέηεη θαη έλαλ
static

initial
izer

πνπ αξρηθνπνεί ηηο κεηαβιεηέο θιάζεο
θαη δεκηνπξγεί ηηο δνκέο πινπνίεζεο ηνπ
ECC

ηνπ αληίζηνηρνπ
FB
.

H

ζπκπεξηθνξά ηεο θιάζεο απηήο
θαζνξίδεηαη επίζεο απφ κεζφδνπο ζηηγκηνηχπνπ πνπ αληηζηνηρνχλ ζηηο κεηαβάζεηο ηνπ
ECC
, θαζψο θαη

κεζφδνπο πνπ πινπνηνχ
λ ηνπο αιγνξίζκνπο ηνπ αληίζηνηρνπ
FB
.


Ζ θιάζε
ECC

αληηζηνηρεί, φπσο είλαη πξνθαλέο, ζην
ECC

ηνπ αληίζηνηρνπ
FB

θαη κπνξεί λα
θιεξνλνκεί είηε ηελ Νν
HeapRealTimeThread

είηε ηελ
RealTimeThread
.
ECC

πνπ θιεξνλνκνχλ ηελ
Νν
HeapRealTimeThread

πξννξίδνληαη γηα
λα ρξεζηκνπνηεζνχλ κε πινπνηήζεηο ηνπ
RTSJ

πνπ δελ
παξέρνπλ
Garbage

Collector

πξαγκαηηθνχ ρξφλνπ. Αληίζεηα,
RealTimeThread

κπνξνχλ λα
ρξεζηκνπνηεζνχλ ζε πεξίπησζε πνπ ε πινπνίεζε παξέρεη
Garbage

Collector

πξαγκαηηθνχ ρξφλνπ
φπσο ζηελ πεξίπησζε ηνπ
RTS

2.2
ηεο
Sun
.


To

παξαθάησ θνκκάηη θψδηθα (Σρήκα 2.6) παξνπζηάδεη ην ζεκαληηθφηεξν ηκήκα ηεο κεζφδνπ
run

ηεο
θιάζεο
ECC

πνπ θιεξνλνκεί ηελ
RealTimeThread
.















΢σήμα 2.6
H

κέζνδνο
run
() ηεο θιάζεο
ECC

[6]



H

παξνπζία ελφο εμσηεξηθνχ ζπκβάληνο (
ev
ent

triggered

FB
) ή ην πέξαζκα ηνπ ρξφλνπ (
time

triggered

FB
) έρνπλ σο απνηέιεζκα ηελ ελεξγνπνίεζε ηνπ
FB

ζηηγκηνηχπνπ. Έλα
FB

ζηηγκηφηππν ιέκε
φηη ελεξγνπνηείηαη φηαλ ην λήκα ηνπ αληίζηνηρνπ
ECC

γίλεηαη έηνηκν γηα εθηέιεζε (
runnable
).

H

synchronized

κέζν
δνο
readData
() ηεο θιάζεο
DataConnectionManager

ρξεζηκνπνηείηαη γηα ηελ
πινπνίεζε ησλ ζπλδέζεσλ δεδνκέλσλ κεηαμχ ησλ
function

blocks

θαη θαιείηαη αθνχ ην
FB

γίλεη
ελεξγφ. Ωο απνηέιεζκα, ην
FB

ζπιιέγεη ηα δεδνκέλα εηζφδνπ πνπ ελδερνκέλσο λα ρξεηαζηνχλ γηα η
ελ
εθηέιεζή ηνπ.


Σηελ ζπλέρεηα νη κεηαβάζεηο απφ ηελ ηξέρνπζα θαηάζηαζε ηνπ
FB

ειέγρνληαη κε ηελ απνζηνιή ηνπ
κελχκαηνο
checkTransitions

ζην ζηηγκηφηππν ηεο θιάζεο
ECState

πνπ αληηζηνηρεί ζηελ ηξέρνπζα
θαηάζηαζε. Ωο απάληεζε ζην κήλπκα
checkTransitions

ην

ζηηγκηφηππν ηεο
ECState

(
itsCurrentState
)
ζηέιλεη έλα κήλπκα
check

ζην ζηηγκηφηππν
ECTransition

πνπ αληηζηνηρεί ζην ηξέρνλ
EC

State
. Κάζε
ζηηγκηφηππν ηνπ πίλαθα
itsTransitions

ζηέιλεη σο απάληεζε ζην κήλπκα
check

έλα κήλπκα
invoke

ζηελ αληίζηνηρε κεηάβαζε

πνπ είλαη ζηηγκηφηππν ηεο θιάζεο
Method
.
H

ηηκή ηεο ζπλζήθεο κεηάβαζεο
ππνινγίδεηαη θαη επηζηξέθεηαη ζην ζηηγκηφηππν
ECTransition

θαη απφ εθεί ζην ζηηγκηφηππν
ECState
.

H

παξαπάλσ δηαδηθαζία παξνπζηάδεηαη ζην
Object

Interaction

Diagram

ηνπ Σρήκαηνο 2.7.

if(periodic)


itsFBinstance.itsEventInputsMonitor.read();


else


itsFBinstance.itsEventInputsMonitor.readAsynchronous();


BasicFBType.dcm.readData
(itsFBinstance);

while((targetState=currentState.checkTransitions(itsFBinstance))!=null) {


currentState=targetState;


currentState.enterState(itsFBinstance);

}

if(periodic)


waitForNextPeriod();

19




΢σήμα 2.7
To

Object

Interaction

Diagram

ηεο εθηίκεζεο ησλ κεηαβάζεσλ κηαο θαηάζηαζεο


ηνπ
FB

[6]

Παξφκνηα δηαδηθαζία αθνινπζείηαη θαη γηα ηελ εθηέιεζε ησλ αιγνξίζκσλ.



Τν Σρήκα 2.8 δείρλεη κέξνο ηνπ
java

θψδηθα πνπ παξάγεηαη απηφκ
αηα απφ ηνλ κεηαηξνπέα κνληέισλ
ηνπ
RTSJ

ρξεζηκνπνηψληαο σο είζνδν ην
FB

ηνπ
Detector

Unit

(ππνκνλάδα ηεο κνλάδαο ειέγρνπ ηνπ
FestoMPS
) πνπ ρξεζηκνπνηείηαη θαηά ηελ θάζε ζρεδηαζκνχ.


20


΢σ
ήμα 2.8
Μέξνο ηνπ απηφκαηα παξαγψκελνπ θψδηθα ηεο θιάζεο
DetectorUnit

[6]



Μηα απφ ηηο ζεκαληηθέο ελέξγεηεο ηνπ δεκηνπξγνχ ηεο θιάζεο είλαη ε θαηαζθεπή ελφο ζηηγκηνηχπνπ
ηεο θιάζεο
ECC

θαη ε αλάζεζε ηεο ζηελ αληίζηνηρε κεηαβιεηή θιάζεο (
itsEcc
). Σε απηφ ην ζεκείν ην
FB

ραξαθηεξίδεηαη σο πεξηνδηθφ ή απεξηνδηθφ (πεξλψληαο ην

αληίζηνηρν φξηζκα ζηνλ δεκηνπξγφ ηνπ
ECC
) αλάινγα κε ηελ πιεξνθνξία πνπ έρεη ιεθζεί απφ ην αληίζηνηρν δηάγξακκα
FB

Network
.

Μηα αθφκα ζεκαληηθή ελέξγεηα ηνπ δεκηνπξγνχ είλαη ε αξρηθνπνίεζε ηεο κεηαβιεηήο ζηηγκηνηχπνπ

itsEventInputMonitor
.
To

itsEventInput
Monitor

είλαη έλα
monitor

πνπ ρξεζηκνπνηείηαη γηα ηελ
πινπνίεζε
ησλ
semantics

ηεο εθηέιεζεο ησλ
FB

πνπ ζρεηίδνληαη κε ηηο
ζπλδέζεηο
events
, φπσο απηά
νξίδνληαη ζην
IEC
61499 πξφηππν.

Κάζε
ζηηγκηφηππν ελφο
function

block

έρεη κηα αλαθνξά ζε
InputEventMoni
tor

θαη πάλσ ζε απηφ θάλεη
read

ην
thread

ηνπ
ECC
.

public class detector extends BasicFBTy
pe{

public static ECState[] itsStates; //STATE ARRAY

public static ECAction[][] itsActions; //ACTION ARRAY

public static ECTransition[][] itsTransitions; //TRANSITION ARRAY

public static int numOfStates;

public static int numOfMaxActionsPerState;

public st
atic int numOfMaxTransitionsPerState;



static{ //ECC BUILDING

itsActions[checkPropertiesState][0]=new ECAction(Class.forName("detector").getMethod(

"downCheckAlg",null),EventOutput); //ACTIONS’ DECLARATION

itsStates[checkPropertiesState]=new ECState(itsAc
tions[checkPropertiesState]); //STATES’

DECLARATION

itsTransitions[checkPropertiesState][0]=new ECTransition((Class.forName("detector")).getMethod(

"checkPropertiesState2Invalid_propertState",null),itsStates[Invalid_propertState]);
//TRANSITIONS

DECLARATIO
N

itsStates[checkPropertiesState].updateTransitions(itsTransitions[checkPropertiesState]);

//STATE TRANSITION ASSOCIATION

}

public detector(){

itsEventInputs=new boolean[numOfEventInputs]; //INPUT EVENT INITIALIZATION

itsEventInputsMonitor=new InputEventMo
nitor(numOfEventInputs,this);



SchedulingParameters sch=new PriorityParameters(20);

ReleaseParameters pp=new AperiodicParameters(null,new RelativeTime(1,0),null,null);

itsECC=new ECC(sch,pp,this,itsStates[STARTState],false); }

//ALGORITHMS

public void dow
nCheckAlg(){…}

public void setPropertiesAlg(){…}

//TRANSITIONS

public boolean checkPropertiesState2Invalid_propertState(){…}

public boolean checkPropertiesState2Valid_propertiesState(){…}

public boolean InvalidHeightState2STARTState(){…}

…}

21


Ο κεραληζκφο ρεηξηζκνχ αζχγρξνλσλ
event

ηνπ
RTSJ

ρξεζηκνπνηείηαη γηα ηελ πινπνίεζε ηεο ξνήο ησλ
event

αλάκεζα ζηα
function

blocks
. Κάζε
event

εμφδνπ ελφο
FB

αλαπαξίζηαηαη απφ έλα ζηηγκηφηππν
ηεο θιάζεο
Out
putEvent

ε νπνία θιεξνλνκεί ηελ θιάζε
AsyncEvent

ηνπ
RTSJ
. Κάζε ζηηγκηφηππν ηεο
OutputEvent

ζπλδέεηαη κε έλα ζηηγκηφηππν ηεο θιάζεο
EventHandler
, ε νπνία θιεξνλνκεί ηελ
AsyncEventHandler

ή ηελ
BoundAsyncEventHandler

ηνπ
RTSJ
.
Ζ ζρέζε κεηαμχ ησλ παξαπάλσ
θι
άζεσλ θαίλεηαη ζην Σρήκα 2.9.



΢σήμα 2.9
Ζ δνκή πινπνίεζεο ηεο ξνήο ησλ
event

ζην δίθηπν ησλ
FB

[6]




2.2.2
Η διαδικαζία ανάπηςξηρ


H

πνιππινθφηεηα ηνπ
java

θψδηθα πνπ απαηηείηαη γηα ηελ έθθξαζε ησλ
semantics

ησλ
FB

θαζψο θαη
ησλ δηθηχσλ
FB

θαζηζηά

πξνθαλέο φηη φρη κφλν είλαη αδχλαην γηα έλα κεραληθφ ζπζηεκάησλ ειέγρνπ
λα πινπνηήζεη ην κνληέιν ζρεδηαζκνχ ζε
real

time

Java
, αιιά είλαη θαη έλα πνιχ δχζθνιν εγρείξεκα
γηα έλαλ έκπεηξν πξνγξακκαηηζηή
java
.
H

κφλε ιχζε ζε απηφ ην πξφβιεκα είλαη ε απηφκαηε

παξαγσγή θψδηθα απφ ηελ ηεθκεξίσζε ηεο θάζεο ηεο ζρεδίαζεο. Σχκθσλα κε ηελ δηαδηθαζία
αλάπηπμεο πνπ απεηθνλίδεηαη ζην Σρήκα 2.10, αξρηθά ην εξγαιείν
Archimedes

ή νπνηνδήπνηε άιιν
εξγαιείν ζπκβαηφ κε ην πξφηππν ΗΔ
C
61499 ρξεζηκνπνηείηαη γηα ηελ θαηαζθεπή κν
ληέισλ ζρεδηαζκνχ
βαζηζκέλα ζην
Function

Block

ηα νπνία αλαπαξίζηαληαη ζε
format

XML
.

Σηελ ζπλέρεηα, κεηαηξνπείο κνληέισλ ρξεζηκνπνηνχληαη γηα λα παξάγνπλ απηφκαηα ηα εθηειέζηκα
ζπζηαηηθά γηα ηα
FB

θαζψο θαη γηα ηα δίθηπα απφ
FB
. Γπν κεηαηξνπείο ρξεζηκνπνη
νχληαη γηα ην
ζθνπφ απηφ. Ο πξψηνο κεηαηξνπέαο ρξεζηκνπνηείηαη γηα λα κεηαθξάζεη ηα
FB

ηεο εθαξκνγήο ζηηο
αληίζηνηρεο θιάζεηο ηνπ
RTSJ
. Ο δεχηεξνο κεηαηξνπέαο ρξεζηκνπνηείηαη γηα λα κεηαθξάζεη θάζε
δίθηπν
FB

ζε κηα πεξηγξαθή ηνπ
deployment

ησλ ζπζηαηηθψλ ζ
ηνηρείσλ ηεο εθαξκνγήο βαζηζκέλε
ζηελ
XML
. Απηή ε πεξηγξαθή ρξεζηκνπνηείηαη ζηελ ζπλέρεηα απφ ηνλ
RTSJ

Launcher

κε ηνλ νπνίν
επηηπγράλεηαη ην
deployment

ηεο εθακνγήο ζην πεξηβάιινλ εθηέιεζεο πνπ είλαη ζπλήζσο δίθηπν απφ
δηαζπλδεδεκέλνπο θφκβνπο.


22



΢σήμα
2.10
Ζ δηαδηθαζία αλάπηπμεο ηνπ εθηειέζηκνπ κνληέινπ [6]




2.2.3
To

πεπιβάλλον
Run
-
Time


Τν πεξηβάιινλ
run
-
time

απνηειείηαη απφ ελα ζχλνιν απφ θιάζεηο νη νπνίεο παξέρνπλ ηελ ππνδνκή ε
νπνία απαηηείηαη γηα λα ππνζηεξηρζεί


α)
To

deployment

θαη ε πξνβι
έςηκε εθηέιεζε ηνπ κνληέινπ πινπνίεζεο πνπ παξάγεηαη απφ ηελ
δηαδηθαζία αλάπηπμεο πνπ πεξηγξάθεθε πξνεγνπκέλσο.


β) Τ
o

re
-
configuration

ηνπ ζπζηήκαηνο θαηά ην
run
-
time
.


Οη θιάζεηο
DeploymentManagerEntity

(
DME
),
DataConnectionManager
,
EventConnectionMana
ger

θαη
EventHandler

είλαη απφ ηηο πην ζεκαληηθέο θιάζεηο ηνπ πεξηβάιινληνο εθηέιεζεο.

Καηά ηελ δεκηνπξγία κηαο ζχλδεζεο
event

κεηαμχ δχν
FB

ζηηγκηνηχπσλ ε
DME

θάλεη
subscribe

ην
EventInputMonitor

ηνπ
FB

θαηαλαισηή ζηνλ
EventHandler

πνπ είλαη ζπλδεδεκέλνο
κε ην αληίζηνηρν
OutputEvent
, ην νπνίν θαη αλαπαξηζηά ην
event

εμφδνπ ηνπ
FB

παξαγσγνχ. Απηή ε δηδαδηθαζία
επηηπγράλεηαη θαιψληαο ηελ κέζνδν
subscribe

ζην θαηάιιειν ζηηγκηφηππν ηεο
EventHandler
.
H

DME

κπνξεί λα θάλεη
subscribe

ζε πεξηζζφηεξνπο απφ έλαλ
Ev
entHandlers

ην
EventInputMonitor

ελφο
FB
,
επηηξέπνληαο κε απηφλ ηνλ ηξφπν ηελ ιήςε γεγνλφησλ απφ πνιιά
FB

παξαγσγνχο. Ζ δηακφξθσζε ηνπ
ζπζηήκαηνο θαηά ην
run

time

βαζίδεηαη ζην γεγνλφο φηη κπνξεί λα γίλεη
subscribe

θαη
unsubscribe

θάπνην
EventInputMonitor

απφ ηνλ
EventHandler

αθφκα θαη θαηά ην
run
-
time
.

Καηά ην
run
-
time
, φηαλ έλα
FB

ζηηγκηφηππν δεκηνπξγήζεη έλα
event

εμφδνπ ε κέζνδνο
fire

ηνπ
αληίζηνηρνπ
OutputEvent

θαιείηαη. Απηφ έρεη σο απνηέιεζκα λα εθηειεζηεί ε
overriden

κέζνδνο
handleAsyncEvent
() ηνπ
αληίζηνηρνπ
EventHandler
. Σηελ πεξίπησζε πνπ ην
FB

θαηαλαισηήο είλαη
event
-
triggered
,
o

EventHandler

είλαη ππεχζπλνο λα ελεκεξψζεη ην
EventInputMonitor

ηνπ
23


θαηαλαισηή γηα ην λέν
event

θαιψληαο ηελ κέζνδν
notify

πάλσ ζην
monitor
.

To

FB

θαηαλαισηήο (γηα ηελ
αθξίβεηα ην
ECC

λήκα ηνπ
FB

θαηαλαισηή) φηαλ εηδνπνηεζεί γηα ην
event

δηαβάδεη ηα
event

εηζφδνπ απφ ην
InputEventsMonitor

θαη χζηεξα ειέγρεη αλ θάπνηα κεηάβαζε
απφ ηελ παξνχζα θαηάζηαζε ηνπ
ECC

ηθαλνπνηείηαη.


Έλαο απφ ηνπο ζεκαληηθνχο ζηφρνπο ηνπ πεξηβάιι
νληνο εθηέιεζεο είλαη λα παξέρεη ηελ ππνδνκή πνπ
απαηηείηαη γηα δηακφξθσζε ηνπ ζπζηήκαηνο θαηά ην
run
-
time
. Απηή ε δηαδηθαζία πξαγκαηνπνηείηαη ζε
ηξεηο μερσξηζηέο θάζεηο νη νπνίεο εθηεινχληαη κε δηαθνξεηηθή πξνηεξαηφηεηα ε θάζε κηα.

Ζ πξψηε θάζε εθηειείηαη

ζε ρακειή πξνηεξαηφηεηα θαη ζπκπεξηιακβάλεη ελέξγεηεο πνπ ρξεηάδνληαη
πνιχ ρξφλν, φπσο νη
downloadFBType
,
createFBInstance
,
createDataConnection
, νη νπνίεο κπνξνχλ λα
ραξαθηεξηζηνχλ σο βήκαηα πξνεηνηκαζίαο θαη κπνξνχλ λα δηαθνπνχλ απφ λήκαηα πςεινηέξσλ
πξ
νηεξαηνηήησλ. Απηφ επηηξέπεη ζηα λήκαηα ηεο εθαξκνγήο ειέγρνπ λα εθηεινχληαη ρσξίο λα ράλνπλ
θάπνην
deadline
.

H

δεχηεξε θάζε εθηειείηαη ζε πςειή πξνηεξαηφηεηα. Σπκπεξηιακβάλεη φιεο εθείλεο ηηο ελέξγεηεο πνπ
πξέπεη λα εθηειεζηνχλ ρσξίο δηαθνπή θαη δελ κπνξν
χλ λα δηαθνπνχλ απφ ηα λήκαηα ηεο εθαξκνγήο
ειέγρνπ. Τέηνηεο ελέξγεηεο είλαη ε
deleteEventConnection

θαη ε
createEventConnection
.

Τέινο, ε ηξίηε θάζε πνπ πεξηιακβάλεη ηηο ελέξγεηεο
deleteDataConnection

θαη
deleteFBInstance

εθηειείηαη ζε ρακειή πξνηεξαηφηεη
α.





















24


ΚΕΦΑΛΑΙΟ 3


Σο extended IEC61499 RTSJ
-
Based Framework


3.1

Γενικά


Τν θεθάιαην απηφ πεξηγξάθεη ηηο αιιαγέο πνπ έγηλαλ ζην
IEC
61499
RTSJ
-
Based

Framework

ζηα
πιαίζηα ηεο παξνχζαο δηπισκαηηθήο εξγαζίαο.

Σην
extended

RTSJ
-
Based

Framework

έρεη δεκηνπξγεζεί ε ππνδνκή γηα ηελ απηνκαηνπνίεζε ηεο
παξαγσγήο θψδηθα πνπ αθνξά ηελ επηθνηλσλία ηεο εθαξκνγήο ειέγρνπ κε ην ππν έιεγρν ζχζηεκα,
θαζψο θαη ησλ ζηαζκψλ κεηαμχ ηνπο ζηελ πεξίπησζε θαηαλεκεκέλεο εθαξκνγήο.
E
πηπιένλ, έρεη
πξνζηεζεί ε πινπνίεζ
ε ηνπ
Composite

Function

Block
, θαζψο θαη ππνζηήξημε γηα ηελ εμαζθάιηζε ηεο
ζσζηήο ζεηξάο παξαιαβήο ησλ κελπκάησλ απφ ην ειεγρφκελν ζχζηεκα. Οη παξαπάλσ πξνζζήθεο
έρνπλ σο απνηέιεζκα ηελ ηξνπνπνίεζε ηεο δνκήο ηνπ
implementation

model

framework
. Τα
θπξηφηεξ
α ζηνηρεία ηνπ λένπ
framework

θαζψο θαη νη ζρέζεηο κεηαμχ ηνπο θαίλ
o
ληαη ζην δηάγξακκα
θιάζεσλ πνπ παξνπζηάδεηαη ζην Σρήκα 3.1.

2
5



΢σήμα 3.1

Μέξνο ηνπ δηαγξάκκαηνο θιάζεσλ ηνπ ηξνπνπνηεκέλνπ
implementation

model

framework



Όπσο θαίλεηαη ζην δηάγξακκα ηνπ

Σρήκαηνο 3.1, έρεη εηζαρζεί κηα λέα θιάζε ζην
framework
, ε
ApplicationComponent
.
Κάζε ζηηγκηφηππν ηεο ApplicationComponent έρεη ηα εμήο data members:




EventInputsMonitor: To
EventInputsMonitor

κπνξεί λα γίλεη subscribe ζε θάπνηνλ
EventHandler.
Απηφ έρεη σ
ο ζπλέπεηα ηα
event

εηζφδνπ ηνπ
ApplicationComponent

λα κπνξνχλ
λα ζπλδεζνχλ κε ηα
event

εμφδνπ θάπνηνπ άιινπ
ApplicationComponent

παξφκνηα κε ηνλ
ηξφπν πνπ γηλφηαλ ε ζχλδεζε κεηαμχ ησλ
Function

Blocks

ζηελ πξψηε έθδνζε ηνπ
framework
.



itsEventInputs
: Έλαο
πίλαθαο απφ
boolean

κεηαβιεηέο νη ηηκέο ησλ νπνίσλ θαζνξίδνπλ πνηά
events

εηζφδνπ έρνπλ ελεξγνπνηεζεί.



itsEventInputsNames
: Έλαο πίλαθαο απφ
String

ζηνλ νπνίν απνζεθεχνληαη ηα νλφκαηα ησλ
event

εηζφδνπ ηνπ
ApplicationComponent
.



itsEventOutputs
: Έλαο πίλαθα
ο απφ αληηθείκελα ηχπνπ
OutputEvent

ηα νπνία γίλνληαη
fire

φηαλ
ελεξγνπνηεζεί ην αληίζηνηρν
event

εμφδνπ.



itsEventOutputsNames
: Έλαο πίλαθαο απφ
String

ζηνλ νπνίν απνζεθεχνληαη ηα νλφκαηα ησλ
event

εμφδνπ ηνπ
ApplicationComponent
.

26




itsEventOutputHandlers
:
Έλαο πίλαθαο απφ αληηθείκελα ηχπνπ
AsyncEventHandler
. Όκνηα κε
ηνλ κεραληζκφ πνπ ρξεζηκνπνηφηαλ ζηελ πξψηε έθδνζε ηνπ
framework

ην θάζε αληηθείκελν
είλαη ζπλδεδεκέλν κε έλα κνλαδηθφ
OutputEvent
. Σηνλ θάζε
handler

κπνξεί λα γίλεη
subscribe

ην
EventInputsMon
itor

ελφο άιινπ
ApplicationComponent
. Όηαλ ην αληίζηνηρν
OutputEvent

γίλεη
fire

ηφηε εθηειείηαη ε κέζνδνο
handleAsyncEvent
() ηνπ
handler

απφ ηελ νπνία
ελεκεξψλνληαη κέζσ ησλ εγγεγξακκέλσλ
EventInputsMonitor

ηα
ApplicationComponent

ζηα
νπνία απεπζχλεηαη ην

κήλπκα εμφδνπ.



itsDataInputs
: Έλαο πίλαθαο απφ αληηθείκελα ηχπνπ
IECDataType

ηα νπνία αλαπαξηζηνχλ ηα
δεδνκέλα εηζφδνπ ηνπ
ApplicationComponent
.



itsDataInputsNames
: Έλαο πίλαθαο απφ αληηθείκελα ηχπνπ
IECDataType

ηα νπνία
αλαπαξηζηνχλ ηα νλφκαηα ησλ δεδνκ
έλσλ εηζφδνπ ηνπ
ApplicationComponent
.



itsDataOutputs
: Έλαο πίλαθαο απφ αληηθείκελα ηχπνπ
IECDataType

ηα νπνία αλαπαξηζηνχλ ηα
δεδνκέλα εμφδνπ ηνπ
ApplicationComponent
.



itsDataOutputsNames
: Έλαο πίλαθαο απφ αληηθείκελα ηχπνπ
IECDataType

ηα νπνία
αλαπαξηζην
χλ ηα νλφκαηα ησλ δεδνκέλσλ εμφδνπ ηνπ
ApplicationComponent
.


Τα παξαπάλσ
data

members

ππήξραλ κέζα ζηελ θιάζε
BasicFBType

ηεο πξνεγνχκελεο έθδνζεο ηνπ
framework
. Σηελ θαηλνχξγηα έθδνζε ε θιάζε
BasicFBType

θιεξνλνκεί ηα παξαπάλσ
data

members

θαη επηπιένλ ν
ξίδεη δνκέο πνπ ππάξρνπλ κφλν ζην ζηηγκηφηππν ηνπ
function

block
, φπσο ην
ECC

(
itsECC
) θαη ηα εζσηεξηθά δεδνκέλα (
itsInternalData
,
itsInternalDataNames
).

Οη θιάζεηο
SensorListener

,
OutSocket

θαη
UnitPort

σο ππνθιάζεηο ηεο Α
pplicationComponent

θιεξνλνκνχλ
ηα
data

members

ηεο θαη επηπιένλ νξίδνπλ θάπνηα αθφκα πνπ έρνπλ ζρέζε κε ηελ
επηθνηλσλία κέζσ
socket

είηε κεηαμχ δπν θφκβσλ κηαο θαηαλεκεκέλεο εθαξκνγήο, είηε κεηαμχ ηεο
εθαξκνγήο ειέγρνπ θαη ηνπ ππν ειέγρνπ ζπζηήκαηνο. Δπηπιένλ, ε θιάζε
OutSocket

πεξηέρεη

κηα
αλαθνξά ζε αληηθείκελν ηχπνπ
VirtualComChannel

κέζσ ηνπ νπνίνπ κπνξεί λα εμαζθαιηζζεί ε
ζσζηή ζεηξά παξάδνζεο ησλ κελπκάησλ απφ ηελ εθαξκνγή ειέγρνπ ζην ειεγρφκελν ζχζηεκα. Ο
κεραληζκφο απηφο ζα πεξηγξαθεί αλαιπηηθά ζηελ ζπλέρεηα.


Ζ λέα απηή δνκή ην
π
framework

πνπ πεξηγξάθεθε παξαπάλσ έρεη σο βαζηθφ πιενλέθηεκα ην εμήο: Τα
αληηθείκελα
SensorListener
,
Outsocket

θαη
UnitPort

έρνπλ ίδην
interface

κε ηα αληηθείκελα πνπ
αλαπαξηζηνχλ ηα
function

block
, αθνχ έρνπλ
event

θαη
data

εηζφδνπ θαη εμφδνπ .Απηφ έρ
εη σο ζπλέπεηα
λα κπνξνχλ λα ζπλδεζνχλ κε ηα
function

block

κε ηξφπν ίδην κε απηφλ πνπ ζπλδένληαη ηα
function

block

κεηαμχ ηνπο. Έηζη ε ελζσκάησζε ηνπο ζην ζχζηεκα θαη θαηά ζπλέπεηα ε ελζσκάησζε ηεο λέαο
ιεηηνπξγηθφηεηαο πνπ απηά πξνζθέξνπλ λα κπνξεί λα γί
λεη κε πνιχ απιφ, εχθνιν θαη θπζηθφ ηξφπν.


3.2

Επικοινυνία με ηο ςπό έλεγσο ζύζηημα.


Η κλάζη
SensorListener


Μέζσ ηεο θιάζεο απηήο, ηεο νπνίαο ν θψδηθαο θαίλεηαη ζην Σρήκα 3.2 επηηπγράλεηαη ε επηθνηλσλία
ησλ αηζζεηήξσλ ηνπ ειεγρφκελνπ ζπζηήκαηνο κε ηελ
εθαξκνγή ειέγρνπ. Ζ θιάζε
SensorListener

θιεξνλνκεί ηελ
ApplicationComponent

θαη επίζεο πινπνηεί ην
runnable

interface
.

Ο δεκηνπξγφο ηεο θιάζεο πνπ θαιείηαη θαηά ηελ εθθίλεζε ηνπ ζπζηήκαηνο παίξλεη ηα παξαθάησ
νξίζκαηα:


int

port
: Δίλαη ην
port

number

πάλ
σ απφ ην νπνίν ζα επηηεπρζεί ε επηθνηλσλία ησλ αηζζεηήξσλ ηνπ
ειεγρφκελνπ ζπζηήκαηνο κε ην αληηθείκελν
SensorListener

ηεο εθαξκνγήο ειέγρνπ.

27



String
[]
sensorEvents
: Απηφο ν πίλαθαο απφ
String

πεξηέρεη ηα νλφκαηα ησλ
events

πνπ πξνέξρνληαη
απφ ηνπο αηζζε
ηήξεο.


String
[]
sensorData
: Απηφο ν πίλαθαο απφ
String

πεξηέρεη ηα νλφκαηα ησλ δεδνκέλσλ πνπ πξνέξρνληαη
απφ ηνπο αηζζεηήξεο.


int
[]
sensorDataType
: : Απηφο ν πίλαθαο απφ αθεξαίνπο πεξηέρεη ηνπο ηχπνπο ησλ δεδνκέλσλ πνπ
πξνέξρνληαη απφ ηνπο αηζζεηήξεο. Ο
η δηάθνξνη ηχπνη ησλ δεδνκέλσλ αληηζηνηρνχλ ζε έλαλ αθέξαην
φπσο θαίλεηαη ζηνλ Πίλαθα 3.1.



IECInt

0

IECDouble

1

IECBoolean

2

IECShort

3

IECLong

4

IECByte

5

IECFloat

6

IECString

7



Πίνακαρ 3.1

H

αληηζηνίρηζε ησλ ηχπσλ ησλ δεδνκέλσλ ηνπ
FB

κε αθ
εξαίνπο



Αλάινγα κε ηηο ηηκέο πνπ ηνπ έρνπλ δνζεί, ν δεκηνπξγφο αξρηθνπνηεί ηηο κεηαβιεηέο ηνπ αληηθεηκέλνπ
ηηο ζρεηηθέο κε ηελ επηθνηλσλία ηνπ κε ηα
function

blocks

ηεο εθαξκνγήο (
itsEventOutputs
,
itsEventOutputsHandlers
,
itsDataOutputsNames
...).

Σηελ ζπ
λέρεηα ν δεκηνπξγφο θαηαζθεπάδεη έλα
RealTimeThread

πεξλψληαο ζαλ νξίζκαηα έλα
ζηηγκηφηππν ηεο θιάζεο
SchedulingParameters

κε πςειή πξνηεξαηφηεηα, θαζψο θαη ην ίδην ην
αληηθείκελν
SensorListener

ζηελ ζέζε ηνπ νξίζκαηνο ηχπνπ
Runnable
. Απηφ έρεη ζαλ ζπλέπεη
α φηαλ ην
λήκα μεθηλήζεη λα εθηειεζηεί ε κέζνδνο
run
() ηεο θιάζεο
SensorListener
.


H

κέζνδνο
run

θαιεί αξρηθά ηελ κέζνδν
initialization
() ζηελ νπνία δεκηνπξγείηαη αξρηθά έλα
αληηθείκελν ηχπνπ
Socket

ζην
port

number

πνπ έρεη δνζεί. Αλ δελ ππάξρεη ήδε θάπνη
νο
server

απφ ηελ
κεξηά ηνπ ειεγρφκελνπ ζπζηήκαηνο πνπ λα “αθνχεη” γηα αηηήζεηο
client

πάλσ ζην ζπγθεθξηκέλν
port

ηφηε εγείξεηαη κηα εμαίξεζε ηχπνπ
IOException
.
To

ζχζηεκα θάλσληαο
catch

ηελ εμαίξεζε δεκηνπξγεί
έλα
ServerSocket

πνπ αθνχεη πάλσ ζην ζπγθεθ
ξηκέλν
port
. Παξφκνηα δηαδηθαζία αλακέλεηαη λα
αθνινπζεζεί θαη θαηά ηελ ζχλδεζε ζην
port

απφ ηελ κεξηά ηνπ ειεγρφκελνπ ζπζηήκαηνο.

Με απηφλ ηνλ ηξφπν είλαη δπλαηή ε εδξαίσζε ηεο ζχλδεζεο κεηαμχ ηεο εθαξκνγήο ειέγρνπ θαη ηνπ
ειεγρφκελνπ ζπζηήκαηνο αλεμάξηεη
α απφ ην πνηά εθαξκνγή έρεη μεθηλήζεη πξψηε.


Σηελ ζπλέρεηα ε κέζνδνο
run

θαιεί ζπλερψο ηελ κέζνδν
checkSensors
().

Σηελ κέζνδν απηή αξρηθά θαιείηαη ε κέζνδνο
readline
() ηνπ
BufferedReader

αληηθεηκέλνπ ζηελ νπνία
ην
thread

πεξηκέλεη κέρξη θάπνην κήλπκα λα
γξαθηεί ζην
socket
. Οηαλ γξαθηεί θάπνην κήλπκα ηφηε ην
thread

ειέγρεη αλ ην κήλπκα αληηζηνηρεί ζην φλνκα θάπνηνπ
event

εμφδνπ, θαη αλ λαη ην αληίζηνηρν
event

(ζηηγκηφηππν ηεο
OutputEvent
) γίλεηαη
fire
(). Δπηπιένλ, αλ ππάξρνπλ δεδνκέλα απφ ηνπο
αηζζεηήξεο π
νπ πξέπεη λα δηαβαζηνχλ ηφηε θαιείηαη ε κέζνδνο
readData
() ζηελ νπνία γξάθεηαη ζηελ
28


θαηάιιειε έμνδν δεδνκέλσλ ε ηηκή ησλ δεδνκέλσλ πνπ είλαη ζηελ πεξίπησζε απηή ελζσκαησκέλε
ζην κήλπκα πνπ ιακβάλεηαη απφ ην
socket
.



public class SensorListener extends A
pplicationComponent implements Runnable {



private static final int IECInt = 0;


private static final int IECDouble = 1;


private static final int IECBoolean = 2;


private static final int IECShort = 3;


p
rivate static final int IECLong = 4;


private static final int IECByte = 5;


private static final int IECFloat = 6;


private static final int IECString = 7;




private ServerSocket serverSocket = null;


pr
ivate Socket clientSocket = null;


private BufferedReader inBR;


private InputStreamReader inISR;


private InputStream inIS;


private String inputLine;


private int port;


private boolean dataInput
;



private int numOfEventOutputs;


private int numOfDataOutputs;


private int[] dataTypes;



private RealtimeThread th;




public SensorListener(int port,String[] sensorEvents,String[] sensorData,in
t[] sensorDataType){


this.port=port;



SchedulingParameters sch=new PriorityParameters(50);









if(sensorEvents!=null){






numOfEventOutputs=sensorEvents.length;



itsEventOutputsNames=ne
w String[numOfEventOutputs];



itsEventOutputs=new OutputEvent[numOfEventOutputs];



itsEventOutputsHandlers=new EventHandler[numOfEventOutputs];





for (int i=0;i<numOfEventOutputs;i+
+){






itsEventOutputs[i]=new OutputEvent();







itsEventOutputsNames[i]=sensorEvents[i];






}



}






if(sensorData!=null){

29




dataInput=true;



numOfDataOutputs=se
nsorData.length;



dataTypes=new int[numOfDataOutputs];



itsDataOutputs=new IECDataType[numOfDataOutputs];



itsDataOutputsNames=new String[numOfDataOutputs];







for (int i=0;i<numOfDataOutputs
;i++){



dataTypes[i]=sensorDataType[i];







itsDataOutputsNames[i]=sensorData[i];










switch(dataTypes[i]){










case(IECInt):






itsDataOutputs[i]=ne
w IECInt();






break;






//….










case(IECByte):






itsDataOutputs[i]=new IECByte();







break;







}









}







}










th=new RealtimeThread(
sch,null,null,null,null,this);







}






public void run(){


initialization();




while(true){






checkSensors();




//

RealtimeThread.waitForNextPeriod();



}



}




//TRANSITIONS








public void checkSensors(){



try{



inputLine = inBR.readLine();



}



catch(Exception e){System.out.println(e.toString());}





30



for(int i=0;i<numOfEvent
Outputs;i++){


if(inputLine.equals(itsEventOutputsNames[i])){



itsEventOutputs[i].fireOutputEvent();





}



}



if(dataInput){








if(inputLine.indexOf('.')!=
-
1){









readData();