Σημειώσεις θεωρίας για το μάθημα "Κατανεμημένα Συστήματα Ελέγχου"



Σχετικά έγγραφα
ΠΟΛΥΤΕΧΝΕΙΟ ΚΡΗΤΗΣ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ ΠΑΡΑΓΩΓΗΣ ΚΑΙ ΔΙΟΙΚΗΣΗΣ

Αρχιτεκτονική του πληροφοριακού συστήµατος Cardisoft Γραµµατεία 2003 ιαχείριση Προσωπικού

Προγραμματισμός ΙI (Θ)

Υπολογιστικά Συστήματα

ΚΕΦΑΛΑΙΟ 10 ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ

Κεφάλαιο 4: Λογισμικό Συστήματος

ΚΕΦΑΛΑΙΟ 5. Κύκλος Ζωής Εφαρμογών ΕΝΟΤΗΤΑ 2. Εφαρμογές Πληροφορικής. Διδακτικές ενότητες 5.1 Πρόβλημα και υπολογιστής 5.2 Ανάπτυξη εφαρμογών

Συντάχθηκε απο τον/την Administrator Δευτέρα, 22 Φεβρουάριος :11 - Τελευταία Ενημέρωση Παρασκευή, 26 Φεβρουάριος :52

Aρχές Σπονδυλωτού Προγραµµατισµού σε Kατανεµηµένα Συστήµατα. Kεφάλαιο Έξη - Συνδετικά Kριτήρια Aντικειµένων και Συστατικών

1 η Εργαστηριακή Άσκηση MATLAB Εισαγωγή

Περιεχόμενα. Κεφάλαιο 1 Γνωριμία με το Excel... 9

Περιεχόμενα. Κεφάλαιο 1 Γνωριμία με το Excel...9

Ράβδος Εργαλείων, σχεδόν τα ίδια εργαλεία και εικονίδια υπάρχουν όπως στα άλλα προγράμματα που έχετε μάθει μέχρι σήμερα.

Microsoft Excel Κεφάλαιο 1. Εισαγωγή. Βιβλίο εργασίας

Εισαγωγή στην Access 2007

Αρχιτεκτονική Υπολογιστών

Πανεπιστήμιο Δυτικής Μακεδονίας. Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών. Ηλεκτρονική Υγεία. Εργαστήριο 4 ο : MATLAB

Μαλούτα Θεανώ Σελίδα 1

Πρόλογος... 7 ΕΙΔΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ

Κεφάλαιο 14: Συμβουλές προς έναν νέο προγραμματιστή

ΥΠΟΠΡΟΓΡΑΜΜΑΤΑ. Κάθε υποπρόγραμμα έχει μόνο μία είσοδο και μία έξοδο. Κάθε υποπρόγραμμα πρέπει να είναι ανεξάρτητο από τα άλλα.

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010

Σενάριο 17: Παιχνίδι μνήμης με εικόνες

Κεφάλαιο 10 ο Υποπρογράµµατα

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στην Access Κεφάλαιο 2 Χειρισμός πινάκων... 27

Επικοινωνία Client/Server Απομακρυσμένη Κλήση Διαδικασιών

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Περιεχόμενα. Κεφάλαιο 1 Εισαγωγή στην Access...9. Κεφάλαιο 2 Χειρισμός πινάκων... 25

ΕΡΓΑΣΙΑ ΣΤΟ ΜΑΘΗΜΑ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

4/2014 ΣΥΝΟΠΤΙΚΗ ΠΑΡΟΥΣΙΑΣΗ ΥΔΡΟΛΗΨΙΕΣ ΑΤΤΙΚΗΣ ΑΠΟΚΕΝΤΡΩΜΕΝΗ ΔΙΟΙΚΗΣΗ ΑΤΤΙΚΗΣ ΔΙΕΥΘΥΝΣΗ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΕΠΙΚΟΙΝΩΝΙΩΝ

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΜΑΡΙΑ Σ. ΖΙΩΓΑ ΚΑΘΗΓΗΤΡΙΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Atlantis - Νέο user interface

ΠΛΗΡΟΦΟΡΙΚΗ Ι Εργαστήριο 1 MATLAB ΠΛΗΡΟΦΟΡΙΚΗ Ι ΕΡΓΑΣΤΗΡΙΟ 1. Θέμα εργαστηρίου: Εισαγωγή στο MATLAB και στο Octave

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Ενότητα: Εισαγωγή ΚΥΡΟΠΟΥΛΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ. Τμήμα Διοίκηση Επιχειρήσεων (Κοζάνη)

Εισαγωγή στην Πληροφορική

Θερμοδυναμική - Εργαστήριο

Κεφάλαιο 6 Λογισμικό Εφαρμογών. Εφαρμογές Πληροφορικής Κεφ.6 Καραμαούνας Πολύκαρπος 1

Σχεδιάζοντας Εφαρμογές για το Διαδίκτυο

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

POWERPOINT Είναι το δημοφιλέστερο πρόγραμμα παρουσιάσεων.

Γ) Χρήση Λογισμικού για την υλοποίηση πρακτικών εφαρμογών της Ασαφούς Λογικής

3 ο Εργαστήριο Μεταβλητές, Τελεστές

ΚΕΦΑΛΑΙΟ 8 Η ΓΛΩΣΣΑ PASCAL

Η Υλοποίηση της Επικοινωνίας. Κατανεµηµένα Συστήµατα

Διαφορές single-processor αρχιτεκτονικών και SoCs

Προγραμματισμός Διαχείρισης Συστημάτων Ι

Visual Flowchart Γενικά

ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΣΕ ΔΙΣΚΕΤΑ ΑΝΤΙΓΡΑΦΗ ΑΡΧΕΙΟΥ ΑΠΟ ΔΙΣΚΕΤΑ. Από τον κατάλογο που εμφανίζεται επιλέγω: Αποστολή προς Δισκέτα (3,5)

Τυπικές χρήσεις της Matlab

Περιεχόμενα. Μέρος 1: Βασικές έννοιες Πληροφορικής και επικοινωνιών Μέρος 2: Χρήση υπολογιστή και διαχείριση αρχείων Πρόλογος...

Περιεχόμενα ΓΕΩΠΥΛΗ ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΚΕΝΤΡΙΚΟ SITE. ΧΑΡΤΗΣ... 2 Είσοδος στην εφαρμογή «Χάρτης»... 2 Λειτουργίες εφαρμογής «Χάρτης»...

Προγραμματισμός Η/Υ (ΤΛ2007 )

αντίστοιχο γεγονός. Όταν όντως το κουμπί

Κατανεμημένα Συστήματα

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Σχεδιαστικά Προγράμματα Επίπλου

ΤΕΙ ΚΑΒΑΛΑΣ. Πτυχιακή εργασία ΕΙΣΑΓΩΓΗ. Μιλτιάδης Κακλαμάνης

ΜΕΤΑΦΟΡΑ ΑΡΧΕΙΩΝ FTP

Ενημέρωση σε Windows 8.1 από τα Windows 8

Αυτοματισμοί και Συστήματα Αυτομάτου Ελέγχου. Ενότητα 2

Δομημένος Προγραμματισμός (ΤΛ1006)

3 Αλληλεπίδραση Αντικειμένων

Οι νεότερες εξελίξεις στον GM EPC

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

Σκοπός. Εργαστήριο 6 Εντολές Επανάληψης

Αρχιτεκτονικές κατανεμημένων συστημάτων. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 12

Αρχιτεκτονική Υπολογιστών

Αρχιτεκτονικές κατανεμημένων συστημάτων. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 12

Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420)

GreekLUG Ελεύθερο Λογισμικό & Λογισμικό Ανοικτού Κώδικα

-I/O-SYSTEM 750 BMS ΕΛΕΓΧΟΣ ΚΤΙΡΙΑΚΩΝ ΕΓΚΑΤΑΣΤΑΣΕΩΝ ΚΑΙ ΚΛΙΜΑΤΙΣΜΟΥ

Unity Editor #02 Κεντρικό Μενού: File, Build Settings και Build & Run

Εργαστήριο Τεχνολογίας Λογισμικού και Ανάλυσης Συστημάτων

. Μεθοδολογία Προγραμματισμού. Εισαγωγή. Νικόλαος Πεταλίδης. Εισαγωγή Εαρινό Εξάμηνο 2014

Σχεδιασµός βασισµένος σε συνιστώσες

Εισαγωγή στην Επιστήμη της Πληροφορικής Εργαστήριο. UNIX Μέρος 1

Οδηγός Εγκατάστασης και Χρήσης του Arebas Easy

Γ ΓΥΜΝΑΣΙΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΤΗ ΓΛΩΣΣΑ MicroWorlds Pro

ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΕΦΗΣ ΑΝΑΛΥΣΗ Διαγράμματα Συνεργασίας. Ιωάννης Σταμέλος Βάιος Κολοφωτιάς Πληροφορική

Ερωτήσεις- Απαντήσεις Πολυμέσα Απο το Βιβλίο Εφαρμογές Η/Υ Α,Β,Γ Λυκείου

Εργασία «Διαχείριση Δικτύων» Ιούνιος 2014, Θεσ/νίκη

Εισαγωγή στην εφαρμογή Βασική Σελίδα (Activity) Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10

TO ΥΠΟΠΡΟΓΡΑΜΜΑ ΣΥΝΑΡΤΗΣΗ

ΑΡΧΙΜΗΔΗΣ ΙΙΙ Ενίσχυση Ερευνητικών Ομάδων στο ΤΕΙ Δυτικής Μακεδονίας» - MIS

Τιμή Τιμή. σκορ. ζωές

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

Εισαγωγή στο MATLAB. Κολοβού Αθανασία, ΕΔΙΠ,

Προγραμματισμός Η/Υ 1 (Εργαστήριο)

Δομές Ακολουθίας- Επιλογής - Επανάληψης. Δομημένος Προγραμματισμός

Τίτλος Πλατφόρµα Ασύγχρονης Τηλεκπαίδευσης. Συντάκτης. Ακαδηµαϊκό ιαδίκτυο GUnet Οµάδα Ασύγχρονης Τηλεκπαίδευσης

ΕΡΓΑΣΤΗΡΙΟ 3: Προγραμματιστικά Περιβάλλοντα και το Πρώτο Πρόγραμμα C

Εισαγωγή. Διαλέξεις στο μάθημα: Μεταφραστές Γιώργος Μανής

ΕΡΓΑΣΤΗΡΙΟ 1: 1 Εισαγωγή, Χρήσιμες Εφαρμογές

Εγκατάσταση του Lazarus

Σύντομες εισαγωγικές σημειώσεις για την. Matlab

Kεφάλαιο 11 Λίστες και Ανάλυση Δεδομένων Kεφάλαιο 12 Εργαλεία ανάλυσης πιθανοτήτων Kεφάλαιο 13 Ανάλυση δεδομένων...

ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

Περιεχόμενα. Λίγα λόγια από τον συγγραφέα Microsoft Excel Η δομή ενός φύλλου εργασίας... 21

Transcript:

ΤΕΙ ΧΑΛΚΙΔΑΣ ΤΜΗΜΑ ΑΥΤΟΜΑΤΙΣΜΟΥ Σημειώσεις θεωρίας για το μάθημα "Κατανεμημένα Συστήματα Ελέγχου" Χειμερινό εξάμηνο 2008-2009 Χ. Οικονομάκος 1

Κεφάλαιο 1: Τεχνολογίες Λογισμικού Ανοιχτής Αρχιτεκτονικής για Συστήματα SCADA 1.1 Τα Συστήματα SCADA Ο όρος SCADA προέρχεται από τα αρχικά των λέξεων Supervisory Control and Data Acquisition (Εποπτικός Έλεγχος και Συλλογή Δεδομένων). Εχει καθιερωθεί στη διεθνή ορολογία των συστημάτων αυτοματισμού και δηλώνει τα συστήματα εκείνα, που επιτρέπουν στο χειριστή μιας κατανεμημένης στο χώρο διεργασίας να συλλέγει πληροφορίες από διάφορα σημεία σε ένα κεντρικό υπολογιστή, από τον οποίο μπορεί επίσης να εκτελεί χειρισμούς ή να στέλνει εντολές ελέγχου έχοντας εποπτεία (δηλαδή βλέποντας τη συνολική εικόνα) της διαδικασίας. Τα SCADA χρησιμοποιούνται κυρίως στη βιομηχανία για την αυτοματοποίηση της παραγωγής και των σχετικών με αυτή διαδικασιών. Συστήματα SCADA χρησιμοποιούνται ακόμη στα δίκτυα των επιχειρήσεων και οργανισμών κοινής ωφελείας (δίκτυα μεταφοράς και διανομής ηλεκτρικής ενέργειας, νερού ή φυσικού αερίου, δίκτυα αποχέτευσης), στα συστήματα αυτοματισμού πολυώροφων κτιρίων (π.χ. νοσοκομεία, ξενοδοχεία) ή άλλων μεγάλων εγκαταστάσεων (π.χ. αεροδρόμια), στα σιδηροδρομικά δίκτυα, στη γεωργία (δίκτυα άρδευσης, αυτοματοποίηση μεγάλων γεωργικών μονάδων) και αλλού. Ένα πολύ σημαντικό κομάτι ενός συστήματος SCADA είναι το λογισμικό του κέντρου ελέγχου. Η ποιότητα του λογισμικού αυτού είναι καθοριστικής σημασίας για την καλή λειτουργία ολόκληρου του συστήματος. Όταν το λογισμικό του κέντρου ελέγχου είναι απαλλαγμένο από σφάλματα και δυσλειτουργίες, ανταποκρίνεται σωστά και αξιόπιστα σε οτιδήποτε μπορεί να συμβεί κατά τη λειτουργία του συστήματος, είναι εύχρηστο, ευέλικτο και μπορεί να δεχτεί όλες τις απαιτούμενες επεκτάσεις, τότε το σύστημα SCADA είναι ένα πραγματικό εργαλείο, που διευκολύνει τη ζωή των χειριστών και τους επιτρέπει να εκτελούν την εργασία τους πολύ πιο αποδοτικά. Αντίθετα, όταν το λογισμικό του κέντρου ελέγχου δεν έχει τα παραπάνω χαρακτηριστικά, τότε το σύστημα SCADA αδυνατεί να καλύψει τις ανάγκες, για τις οποίες σχεδιάστηκε. Επιπλέον, τυχόν ελλείψεις ή αστοχίες στις συσκευές πεδίου, τους τοπικούς ελεγκτές ή το σύστημα επικοινωνίας μπορούν να διορθωθούν σχετικά εύκολα με απομάκρυνση των βαθμίδων, που δεν λειτουργούν ικανοποιητικά και αντικατάστασή τους από άλλες, διαφορετικής τεχνολογίας ή ανώτερης ποιότητας. Η αντικατάσταση αυτή δεν συνιστά αλλαγή συστήματος SCADA, υπό την προυπόθεση φυσικά ότι το υπάρχον κέντρο ελέγχου υποστηρίζει τις νέες βαθμίδες. Αντίθετα, αν το κέντρο ελέγχου δεν λειτουργεί ικανοποιητικά και πρέπει να αντικατασταθεί από άλλο, τότε δεν μιλάμε για διόρθωση ή αναβάθμιση του υπάρχοντος συστήματος αλλά για προμήθεια νέου συστήματος. Για το λόγο αυτό ο όρος SCADA χρησιμοποιείται συχνά στην πράξη με μια ειδικότερη έννοια και σημαίνει απλώς το λογισμικό του κέντρου ελέγχου και όχι ολόκληρο το σύστημα. Το κέντρο ελέγχου ενός συστήματος SCADA είναι ένα εξαιρετικά πολύπλοκο πρόγραμμα. Χρειάζεται να διαχειρίζεται σωστά έναν όγκο πληροφοριών πραγματικού χρόνου και να τις δρομολογεί σωστά με τέτοιο τρόπο ώστε ο κάθε χρήστης του συστήματος και η κάθε μηχανή, που συνδέεται σε αυτό, να έχει την πληροφορία, που χρειάζεται, τη στιγμή, που τη χρειάζεται και στη μορφή, που τη χρειάζεται. Επιπλέον, καθώς τόσο οι ανάγκες της επιχείρισης όσο και οι διαθέσιμες τεχνολογικές λύσεις δεν παραμένουν σταθερές σε όλη τη διάρκεια της ζωής του συστήματος αλλά μεταβάλλονται με την πάροδο του χρόνου, το λογισμικό του κέντρου ελέγχου πρέπει 2

να είναι αρκετά ευέλικτο και επεκτάσιμο, ώστε να μπορεί να προσαρμόζεται εύκολα και ομαλά στις καινούργιες κάθε φορά συνθήκες. Όπως έχει αποδειχτεί στην πράξη, οι απαιτήσεις από το λογισμικό των SCADA είναι πολλές φορές τόσο πολύπλοκες και τόσο πολύ διαφορετικές μεταξύ τους, ώστε να είναι αδύνατον να καλυφθούν από τις δυνατότητες ενός μόνου εργαλείου, όσο πλούσιο και αν είναι αυτό. Για το λόγο αυτό σήμερα θεωρείται πολύ σημαντικό ένα πρόγραμμα SCADA να μπορεί να συνεργάζεται με άλλα προγράμματα και να ενσωματώνει στις εφαρμογές του εξειδικευμένο λογισμικό άλλων κατασκευαστών όποτε χρειαστεί. Η αγορά ζητά κέντρα ελέγχου ανοιχτής αρχιτεκτονικής, βασισμένα σε καθιερωμένα διεθνή πρότυπα, τα οποία επιτέπουν τη συνένωση και τη συνεργασία ανεξάρτητων μεταξύ τους προϊόντων υλικού ή λογισμικού, τα οποία ενδεχομένως προέρχονται από διαφορετικούς κατασκευαστές. Η σύνδεση των διαφορετικών αυτών κοματιών και η ενσωμάτωσή τους σε ένα ολοκληρωμένο σύστημα πραγματοποιείται με τη βοήθεια ειδικών τεχνολογιών, που περιγράφονται συνολικά με τον όρο «τεχνολογίες ολοκλήρωσης» (integration technologies). Στις επόμενες ενότητες θα γνωρίσουμε κάποιες βασικές τέτοιες τεχνολογίες. Πιο συγκεκριμένα, θα δούμε τα κυριότερα χαρακτηριστικά τους και θα κάνουμε μια εισαγωγή στον προγραμματισμό με χρήση αυτών των τεχνολογιών. Πριν ασχοληθούμε όμως με συγκεκριμένες τεχνολογίες ολοκλήρωσης, ας αναφέρουμε λίγα πράγματα για τα χαρακτηριστικά και τις δυνατότητες των κέντρων ελέγχου των συστημάτων SCADA. 1.2 Συνηθισμένα Χαρακτηριστικά του Κέντρου Ελέγχου Ένα σημαντικό κομάτι του κέντρου ελέγχου είναι η βαθμίδα επικοινωνίας με το χειριστή (user interface UI). Σε παλαιότερες εποχές η βαθμίδα αυτή περιλάμβανε μιμικά διαγράμματα, που πολλές φορές ήταν τόσο μεγάλα ώστε κάλυπταν τους τοίχους ενός δωματίου. Τα διαγράμματα αυτά απεικόνιζαν σχηματικά ολόκληρη τη διεργασία και ήταν εφοδιαμένα με ένα μεγάλο αριθμό από ενδεικτικές λυχνίες, όργανα μέτρησης και κουμπιά χειρισμών, με τη βοήθεια των οποίων οι χειριστές έπαιρναν πληροφορίες ή έδιναν εντολές. Τα τελευταία χρόνια τα μιμικά διαγράμματα έχουν αντικατασταθεί από προγράμματα γραφικής απεικόνισης των πληροφοριών στην οθόνη του ηλεκτρονικού υπολογιστή. Οι οθόνες ενός μοντέρνου user interface αποτελούνται γενικά από στατικά και δυναμικά στοιχεία. Στατικά στοιχεία είναι εκείνα, που η εικόνα τους στην οθόνη δεν μεταβάλλεται κατά τη διάρκεια της λειτουργίας του προγράμμτος. Παραδείγματα τέτοιων στοιχείων είναι διάφοροι τίτλοι ή λογότυπα, που μπορεί να εμφανίζονται στις οθόνες και οι γραφικές απεικονίσεις των σταθερών τμημάτων της εγκατάστασης (σωληνώσεων, καλωδίων, λεβήτων, φούρνων, δεξαμενών, κλπ). Δυναμικά στοιχεία είναι αυτά, που η εμφάνισή τους στην οθόνη αλλάζει ανάλογα με τις τιμές των σημάτων της διαδικασίας ή ανάλογα με τις ενέργειες του χειριστή. Συνηθισμένα παραδείγματα δυναμικών στοιχείων είναι η απεικόνιση της κατάστασης ενός διακόπτη, της στάθμης μιας δεξαμενής, της θερμοκρασίας ενός λέβητα, των ωρών λειτουργίας μιας αντλίας, κ.λ.π. 1 1 Μερικές φορές στα δυναμικά στοιχεία της οθόνης συμπεριλαμβάνουμε και όσα αντικείμενα αντιδρούν με κάποιο τρόπο όταν ο χρήστης κάνει «κλικ» πάνω τους με το ποντίκι, έστω και άν η μορφή τους δεν μεταβάλλεται. 3

Προφανώς το μέγεθος μιας οθόνης υπολογιστή είναι πολύ μικρό για να μπορεί να χωρέσει ολόκληρη την εικόνα μιας εγκατάστασης με όλες τις λεπτομέρειες, που μπορεί να χρειαστούν οι χρήστες. Για το λόγο αυτό τα προγράμματα SCADA χρησιμοποιούν διάφορες τεχνικές τμηματικής παρουσίασης της πληροφορίας στην οθόνη. Μια συνηθισμένη τέτοια τεχνική είναι η δημιουργία μιας κεντρικής οθόνης, η οποία εμφανίζει τη συνολική εικόνα της εγκατάστασης, με ελάχιστες πληροφορίες για τα επιμέρους τμήματα. Από την οθόνη αυτή ο χρήστης μπορεί να επιλέξει ένα συγκεκριμένο τμήμα και να καλέσει μια άλλη οθόνη, η οποία εμφανίζει πιο αναλυτικά στοιχεία για τις βαθμίδες του τμήματος αυτού. Αν χρειάζεται, ο χρήστης μπορεί να προχωρήσει σε περισσότερο βάθος, ζητώντας πληροφορίες για μια από τις μηχανές του συγκεκριμένου τμήματος, για έναν από τους αισθητήρες, που βρίσκονται στη συγκλεκριμένη μηχανή, κ.οκ. Υπάρχει δηλαδή ένα ολόκληρο σύνολο από οθόνες, καθεμιά από τις οποίες εμφανίζει ένα διαφορετικό τμήμα της εγκατάστασης και οι οποίες είναι δομημένες ιεραρχικά με τρόπο ώστε τα διαφορετικά επίπεδα της ιεραρχίας να αντιστοιχούν σε διαφορετικά επίπεδα λεπτομέρειας της παρουσίασης. Μια άλλη πολύ συνηθισμένη τεχνική είναι η απεικόνιση τμημάτων της εγκατάστασης με τη βοήθεια ενός «παραθύρου», το οποίο μπορεί να μετακινείται ελεύθερα στο συνολικό διάγραμμα της εγκατάστασης. Στην οθόνη του χειριστή φαίνεται πάντα το περιεχόμενο του παραθύρου. Το μέγεθος του παραθύρου είναι δυνατόν να αυξομειώνεται με χρήση λειτουργιών μεγέθυνσης/σμίκρυνσης (zoom). Η λειτουργία μετακίνησης του παραθύρου αναφέρεται συχνά ως pan ή panning. Πολλά συστήματα SCADA περιλαμβάνουν και το λεγόμενο «χάρτη πλοήγησης» (navigation map). Πρόκειται για μια μικρογραφία του συνολικού διαγράμματος της εγκατάστασης, που εμφανίζεται συνήθως σε μια γωνιά της οθόνης και δείχνει κάθε φορά την τρέχουσα θέση και το μέγεθος του παραθύρου του χρήστη. Μια άλλη λειτουργία, που σχετίζεται με την αλλαγή μεγέθους του παραθύρου (zoom), είναι το λεγόμενο decluttering. Με τον όρο αυτό εννοούμε τη δυνατότητα του συστήματος να εμφανίζει στο χειριστή διαφορετικά επίπεδα λεπτομέρειας, ανάλογα με την ανάλυση της εικόνας. Ακριβέστερα, όσο περισσότερο ο χειριστής επικεντρώνεται σε ένα κομμάτι της εγκατάστασης κάνοντας zoom στην εικόνα, τόσο περισσότερα στοιχεία βλέπει για το κομάτι αυτό. Για παράδειγμα, η συνολική εικόνα μιας εγκατάστασης μπορεί να εμφανίζει κάποιους λέβητες με τις σωληνώσεις, που τους συνδέουν, και να εμφανίζει σχηματικά τη στάθμη του υγρού σε κάθε λέβητα. Κάνοντας zoom σε ένα τμήμα μπορεί να βλέπουμε επιπλέον και τις βαλβίδες, που υπάρχουν στο τμήμα αυτό. Μεγαλώνοντας περισσότερο την ανάλυση μπορεί να βλέπουμε επιπλέον και τη ροή κάθε βαλβίδας. Αν συνεχίσουμε να μεγαλώνουμε την ανάλυση μπορεί να δούμε κατά σειρά και τις ενδείξεις πίεσης και θερμοκρασίας, τα τεχνικά χαρακτηριστικά των βαλβίδων, κ.λ.π. 2 Όπως προαναφέραμε, σε ένα σύγχρονο SCADA, τα προγράμματα του κέντρου ελέγχου δεν κατασκευάζονται από το μηδέν αλλά συνθέτονται από προκατασκευασμένα κομάτια λογισμικού, που υποστηρίζουν τυποποιημένους τρόπους διασύνδεσης. Οι κατασκευαστές δεν παράγουν έτοιμες λύσεις αλλά ευέλικτες πλατφόρμες, που μπορούν να προσαρμόζονται στις ανάγκες και τις απαιτήσεις της κάθε εφαρμογής. Η τελική λύση δημιουργείται για κάθε πρόβλημα ξεχωριστά, διαμορφώνοντας, συμπληρώνοντας ή διασυνδέοντας τμήματα από τις βασικές αυτές πλατφόρμες. Οι εργασία αυτή μπορεί να γίνεται είτε από τον ίδιο τον κατασκευαστή της πλατφόρμας είτε από μια ξεχωριστή εταιρεία ανάπτυξης 2 Το παράδειγμα αυτό περιλαμβάνεται στο πρόγραμμα επίδειξης του Genesis, που χρησιμοποιείται στο εργαστήριο του μαθήματος. 4

ολοκληρωμένων συστημάτων (system integrator) είτε από τον τελικό χρήστη. Έτσι το κέντρο ελέγχου (και κατ επέκταση το όλο σύστημα SCADA) μπορεί να «χτίζεται» κατά παραγγελία για κάθε εφαρμογή, επιλέγοντας κάθε φορά από ένα σύνολο των υπαρχόντων τμημάτων εκείνα, τα οποία απαιτούνται για την κάλυψη των αναγκών της συγκεκριμένης εφαρμογής. Για το λόγο αυτό όλα τα προγράμματα SCADA (π.χ. το Genesis της εταιρείας Iconics, που παρουσιάζεται στο εργαστήριο του μαθήματος, το WinCC της εταιρείας Siemens κ.οκ.) περιλαμβάνουν και ένα περιβάλλον ανάπτυξης εφαρμογών, με το οποίο μπορεί να γίνει η σύνθεση και η διαμόρφωση των οθονών του κάθε συγκεκριμένου συστήματος. Το περιβάλλον ανάπτυξης επιτρέπει στο σχεδιαστή να τοποθετεί και να διαμορφώνει τα διάφορα στατικά και δυναμικά στοιχεία της κάθε οθόνης. Επιπλέον είναι συνήθως εφοδιασμένο με κάποιο είδος γλώσσας προγραμματισμού, με τη βοήθεια της οποίας μπορούν να υλοποιούνται σύνθετες δυναμικές συμπεριφορές, να προγραμματίζονται αυτόματες ενέργειες του συστήματος και να εκτελούνται αλγόριθμοι ελέγχου. Χάρη στις δυνατότητές τους αυτές τα προγράμματα SCADA επιτρέπουν στο σχεδιαστή της κάθε εφαρμογής να δημιουργεί με εύκολο και γρήγορο τρόπο εκείνες ακριβώς τις οθόνες, που χρειάζονται οι χειριστές της συγκεκριμένης εφαρμογής. 1.3 Ανάγκη για Τεχνολογίες Ολοκλήρωσης στα SCADA Τα SCADA είναι συνήθως εξειδικευμένα συστήματα, που σχεδιάζονται για να εξυπηρετούν πολύ συγκεκριμένες εφαρμογές (π.χ. την αυτοματοποίηση ενός εργοστασίου κατασκευής χαρτιού). Είναι σπάνιες οι περιπτώσεις, που ένα σύστημα μπορεί να εξυπηρετήσει και άλλες εφαρμογές εκτός από αυτή, για την οποία σχεδιάστηκε, χωρίς να υποστεί αλλαγές ή τροποποιήσεις. Από την άλλη μεριά, το λογισμικό του κέντρου ελέγχου ενός SCADA χρειάζεται συχνά να είναι εξαιρετικά πολύπλοκο, καθώς πρέπει να παρακολουθεί σύνθετες διαδικασίες, να λαμβάνει υπόψιν όλες τις περιπτώσεις, που μπορεί να συμβούν στην πράξη και να δίνουν στον κάθε χρήστη την πληροφορία, που χρειάζεται, τη στιγμή, που τη χρειάζεται και με τέτοιο τρόπο ώστε να μπορεί να την καταλάβει και να την αξιοποιήσει. Για παράδειγμα, δεν έχει νόημα να παρουσιάζει κανείς στον υπεύθυνο ασφαλείας μιας εγκατάστασης μια ατέλειωτη σειρά από αριθμούς, που παριστάνουν τις μετρήσεις όλων των μεταβλητών ανά πεντάλεπτο και να περιμένει από αυτόν να δεί αν κάποια τιμή έχει ξεφύγει από τα όρια ασφαλούς λειτουργίας. Για να είναι πραγματικά χρήσιμο ένα αυτόματο σύστημα θα πρέπει να ελέγχει τις τιμές, που μετράει και να ενημερώνει το προσωπικό μόνο όταν εντοπίσει κάποιο πρόβλημα. Ένα άλλο χαρακτηριστικό των SCADA είναι ότι πρέπει να μπορούν να υποστηρίζουν ένα μεγάλο αριθμό από διαφορετικές συσκευές πεδίου, που συναντούνται στην πράξη (PLC, ενσωματωμένα συστήματα, βιομηχανικά δίκτυα, προηγμένα αισθητήρια όργανα, κ.λ.π). Οι διαφορετικές αυτές συσκευές μπορεί να έχουν ποικίλα τεχνικά χαρακτηριστικά και να χρησιμοποιούν διάφορα πρωτόκολλα επικοινωνίας. Επιπλέον ένα σύστημα SCADA πρέπει να μπορεί να τροποποιείται εύκολα ώστε να παρακολουθεί τις τεχνολογικές εξελίξεις και να προσαρμόζεται κάθε φορά στα καινούργια δεδομένα της αγοράς (νέα τεχνολογικά πρότυπα ή πρωτόκολλα επικοινωνίας, καινούργιοι κανονισμοί ασφαλείας, κ.λ.π.). Κάτι πολύ σημαντικό είναι οι τροποποιήσεις και οι προσαρμογές αυτές να μπορούν να γίνονται με όσο το δυνατόν λιγότερες επεμβάσεις στον κώδικα λογισμικού του συστήματος. Οι αλλαγές του λογισμικού είναι διαδικασία δαπανηρή και χρονοβόρα καθώς απαιτούν ανθρώπους με πολύ εξειδικευμένες γνώσεις και μεγάλο αριθμό δοκιμών προκειμένου 5

να αποφευχθούν ανεπιθύμητες παρενέργειες όπως η εισαγωγή λογικών σφαλμάτων, που μπορεί να προκαλέσουν προβλήματα στην αξιοπιστία και την ασφαλή λειτουργία του συστήματος. Από την παραπάνω ανάλυση είναι προφανές ότι όσο καλή και αν είναι μια εφαρμογή λογισμικού (δηλαδή ένα πρόγραμμα φτιαγμένο για να λειτουργεί με ένα συγκεκριμένο τρόπο) δεν μπορεί να εξυπηρετήσει από μόνη της τις ανάγκες ενός SCADA κάποιας πολυπλοκότητας. Για να μπορεί ένα λογισμικό να χρησιμεύσει ως κέντρο ελέγχου ενός τέτοιου SCADA και ταυτόχρονα να έχει ένα λογικό κόστος, είναι πολύ σημαντικό να συγκροτείται από ανεξάρτητες μονάδες, καθεμιά από τις οποίες (α) εξυπηρετεί μια συγκεκριμένη λειτουργία, (β) μπορεί να τροποποιηθεί αλλάζοντας κάποιες παραμέτρους και όχι τον κώδικα και (γ) συνεργάζεται με τις άλλες μονάδες χρησιμοποιώντας γνωστά πρωτόκολλα και διαδικασίες. Όπως αναφέραμε και στην εισαγωγή, αυτό επιτυγχάνεται με τη χρήση κατάλληλων τεχνολογιών ολοκλήρωσης. Στο χώρο των Windows οι πιο διαδεδομένες τέτοιες τεχνολογίες είναι αυτές, που βασίζονται στο πρότυπο COM της Microsoft (OLE, Automation, ActiveX). Οι τεχνολογίες αυτές είναι γενικής χρήσεως, μπορούν δηλαδή να χρησιμοποιηθούν σε διάφορα είδη λογισμικού. Ειδικά για τα συστήματα SCADA έχει αναπτυχθεί και η τεχνολογία OPC (OLE for Process Control), η οποία βασίζεται επίσης στο πρότυπο COM. Ένα κοινό χαρακτηριστικό των τεχνολογιών αυτών είναι ότι επιτρέπουν σε ετερογενείς μονάδες υλικού ή λογισμικού από διάφορους κατασκευαστές να συνδέονται μεταξύ τους και να σχηματίζουν ολοκληρωμένα συστήματα. Αυτό έχει ως αποτέλεσμα να απλοποιείται σημαντικά η κατασκευή των συστημάτων, καθώς μεγάλο μέρος των εργασιών σχεδίασης και υλοποίησης ανάγεται στην αναζήτηση και επιλογή των κατάλληλων έτοιμων μονάδων από το εμπόριο. Έτσι είναι δυνατόν να κατασκευαστούν σε σύντομο χρονικό διάστημα και με μικρό σχετικά κόστος πολύπλοκα και εξειδικευμένα συστήματα, τα οποία λειτουργούν με ασφάλεια και αξιοπιστία και είναι πλήρως προσαρμοσμένα στις ανάγκες και τις ιδιαιτερότητες της κάθε εφαρμογής. 1.4 Η Τεχνολογία COM Η τεχνολογία COM συνδυάζει δύο βασικές φιλοσοφίες, που κυριαρχούν στην τεχνολογία του λογισμικού την τελευταία δεκαπενταετία: τον αντικειμενοστρεφή προγραμματισμό και τη δημιουργία επαναχρησιμοποιήσιμου κώδικα. Οι δύο αυτές φιλοσοφίες εντάσσονται στα πλαίσια μιας γενικότερης προσπάθειας για την αντιμετώπιση της αύξησης της πολυπλοκότητας των εφαρμογών, η οποία μεγαλώνει πολύ το κόστος των προγραμμάτων ενώ ταυτόχρονα μειώνει και την αξιοπιστία τους. Με τον αντικειμενοστρεφή προγραμματισμό προσπαθούμε να λύσουμε ένα σύνθετο πρόβλημα χωρίζοντάς το σε απλούστερα υποπροβλήματα, καθένα από τα οποία αντιστοιχεί σε ένα ανεξάρτητο αντικείμενο λογισμικού. Ο επαναχρησιμοποιήσιμος κώδικας, από την άλλη μεριά, αφορά τμήματα λογισμικού, που έχουν κατασκευαστεί με συγκεκριμένη τυποποίηση, η οποία τους επιτρέπει να χρησιμοποιούνται από πολλές διαφορετικές εφαρμογές. Οι δύο αυτές φιλοσοφίες δεν είναι εντελώς ανεξάρτητες μεταξύ τους καθώς ο επαναχρησιμοποιήσιμος κώδικας αποτελείται συνήθως από αντικείμενα. Το COM (Component Object Model) είναι η πιο καθιερωμένη από τις αντικειμενοστρεφείς τεχνολογίες επαναχρησιμοποιήσιμου κώδικα. Με απλά λόγια 6

μπορούμε να πούμε ότι το COM είναι ένας τυποποιημένος τρόπος για να φτιάχνουμε αντικείμενα λογισμικού, τα οποία να μπορούν να συνεργάζονται μεταξύ τους έστω και αν έχουν γραφτεί σε διαφορετικές γλώσσες προγραμματισμού ή διαφορετικά περιβάλλοντα ανάπτυξης. Το COM αναπτύχθηκε από τη Microsoft για τα λειτουργικά συστήματα της οικογένειας των Windows. Αντίστοιχες τεχνολογίες, που έχουν σχεδιαστεί από διεθνείς οργανισμούς τυποποίησης ή ενώσεις χρηστών δεν θέτουν περιορισμούς ως προς το λειτουργικό σύστημα (π.χ. μπορούν να χρησιμοποιηθούν και στο Unix). Η πιο γνωστή από τις τεχνολογίες αυτές είναι το CORBA (Component Object Request Broker Architecture) του οργανισμού Object Management Group. Στην πράξη όμως το COM έχει κατορθώσει να καθιερωθεί πολύ περισσότερο από τις άλλες τεχνολογίες. Αυτό δεν οφείλεται μόνο στα τεχνικά χαρακτηριστικά του αλλά και στη συστηματική προσπάθεια της Microsoft να το προωθήσει εμπορικά και να το υποστηρίξει ενσωματώντάς το σε όλα τα προϊόντα της. Η μεγάλη επιτυχία του COM ανάγκασε πολλούς κατασκευαστές να αναπτύξουν προϊόντα, που επιτρέπουν σε εφαρμογές άλλων λειτουργικών συστημάτων να συνεργάζονται με αντικείμενα Windows βασισμένα στο COM. Τέτοια προϊόντα υπάρχουν, για παράδειγμα, για τα λειτουργικά συστήματα ΑΙΧ και OS/400 της IBM, Solaris της SUN, OpenVMS, HP/UX, SINIX της Siemens Nixdorf, Linux κ.α. Αν και αποτελεί πνευματική ιδιοκτησία της Microsoft, το COM είναι ένα ανοιχτό πρότυπο, που μπορεί να χρησιμοποιηθεί από οποιονδήποτε. Οι πλήρεις προδιαγραφές του υπάρχουν στο διαδίκτυο και είναι στη διάθεση του κάθε ενδιαφερόμενου. Οι προδιαγραφές αυτές απευθύνονται κυρίως σε προγραμματιστές και περιγράφουν με λεπτομέρειες τα χαρακτηριστικά, που θα πρέπει να έχει ένα αντικείμενο λογισμικού για να μπορεί να συνεργαστεί με άλλα αντικείμενα σύμφωνα με τους κανόνες του COM. Η ιδέα του να διασυνδέονται διαφορετικές εφαρμογές των Windows έτσι ώστε να αποτελούν ένα ολοκληρωμένο σύστημα είναι αρκετά παλιά. Πριν εμφανιστεί το COM η Microsoft είχε εισάγει την τεχνολογία OLE (Object Linking and Embedding). Το OLE επιτρέπει στο χρήστη να τοποθετεί "αντικείμενα περιεχομένου" (content objects), που έχουν δημιουργηθεί από μια εφαρμογή μέσα σε "έγγραφα" (documents) μιας άλλης εφαρμογής. Για παράδειγμα, το OLE επιτρέπει την ενσωμάτωση ενός φύλλου εργασίας του Excel μέσα σε ένα κείμενο του Word. Στην περίπτωση αυτή το Excel ενεργεί ως εξυπηρετητής OLE (OLE server), που προσφέρει το αντικείμενο περιεχομένου "φύλλο εργασίας" και το Word ενεργεί ως "περίβλημα OLE" (OLE container), που "φιλοξενεί" (host) το αντικείμενο. Το πρωτόκολλο του OLE είναι αρκετά πολύπλοκο και περιγράφει πώς ένας εξυπηρετητής OLE μπορεί να μιλάει με ένα περίβλημα OLE και αντίστροφα. Η αρχική μορφή του OLE (έκδοση 1.0) βασιζόταν στην τεχνολογία DDE (Dynamic Data Exchange). Το DDE ήταν ένας μηχανισμός των Windows, που επέτρεπε σε μια εφαρμογή να στέλνει δεδομένα ή εντολές σε μια άλλη εφαρμογή (υπό την προϋπόθεση φυσικά ότι και οι δύο εφαρμογές είχαν σχεδιαστεί έτσι ώστε να υποστηρίζουν το DDE). Με τον καιρό αποδείχτηκε ότι το DDE δεν ήταν όσο ισχυρό χρειαζόταν. Οι δυνατότητές του ήταν πολύ περιορισμένες και δεν μπορούσαν να καλύψουν τις ανάγκες της αγοράς. Για το λόγο αυτό οι ειδικοί της Microsoft επινόησαν το COM. Ταυτόχρονα εμφάνισαν και μια νέα έκδοση του OLE (έκδοση 2.0), που δεν χρησιμοποιούσε DDE για την επικοινωνία μεταξύ των διαφορετικών εφαρμογών αλλά στηριζόταν στο καινούργιο πρότυπο COM. Για αρκετό καιρό μάλιστα η Microsoft επέμενε να χρησιμοποιεί τον όρο OLE για κάθε νέα τεχνολογία, που βασιζόταν στο COM. Έτσι μιλούσε για OLE 7

Automation, OLE Controls 3, κ.ο.κ. Σύμφωνα με τα τότε λεγόμενα της Microsoft το OLE δεν ήταν πια ένα ακρώνυμο αλλά ένας νέος τεχνικός όρος, ο οποίος περιέγραφε συνολικά όλες τις τεχνολογίες, που χρησιμοποιούσαν το πρότυπο COM. Η κατάσταση άλλαξε γύρω στο 1995 οπότε η Microsoft καθιέρωσε τα ActiveX και δήλωσε ότι o όρος OLE επανέρχεται στην αρχική του σημασία (Object Linking and Embedding). Αποτέλεσμα όλης αυτής της ιστορίας ήταν να δημιουργηθεί μια σύγχυση και πολλοί τεχνικοί να χρησιμοποιούν εσφαλμένα τον όρο OLE σαν συνώνυμο του COM. Για να ξεκαθαρίσουμε λοιπόν την κατάσταση τονίζουμε ότι OLE και COM είναι δύο διαφορετικά πράγματα. Το COM είναι ένα μοντέλο αντικειμένων (object model), δηλαδή μια τυποποίηση, στην οποία στηρίζονται τεχνολογίες όπως το Automation ή το ActiveX. To OLE είναι ο μηχανισμός, που μας επιτρέπει να ενσωματώνουμε π.χ. ένα φύλλο εργασίας του Excel μέσα σε ένα κείμενο του Word. Κάθε αντικείμενο COM παρέχει στις διάφορες εφαρμογές, που θέλουν να το χρησιμοποιήσουν, έναν αριθμό από μεθόδους. Όπως είναι γνωστό, ο όρος "μέθοδοι" στον αντικειμενοστρεφή προγραμματισμό δηλώνει τα υποπρογράμματα (συναρτήσεις), που υλοποιούν τις λειτουργίες ενός αντικειμένου. Οι μέθοδοι ενός αντικειμένου COM είναι οργανωμένες σε μια ή περισσότερες ομάδες, που ονομάζονται interfaces. Συνήθως οι μέθοδοι, που ανήκουν στο ίδιο interface, υλοποιούν λειτουργίες, που έχουν κάποιο κοινό χαρακτηριστικό (π.χ. ένα interface μπορεί να περιλαμβάνει τις μεθόδους, που εκτελούν αριθμητικές πράξεις, ένα άλλο interface τις μεθόδους, που ζωγραφίζουν κάτι στην οθόνη, κ.ο.κ.). Σχηματικά τα interfaces ενός αντικειμένου COM παριστάνονται με τον τρόπο, που δείχνει το σχ. 1. Interfaces Αντικείμενο COM Σχήμα 1: Ένα αντικείμενο COM και τα interfaces του Η Microsoft έχει προκαθορίσει πάνω από 100 διαφορετικά interfaces, που μπορούν να υποστηρίζονται από οποιοδήποτε αντικείμενο COM. Τα interfaces αυτά ονομάζονται standard interfaces. Επιπλέον οι προγραμματιστές COM είναι ελεύθεροι να ορίζουν και οτιδήποτε άλλα interfaces χρειάζονται για την εφαρμογή τους. Τα interfaces αυτά ονομάζονται custom interfaces. Ένα αντικείμενο COM μπορεί να χρησιμοποιεί είτε standard interfaces είτε custom interfaces είτε ένα συνδυασμό από standard και custom interfaces. Όλα τα αντικείμενα COM πρέπει να υλοποιούν ένα ειδικό standard interface, που ονομάζεται IUnknown 4. To IUnknown περιλαμβάνει τρείς μεθόδους: την QueryInterface, την AddRef και την Release. H QueryInterface μας επιστρέφει ένα δείκτη (pointer) προς ένα άλλο interface του αντικειμένου. Με απλά λόγια μπορούμε να πούμε ότι ο δείκτης αυτός δεν είναι τίποτε άλλο παρά η διεύθυνση μιας περιοχής μνήμης, στην οποία μπορούμε να βρούμε τις διευθύνσεις του κώδικα των μεθόδων του interface ώστε να μπορέσουμε να τις καλέσουμε. Οι μέθοδοι AddRef και Release 3 Οι τεχνολογίες αυτές περιγράφονται συνοπτικά παρακάτω. 4 Το να ξεκινούν τα ονόματα των interfaces με ένα κεφαλαίο I αποτελεί τη συνηθισμένη πρακτική στον προγραμματισμό των αντικειμένων COM. 8

διαχειρίζονται ένα μετρητή, που μας δείχνει σε κάθε στιγμή πόσα προγράμματα χρησιμοποιούν το συγκεκριμένο αντικείμενο COM. Όταν ο μετρητής αυτός φτάσει στο μηδέν σημαίνει ότι το αντικείμενο COM δεν χρησιμοποιείται από κανένα πρόγραμμα και συνεπώς μπορεί να απομακρυνθεί από τη μνήμη του υπολογιστή. Κάθε interface χαρακτηρίζεται από ένα μοναδικό αριθμό 128 bit, που ονομάζεται IID (Interface Identifier). Επίσης κάθε κλάση (class 5 ) αντικειμένων COM χαρακτηρίζεται από έναν παρόμοιο αριθμό 128 bit, που ονομάζεται CLSID (class ID). Στη βιβλιογραφία του προγραμματισμού COM χρησιμοποιείται ακόμη ο όρος GUID (globally unique identifier), ο οποίος δηλώνει γενικά έναν αριθμό 128 bit, που χρησιμεύει ως ταυτότητα (identifier) για κάποιο είδος οντοτήτων. Με άλλα λόγια τόσο τα IID όσο και τα CLSID είναι ειδικές περιπτώσεις GUID. Το πρότυπο COM βασίζεται στην αρχιτεκτονική πελάτη/εξυπηρετητή (client/server). Το αντικείμενο COM είναι ο εξυπηρετητής ενώ το πρόγραμμα, που καλεί τις μεθόδους του COM, είναι ο πελάτης. Ακριβέστερα, η Microsoft ορίζει ως εξυπηρετητή COM ένα εκτελέσιμο αρχείο, που υλοποιεί ένα αντικείμενο COM. To registry των windows και συγκεκριμένα η περιοχή HKEY_CLASSES_ROOT\CLSID περιέχει πληροφορίες, που συσχετίζουν τα CLSID με τα εκτελέσιμα αρχεία των αντικειμένων COM. Υπάρχουν δύο βασικές παραλλαγές εξυπηρετητών COM: οι inprocess servers και οι out-of-process servers. Οι in-process servers είναι αρχεία τύπου DLL (dynamically linked libraries). Ονομάζονται in-process διότι εκτελούνται στην ίδια διαδικασία (process 6 ) με τον πελάτη (με άλλα λόγια δηλαδή μοιράζονται τον ίδιο χώρο μνήμης με τον πελάτη). Αντίθετα, οι out-of-process servers είναι αρχεία EXE, που εκτελούνται σε ξεχωριστή διαδικασία από τον πελάτη. Οι in-process servers είναι συνήθως πολύ πιο γρήγοροι από τους out-of-process servers. Η κλήση μιας μεθόδου ενός in-process server δεν διαφέρει πολύ από την κλήση μιας υπορουτίνας του πελάτη. Αντίθετα, η κλήση μιας μεθόδου ενός out-of-process server μπορεί να είναι μέχρι και 1000 φορές πιο αργή, καθώς για να πραγματοποιηθεί πρέπει να ενεργοποιηθούν διάφορες ρουτίνες του λειτουργικού συστήματος, που διαχειρίζονται την επικοινωνία μεταξύ διαφορετικών διαδικασιών. Από την άλλη μεριά, οι out-ofprocess servers παρέχουν μεγαλύτερη ασφάλεια καθώς ο πελάτης και ο εξυπηρετητής χρησιμοποιούν διαφορετικές περιοχές της μνήμης. Η έκδοση 4.0 των Windows NT εισήγαγε μια νέα τεχνολογία, που ονομάστηκε Distributed COM (DCOM). Το DCOM επιτρέπει στους out-of-process εξυπηρετητές COM να εκτελούνται σε διαφορετικούς υπολογιστές από αυτόν του πελάτη. Αργότερα το service pack 2 των Windows NT 4.0 επέτρεψε και στους οι in-process εξυπηρετητές COM να εκτελούνται σε διαφορετικούς υπολογιστές χρησιμοποιώντας έναν μηχανισμό, ο οποίος βασίζεται σε κάποια ειδικά αρχεία EXE, που ονομάζονται "τοποτηρητές" (surrogate) και επιτρέπουν την εκτέλεση DLLs από απομακρυσμένους υπολογιστές. Για να διακρίνουν τους out-of-proc servers, που εκτελούνται στον ίδιο υπολογιστή με τον πελάτη από αυτούς, που εκτελούνται σε διαφορετικό υπολογιστή, οι προγραμματιστές COM χρησιμοποιούν συχνά του όρους τοπικός εξυπηρετητής (local server) και απομακρυσμένος εξυπηρετητής (remote server). Έτσι λοιπόν έχουμε τρείς κατηγορίες εξυπηρετητών COM: 5 Η έννοια του class θεωρείται γνωστή από τον αντικειμενοστρεφή προγραμματισμό. 6 Υπενθυμίζεται ότι στην ορολογία του λογισμικού μια διαδικασία (process) είναι ένα πρόγραμμα, που έχει φορτωθεί στη μνήμη του υπολογιστή. 9

(α) in-process servers, που εκτελούνται στην ίδια διαδικασία με τον πελάτη (δηλαδή μοιράζονται τον ίδιο χώρο μνήμης). (β) τοπικούς out-of-process servers, που εκτελούνται σε διαφορετική διαδικασία του ίδιου υπολογιστή. (γ) απομακρυσμένους out-of-process servers, που εκτελούνται σε διαφορετικό υπολογιστή. Ένα άλλο σημείο, που θα πρέπει να τονιστεί είναι ότι η δομή ενός τοπικού εξυπηρετητή out-of-process δεν διαφέρει σε τίποτα από αυτή ενός απομακρυσμένου. Αντίθετα ένας εξυπηρετητής τύπου in-process διαφέρει σημαντικά από έναν εξυπηρετητή τύπου out-of-process. Όπως προαναφέραμε, η κλήση μιας μεθόδου ενός εξυπηρετητή in-process δεν διαφέρει πολύ από την κλήση μιας υπορουτίνας του πελάτη. Αντίθετα, όταν ένας πελάτης καλεί μια μέθοδο ενός εξυπηρετητή out-of-process, ενεργοποιούνται οι μηχανισμοί του COM, οι οποίοι καθιστούν δυνατή την επικοινωνία μεταξύ των διαφορετικών διαδικασιών. Η βασική ιδέα των μηχανισμών αυτών εικονίζεται στο σχ. 2. Χώρος μνήμης διαδικασίας πελάτη Χώρος μνήμης διαδικασίας εξυπηρετητή Πελάτης Proxy Stub Εξυπηρετητής Σχήμα 2: Ο βασικός μηχανισμός κλήσης μιας μεθόδου ενός out-of-process εξυπηρετητή COM Όπως βλέπουμε, στο χώρο μνήμης της διαδικασίας του πελάτη υπάρχει ένα αντικείμενο proxy, που έχει τα ίδια interfaces με τον εξυπηρετητή. Αντίστοιχα, στο χώρο μνήμης της διαδικασίας του εξυπηρετητή, υπάρχει ένα άλλο αντικείμενο (stub), που επικοινωνεί με τον proxy χρησιμοποιώντας κάποιο μηχανισμό IPC (inter-process communication). Όταν ο πελάτης θέλει να χρησιμοποιήσει κάποια από τις μεθόδους του εξυπηρετητή, καλεί την αντίστοιχη μέθοδο του proxy. Ο proxy μεταβιβάζει την κλήση στο stub, το οποίο καλεί τη μέθοδο του εξυπηρετητή. Μετά την ολοκλήρωση της μεθόδου το stub επιστρέφει το αποτέλεσμα στον proxy και ο proxy στον πελάτη. Το COM περιέχει έτοιμα αντικείμενα proxy και stub για όλα τα standard interfaces. Στην περίπτωση, που ο εξυπηρετητής υλοποιεί κάποια custom interfaces, τα αντικείμενα proxy και stub πρέπει να δημιουργηθούν από τον προγραμματιστή. Για το σκοπό αυτό η Microsoft χρησιμοποιεί μια ειδική γλώσσα, που ονομάζεται IDL (Interface Definition Language). 1.5 Η Τεχνολογία Automation Όπως γίνεται φανερό από την παραπάνω παρουσίαση, το βασικό πρόβλημα του COM είναι ότι είναι αρκετά δύσχρηστο. Για να το χρησιμοποιήσει κανείς χρειάζεται να ξέρει ένα πλήθος τεχνικές λεπτομέρειες για ένα αριθμό από interfaces, καθένα από τα οποία αποτελείται από πολλές διαφορετικές συναρτήσεις. Για το λόγο αυτό η Microsoft έχει δημιουργήσει μια ολόκληρη οικογένεια από τεχνολογίες, που 10

βασίζονται στο COM αλλά είναι πιο φιλικές προς το χρήστη. Οι τεχνολογίες αυτές επιτρέπουν στους προγραμματιστές των εφαρμογών να χρησιμοποιούν το COM χωρίς να γνωρίζουν όλες τις τεχνικές του λεπτομέρειες. Η βασική τεχνολογία της κατηγορίας αυτής είναι το automation. Το automation επιτρέπει στους προγραμματιστές να επικοινωνούν με αντικείμενα COM χρησιμοποιώντας απλές εντολές σε συνηθισμένες γλώσσες προγραμματισμού. Αρχικά η μόνη τέτοια γλώσσα προγραμματισμού, που συνεργαζόταν με την τεχνολογία automation ήταν η Visual Basic 7. Σήμερα η τεχνολογία automation υποστηρίζεται από τις περισσότερες γλώσσες και περιβάλλοντα προγραμματισμού, που χρησιμοποιούνται στα Windows 8 (Delphi, APL, Java, JScript, VBScript, Perl, Php, Python, Ruby, Matlab, κ.λ.π.). Επιπλέον μπορεί κανείς να χρησιμοποιήσει το automation και από τις γλώσσες C ή С++. Κάτι τέτοιο όμως δεν συνιστάται, καθώς η σύνταξη των εντολών είναι αρκετά περίπλοκη και απαιτεί εξιδεικευμένες γνώσεις και εμπειρία ανάλογη με αυτή του COM. Αντίθετα, οι γλώσσες και τα περιβάλλοντα, που προαναφέραμε, αποκρύπτουν την πολυπλοκότητα και προσφέρουν στον προγραμματιστή έναν εύκολο τρόπο για να χρησιμοποιεί τις δυνατότητες των εξυπηρετητών automation 9. Οι εξυπηρετητές automation είναι στην πραγματικότητα εξυπηρετητές COM, που μπορεί να είναι είτε in-process είτε out-of-process. Το ιδιαίτερο χαρακτηριστικό τους είναι ότι υλοποιούν ένα συγκεκριμένο interface, που ονομάζεται IDispatch. H σημαντικότερη από της μεθόδους του IDispatch είναι η Invoke, η οποία επιτρέπει στους πελάτες να καλούν μεθόδους ή να διαχειρίζονται ιδιότητες του εξυπηρετητή. Για το σκοπό αυτό κάθε μέθοδος και κάθε ιδιότητα ενός εξυπηρετητή automation χαρακτηρίζεται από έναν ακέραιο αριθμό, που ονομάζεται dispatch ID (ή dispid). Έτσι όταν ο πελάτης θέλει να επικοινωνήσει με τον εξυπηρετητή, καλεί τη μέθοδο Invoke δίνοντάς της σαν παράμετρο το dispid της συγκεκριμένης μεθόδου ή ιδιότητας, που θέλει να χρησιμοποιήσει. Μια άλλη παράμετρος της Invoke oρίζει αν ο πελάτης θέλει να καλέσει μια μέθοδο του εξυπηρετητή, να διαβάσει μια ιδιότητα ή να γράψει μια ιδιότητα. Τα dispid των διαφόρων μεθόδων και ιδιοτήτων μπορούν να βρεθούν από μια άλλη μέθοδο του IDispatch interface, που ονομάζεται GetIDsOfNames. H μέθοδος αυτή δέχεται σαν παράμετρο το συμβολικό όνομα μιας μεθόδου ή μιας μεταβλητής και επιστρέφει σαν αποτέλεσμα το αντίστοιχο dispid. Το πλεονέκτημα της τεχνολογίας automation είναι ότι ο συνηθισμένος προγραμματιστής δεν χρειάζεται να ξέρει τίποτα για όλη αυτή τη διαδικασία. Όλος ο χειρισμός των interfaces και των μεθόδων του COM γίνεται αυτόματα από τo περιβάλλον της γλώσσας προγραμματισμού. Όπως είπαμε, η τεχνολογία COM είναι καθαρά αντικειμενοστρεφής (χρησιμοποιεί αποκλειστικά και μόνον αντικείμενα λογισμικού). Το ίδιο ισχύει και για όλες τις τεχνολογίες, που στηρίζονται στο COM. Βασική λοιπόν προϋπόθεση για 7 Και η VBA (Visual Basic for Applications), μια έκδοση της Visual Basic, που είναι ενσωματωμένη σε άλλες εφαρμογές (π.χ. Excel, Word, Powerpoint, κλπ) και χρησιμεύει για τον προγραμματισμό μακρο-εντολών, που αυτοματοποιούν την εκτέλεση διαφόρων εργασιών με τις εφαρμογές αυτές. Από αυτή τη δυνατότητα αυτοματοποίησης της λειτουργίας των διαφόρων εφαρμογών πήρε και το όνομά της η τεχνολογία automation. 8 Σε κάποια από τα περιβάλλοντα αυτά η δυνατότητα υποστήριξης της τεχνολογίας Automation μπορεί να απαιτεί την εγκατάσταση πρόσθετου λογισμικού. Ειδικά στη Java, η απευθείας ενσωμάτωση μιας τεχνολογίας των Windows (ή οποιουδήποτε άλλου λειτουργικού συστήματος) θα ερχόταν σε αντίθεση με τη βασική φιλοσοφία της γλώσσας, που είναι η ανεξαρτησία από τις ιδιαιτερότητες της πλατφόρμας, στην οποία εκτελείται το πρόγραμμα. 9 Δηλαδή των εξυπηρετητών СOM, που υποστηρίζουν πρόσβαση μέσω της τεχνολογίας automation. 11

να μπορεί μια γλώσσα (ή ένα περιβάλλον) προγραμματισμού να υποστηρίζει τεχνολογίες COM είναι να επιτρέπει το χειρισμό αντικειμένων. Πρέπει δηλαδή να είναι αντικειμενοστρεφής ή τουλάχιστον να έχει κάποια αντικειμενοστρεφή χαρακτηριστικά. Ειδικότερα, όλα τα περιβάλλοντα, που χρησιμοποιούν automation, επιτρέπουν στον προγραμματιστή (α) να δημιουργεί και να διαχειρίζεται αντικείμενα, (β) να καλεί μεθόδους των αντικειμένων αυτών (γ) να χρησιμοποιεί ιδιότητες.των αντικειμένων αυτών και (δ) να χρησιμοποιεί «συλλογές» (collections) από αντικείμενα. Στη συνέχεια θα παρουσιάσουμε αναλυτικότερα τις λειτουργίες αυτές χρησιμοποιώντας συγκεκριμένα παραδείγματα από δύο περιβάλλοντα ανάπτυξης: τη Visual Basic και το Matlab. Επιλέξαμε τα συγκεκριμένα περιβάλλοντα διότι η μεν Visual Basic είναι μια από τις πιο απλές και πιο συνηθισμένες γλώσσες προγραμματισμού για εφαρμογές Windows, το δε Matlab είναι ιδιαίτερα οικείο στους σπουδαστές του Τμήματος Αυτοματισμού καθώς χρησιμοποιείται σε πολλά εργαστηριακά μαθήματα. Στα παραδείγματα, που θα παρουσιάσουμε, η σύνταξη των εντολών αφορά τις εκδόσεις 6.3 της Visual Basic (η έκδοση, που περιλαμβάνεται στην έκδοση 7 του Genesis, που χρησιμοποιείται στο εργαστήριο του μαθήματος) και 7.1 του Matlab. Αλλες εκδόσεις των προγραμμάτων ενδέχεται να χρειάζονται λίγο διαφορετική σύνταξη, η οποία περιγράφεται επακριβώς στα εγχειρίδια των κατασκευαστών. 1.5.1 Δημιουργία και διαχείριση αντικειμένων Όλα τα περιβάλλοντα προγραμματισμού, που υποστηρίζουν την τεχνολογία automation, επιτρέπουν στον προγραμματιστή να δημιουργεί αντικείνενα, που αντιστοιχούν σε εξυπηρετητές και να ορίζει μεταβλητές, για να αναφέρεται στα αντικείμενα αυτά. Μια από τις ευκολίες του automation είναι ότι οι κλάσεις των αντικειμένων μπορούν να προσδιορίζονται με συμβολικά ονόματα αντί για τους αριθμούς 128 bit (CLSID) του COM. Τα συμβολικά αυτά ονόματα ονομάζονται progid και ορίζονται για κάθε κλάση αντικειμένων από τον κατασκευαστή της. Τα progid όλων των κλάσεων, που έχουν εγκατασταθεί σε ένα σύστημα Windows, φυλάσσονται στο registry μαζί με τα αντίστοιχα CLSID. Για παράδειγμα, το progid του excel είναι excel.application, το progid του Matlab είναι matlab.application, ενώ το progid του GraphWorx είναι GWX32.Display. Στη Visual Basic, ο πιο απλός τρόπος για να δημιουργήσουμε ένα αντικείμενο automation είναι να χρησιμοποιήσουμε την εντολή CreateObject με παράμετρο το progid του αντικειμένου. Συνήθως δηλώνουμε και μια μεταβλητή τύπου object για να αναφερόμαστε στο αντικείμενο. Η δήλωση της μεταβλητής γίνεται με την εντολή Dim και η σύνδεσή της με το αντικείμενο γίνεται με την εντολή Set. Για παράδειγμα, αν θέλουμε να δημιουργήσουμε ένα αντικείμενο Excel (δηλαδή να ξεκινήσουμε το Excel ως εξυπηρετητή automation) και να το συνδέσουμε με μια μεταβλητή a θα πρέπει να δώσουμε τις εντολές Dim a as Object Set a = CreateObject("excel.application") Όταν ολοκληρώσουμε την εργασία μας με το Excel μπορούμε να δώσουμε την εντολή Set a = Nothing 12

για να απελευθερώσουμε τη μνήμη, που είχε δεσμευθεί για την επικοινωνία με τον εξυπηρετητή automation, ώστε να μπορεί να χρησιμοποιηθεί από άλλα προγράμματα. Στο Matlab η δημιουργία του αντικειμένου (και η σύνδεσή του με μια μεταβλητή, αν θέλουμε) γίνεται με την εντολή actxserver. Έτσι, το παράδειγμα, που είδαμε προηγουμένως, υλοποιείται στο Matlab με την εντολή a = actxserver('excel.application') Επιπλέον το Matlab έχει τη δυνατότητα, μέσω της τεχνολογίας automation, να τοποθετεί αντικείμενα άλλων εφαρμογών μέσα σε παράθυρα εικόνων του (figure). Αυτό επιτυγχάνεται με την εντολή actxcontrol. Για παράδειγμα, η εντολή a = actxcontrol('gwxswitch.gwxswitchctrl.1') ανοίγει ένα νέο παράθυρο εικόνας του Matlab και τοποθετεί σε αυτό ένα αντικείμενο από τη κλάση, που έχει το progid GWXSWITCH.GWXSwitchCtrl.1. (Το συγκεκριμένο αντικείμενο είναι ο διακόπτης on-off, που χρησιμοποιούμε στις οθόνες του GraphWorx σε κάποιες εργαστηριακές ασκήσεις, δηλαδή ένα αντικείμενο του Genesis). Αν θέλουμε, μπορούμε να αναφερόμαστε σε ένα αντικείμενο και με περισσότερες από μία μεταβλητές. Για παράδειγμα, αν η μεταβλητή a έχει σαν τιμή ένα αντικείμενο, τότε η εντολή b = a κάνει και τη μεταβλητή b να αναφέρεται στο ίδιο αντικείμενο. Σημειώνεται ότι στο Matlab δεν χρειάζεται να δώσουμε κάποια ειδική εντολή για να απελευθερώσουμε τη μνήμη, που έχει δεσμευθεί για κάποιο αντικείμενο 10. Η μνήμη αυτή απελευθερώνεται αυτόματα μόλις το αντικείμενο πάψει να είναι προσβάσιμο. Για παράδειγμα, αν η μόνη μεταβλητή, που μας δίνει πρόσβαση στο συγκεκριμένο αντικείμενο είναι η a και δώσουμε την εντολή a = 5 τότε η μεταβλητή a παίρνει μια νέα τιμή (το 5) και δεν έχουμε πια κανένα τρόπο για να ανφερόμαστε στο αντικείμενο. Στην περίπτωση αντικειμένων, που τοποθετούνται σε παράθυρα εικόνας με την εντολή actxcontrol, η πρόσβαση στο αντικείμενο χάνεται όταν κλείσουμε το παράθυρο εικόνας. 1.5.2 Κλήση μεθόδων Όπως είναι γνωστό από τον αντικειμενοστρεφή προγραμματισμό, οι μέθοδοι ενός αντικειμένου μπορούν να παίρνουν ορίσματα (παραμέτρους) και/ή να επιστρέφουν κάποιο αποτέλεσμα. Οι προδιαγραφές του automation καθορίζουν τους τύπους δεδομένων, που μπορούν να λαμβάνουν ως παραμέτρους ή να επιστρέφουν ως αποτέλεσμα οι διάφορες μέθοδοι. Από εκεί και πέρα το κάθε περιβάλλον προγραμματισμού έχει τους δικούς του κανόνες σχετικά με το ποιούς από αυτούς τους τύπους δεδομένων υποστηρίζει καθώς και για το πώς γίνεται η μετατροπή από τους τύπους δεδομένων της συγκεκριμένης γλώσσας προγραμματισμού στους τύπους δεδομένων της τεχνολογίας automation και αντίστροφα. 10 Τέτοια εντολή υπάρχει (είναι η εντολή clear) αλλά δεν είναι απαραίτητο να τη δώσουμε, αν δεν έχουμε κάποιο άλλο λόγο να καθαρίσουμε τη μνήμη. 13

Γενικά για να καλέσουμε μια μέθοδο γράφουμε το αντικείμενο ακολουθούμενο από μια τελεία και μετά το όνομα της μεθόδου και τις τυχόν παραμέτρους μέσα σε παρένθεση. Η σύνταξη αυτή μπορεί να χρησιμοποιηθεί σε όλα σχεδόν τα περιβάλλοντα προγραμματισμού, συμπεριλαμβάνοντας τη Visual Basic και το Matlab 11. Ας δούμε μερικά παραδείγματα 12. (α) Κλήση μεθόδου χωρίς παραμέτρους, που δεν επιστρέφει κάποιο αποτέλεσμα Ας υποθέσουμε ότι η μεταβλητή a αναφέρεται σε ένα αντικείμενο (εξυπηρετητή) automation, που αντιστοιχεί στο Excel (ένα στιγμιότυπο της κλάσης, που έχει το progid Excel.application, όπως είδαμε παραπάνω). Η εντολή a.quit (στη Visual Basic, στο Matlab ή σε κάποιο άλλο περιβάλλον προγραμματισμού) καλεί τη μέθοδο Quit, η οποία τερματίζει την εφαρμογή (ισοδυναμεί δηλαδή με την επιλογή File Exit από το μενού του προγράμματος). Αντίστοιχα, η εντολή a.findfile εμφανίζει το γνωστό παράθυρο των εφαρμογών Windows, από το οποίο επιλέγουμε το αρχείο, που θέλουμε να ανοίξουμε (ισοδυναμεί δηλαδή με την επιλογή File Open του μενού). (β) Κλήση μεθόδου χωρίς παραμέτρους, που επιστρέφει κάποιο αποτέλεσμα. Έστω ότι η μεταβλητή a αναφέρεται σε μια οθόνη του GraphWorx (ένα στιγμιότυπο της κλάσης με progid GWX32.Display, όπως αναφέραμε παραπάνω). Η μέθοδος GetNumberOfTopLevelVisibles μας λέει πόσα σχεδιαστικά αντικείμενα (γραμμές, τετράγωνα, κύκλοι κ.λ.π) 13 έχουμε τοποθετήσει στην οθόνη. Έτσι, η παρακάτω εντολή Matlab μας εμφανίζει στην οθόνη το πλήθος των αντικειμένων αυτών. a.getnumberοftoplevelvisibles Φυσικά μπορούμε να αποθηκεύσουμε το αποτέλεσμα της μεθόδου σε μια μεταβλητή n, χρησιμοποιώντας τη σύνταξη n = a.getnumberοftoplevelvisibles Η ίδια αυτή σύνταξη ισχύει και στη Visual Basic (όπως και σε όλα σχεδόν τα περιβάλλοντα προγραμματισμού, που υποστηρίζουν automation). Σύμφωνα με τα εγχειρίδια (Help files) του Genesis, το αποτέλεσμα, που επιστρέφει η μέθοδος GetNumberOfTopLevelVisibles, είναι τύπου Long (ακέραιος αριθμός 32 bit). Αυτό θα πρέπει να το λαμβάνουμε υπόψη όταν χρησιμοποιούμε κάποιο περιβάλλον, που 11 Υπάρχουν και εναλλακτικοί τρόποι σύνταξης, με τους οποίους όμως δεν θα ασχοληθούμε για λόγους απλότητας της παρουσίασης και οικονομίας χώρου. Για περισσότερες πληροφορίες ο αναγνώστης παραπέμπεται στα εγχειρίδια των αντίστοιχων προγραμμάτων. 12 Εδώ θα παραθέσουμε απλώς ενδεικτικά μερικές περιπτώσεις χρήσης κάποιων μεθόδων. Αναλυτική περιγραφή των μεθόδων αυτών καθώς και όλων των μεθόδων, που υποστηρίζουν τα αντίστοιχα αντικείμενα, υπάρχουν στα εγχειρίδια και τα help files των προγραμμάτων. 13 Στο περιβάλλον του Genesis όλα αυτά τα αντικείμενα θεωρούνται ότι ανήκουν σε μια κλάση με όνομα GWXVisible. 14

απαιτεί να δηλώνουμε τον τύπο των μεταβλητών. Για παράδειγμα, στη Visual Basic χρειάζεται να έχουμε δηλώσει τη μεταβλητή n στην αρχή του προγράμματος δίνοντας την εντολή Dim n as Long (γ) Κλήση μεθόδου με παραμέτρους, που δεν επιστρέφει κάποιο αποτέλεσμα Όπως και στο προηγούμενo παράδειγμα, ας υποθέσουμε ότι η μεταβλητή a αναφέρεται σε ένα στιγμιότυπο της κλάσης GWX32.Display (μια οθόνη του GraphWorx). Η μέθοδος CreateLayer παίρνει σαν παράμετρο μια συμβολοσειρά (string) και δημιουργεί ένα καινούργιο επίπεδο σχεδίασης (Layer 14 ) με όνομα τη συμβολοσειρά αυτή. Η σύνταξη της αντίστοιχης εντολής στο Matlab είναι a.createlayer('new Layer') όπου υποθέσαμε ότι το όνομα του νέου επιπέδου είναι New Layer. Στη Visual Basic η εντολή θα ήταν ακριβώς η ίδια, με τη διαφορά ότι η συμβολοσειρά θα γραφόταν με διπλά και όχι με μονά εισαγωγικά, σύμφωνα με τους κανόνες της γλώσσας. Φυσικά θα μπορούσαμε εναλλακτικά να είχαμε βάλει τη συμβολοσειρά New Layer σε μια μεταβλητή (π.χ. s) και να δίναμε την εντολή (Matlab, Visual basic, ή άλλο περιβάλλον) a.createlayer(s) Όπως εξηγήσαμε και παραπάνω, στην περίπτωση της Visual Basic χρειάζεται να δηλώσουμε τον τύπο της μεταβλητής s στην αρχή του προγράμματος με την εντολή Dim s as String (δ) Κλήση μεθόδου με παραμέτρους, που επιστρέφει κάποιο αποτέλεσμα Στο παράδειγμα αυτό ας υποθέσουμε ότι η μεταβλητή a αναφέρεται σε έναν εξυπηρετητή automation, που αντιστοιχεί στο Matlab. Η μέθοδος Execute δέχεται ως παράμετρο μια συμβολοσειρά, που παριστάνει μια οποιαδήποτε εντολή του Matlab, και επιστρέφει ως αποτέλεσμα μια άλλη συμβολοσειρά, που παριστάνει το αποτέλεσμα της εκτέλεσης της εντολής, όπως θα εμφανιζόταν στη γραμμή εντολών του Matlab. Για παράδειγμα, υποθέτοντας ότι s είναι μια μεταβλητή τύπου String, η εντολή Visual Basic s = a.execute("2+2") μας επιστρέφει στη μεταβλητή s τη συμβολοσειρά ans = 4. Ως δεύτερο παράδειγμα ας θεωρήσουμε ότι η μεταβλητή a αναφέρεται σε μια οθόνη του GraphWorx (δηλαδή έναν εξυπηρετητή automation με progid GWX32.Display, όπως προαναφέραμε). Έστω ότι η οθόνη αυτή περιέχει ν σχεδιαστικά αντικείμενα. Η μέθοδος GetVisibleObjectFromIndex δέχεται ως παράμετρο έναν αριθμό από το 0 έως το ν 1 και επιστρέφει ως αποτέλεσμα το 14 Η έννοια των επιπέδων σχεδίασης του GraphWorx θεωρείται γνωστή από το εργαστήριο του μαθήματος. 15

αντίστοιχο σχεδιαστικό αντικείμενο 15. Έτσι, π.χ. στη Visual Basic, υποθέτοντας ότι o είναι μια μεταβλητή τύπου object, η εντολή 16 Set o = a.getvisibleobjectfromindex(1) κάνει τη μεταβλητή o να αναφέρεται στο δεύτερο στη σειρά σχεδιαστικό αντικείμενο της οθόνης. Η ίδια δουλειά μπορεί να γίνει και στο Matlab με την εντολή o = a.getvisibleobjectfromindex(1) (ε) Κλήση μεθόδου πάνω σε αντικείμενο, που επιστρέφει άλλη μέθοδος Σε όλα τα παραδείγματα, που είδαμε μέχρι τώρα, χρησιμοποιούσαμε μια μεταβλητή για να αναφερόμαστε στο αντικείμενο, του οποίου τις μεθόδους καλούσαμε. Αυτό δεν είναι απαραίτητο. Υπάρχουν περιπτώσεις, που το αντικείμενο αυτό μας το επιστρέφει ως αποτέλεσμα μια μέθοδος, που καλούμε σε κάποιο άλλο αντικείμενο. Για παράδειγμα, ας υποθέσουμε ότι δίνουμε την παρακάτω εντολή Visual Basic μέσα από το περιβάλλον του Genesis. n = ThisDisplay.GetVisibleObjectFromIndex(0).GetNumberOfDynamics Για να καταλάβουμε τί κάνει αυτή η εντολή, ας την εξετάσουμε κομμάτι-κομμάτι. Η έκφραση ThisDisplay είναι μια μεταβλητή του GraphWorx, η οποία χρησιμεύει για να αναφερόμαστε κάθε φορά στο αντικείμενο GWX32.Display, που αντιστοιχεί στην οθόνη, που χρησιμοποιούμε. Επομένως, σύμφωνα με όσα αναφέραμε στο προηγούμενο παράδειγμα, η έκφραση ThisDisplay.GetVisibleObjectFromIndex(0) μας επιστρέφει το πρώτο στη σειρά σχεδιαστικό αντικείμενο της οθόνης. Επομένως η έκφραση ThisDisplay.GetVisibleObjectFromIndex(0).GetNumberOfDynamics σημαίνει κλήση της μεθόδου GetNumberOfDynamics στο πρώτο σχεδιαστικό αντικείμενο της οθόνης. Η μέθοδος αυτή είναι μια μέθοδος, που έχουν όλα τα αντικείμενα της κλάσης GWXVisible και μας επιστρέφει έναν ακέραιο αριθμό 32 bit (τύπος δεδομένων long), ο οποίος δηλώνει το πλήθος των δυναμικών συμπεριφορών, που έχουμε συνδέσει με το συγκεκριμένο αντικείμενο (αν δεν έχουμε συνδέσει καμία δυναμική συμπεριφορά τοτε η μέθοδος επιστρέφει τον αριθμό 0). Έτσι, η εντολή n = ThisDisplay.GetVisibleObjectFromIndex(0).GetNumberOfDynamics 15 Όλα τα σχεδιαστικά αντικείμενα, που βάζουμε στις οθόνες του GraphWorx παίρνουν μια αύξουσα αρίθμηση, που ξεκινάει από το 0. Η αρίθμηση αυτή μπαίνει αυτόματα από το πρόγραμμα και μεταβάλλεται όταν κάποια αντικείμενα μετακινούνται μπροστά από άλλα. Κάθε αντικείμενο έχει μικρότερο αύξοντα αριθμό από αυτά, που βρίσκονται μπροστά του. Το αντικείμενο με αύξοντα αριθμό 0 είναι πάντα αυτό, που βρίσκεται πιο πίσω από όλα. 16 Στην έκδοση 6 της Visual Basic, που χρησιμοποιεί το GraphWorx, για να δώσουμε τιμή σε μια μεταβλητή τύπου object πρέπει οπωσδήποτε να χρησιμοποιούμε την εντολή set. Μια απλή εντολή ανάθεσης της μορφής o=a.getvisibleobjectfromindex(1) δεν γίνεται δεκτή. Τέτοιες εντολές ανάθεσης μπορούν να χρησιμοποιηθούν μόνο για αριθμητικά δεδομένα και συμβολοσειρές. Νεότερες εκδόσεις της Visual Basic χρησιμοποιούν εντολές ανάθεσης και για αντικείμενα. 16

βάζει στη μεταβλητή n τον αριθμό των δυναμικών συμπεριφορών, που έχουμε συνδέσει με το πρώτο στη σειρά σχεδιαστικό αντικείμενο της οθόνης. (Φυσικά η μεταβλητή n θα πρέπει να έχει δηλωθεί τύπου Long στην αρχή του προγράμματος). Η ίδια τεχνική μπορεί να χρησιμοποιηθεί και στο Matlab. Πολλά τέτοια παραδείγματα θα δούμε στην ενότητα 1.8.3, σε συνδυασμό με την τεχνολογία OPC 17. Θα ολοκληρώσουμε το θέμα των μεθόδων αναφέροντας ότι το Matlab μας προσφέρει μια σειρά από εντολές, με τις οποίες μπορούμε να βλέπουμε ποιές μεθόδους υποστηρίζει το κάθε αντικείμενο. Η πιο χρήσιμη ίσως από τις εντολές αυτές είναι η invoke με παράμετρο το αντικείμενο. Για παράδειγμα, αν η μεταβλητή a του Matlab αναφέρεται σε ένα αντικείμενο και δώσουμε την εντολή invoke(a) τότε θα εμφανιστεί στην οθόνη μια λίστα με τις μεθόδους, που υποστηρίζει το αντικείμενο αυτό, όπου θα αναγράφονται αναλυτικά για κάθε μέθοδο το όνομά της και οι τύποι δεδομένων, που δέχεται ως παραμέτρους και/ή επιστρέφει ως αποτελέσμα. Μια ιδιαιτερότητα της εντολής invoke είναι ότι σε κάθε μέθοδο εμφανίζει ως πρώτη παράμετρο ένα αντικείμενο (που στο Matlab παριστάνεται με τον τύπο δεδομένων handle). Η παράμετρος αυτή δηλώνει το ίδιο το αντικείμενο, του οποίου τη μέθοδο θέλουμε να καλέσουμε και χρησιμοποιείται μόνο όταν θέλουμε να καλέσουμε μεθόδους σε αντικείμενα με χρήση της εντολής invoke 18. Οταν εργαζόμαστε με τον τρόπο, που περιγράψαμε στην ενότητα αυτή, μπορούμε να την αγνοήσουμε. 1.5.3 Χρήση ιδιοτήτων Στον αντικειμενοστρεφή προγραμματισμό με τον όρο «ιδιότητες» εννοούμε τις μεταβλητές, στις οποίες τα αντικείμενα αποθηκεύουν τα δεδομένα τους 19. Η δυνατότητα άμεσης πρόσβασης σε ιδιότητες είναι μια επιπλέον ευκολία, που παρέχει στους προγραμματιστές η τεχνολογία automation. Στο COM ο πελάτης μπορεί να επικοινωνεί με τον εξυπηρετητή αποκλειστικά και μόνο καλώντας μεθόδους. Αντίθετα, οι εξυπηρετητές automation επιτρέπουν στους πελάτες τους να διαβάζουν ιδιότητες των αντικειμένων, ή να δίνουν τιμές σε αυτές. Αυτή η δυνατότητα 17 Το συγκεκριμένο παράδειγμα, που είδαμε εδώ, δεν μπορεί να μεταφέρθεί απευθείας στο Matlab. Ο λόγος είναι ότι η κλάση αντικειμένων GWXVisible (και οι υπόλοιπες κλάσεις αντικειμένων του GraphWorx, εκτός από την GWX32.Display) δεν έχουν δηλωθεί στο registry των Windows σαν κλάσεις COM αλλά σαν interfaces. Αυτό έχει σαν αποτέλεσμα η απλή σύνταξη αντικείμενο.μέθοδος, που είδαμε ως τώρα να μην δουλεύει στο Matlab για τα αντικείμενα αυτά. Τονίζεται ότι αυτό ισχύει μόνο για τα αντικείμενα του ίδιου του GraphWorx (στατικά στοιχεία και δυναμικές συμπεριφορές) και όχι για τυχόν άλλα αντικείμενα ActiveX, που μπορούμε να ενσωματώσουμε σε οθόνες του GraphWorx (π.χ. o διακόπτης με το progid GWXSwitch.GWXSwitchCtrl.1, που αναφέραμε στην ενότητα 1.5.1). Για να καλέσουμε μεθόδους αντικειμένων του GraphWorx από το Matlab θα πρέπει να χρησιμοποιήσουμε την εντολή invoke με πρώτο όρισμα το αντικείμενο και δεύτερο όρισμα το όνομα της μεθόδου. Για περισσότερες λεπτομέρειες σχετικά με αυτή τη χρήση της εντολής invoke παραπέμπουμε τον αναγνώστη στα εγχειρίδια του Matlab. 18 Αυτός είναι ένας άλλος τρόπος κλήσης μεθόδων, που μπορεί να χρησιμοποιηθεί μόνο στο Matlab. Επιλέξαμε να μην τον περιγράψουμε στην σημειώσεις αυτές και να επικεντρωθούμε στη συνηθισμένη σύνταξη αντικείμενο.μέθοδος, που χρησιμοποιείται σε όλα τα αντικειμενοστρεφή περιβάλλοντα. προγραμματισμού. Σε ορισμένες περιπτώσεις όμως είναι χρήσιμος (βλ. προηγούμενη υποσημείωση). 19 Τα δεδομένα αυτά μπορούν γενικά να αφορούν είτε την κατάσταση του αντικειμένου (π.χ. η τελευταία τιμή, που διαβάσαμε από έναν αισηθτήρα) είτε τις παραμέτρους λειτουργίας του (π.χ. πόσο συχνά θα διαβάζεται ο αισθητήρας, σε τι χρώμα θα απεικονίζεται η ένδειξη στην οθόνη ή ποιά γραμματοσειρά θα χρησιμοποιείται). 17

απλουστεύει σημαντικά τη σύνταξη των προγραμμάτων σε πολλές περιπτώσεις. Οι προδιαγραφές του automation ορίζουν τους τύπους δεδομένων, που μπορούν να έχουν οι τιμές των ιδιοτήτων. Από εκεί και πέρα, το κάθε περιβάλλον προγραμματισμού έχει τους δικούς του κανόνες, όσον αφορά το ποιούς από τους τύπουςς αυτούς υποστηρίζει και πώς γίνεται η μετατροπή από τους τύπους δεδομένων της γλώσσας προγραμματισμού στους τύπους δεδομένων του automation και αντίστροφα. Γενικά τα αντικειμενοστρεφή περιβάλλοντα προγραμματισμού αναφέρονται στις ιδιότητες των αντικειμένων χρησιμοποιώντας τη σύνταξη αντικείμενο.ιδιότητα. Για παράδειγμα, το αντικείμενο, που αντιστοιχεί στο Excel (progid excel.application ) έχει μια ιδιότητα, που ονομάζεται Visible και είναι τύπου Bolean. Οταν η ιδιότητα αυτή έχει τιμή True, τότε το παράθυρο του Excel φαίνεται στην οθόνη του υπολογιστή. Αντίθετα, όταν η ιδιότητα Visible έχει τιμή False, τότε το παράθυρο του Excel είναι κρυμμένο αν και το πρόγραμμα συνεχίζει να εκτελείται κανονικά. Έτσι, υποθέτοντας ότι η μεταβλητή a έχει ως τιμή ένα αντικείμενο Excel, η εντολή a.visible = true εμφανίζει το παράθυρο του Excel στην οθόνη ενώ η εντολή a.visible = false το εξαφανίζει. Η εντολή b = a.visible αντιγράφει στην μεταβλητή b την τιμή της ιδιότητας Visible. Οι παραπάνω εντολές μπορεί να χρησιμοποιηθούν είτε στη Visual Basiс είτε στο Matlab. Όπως και στα παραδείγματα της προηγούμενης ενότητας, στην περίπτωση της Visual Basic η τρίτη εντολή προϋποθέτει να έχουμε δηλώσει προηγουμένως τη μεταβλητή b ως Boolean. Μια ιδιότητα είναι δυνατόν να έχει ως τιμή ένα αντικείμενο. Για παράδειγμα, η ιδιότητα ActiveCell του αντικειμένου Excel.Application έχει ως τιμή ένα αντικείμενο τύπου Range 20, που αντιστοιχεί στο εκάστοτε επιλεγμένο κελί του φύλλου εργασίας του Excel. Έτσι, υποθέτοντας όπως και προηγουμένως ότι η μεταβλητή a έχει ως τιμή ένα αντικείμενο Excel, η έκφραση a.activecell παριστάνει το αντικείμενο Range, που αντιστοιχεί στο επιλεγμένο κελί του φύλλου εργασίας και μπορούμε να τη χρησιμοποιήσουμε για να προσπελάσουμε μεθόδους και ιδιότητες του αντικειμένου. Για παράδειγμα, η εντολή a.activecell.clear καλεί τη μέθοδο Clear της κλάσης Range, η οποία καθαρίζει το περιεχόμενο του επιλεγμένου κελιού. Αντίστοιχα, η εντολή 20 Η κλάση Range είναι μια από τις κλάσεις αντικειμένων, που συμμετέχουν σε ένα φύλλο εργασίας του Excel. Παριστάνει μια περιοχή κελιών. Αναλυτικές πληροφορίες για όλες τις κλάσεις αντικειμένων του Excel, καθώς και για τις μεθόδους και ιδιότητες καθενός από αυτά, υπάρχουν στα εγχειρίδια και τα help files του προγράμματος. 18

s = a.activecell.address μεταφέρει στη μεταβλητή s την τιμή της ιδιότητας Address του αντικειμένου Range, δηλαδή μια συμβολοσειρά, που παριστάνει την διεύθυνση του επιλεγμένου κελιού (π.χ. A2 ). Με τον ίδιο τρόπο εργαζόμαστε και όταν θέλουμε να χρησιμοποιήσουμε ιδιότητες ενός αντικειμένου, που το παίρνουμε ως αποτέλεσμα από την κλήση μιας μεθόδου ενός άλλου αντικειμένου. Για παράδειγμα, είδαμε στην προηγούμενη ενότητα ότι η μέθοδος GetVisibleObjectFromIndex της κλάσης GWX32.Display μας επιστρέφει ένα στιγμιότυπο της κλάσης GWXVisible, που αντιστοιχεί σε ένα από τα σχεδιαστικά αντικείμενα της οθόνης. Σύμφωνα με τα εγχειρίδια του Genesis, κάθε αντικείμενο από την κλάσης GWXVisible έχει μια ιδιότητα με όνομα isfilled, η οποία είναι τύπου Boοlean και μας προσδιορίζει εάν το σχήμα του αντικειμένου στην οθόνη είναι γεμάτο με χρώμα ή αν φαίνεται μόνο το περίγραμμα. Έτσι, αν μια οθόνη του GraphWorx έχει τρία σχεδιαστικά αντικείμενα, η εντολή Visual Basic ThisDisplay.GetVisibleObjectFromIndex(1).isFilled = False μέσα από το περιβάλλον του GraphWorx θα έχει ως αποτέλεσμα το δεύτερο κατά σειρά από τα τρία αντικείμενα να εμφανιστεί στην οθόνη με μόνο το περίγραμμα. Επίσης, η εντολή b = ThisDisplay.GetVisibleObjectFromIndex(2).isFilled μεταφέρει στη μεταβλητή b (που θα πρέπει να έχει δηλωθεί Boolean) την τιμή της ιδιότητας isfilled του τρίτου κατά σειρά από τα αντικείμενα της οθόνης. Ας σημειωθεί ότι κάποιες ιδιότητες των αντικειμένων automation μπορεί να έχουν το χαρακτηρισμό read-only. Αυτό σημαίνει ότι οι προγραμματιστές μπορούν να χρησιμοποιήσουν την τιμή αυτών των ιδιοτήτων στα προγράμματά τους, αλλά δεν επιτρέπεται να την αλλάξουν. Παράδειγμα τέτοιας ιδιότητας είναι η ιδιότητα ActiveCell του αντικειμένου Excel.Application, που είδαμε παραπάνω. Το περιβάλλον του Matlab μας δίνει μια σειρά από εντολές, με τις οποίες μπορούμε να βλέπουμε ποιές ιδιότητες έχουν τα αντικείμενα automation, που χρησιμοποιούμε. Μια τέτοια εντολή είναι η εντολή get. Αν a είναι μια μεταβλητή του Matlab, που έχει ως τιμή ένα αντικείμενο, τότε η εντολή get(a) εμφανίζει στην οθόνη ένα πίνακα με τα ονόματα όλων των ιδιοτήτων του αντικειμένου και τις τρέχουσες τιμές τους. 1.5.4 Χρήση συλλογών Στην ορολογία της τεχνολογίας Automation μια συλλογή (collection) είναι μια ομάδα από ομοειδή αντικείμενα (δηλαδή αντικείμενα, που ανήκουν στην ίδια κλάση). Οι συλλογές αντικειμένων χρησιμοποιούνται ευρύτατα στα Windows. Για παράδειγμα, μπορεί να μιλάμε για τη συλλογή των ανοιχτών παραθύρων μιας εφαρμογής, τη συλλογή των χειριστηρίων μιας φόρμας, ή τη συλλογή των κόμβων (υπολογιστών) ενός δικτύου. Κάθε συλλογή πρέπει υποχρεωτικά να υποστηρίζει: 19

(1) μια ιδιότητα με όνομα count, η οποία επιστρέφει το πλήθος των αντικειμένων της συλλογής. Η ιδιότητα αυτή είναι τύπου read-only (επιτρέπει πρόσβαση μόνο για ανάγνωση), πράγμα που σημαίνει ότι οι πελάτες μπορούν μόνο να διαβάσουν την τιμή της αλλά όχι και να την αλλάξουν. (2) μια μέθοδο με όνομα item, η οποία επιστρέφει ένα από τα αντικείμενα της συλλογής. Η μέθοδος αυτή χρειάζεται πάντα ως παράμετρο εισόδου έναν αριθμό, που δηλώνει τη θέση του αντικειμένου, που θέλουμε να ανακτήσουμε. Αν δηλαδή θέλουμε το πρώτο αντικείμενο της συλλογής δίνουμε item(1), αν θέλουμε το δεύτερο δίνουμε item(2), κ.ο.κ. Οι περισσότερες συλλογές έχουν ακόμη μια μέθοδο με όνομα add (ή μερικές φορές additem), η οποία δημιουργεί ένα νέο αντικείμενο και το προσθέτει στο τέλος της συλλογής. Η μέθοδος αυτή, αν και πολύ σημαντική, δεν είναι υποχρεωτική σύμφωνα με τις προδιαγραφές της τεχνολογίας Automation. Πρόσβαση στις συλλογές αποκτάμε συνήθως μέσω μιας ιδιότητας τύπου readonly ή μέσω μιας μεθόδου, που μας επιστρέφει μια συλλογή. Για παράδειγμα, to αντικείμενο Excel.Application έχει μια ιδιότητα read-only με όνομα Workbooks, η τιμή της οποίας είναι μια συλλογή από αντικείμενα Workbook 21, καθένα από τα οποία αντιστοιχεί σε ένα ανοιχτό αρχείο Excel. Έτσι, αν η μεταβλητή a έχει ως τιμή ένα αντικείμενο Excel.Application, η εντολή n = a.workbooks.count γράφει στη μεταβλητή n το πλήθος των αρχείων Excel, που έχουμε ανοίξει. Η εντολή s = a.workbooks.item(1).fullname μεταφέρει στη μεταβλητή s την τιμή της ιδιότητας FullName του πρώτου από τα αντικείμενα Workbook της συλλογής (το όνομα του πρώτου από τα αρχεία Excel, που έχουμε ανοίξει) ενώ η εντολή a.workbooks.item(2).close καλεί τη μέθοδο Close στο δεύτερο από τα αντικείμενα Workbook της συλλογής (κλείνει δηλαδή το δεύτερο από τα αρχεία Excel, που έχουμε ανοίξει). Παραδείγματα μεθόδων, που επιστρέφουν συλλογές θα δούμε στην ενότητα 1.8.3, σε συνδυασμό με την τεχνολογία OPC. 1.6 ActiveX Ο όρος ActiveX πρωτοχρησιμοποιήθηκε από τη Microsoft το 1995, όταν η εταιρεία αποφάσισε να στρέψει την προσοχή της στο διαδίκτυο. Τότε η Microsoft χαρακτήρισε ως ActiveX μια ολόκληρη οικογένεια από τεχνολογίες, που σκοπό είχαν να κάνουν τις διαδικτυακές εφαρμογές και ειδικώτερα τις εφαρμογές του παγκόσμιου ιστού (World Wide Web) περισσότερο διαδραστικές (interactive). Η πιο γνωστή από 21 Η κλάση Workbook είναι μια ακόμη από τις κλάσεις, που χρησιμοποιούνται στο Excel. Παριστάνει ένα αρχείο Excel, το οποίο έχουμε ανοίξει. Από το αντικείμενο αυτό χρησιμοποιούμε εδώ μόνο την ιδιότητα FullName, η οποία μας επιστρέφει το πλήρες όνομα του αρχείου και τη μέθοδο Close, η οποία κλείνει το αρχείο. Πλήρης περιγραφή όλων των ιδιοτήτων και των μεθόδων του αντικειμένου υπάρχει στα εγχειρίδια και τα Help files του Excel. 20