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

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

Download "ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΑΒΑΛΑΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ"

Transcript

1 ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΑΒΑΛΑΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Εξομοίωση κυκλωμάτων ηλεκτρικών κινητηρίων συνεχούς ρεύματος με 1-φασικό ανορθωτή (εμφάνιση κυκλώματος) ΣΠΟΥΔΑΣΤΗΣ ΕΙΣΗΓΗΤΗΣ Δρ. Κυραναστάσης Γεώργιος ΚΑΒΑΛΑ 2009

2 Π Ε Ρ Ι Ε Χ Ο Μ Ε Ν Α Εισαγωγή... 1 ΚΕΦΑΛΑΙΟ 1 Δομή-Απαιτήσεις Πτυχιακής 1.1 Δομή Πτυχιακής Απαιτήσεις Πτυχιακής. 3 ΚΕΦΑΛΑΙΟ 2 Κινητήριο Σύστημα Συνεχούς Ρεύματος με μονοφασικό ανορθωτή 2.1 Μονοφασικά Κινητήρια συστήματα Μονοφασικά Κινητήρια συστήματα ημικύματος Μονοφασικά ημιελεγχόμενα κινητήρια συστήματα Μονοφασικά πλήρως ελεγχόμενα κινητήρια συστήματα 7 ΚΕΦΑΛΑΙΟ 3 Μερική ανάλυση Neapolis ver Τα μέρη του Neapolis Neapolis(Neapolis.exe) Οθόνη αρχικών ρυθμίσεων Φόρμα «Προσδιορισμού συστήματος» Neapart2(Neaprt2.exe) Οθόνη κυματομορφών συστήματος Οθόνη εμφάνισης κυκλώματος Neaprt3(Neaprt3.exe) 16 ΚΕΦΑΛΑΙΟ 4 Εγχειρίδιο χρήστη-περιγραφή εναλλακτικής φόρμας προσομοίωσης 4.1 Διαδικασία για την εισαγωγή στο εναλλακτικό περιβάλλον προσομοίωσης, μέσω της επιλογής «Εμφάνιση Κυκλώματος» Μέρη της Φόρμας «Εμφάνιση Κυκλώματος» Μπάρα Επιλογών Οθόνη κυκλώματος Μπάρα εμφάνισης αποτελεσμάτων Αλλαγές τιμών στο κύκλωμα.25

3 4.4 Αλλαγή Χρώματος σχεδίασης 29 ΚΕΦΑΛΑΙΟ 5 Κυκλώματα που αναπτύχθηκαν Εμφάνιση αποτελεσμάτων 5.1 Κυκλώματα που αναπτύχθηκαν παλμικος ανορθωτής με πλήρη έλεγχο και δίοδο ελεύθερης ροής Κινητήριο σύστημα συνεχούς ρεύματος με 1-παλμικό ανορθωτή, με διέγερση σειράς, με πλήρη έλεγχο και δίοδο ελεύθερης ροής Κινητήριο σύστημα συνεχούς ρεύματος με 1-παλμικό ανορθωτή, με παράλληλη διέγερση, με πλήρη έλεγχο και δίοδο ελεύθερης ροής Κινητήριο σύστημα συνεχούς ρεύματος με 1-παλμικό ανορθωτή, με ξένη διέγερση, με πλήρη έλεγχο και δίοδο ελεύθερης ροής Κινητήριο σύστημα συνεχούς ρεύματος με 1-παλμικό ανορθωτή, με μεικτή διέγερση, με πλήρη έλεγχο και δίοδο ελεύθερης ροής Προσομοίωση συστήματος-εμφάνιση αποτελεσμάτων Κυματομορφές κυκλώματος...49 ΚΕΦΑΛΑΙΟ 6 Βοηθητικές Οδηγίες γα την ανάπτυξη κώδικα στο περιβάλλον της Visual Basic Εισαγωγή Δήλωση μεταβλητών-σπουδαιότητα χρήσης της εντολής Option Explicit Τα ορίσματα της υπορουτίνας Find και Definition Εκσφαλμάτωση(debugging) Εισαγωγή Κατηγορίες λαθών Το πρόγραμμα σε κατάσταση διακοπής Εισαγωγή σημείων διακοπής(breakpoints) Διαδικασία εκσφαλμάτωσης...63 ΚΕΦΑΛΑΙΟ 7 Εγχειρίδιο Προγραμματιστή 7.1 Εισαγωγή Προετοιμασία για την έναρξη συγγραφής κώδικα στο περιβάλλον της VB6 για το Neapolis Εγκατάσταση του Visual Studio 6 Enterprise Διαδικασία εγκατάστασης Neapolis Development Λειτουργία της εφαρμογής Διαδικασία εμφάνισης του επιθυμητού κυκλώματος Εισαγωγή στη φόρμα SimCircuitForm Η συνάρτηση AddButtons Η συνάρτηση LoadWaveForms Η συνάρτηση FillSimCircuitForm.96

4 7.9 Η συνάρτηση DrawCircuit Συναρτήσεις σχεδιασμού στοιχείων κυκλώματος Εισαγωγή Η συνάρτηση σχεδιασμού ευθείας Drawline Η συνάρτηση σχεδιασμού στοιχείου οργάνων,drawiv Η συνάρτηση σχεδιασμού στοιχείου αντίστασης,drawresistance Η συνάρτηση σχεδιασμού στοιχείου πηγής AC,DrawAC Η συνάρτηση σχεδιασμού στοιχείου πηνίου, DrawCoil Η συνάρτηση σχεδιασμού στοιχείου διόδου,drawdiode Η συνάρτηση σχεδιασμού στοιχείου κινητήρα,drawmotor Συναρτήσεις σχεδιασμού κυκλωμάτων Εισαγωγή Συνάρτηση σχεδιασμού κυκλώματος Draw1phReCirc Συνάρτηση σχεδιασμού κυκλώματος DrawLoadRe1conCirc Συνάρτηση σχεδιασμού κυκλώματος DrawDcMotorCirc Συνάρτηση σχεδιασμού κυκλώματος DrawFieldCirc Συναρτήσεις Προσομοίωσης Εισαγωγή Η συνάρτηση LoadValues Η συνάρτηση Plot Η συνάρτηση Toolbar1_ButtonClick Διαδικασία Εκτύπωσης ΚΕΦΑΛΑΙΟ 8 Συμπεράσματα Προτάσεις ΠΑΡΑΡΤΗΜΑ ΜΕΡΟΣ Ά Οδηγός για το περιβάλλον της Visual Basic ΜΕΡΟΣ Β Αναπτυχθέντας Κώδικας Κώδικας φόρμας SimCircuitForm 218 Κώδικας φόρμας WaveForm. 249 Κώδικας Module SimCircCalc Κώδικας Module APIStuff ΜΕΡΟΣ Γ Περιεχόμενα πίνακα Matrix..257 ΒΙΒΛΙΟΓΡΑΦΙΑ...267

5 ΕΙΣΑΓΩΓΗ Η συγκεκριμένη πτυχιακή έχει σαν στόχο την συνέχιση της προσπάθειας μιας σειράς πτυχιακών εργασιών για την ανάπτυξη ενός εναλλακτικού περιβάλλοντος στο οποίο θα γίνεται η εμφάνιση των αποτελεσμάτων κατά την εξομοίωση στο πρόγραμμα Neapolis. Το κομμάτι το οποίο θα προστεθεί σε αυτήν την προσπάθεια είναι η εμφάνιση του κυκλώματος και των αποτελεσμάτων που προκύπτουν, κατά την εξομοίωση του κινητηρίου συστήματος 1-φασικού ανορθωτή και συγκεκριμένα με 1-παλμικό μετατροπέα. Τα αποτελέσματα της εξομοίωσης θα εμφανίζονται σε όργανα μέτρησης, ενώ θα υπάρχει επίσης η δυνατότητα να δούμε και τις κυματομορφές που προκύπτουν από τις τιμές των τιμών των οργάνων στη διάρκεια μιας περιόδου. Οι κυματομορφές αυτές θα βρίσκονται σε διαφορετικά παράθυρα, ενώ θα είναι επίσης δυνατή η μετάβαση από το περιβάλλον κυκλώματος στο κλασικό περιβάλλον εξομοίωσης, ενώ αυτή εξελίσσεται. Τέλος σημαντικός στόχος αυτής της πτυχιακής είναι η μετατροπή, του υπάρχοντος κώδικα για αυτό το περιβάλλον, σε ένα «ελαστικό» κώδικα που θα δίνει την δυνατότητα στους μετέπειτα προγραμματιστές να προσθέτουν ή να αφαιρούν εύκολα κομμάτια κώδικα, χωρίς να χρειάζονται σημαντικές αλλαγές στον κύριο κορμό. 1

6 ΚΕΦΑΛΑΙΟ 1 Ο ΔΟΜΗ ΑΠΑΙΤΗΣΕΙΣ ΠΤΥΧΙΑΚΗΣ 1.1 ΔΟΜΗ ΠΤΥΧΙΑΚΗΣ Την συγκεκριμένη πτυχιακή θα μπορούσαμε να την χωρίσουμε στα παρακάτω τμήματα: ΠΕΡΙΓΡΑΦΗ ΚΙΝΗΤΗΡΙΟΥ ΣΥΝΕΧΟΥΣ ΜΕ 1-ΦΑΣΙΚΟ ΑΝΟΡΘΩΤΗ Εδώ θα να αναφέρουμε κάποια θεωρητικά στοιχεία του κινητηρίου συστήματος με το οποίο θα ασχοληθούμε. ΜΕΡΙΚΗ ΠΕΡΙΓΡΑΦΗ ΤΟΥ NEAPOLIS Στο συγκεκριμένο τμήμα θα περιγράψουμε με λίγα λόγια τα τμήματα εκείνα του Νεάπολις τα οποία θα συναντήσει ο αναγνώστης και πως συνδέεται το περιβάλλον το οποίο αναπτύξαμε με το ήδη υπάρχων. ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΕΜΦΑΝΙΖΟΜΕΝΟΥ ΚΥΚΛΩΜΑΤΟΣ ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΤΗ Στο τμήμα αυτό θα αναλυθεί το περιβάλλον που δημιουργήθηκε, ποιες είναι οι λειτουργίες του και πως αυτές μπορούν να χρησιμοποιηθούν από τον χρήστη. ΚΥΚΛΩΜΑΤΑ ΠΟΥ ΑΝΑΠΤΥΧΘΗΚΑΝ ΠΕΡΙΓΡΑΦΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ----- Εδώ συγκεκριμένα αναλύονται όλα τα κυκλώματα που αναπτύχθηκαν καθώς και τα αποτελέσματα που εμφανίζονται από τα εκάστοτε κυκλώματα. 2

7 ΒΟΗΘΗΤΙΚΕΣ ΟΔΗΓΙΕΣ ΓΙΑ ΤΗΝ ΑΝΑΠΤΥΞΗ ΚΩΔΙΚΑ ΣΤΟ ΠΕΡΙΒΑΛΛΟΝ ΤΗΣ VISUAL BASIC 6 Στο μέρος αυτό θα αναφερθούν τεχνικές που χρησιμοποιήθηκαν για την δημιουργία του κώδικα της πτυχιακής και συμβουλές για να αποφευχθούν μελλοντικά λάθη από τους συνεχιστές της ΕΓΧΕΙΡΙΔΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΤΗ ΑΝΑΛΥΤΙΚΗ ΠΕΡΙΓΡΑΦΗ ΤΟΥ ΑΝΑΠΤΥΧΘΕΝΤΑ ΚΩΔΙΚΑ Στο κομμάτι αυτό της πτυχιακής θα γίνει αναλυτική περιγραφή των βημάτων που έγιναν για την έναρξη συγγραφής του κώδικά, καθώς και ανάλυση αυτού. ΣΥΜΠΕΡΑΣΜΑΤΑ ΠΡΟΤΑΣΕΙΣ Στο σημείο αυτό θα αναφερθεί η εμπειρία που αποκομήθηκε από την πραγμάτωση της πτυχιακής, καθώς και κάποιες προτάσεις για την συνέχισή της. ΠΑΡΑΡΤΗΜΑ Τέλος εδώ θα βρει ο αναγνώστης ένα συνοπτικό οδηγό για την visual basic 6, καθώς και όλον τον κώδικα που αναπτύχθηκε και τμήματα κώδικα αναγκαία για τον προγραμματιστή. 1.2 ΑΠΑΙΤΗΣΕΙΣ ΠΤΥΧΙΑΚΗΣ Σχεδίαση κυκλώματος κινητηρίου συστήματος με 1-παλμικό ανορθωτή Εμφάνιση αποτελεσμάτων κατά την εξομοίωση. o Εμφάνιση τιμών των παραγομένων μεταβλητών πάνω στο κύκλωμα, σαν να τις βλέπαμε σε όργανα μέτρησης. o Εμφάνιση τμημάτων κυματομορφών των παραγομένων μεταβλητών σε διαφορετικές οθόνες. Η εμφάνιση των κυματομορφών θα γίνεται ανά περίοδο. Η εξομοίωση πρέπει να γίνεται παράλληλα με την εμφάνιση των αποτελεσμάτων. Θα υπάρχει δυνατότητα να μεταβούμε στις ενεργές, στις μέσες και στις στιγμιαίες τιμές. Οι τιμές θα εμφανίζονται στα όργανα μέτρησης. 3

8 Οι κυματομορφές θα σχεδιάζονται πάντα με βάση τις στιγμιαίες τιμές Θα έχουμε την δυνατότητα να μεταβούμε, ανά πάσα στιγμή θέλουμε, ανάμεσα στη φόρμα κυματομορφών και στην φόρμα εμφάνισης κυκλώματος. 4

9 ΚΕΦΑΛΑΙΟ 2 Ο ΚΙΝΗΤΗΡΙΟ ΣΥΣΤΗΜΑ ΣΥΝΕΧΟΥΣ ΡΕΥΜΑΤΟΣ ΜΕ ΜΟΝΟΦΑΣΙΚΟ ΑΝΟΡΘΩΤΗ 2.1 ΜΟΝΟΦΑΣΙΚΑ ΚΙΝΗΤΗΡΙΑ ΣΥΣΤΗΜΑΤΑ Αν το κύκλωµα τυµπάνου ενός κινητήρα συνεχούς ρεύµατος συνδεθεί στην έξοδο ενός ελεγχόμενου μονοφασικού ανορθωτή, η τάση τυµπάνου μπορεί να μεταβληθεί µε μεταβολή της γωνίας ελέγχου του ανορθωτή. Η βασική διάταξη κυκλώματος ενός μονοφασικού κινητήριου συστήματος συνεχούς ρεύµατος µε ξένη διέγερση φαίνεται στο Σχήµα 2.1. Σε μεγάλες γωνίες έναυσης το ρεύµα τυµπάνου μπορεί να είναι ασυνεχές και αυτό έχει σαν συνέπεια αυξημένες απώλειες κινητήρα. Συνήθως σε σειρά µε το τύλιγµα τυµπάνου συνδέεται ένα πηνίο εξομάλυνσης Lm για την μείωση της κυµάτωσης του ρεύµατος σε επιτρεπτό επίπεδο. Ένας άλλος μετατροπέας μπορεί να χρησιμοποιηθεί για την ρύθμιση του ρεύµατος διέγερσης µε μεταβολή της αντίστοιχης γωνίας έναυσης. Οι μετατροπείς αυτοί θα μπορούσαν να είναι µε ηµιέλεγχο ή µε πλήρη έλεγχο ανάλογα µε τις λειτουργικές απαιτήσεις του κινητηρίου συστήματος. Σχήµα 2.1 Βασική διάταξη μονοφασικού κινητηρίου συστήματος Ανάλογα µε το είδος του χρησιμοποιούμενου μετατροπέα τυµπάνου, τα κινητήρια συστήµατα συνεχούς ρεύµατος διακρίνονται σε 5

10 1. Μονοφασικά κινητήρια συστήµατα ηµικύµατος 2. Μονοφασικά ηµιελεγχόµενα κινητήρια συστήµατα 3. Μονοφασικά πλήρως ελεγχόμενα κινητήρια συστήµατα 4. Μονοφασικά κινητήρια συστήµατα µε δυαδικό μετατροπέα Μονοφασικά κινητήρια συστήµατα ηµικύµατος Το κύκλωµα φαίνεται στο Σχήµα 2.2. Το ρεύµα τυµπάνου είναι συνήθως ασυνεχές εκτός και αν συνδεθεί στο κύκλωµα τυµπάνου ένα μεγάλο πηνίο. Συνήθως πάντα είναι απαραίτητη µια δίοδος ελεύθερης ροής και το κινητήριο σύστηµα που προκύπτει είναι ενός τεταρτημορίου (θετικές τάσεις και ρεύµατα τυµπάνου). Οι εφαρμογές περιορίζονται µόνο στην περιοχή μερικών εκατοντάδων W. Ο μετατροπέας διέγερσης μπορεί να είναι ηµιελεγχόµενος. Σχήµα 2.2 Μονοφασικό κινητήριο σύστηµα ηµικύµατος. Με βάση τους παραπάνω μετατροπείς οι τάσεις τυµπάνου και διέγερσης θα είναι: V τ = V m 2π (1 + cosa τ) για 0 α τ π (τάση τυμπάνου) V δ = V m π (1 + cosa δ) για 0 α δ π (τάση διέγερσης) όπου V m το πλάτος της εναλλασόμενης τάσης τροφοδοσίας. 6

11 2.1.2 Μονοφασικά ηµιελεγχόµενα κινητήρια συστήµατα Ένας ηµιελεγχόµενος ανορθωτής τροφοδοτεί το κύκλωµα τυµπάνου όπως φαίνεται στο Σχήµα 2.3 ενώ το κύκλωµα διέγερσης τροφοδοτείται από επίσης ηµιελεγχόµενο ανορθωτή. Το συγκεκριµένο κινητήριο σύστηµα είναι σύστηµα ενός τεταρτημορίου και περιορίζεται σε εφαρμογές ισχύος μέχρι 15 KW. Στο ίδιο σχήµα φαίνονται και οι κυματομορφές ρεύµατος για ισχυρά επαγωγικό φορτίο. Σχήµα 2.3 Μονοφασικό ηµιελεγχόµενο κινητήριο σύστηµα Οι τάσεις τυµπάνου και διέγερσης µε τα παραπάνω συστήµατα μετατροπέων είναι: V τ = V m π (1 + cosa τ) για 0 α τ π (τάση τυμπάνου) V δ = V m π (1 + cosa δ) για 0 α δ π (τάση διέγερσης) όπου V m το πλάτος της εναλλασόμενης τάσης τροφοδοσίας Μονοφασικά πλήρως ελεγχόμενα κινητήρια συστήµατα Το κύκλωµα τυµπάνου τροφοδοτείται από πλήρως ελεγχόμενο μονοφασικό ανορθωτή όπως φαίνεται στο Σχήµα 2.4 ενώ το κύκλωµα διέγερσης τροφοδοτείται από πλήρως ελεγχόμενο ανορθωτή αν και θα μπορούσε να χρησιμοποιηθεί και πιο φθηνός ανορθωτής. Το συγκεκριµένο κινητήριο σύστηµα είναι δύο τεταρτημορίων και µπορεί να λειτουργήσει στο πρώτο και τέταρτο 7

12 τεταρτημόριο µε αντιστροφή της τάσης του ανορθωτή τυµπάνου. Κατά την διάρκεια της πέδησης πρέπει να αντιστρέφεται και η φορά του ρεύµατος διέγερσης για να αντιστραφεί η σχετική ΑΗΕ του κινητήρα. Η ισχύς του συστήματος περιορίζεται σε περίπου 15 KW. Σχήµα 2.4 Μονοφασικό πλήρως ελεγχόμενο κινητήριο σύστηµα Οι τάσεις τυµπάνου και διέγερσης µε τα παραπάνω συστήµατα μετατροπέων είναι: V τ = 2V m π (1 + cosa τ) για 0 α τ π (τάση τυμπάνου) V δ = 2V m π (1 + cosa δ) για 0 α δ π (τάση διέγερσης) όπου V m το πλάτος της εναλλασόμενης τάσης τροφοδοσίας. 8

13 ΚΕΦΑΛΑΙΟ 3 Ο Μερική Ανάλυση Neapolis Ver ΤΑ ΜΕΡΗ ΤΟΥ NEAPOLIS Το Νεάπολις αποτελείται από τρία κυρίως μέρη. Αυτά είναι το Neapolis (Neapoli.exe), το Neapart2 (Neapart2.exe), και το Neapart3(Neapart3.exe). Κάθε μέρος έχει τις δικές του συναρτήσεις και ο χρήστης που τρέχει το πρόγραμμα ξεκινάει με το πρώτο μέρος, το Neapolis, συνεχίζει με το δεύτερο και τελειώνει με το τρίτο και τελευταίο μέρος του προγράμματος. Παρακάτω εξηγείται συνοπτικά ο τρόπος λειτουργίας του κάθε κομματιού του προγράμματος. Neapart1 (Neapolis.exe): Σ αυτό το μέρος ο χρήστης μπορεί να επιλέξει την γλώσσα που επιθυμεί (αυτή την στιγμή οι διαθέσιμες γλώσσες του προγράμματος είναι η Ελληνική, η Αγγλική και η Ισπανική) και το είδος της συσκευής Ηλεκτρονικών Ισχύος που θέλει να μελετήσει. Μετά από αυτές τις ενέργειες είναι δυνατός ο προσδιορισμός των παραμέτρων του επιλεγμένου μοντέλου. Μια άλλη λειτουργία αυτού του τμήματος του προγράμματος είναι τα πολυμέσα, όπου ο χρήστης μπορεί να απολαύσει την αγαπημένη του μουσική και παράλληλα να εργάζεται με το πρόγραμμα Νεάπολις. Neapart2(Neapart2.exe): Σ αυτό το μέρος γίνεται η προσομοίωση της συσκευής που επιλέχθηκε στο πρώτο μέρος. Ο χρήστης μπορεί να δει τις διάφορες κυματομορφές των μεταβλητών που έχει επιλέξει. Οι παράμετροι των μεταβλητών μπορούν να αλλάξουν πριν και κατά την διάρκεια της προσομοίωσης. Στο κομμάτι αυτό, βρίσκεται και η ανανεωμένη φόρμα της «Εμφάνισης Κυκλώματος» το οποίο είναι το κύριο αντικείμενο αυτής της πτυχιακής. Neapart3(Neapart3.exe): Στο τελευταίο μέρος του Νεάπολις, το πρόγραμμα λαμβάνει τα αποτελέσματα της προσομοίωσης. Τα δεδομένα αυτά αναλύονται και υπολογίζονται μεγέθη όπως οι ενεργές τιμές και οι τιμές των αρμονικών. Ο χρήστης μπορεί, με τις αντίστοιχες επιλογές από το μενού αυτού του τμήματος του Νεάπολις, να δει τις τιμές αυτές. 9

14 3.2 NEAPOLIS(NEAPOLIS.EXE) Οθόνη αρχικών ρυθμίσεων Για να ξεκινήσει το πρόγραμμα Νεάπολις ο χρήστης, πρέπει να πατήσει διπλό αριστερό κλικ με το ποντίκι, πάνω στο εικονίδιο του εκτελέσιμου αρχείου Neapolis.exe. Το αρχείο αυτό βρίσκεται μέσα στον κατάλογο \Nea4. Υπάρχουν και άλλα εκτελέσιμα αρχεία μέσα σ' αυτόν τον κατάλογο αλλά υποχρεωτικά ο χρήστης πρέπει να ξεκινήσει με αυτό. Η φόρμα η οποία θα φορτωθεί φαίνεται στο παρακάτω σχήμα. Σχήμα 3.1 : Νeapolis.exe Στην φόρμα αυτή ο χρήστης μπορεί να διακρίνει τρία κύρια τμήματα. Την μπάρα ρυθμίσεων που φαίνεται στο σχήμα 3.2, το μενού επιλογής της γλώσσας στο σχήμα 3.3 και το βασικό μενού επιλογών του Neapolis στο σχήμα

15 Σχήμα 3.2: Μπάρα Επιλογών Σχήμα 3.3: Μενού επιλογής γλώσσας Σχήμα 3.4: Βασικό μενού επιλογών Στην μπάρα επιλογών υπάρχουν τα συστήματα, από τα οποία πρέπει να επιλέξει ένα ο χρήστης. Αντίστοιχα το ίδιο πρέπει να πράξει κα από το μενού επιλογών γλώσσας. Οι γλώσσες που είναι ενεργές αυτήν την στιγμή είναι τα Ελληνικά, τα Αγγλικά και τα Ισπανικά. Τέλος στο βασικό μενού επιλογών υπάρχουν τα κουμπιά σύνδεσης με τα υπόλοιπα τμήματα του Neapolis. Συγκεκριμένα ο «Προσδιορισμός συστήματος» που αποτελεί κομμάτι του Neapolis.exe, η «Προσομοίωση συστήματος» που αποτελεί κομμάτι του Neapart2.exe και τέλος η «Επεξεργασία αποτελεσμάτων» που αποτελεί τμήμα του Neapart3.exe. Ο χρήστης γενικότερα πρέπει να ακολουθήσει την σειρά ενεργοποίησης των κουμπιών, όπως εμφανίζονται αυτά στην οθόνη, αν θέλει να λειτουργήσει η εξομοίωση που έχει επιλέξει και να μπορεί να επεξεργαστεί τα αποτελέσματα αυτής. Δηλαδή πρέπει 11

16 πρώτα να γίνει ο «Προσδιορισμός Συστήματος», μετά η «Προσομοίωση συστήματος» και τέλος η «Επεξεργασία αποτελεσμάτων» Φόρμα «Προσδιορισμού συστήματος» Η φόρμα αυτή εμφανίζεται πατώντας το κουμπί με το αντίστοιχο όνομα, από την φόρμα οθόνης των αρχικών ρυθμίσεων. Η καινούργια εκδοχή της φόρμας αυτής(στο Neapolis v 6.0) φαίνεται στο σχήμα 3.5. Σχήμα 3.5: «Προσδιορισμός συστήματος» Από το σχήμα 3.5 διαπιστώνουμε ότι η φόρμα αυτή θα μπορούσε να χωρισθεί σε τρία μέρη: Την μπάρα επιλογών, την οθόνη κυκλωμάτων και χαρακτηριστικών του συστήματος και στα κουμπιά αλλαγής των στοιχείων, για τον προσδιορισμό των ιδιοτήτων του συστήματος. Η μπάρα επιλογών διακρίνουμε ότι αποτελείται από το «Αρχείο», «Πρόγραμμα», «Γραφικά» και «Βοήθεια» που αναλύονται αναλυτικότερα στο εγχειρίδιο χρήσης του Neapolis. 12

17 Στην οθόνη κυκλωμάτων και χαρακτηριστικών του συστήματος, βλέπουμε μια μικρογραφία του ηλεκτρονικού κυκλώματος, το οποίο αντιστοιχεί κάθε φορά με το είδος επιλογής που έχει γίνει, πατώντας τα κουμπιά «Αλλαγή στοιχείων». Επίσης διακρίνουμε στην οθόνη αυτή και τα χαρακτηριστικά των επιλογών που έχουμε κάνει, από τα αντίστοιχα μενού που εμφανίζονται πατώντας τα παραπάνω κουμπιά. 3.3 Neapart2(Neaprt2.exe) Για να πάμε στο Nepart2, θα πρέπει να έχει ακολουθηθεί ήδη ο «Προσδιορισμός Συστήματος», για να γίνει επιλέξιμο το αντίστοιχο κουμπί, από την αρχική οθόνη επιλογών, όπως ακριβώς φαίνεται στο σχήμα 3.6 Σχήμα 3.6: Εμφάνιση επιλογής «Προσομοίωση συστήματος» Η προσομοίωση συστήματος θα μπορούσε κανείς να πει, ότι αποτελείται από δύο κύριες φόρμες. Από την φόρμα κυματομορφών και την φόρμα εμφάνισης κυκλώματος, που είναι και το κύριο αντικείμενο αυτής της πτυχιακής Οθόνη κυματομορφών συστήματος Όπως διακρίνεται στο σχήμα 3.7 στην φόρμα αυτή μπορεί να διακρίνει τις κυματομορφές των μεταβλητών που προκύπτουν κάθε φορά, από τις αντίστοιχες επιλογές που έχουν γίνει στην φόρμα «Προσδιορισμός συστήματος. 13

18 Σχήμα 3.7: Οθόνη κυματομορφών Οθόνη εμφάνισης κυκλώματος Η οθόνη αυτή εμφανίζεται αν ο χρήστης από την μπάρα επιλογών της οθόνης κυματομορφών πατήσει την επιλογή «Αρχείο» και κατόπιν την «Εμφάνιση κυκλώματος». Μέχρι στιγμής υπάρχουν δύο περιπτώσεις. Μια να εμφανιστεί η φόρμα του σχήματος 3.8 και μια δεύτερη να εμφανιστεί η φόρμα του σχήματος 3.9. Αυτό συμβαίνει γιατί δεν έχει ολοκληρωθεί η αντικατάσταση όλων των μικρογραφιών των ηλεκτρονικών κυκλωμάτων με τις τελικές φόρμες της εμφάνισης του εναλλακτικού περιβάλλοντος εξομοίωσης. Και αυτό γιατί είναι μια διαδικασία αρκετά χρονοβόρα. Την στιγμή που γράφθηκε η πτυχιακή, φόρμες εναλλακτικής προσομοίωσης που έχουν ολοκληρωθεί, είναι εκείνη του μονοπαλμικού μετατροπέα και του κινητηρίου συστήματος με 1-φασικό ανορθωτή, που είναι και το κύριο θέμα αυτής της πτυχιακής. Στις υπόλοιπες περιπτώσεις κατά την επιλογή της «Εμφάνισης Κυκλώματος» θα εμφανίζονται σχήματα όπως αυτό του σχήματος

19 Σχήμα 3.8: Αποτέλεσμα της μη ολοκληρωμένης «Εμφάνιση Κυκλώματος» Σχήμα 3.9: Αποτέλεσμα ολοκληρωμένης φόρμας «Εμφάνιση Κυκλώματος 15

20 3.4 Neapart3(Neapart3.exe) Για να ενεργοποιηθεί η επιλογή που θα μας οδηγήσει στην έναρξη του Neapart3 θα πρέπει πρώτα να έχει προηγηθεί ο «Προσδιορισμός Συστήματος» και η «Προσομοίωση κυκλώματος». Μόλις γίνει αυτό θα ενεργοποιηθεί η επιλογή της «Επεξεργασίας Αποτελεσμάτων» στην αρχική οθόνη ρυθμίσεων, όπως φαίνεται στο σχήμα 3.10 Σχήμα 3.10: Ενεργοποίηση «Επεξεργασίας Αποτελεσμάτων» Πατώντας το κουμπί της επεξεργασίας αποτελεσμάτων οδηγούμαστε στο Neapart3 και στην οθόνη του σχήματος 3.11 Σχήμα 3.11: Οθόνη επεξεργασίας Αποτελεσμάτων 16

21 Η αναλυτική περιγραφή της λειτουργίας του Neaprt3, γίνεται στο εγχειρίδιο χρήσης του Νeapolis. ΚΕΦΑΛΑΙΟ 4 Ο Εγχειριδιο χρήστη Περιγραφή εναλλακτικής φόρμας εξομοίωσης 4.1 Διαδικασία για την εισαγωγή στο εναλλακτικό περιβάλλον προσομοίωσης, μέσω της επιλογής «Εμφάνισης Κυκλώματος». Όπως ήδη προαναφέρθηκε, οι περιπτώσεις που υπάρχει δυνατότητα για την εμφάνιση του εναλλακτικού περιβάλλοντος προσομοίωσης, είναι η περίπτωση του μονοπαλμικού μετατροπέα και το κινητήριο σύστημα συνεχούς ρεύματος με 1- φασικό(μονοπαλμικό ειδικότερα) ανορθωτή. Για να το καταφέρουμε αυτό θα πρέπει πρώτα να επιλέξουμε ένα από τα δύο συστήματα, όπως φαίνεται στα σχήματα και αντίστοιχα, από την φόρμα του κυρίως μενού. 17

22 Σχήμα 4.1.1: Επιλογή 1-φασικού μετατροπέα Σχήμα 4.1.2: Επιλογή Κινητηρίου συστήματος 1-φασικού ανορθωτή 18

23 Αφού γίνει αυτό και επιλέξουμε ένα από τα δύο συστήματα, ενεργοποιείται η επιλογή «Προσδιορισμός Συστήματος» στο μενού επιλογών της αρχικής οθόνης ρυθμίσεων. Κατόπιν πατάμε το κουμπί αυτό και οδηγούμαστε στην αντίστοιχη οθόνη. Για την περίπτωση μας, θεωρούμε ότι έχουμε επιλέξει το Κινητήριο σύστημα συνεχούς ρεύματος 1-φασικού ανορθωτή, μιας και είναι το θέμα της πτυχιακής. Μόλις εμφανιστεί η οθόνη του «Προσδιορισμού Συστήματος», πατάμε την αλλαγή στοιχείων ανορθωτή, όπως φαίνεται στο σχήμα Σχήμα 4.1.3: Αλλαγή στοιχείων ανορθωτή Προσοχή! Τόσο στην περίπτωση του μονοπαλμικού μετατροπέα όσο και στην περίπτωση του κινητηρίου συνεχούς ρεύματος ΣΡ με 1-φασικό ανορθωτή, θα πρέπει να επιλεγεί ο μονοπαλμικός ανορθωτής. Οι υπόλοιπες ρυθμίσεις μας είναι αδιάφορες. Αν δεν γίνει αυτό δεν θα μπορέσουμε να εισέλθουμε στην φόρμα της εναλλακτικής προσομοίωσης και το πιο πιθανό είναι να εμφανιστεί, είτε το σχήμα κυκλώματος που αντιστοιχεί πατώντας την «Εμφάνιση Κυκλώματος» στην οθόνη των κυματομορφών στην προσομοίωση συστήματος, είτε να εμφανιστεί ένα μήνυμα το ότι δεν υπάρχει σχήμα για το συγκεκριμένο κύκλωμα. Αφού ολοκληρωθεί το παραπάνω βήμα και γίνουν και οι υπόλοιπες ρυθμίσεις στον «Προσδιορισμό Συστήματος», στην μπάρα επιλογών πατάμε «Αρχείο» και κατόπιν Έξοδος. Τώρα έχουν αποθηκευτεί η ρυθμίσεις μας και αφού κλείσει η προηγούμενη οθόνη, στην αρχική οθόνη ρυθμίσεων έχει ενεργοποιηθεί η επιλογή «Προσομοίωση Συστήματος», όπως έχουμε ήδη δει στο σχήμα 3.6. Πατάμε το αντίστοιχο κουμπί και βγαίνουμε στην κύρια οθόνη προσομοίωσης, με τις κυματομορφές. Τέλος σε αυτήν την οθόνη πατάμε στην μπάρα επιλογών το 19

24 «Αρχείο» και εκεί εμφανίζεται η επιλογή «Εμφάνιση κυκλώματος» όπως φαίνεται στο σχήμα Αυτή θα μας οδηγήσει στην εναλλακτική φόρμα εξομοίωσης. Σχήμα 4.1.4: Επιλογή «Εμφάνισης Κυκλώματος» 4.2 Μέρη της φόρμας «Εμφάνιση Κυκλώματος» Θεωρώντας ότι έχουμε μπει στην φόρμα αυτή με την διαδικασία που περιγράψαμε, όταν φορτωθεί, παίρνουμε το αποτέλεσμα του σχήματος

25 Σχήμα : Φόρμα «Εμφάνισης Κυκλώματος» Η φόρμα αυτή αποτελείται από τα εξής μέρη: Μπάρα Επιλογών Η μπάρα επιλογών αποτελείται από τα υπομενού «Αρχείο», «Εκτύπωση», «Πειράματα», «Βοήθεια». «Αλλαγή», Υπομενού «Αρχείο» Στο υπομενού αυτό υπάρχουν οι εξής επιλογές, όπως φαίνεται στο σχήμα Σχήμα 4.2.2: Υπομενού «Αρχείο» Με την επιλογή «Έναρξη» γίνεται η έναρξη της εξομοίωσης. Με την επιλογή «Εμφάνιση Κυματομορφών» επιστρέφουμε στο περιβάλλον εξομοίωσης με τις κυματομορφές. 21

26 Με την επιλογή «Παύση» σταματάει προσωρινά η εξομοίωση και η επανάληψη του πατήματος αυτού του κουμπιού συνεχίζει την εξομοίωση. Με την επιλογή «Έξοδος» βγαίνουμε από το περιβάλλον εξομοίωσης και επιστρέφουμε στην φόρμα του Neapolis. Υπομενού «Αλλαγή» Στο υπομενού αυτό υπάρχουν οι εξής επιλογές, όπως φαίνεται στο σχήμα Σχήμα 4.2.3: Υπομενού «Αλλαγή» Δηλαδή μπορούμε να αλλάξουμε μεταβλητές που είχαν οριστεί αρχικά στην φόρμα «Προσδιορισμός Συστήματος», που στο Κινητήριο Σύστημα συνεχούς ρεύματος με 1-παλμικό ανορθωτή, είναι η τάση τροφοδοσίας του μονοπαλμικού μετατροπέα, η συχνότητα του, η ροπή του φορτίου, η γωνία έναυσης και η τάσης διέγερσης του κινητήρα. Υπομενού «Εκτύπωση» Στο υπομενού αυτό όπως φαίνεται στο σχήμα 4.2.4, γίνεται η εκτύπωση του εκάστοτε ηλεκτρονικού κυκλώματος, χωρίς όμως τα όργανα μέτρησης Σχήμα 4.2.4: Υπομενού «Εκτύπωση» Υπομενού «Πειράματα» Εδώ όπως φαίνεται στο σχήμα 4.2.5, μπορεί να γίνει χρήση της αυτόματης φόρτισης, μια διαδικασία που υπάρχει και στην φόρμα των κυματομορφών και περιγράφεται αναλυτικά στο εγχειρίδιο χρήσης του Νεάπολις. 22

27 Σχήμα 4.2.5: Υπομενού «Πειράματα» Υπομενού «Βοήθεια» Εδώ βρίσκεται η επιλογή της «θεωρίας» για το εκάστοτε σύστημα Οθόνη Κυκλώματος Στην οθόνη αυτή διακρίνεται το εκάστοτε ηλεκτρονικό κύκλωμα και τα όργανα μέτρησης, όπως φαίνεται για την περίπτωση του κινητηρίου συστήματος ΣΡ με 1 παλμικό ανορθωτή με μεικτή διέγερση, στο σχήμα Σχήμα : Οθόνη Κυκλώματος Μπάρα Εμφάνισης Αποτελεσμάτων Η μπάρα αυτή όπως φαίνεται στο σχήμα περιέχει τα κουμπιά για την εμφάνιση των κυματομορφών στην διάρκεια μιας περιόδου και τα κουμπιά για την αλλαγή της εμφάνισης των αποτελεσμάτων στα όργανα μετρήσεων από μια κατάσταση σε μια άλλη. Σχήμα 4.2.7: Μπάρα εμφάνισης αποτελεσμάτων Πιο συγκεκριμένα τα κουμπιά, κατά σειρά εμφάνισης, έχουν τις εξής λειτουργίες: Is: Εμφανίζει την κυματομορφή του ρεύματος εισόδου. Vs: Εμφανίζει την κυματομορφή της τάσης εισόδου. 23

28 Vt: Εμφανίζει την κυματομορφή της τάσης βαλβίδος. It: Εμφανίζει την κυματομορφή του ρεύματος βαλβίδος. Vo: Εμφανίζει την κυματομορφή της τάσης εξόδου Io: Εμφανίζει την κυματομορφή του ρεύματος εξόδου Tr: Εμφανίζει την κυματομορφή της ροπής κινητήρα Sp: Εμφανίζει την κυματομορφή της ταχύτητας του κινητήρα Inst: Εμφανίζει στα όργανα μετρήσεων στιγμιαίες τιμές. (Προεπιλογή) Rms: Εμφανίζει στα όργανα μετρήσεων ενεργές τιμές. Aver: Εμφανίζει στα όργανα μετρήσεων μέσες τιμές. Αξίζει να αναφερθεί ότι οι αλλαγές αυτές και η εμφάνιση των αποτελεσμάτων μπορούν να γίνουν καθόλη την διάρκεια της εξομοίωσης. Ένα παράδειγμα του πως είναι το σύστημα κατά την διάρκεια της εμφάνισης των αποτελεσμάτων φαίνεται στο σχήμα Σχήμα 4.2.8: Εμφάνιση αποτελεσμάτων 4.3 Αλλαγές τιμών στο κύκλωμα Οι αλλαγές τιμών στο κύκλωμα γίνεται με τον ίδιο τρόπο, όποιο κύκλωμα κι αν επιλέξουμε. Για αυτό το λόγο θα εξετάσουμε μόνο ένα κύκλωμα το οποίο είναι: 1-24

29 φασικός 1-παλμικός ανορθωτής με πλήρη έλεγχο (χωρίς δίοδο ελεύθερης ροής) Κατά την προσομοίωση μπορούμε να αλλάξουμε αρκετές τιμές του κυκλώματος ώστε να δούμε πως ανταποκρίνεται σε κάθε αλλαγή το σύστημα. Αρχικά θα πάρουμε σαν εικόνα του συστήματος την κατάσταση πριν την αλλαγή και έπειτα την κατάσταση αφού σταθεροποιηθεί το σύστημα μετά την αλλαγή. Παρακάτω παρουσιάζονται στο Σχήμα οι κυματομορφές Is και Vo πριν την αλλαγή. Σχήμα 4.3.1: Πρώτη εικόνα των κυματομορφών Is και Vo. Έστω ότι θέλουμε να αλλάξουμε τη γωνία έναυσης. Θα επιλέξουμε από το υπομενού Αλλαγή -> Γωνία έναυσης και θα εμφανιστεί ένα πλαίσιο εισόδου για την εισαγωγή της νέας γωνίας. Η εικόνα αυτής της περιγραφής φαίνεται στο Σχήμα

30 Σχήμα 4.3.2: Πλαίσιο εισαγωγής νέας τιμής γωνίας έναυσης. Το μηδέν που έχει στο πλαίσιο εισόδου είναι η τρέχουσα τιμή της γωνίας έναυσης τη στιγμή που ζητάμε την αλλαγή. Έστω ότι πληκτρολογήσουμε έναν αρνητικό αριθμό ή έναν αριθμό μεγαλύτερο του εκατόν πενήντα και πατάμε OK Τα μηνύματα και για τις δύο αυτές επιλογές φαίνονται στο Σχήμα Σχήμα 4.3.4: Μηνύματα προειδοποίησης ορίων. Αμέσως μετά θα εμφανίσει ξανά το πλαίσιο του Σχήματος έως ότου δώσουμε μια έγκυρη τιμή είτε πληκτρολογήσουμε κενή απάντηση είτε πατήσουμε Cancel ώστε να ακυρώσουμε την επιλογή και να μην αλλάξει τίποτα. Έστω ότι δίνουμε εξήντα μοίρες για γωνία έναυσης. Το πρόγραμμα ανταποκρίνεται όπως φαίνεται στη δεύτερη εικόνα των κυματομορφών Is και Vo Σχήμα

31 Σχήμα 4.3.5: Δεύτερη εικόνα των κυματομορφών Is και Vo. Η αγωγή εδώ σε σχέση με τις προηγούμενες κυματομορφές ξεκινάει πολύ αργότερα. Γίνονται αλλαγές και σε άλλες μεταβλητές, αλλά επειδή γίνονται με τον ίδιο τρόπο η αναφορά θεωρήθηκε περιττή. Όταν τελειώσει η εξομοίωση θα εμφανιστεί ένα μήνυμα στην οθόνη το οποίο παραπέμπει σε συνέχιση προσομοίωσης. Βλ Σχήμα Σχήμα 4.3.6: Ερώτηση για συνέχιση προσομοίωσης. 27

32 Εάν απαντήσουμε Όχι αυτομάτως κλείνει ότι έχει σχέση με το δεύτερο μέρος του Neapolis. Εάν απαντήσουμε ναι θα εμφανιστεί ένα πλαίσιο εισόδου, ώστε να του πούμε για πόσες περιόδους θα συνεχιστεί η εξομοίωση. Βλ Σχήμα Σχήμα 4.3.7: Εισαγωγή περιόδων για συνέχιση προσομοίωσης. Από τη στιγμή που έχουμε απαντήσει στην παραπάνω ερώτηση να συνεχιστεί η εξομοίωση και εμφανιστεί το πλαίσιο του Σχήματος 5.20 δεν μπορούμε να αποφύγουμε τη συνέχιση. Παραδείγματος χάριν, είτε Πατήσουμε Cancel είτε δώσουμε κενή απάντηση εμφανίζεται συνέχεια το ίδιο πλαίσιο αναμένοντας μια έγκυρη τιμή. Αν όμως η τιμή είναι μικρότερη της μονάδος ένα μήνυμα εμφανίζεται στην οθόνη. Βλ Σχήμα Σχήμα 4.3.8: Μήνυμα προειδοποίησης λανθασμένης τιμής. Πατώντας ΟΚ επαναλαμβάνεται η διαδικασία που είπαμε παραπάνω. 28

33 4.4 Αλλαγή χρώματος σχεδίασης Άλλη μια επιλογή στην ενναλακτική φόρμα εξομοίωσης είναι η αλλαγή του χρώματος του σχεδιαζόμενου κάθε φορά κυκλώματος. Κάνοντας δεξί κλικ στο χώρο σχεδίασης του κυκλώματος εμφανίζεται ένα αναδυόμενο μενού όπως φαίνεται στο Σχήμα Σχήμα 4.3.1: Αλλαγή χρώματος στο κύκλωμα Το αναδυόμενο μενού δε φαίνεται τόσο καθαρά όπως στο Σχήμα Σχήμα 4.3.2: Αναδυόμενο μενού Αλλαγής χρώματος Αλλαγή χρώματος μπορούμε να κάνουμε είτε έχει ξεκινήσει η προσομοίωση είτε όχι. 29

34 Κάνοντας κλικ στο Κυκλώματος εμφανίζεται ένα ColorDialog ώστε να επιλέξουμε το χρώμα που θέλουμε. Βλ Σχήμα Σχήμα 4.3.4: ColorDialog Εάν πατήσουμε άκυρο δε θα κάνει καμία αλλαγή στο χρώμα εάν όμως επιλέξουμε το μπλε, το κύκλωμα θα γίνει όπως φαίνεται στο Σχήμα

35 Σχήμα 4.3.5: Σχεδίαση κυκλώματος με μπλε χρώμα. Κατά την εξομοίωση, αν άγει το θυρίστορ, τότε συμπληρώνεται με το χρώμα σχεδίασης. Την τρέχουσα στιγμή κάναμε το χρώμα σχεδίασης να είναι το μπλε. Συνεπώς το θυρίστορ θα συμπληρωθεί με μπλε χρώμα. Βλ Σχήμα

36 Σχήμα 4.3.6: Αγωγή θυρίστορ με επιλεγμένο χρώμα σχεδίασης το μπλε. 32

37 ΚΕΦΑΛΑΙΟ 5 Ο Κυκλώματα που αναπτύχθηκαν Εμφάνιση αποτελεσμάτων 5.1 Κυκλώματα που αναπτύχθηκαν Στην ενότητα αυτή θα παρουσιάσουμε σχηματικά, όλα τα κυκλώματα που αναπτύχθηκαν. Η εμφάνιση αυτών των κυκλωμάτων καθορίζεται όπως ήδη έχουμε αναφέρει, από τις παραμέτρους που δίνονται από τον χρήστη στην αρχική οθόνη επιλογών, όπου εκεί καθορίζεται το είδος του συστήματος και στην φόρμα προσδιορισμού του συστήματος, όπου εκεί καθορίζονται οι ιδιότητες του συστήματος. Στην πτυχιακή αυτή επανασχεδιάσθηκε το κύκλωμα του 1 παλμικού μετατροπέα, λόγω της αλλαγής του κώδικα σχεδιασμού, ενώ σχεδιάσθηκε εκ του μηδενός το κύκλωμα του κινητηρίου συστήματος συνεχούς ρεύματος με μονοπαλμικό μετατροπέα. Πιο συγκεκριμένα τα κυκλώματα που αναπτύχθηκαν είναι: Κύκλωμα μονοπαλμικού μετατροπέα. (Σύνολο 4 κυκλώματα) o Είδη ελέγχου : Με πλήρη και χωρίς έλεγχο. o Δίοδος Ελεύθερης ροής : Με και χωρίς δίοδο. Κύκλωμα Κινητηρίου Συστήματος Συνεχούς Ρεύματος με 1-παλμικό ανορθωτή(σύνολο 16 κυκλώματα) o Είδη ελέγχου : Με πλήρη και χωρίς έλεγχο. o Δίοδος Ελεύθερης ροής : Με και χωρίς δίοδο. o Είδος Διέγερσης : Σε σειρά, παράλληλη, ξένη, μεικτή διέγερση Σημείωση: Επειδή στον μονοπαλμικό μετατροπέα η ανόρθωση του εναλλασσομένου γίνεται με μία δίοδο η περίπτωση ελέγχου «Οριζόμενη από τον χρήστη» ταυτίζεται με τα υπόλοιπα είδη ελέγχου και έτσι έχουμε στην ουσία μόνο δύο περιπτώσεις ελέγχου. Από κει οφείλεται και η εμφάνιση 4 κυκλωμάτων και όχι 6 για τον μονοπαλμικό μετατροπέα και 16 και όχι 24 στο κινητήριο σύστημά μας. Στον κώδικα μας βέβαια η επιλογή «Οριζόμενη από τον χρήστη», στο είδος ελέγχου του ανορθωτή, λειτούργει κανονικά και σε ότι αφορά τις περιπτώσεις των 33

38 κυκλωμάτων αυτές ανάγονται στις πραγματικές και έτσι για την περίπτωση του κινητηρίου συστήματος γίνονται 24. Στα σχήματα που ακολουθούν έχουμε τις περιπτώσεις των κυκλωμάτων στην πιο σύνθετη μορφή τους, δηλαδή με πλήρη έλεγχο και δίοδο ελεύθερης ροής παλμικός ανορθωτής με πλήρη έλεγχο και δίοδο ελεύθερης ροής. Εάν ο χρήστης κατά το προσδιορισμό συστήματος επιλέξει μονοφασικό ανορθωτή ενός παλμού με πλήρη έλεγχο και από το μενού επιλέξει να έχει δίοδο ελεύθερης ροής και κατόπιν πατήσει προσομοίωση συστήματος, ενώ έπειτα από το υπομενού File της φόρμας με τις κυματομορφές που θα εμφανιστεί, επιλέξει Show Circuit, θα εμφανιστεί η φόρμα όπως φαίνεται στο Σχήμα Σχήμα : Φόρμα κυκλώματος 1-φασικού 1-παλμικού ανορθωτή με πλήρη έλεγχο και δίοδο ελεύθερης ροής. 34

39 Παρατηρούμε ότι το μεγαλύτερο μέρος της φόρμας καταλαμβάνεται από το κύκλωμα, πάνω στο οποίο τοποθετούνται μερικά TextBoxes που έχουν σαν κείμενο είτε V είτε A. Αυτό γίνεται διότι έχουν οριστεί σαν βολτόμετρα ή αμπερόμετρα. Θα είναι δηλαδή τα όργανα μέτρησης πάνω στα οποία θα εμφανίζονται οι στιγμιαίες τιμές του κυκλώματος. Οι λεζάντες του μενού είναι στα ελληνικά, επειδή στο πρώτο μέρος του Neapolis έχει επιλεγεί η ελληνική γλώσσα. Η σχεδίαση του κυκλώματος γίνεται σύμφωνα με αυτά που έχει ορίσει ο χρήστης στο προσδιορισμό συστήματος. Έχουμε βάλει πλήρη έλεγχο για αυτό και σχεδιάζεται ένα θυρίστορ στο πάνω μέρος του κυκλώματος. Έχουμε βάλει δίοδο ελεύθερης ροής για αυτό τη βλέπουμε να σχεδιάζεται στην έξοδο. Κάτω από το κύκλωμα, βλέπουμε την μπάρα κουμπιών. Κάθε κουμπί με εξαίρεση των Inst, Rms, Aver αντιστοιχεί με ένα όργανο μέτρησης. Όσα δηλαδή είναι τα TextBoxes πρέπει να είναι και τα κουμπιά αυτά πλην των τριών που είπαμε πριν. Κάνοντας κλικ σε κάποιο από τα κουμπιά αυτά, εάν είχαμε ξεκινήσει την εξομοίωση θα εμφάνιζε μία καμπύλη που έχει σχέση με τις τιμές που βγάζει το αντίστοιχο όργανο μέτρησης. Όλα αυτά θα τα δούμε αργότερα. Τα κουμπιά Inst, Rms, Aver προσδιορίζουν τις τιμές που θα εμφανίζουν τα όργανα μέτρησης. Σαν προεπιλογή είναι η Inst. Με την επιλογή αυτή θα εμφανίζονται οι στιγμιαίες τιμές στα όργανα μέτρησης. Με την επιλογή Rms εμφανίζονται οι ενεργές τιμές στα όργανα μέτρησης ενώ με την Aver οι μέσες τιμές. Σημείωση Ανεξαρτήτως ποια τιμή έχουμε επιλέξει να εμφανίζεται στα όργανα μέτρησης, οι κυματομορφές σχεδιάζονται πάντα με βάση τις στιγμιαίες τιμές. Όπως και η φόρμα με τις κυματομορφές έτσι και αυτή η φόρμα έχουν διάφορες επιλογές μέσω ενός μενού όπως φαίνεται στο Σχήμα

40 Σχήμα 5.2.2: Μενού της φόρμας του κυκλώματος. Το μενού πλησιάζει αυτό της φόρμας με τις κυματομορφές γιατί η παρέμβαση στο σύστημα πρέπει να γίνεται και από τις δύο φόρμες. Μία διαφορά είναι ότι επιλέγοντας την εκτύπωση στη φόρμα κυματομορφών εμφάνιζε ένα υπομενού που μας έλεγε να εκτυπώσουμε ολόκληρη τη φόρμα ενώ στη φόρμα μας εμφανίζει το υπομενού όπως φαίνεται στο Σχήμα Σχήμα 5.2.3: Υπομενού εκτύπωσης κυκλώματος Εάν πατήσουμε να εκτυπωθεί το κύκλωμα, δε θα εκτυπωθεί όπως φαίνεται στη φόρμας μας, μαζί με τα όργανα μέτρησης. Θα εκτυπωθεί μόνο το κύκλωμα, σαν να το σχεδιάζαμε σε χαρτί. Το αποτέλεσμα της εκτύπωσης φαίνεται στην επόμενη σελίδα. 36

41 5.3 Κινητήριο Σύστημα συνεχούς ρεύματος(κ.σ.σ.ρ) 1-παλμικού ανορθωτή με διέγερση σειράς, με πλήρη έλεγχο και δίοδο ελεύθερης ροής. Αν κατά το προσδιορισμό συστήματος εκτός από την επιλογή διόδου ελεύθερης ροής και 1- παλμικού ανορθωτή, επιλέξουμε και κινητήριο σύστημα με διέγερση σειράς τότε θα εμφανιστεί το κύκλωμα του σχήματος όπως φαίνεται παρακάτω. 37

42 Σχήμα : Κύκλωμα Κ.Σ.Σ.Ρ 1-παλμικού ανορθωτή με διέγερση σειράς Κι εδώ ισχύουν τα ίδια με αυτά που αναφέρθηκαν στην προηγούμενη ενότητα. Δηλαδή έχουμε το κύκλωμα να καταλαμβάνει το μεγαλύτερο μέρος της φόρμας και τα όργανα μέτρησης (TextBoxes) που ορίζονται σαν βολτόμετρα και αμπερόμετρα στα οποία θα εμφανίζονται οι στιγμιαίες τιμές του κυκλώματος. Η σχεδίαση του κυκλώματος γίνεται σύμφωνα με αυτά που έχει ορίσει ο χρήστης στο προσδιορισμό συστήματος. Έχουμε βάλει πλήρη έλεγχο για αυτό και σχεδιάζεται ένα θυρίστορ στο πάνω μέρος του κυκλώματος. Έχουμε βάλει δίοδο ελεύθερης ροής για αυτό τη βλέπουμε να σχεδιάζεται στην έξοδο. Κάτω από το κύκλωμα, βλέπουμε την μπάρα κουμπιών η οποία σε σχέση με την προηγούμενη έχει δυο διαφορετικά κουμπιά και ένα λιγότερο. Το κουμπί αυτό είναι το Ifw που είναι το ρεύμα της διόδου και συμπίπτει με το ρεύμα Ιο που είναι το ρεύμα εξόδου του μονοπαλμικού μετατροπέα και ταυτόχρονα ρεύμα εισόδου για το κινητήριο σύστημά μας. Επίσης διακρίνουμε δύο νέα κουμπιά αυτό της ροπής Τr και της ταχύτητας Sp. 38

43 Η εκτύπωση αυτού του κυκλώματος φαίνεται παρακάτω. 5.4 Κινητήριο Σύστημα συνεχούς ρεύματος(κ.σ.σ.ρ) 1-παλμικού ανορθωτή με παράλληλη διέγερση, με πλήρη έλεγχο και δίοδο ελεύθερης ροής. Αν κατά το προσδιορισμό συστήματος εκτός από την επιλογή διόδου ελεύθερης ροής και 1- παλμικού ανορθωτή, επιλέξουμε και κινητήριο σύστημα με παράλληλη διέγερση τότε θα εμφανιστεί το κύκλωμα του σχήματος όπως φαίνεται παρακάτω. 39

44 Σχήμα : Κύκλωμα Κ.Σ.Σ.Ρ 1-παλμικού ανορθωτή με παράλληλη διέγερση Κι εδώ ισχύουν τα ίδια με αυτά που αναφέρθηκαν στην προηγούμενη ενότητα. Δηλαδή έχουμε το κύκλωμα να καταλαμβάνει το μεγαλύτερο μέρος της φόρμας και τα όργανα μέτρησης (TextBoxes) που ορίζονται σαν βολτόμετρα και αμπερόμετρα στα οποία θα εμφανίζονται οι στιγμιαίες τιμές του κυκλώματος. Η σχεδίαση του κυκλώματος γίνεται σύμφωνα με αυτά που έχει ορίσει ο χρήστης στο προσδιορισμό συστήματος. Έχουμε βάλει πλήρη έλεγχο για αυτό και σχεδιάζεται ένα θυρίστορ στο πάνω μέρος του κυκλώματος. Έχουμε βάλει δίοδο ελεύθερης ροής για αυτό τη βλέπουμε να σχεδιάζεται στην έξοδο. Η εκτύπωση αυτού του κυκλώματος φαίνεται στην επόμενη σελίδα. 40

45 5.5 Κινητήριο Σύστημα συνεχούς ρεύματος(κ.σ.σ.ρ) 1-παλμικού ανορθωτή με ξένη διέγερση, με πλήρη έλεγχο και δίοδο ελεύθερης ροής. Αν κατά το προσδιορισμό συστήματος εκτός από την επιλογή διόδου ελεύθερης ροής και 1- παλμικού ανορθωτή, επιλέξουμε και κινητήριο σύστημα με ξένη διέγερση τότε θα εμφανιστεί το κύκλωμα του σχήματος 5.5 όπως φαίνεται παρακάτω. 41

46 Σχήμα 5.5 : Κύκλωμα Κ.Σ.Σ.Ρ 1-παλμικού ανορθωτή ξένης διέγερσης Κι εδώ ισχύουν τα ίδια με αυτά που αναφέρθηκαν στην προηγούμενη ενότητα. Δηλαδή έχουμε το κύκλωμα να καταλαμβάνει το μεγαλύτερο μέρος της φόρμας και τα όργανα μέτρησης (TextBoxes) που ορίζονται σαν βολτόμετρα και αμπερόμετρα στα οποία θα εμφανίζονται οι στιγμιαίες τιμές του κυκλώματος. Η σχεδίαση του κυκλώματος γίνεται σύμφωνα με αυτά που έχει ορίσει ο χρήστης στο προσδιορισμό συστήματος. Έχουμε βάλει πλήρη έλεγχο για αυτό και σχεδιάζεται ένα θυρίστορ στο πάνω μέρος του κυκλώματος. Έχουμε βάλει δίοδο ελεύθερης ροής για αυτό τη βλέπουμε να σχεδιάζεται στην έξοδο. Η εκτύπωση αυτού του κυκλώματος φαίνεται στην επόμενη σελίδα. 42

47 5.6 Κινητήριο Σύστημα συνεχούς ρεύματος(κ.σ.σ.ρ) 1-παλμικού ανορθωτή με μεικτή διέγερση, με πλήρη έλεγχο και δίοδο ελεύθερης ροής. Αν κατά το προσδιορισμό συστήματος εκτός από την επιλογή διόδου ελεύθερης ροής και 1- παλμικού ανορθωτή, επιλέξουμε και κινητήριο σύστημα με σύνθετη διέγερση τότε θα εμφανιστεί το κύκλωμα του σχήματος 5.6. όπως φαίνεται παρακάτω. 43

48 Σχήμα 5.6 : Κύκλωμα Κ.Σ.Σ.Ρ 1-παλμικού ανορθωτή μεικτής διέγερσης Κι εδώ ισχύουν τα ίδια με αυτά που αναφέρθηκαν στην προηγούμενη ενότητα. Δηλαδή έχουμε το κύκλωμα να καταλαμβάνει το μεγαλύτερο μέρος της φόρμας και τα όργανα μέτρησης (TextBoxes) που ορίζονται σαν βολτόμετρα και αμπερόμετρα στα οποία θα εμφανίζονται οι στιγμιαίες τιμές του κυκλώματος. Η σχεδίαση του κυκλώματος γίνεται σύμφωνα με αυτά που έχει ορίσει ο χρήστης στο προσδιορισμό συστήματος. Έχουμε βάλει πλήρη έλεγχο για αυτό και σχεδιάζεται ένα θυρίστορ στο πάνω μέρος του κυκλώματος. Έχουμε βάλει δίοδο ελεύθερης ροής για αυτό τη βλέπουμε να σχεδιάζεται στην έξοδο. Η εκτύπωση αυτού του κυκλώματος φαίνεται στην επόμενη σελίδα. 44

49 5.7 Προσομοίωση συστήματος - Ανάλυση αποτελεσμάτων. Τα βήματα για την προσομοίωση κυκλώματος είναι ακριβώς τα ίδια, όποιο κύκλωμα κι αν επιλέξουμε. Για αυτό το λόγο θα εξετάσουμε μόνο ένα κύκλωμα το οποίο είναι: 1-φασικός 1-παλμικός ανορθωτής με πλήρη έλεγχο (χωρίς δίοδο ελεύθερης ροής) Για να ξεκινήσει η εξομοίωση γίνεται με τους εξής τρόπους: 1. Μέσω της φόρμας κυματομορφών κάνοντας κλικ στο κουμπί Start ή μέσω του υπομενού File -> Start και να μεταβούμε όποια στιγμή θέλουμε να δούμε και από τη φόρμα του κυκλώματος την εξομοίωση. 2. Μέσω της φόρμας κυκλώματος κάνοντας κλικ στο κουμπί Start ή μέσω του υπομενού File -> Start. Αφού αρχίσει η εξομοίωση εμφανίζονται ανά βήμα τιμές στα όργανα μέτρησης όπως φαίνεται στο Σχήμα

50 Σχήμα 5.7.1: Προσομοίωση 1-φασικού 1-παλμικού ανορθωτή με βάση το κύκλωμα. Εκτός από τις τιμές που εμφανίζονται στα όργανα μέτρησης με την έναρξη της εξομοίωσης δε βλέπουμε το κουμπί της έναρξης το οποίο αποκρύπτεται. Στην περίπτωση αγωγής του θυρίστορ (το ρεύμα του θυρίστορ είναι θετικό), το θυρίστορ συμπληρώνεται με το χρώμα σχεδίασης που στην παρούσα φάση είναι το μαύρο. Η διαδικασία που μόλις περιγράψαμε φαίνεται στο Σχήμα

51 Σχήμα 5.7.2: Προσομοίωση 1-φασικού 1-παλμικού ανορθωτή με βάση το κύκλωμα με αγωγή στο θυρίστορ. Βλέπουμε στο κύκλωμα ότι το ρεύμα του θυρίστορ είναι μεγαλύτερο του μηδέν με τιμή και το θυρίστορ να έχει γεμίσει με μαύρο χρώμα. Όπως είπαμε και πριν αυτό θα συμβαίνει οποιαδήποτε στιγμή το ρεύμα του θυρίστορ είναι μεγαλύτερο του μηδενός. Οι τιμές που εμφανίζονται στα όργανα μέτρησης είναι οι στιγμιαίες τιμές διότι έχουν οριστεί σαν προεπιλογή όπως αυτό παρουσιάζεται στο Σχήμα Σχήμα 5.7.3: Επιλογή τιμών. 47

52 Επιλέγοντας Rms ή Aver εμφανίζονται οι ενεργές ή οι μέσες τιμές αντίστοιχα στα όργανα μέτρησης, χωρίς αυτό να επηρεάζει την εμφάνιση των κυματομορφών (οι οποίες σχεδιάζονται πάντα σε σχέση με τις στιγμιαίες τιμές είτε εμφανίζονται είτε όχι) και την αγωγή ή όχι του θυρίστορ. Οι πρώτες ενεργές και μέσες τιμές υπολογίζονται μετά το πέρας μιας περιόδου, οι δεύτερες μετά το πέρας δύο περιόδων κ.ο.κ. Όταν δεν έχουν υπολογιστεί καμία φορά οι ενεργές ή οι μέσες τιμές (δεν έχει περάσει ούτε μία περίοδο) τότε τα όργανα μέτρησης εμφανίζουν τιμή μηδενική. Στο Σχήμα έχει επιλεγεί να εμφανίζονται οι ενεργές τιμές και παρουσιάζεται αυτό που μόλις αναφέρθηκε. Σχήμα 5.7.4: Επιλογή Rms τιμών. Στο Σχήμα βλέπουμε ότι μετά την επιλογή των ενεργών τιμών, η συγκεκριμένη επιλογή παίρνει την εστίαση. Επίσης δεν έχει περάσει καμία περίοδος για αυτό και όλες οι τιμές των οργάνων είναι μηδενικές. 48

53 Προηγουμένως αναφέραμε ότι επιλέγοντας μία από τις τιμές αυτές δεν επηρεάζει την αγωγή του θυρίστορ διότι αυτό γίνεται σύμφωνα με τις στιγμιαίες τιμές. Εδώ έχουμε πέσει σε αυτή την περίπτωση και βλέπουμε ότι το θυρίστορ είναι μαυρισμένο. Αυτό συμβαίνει γιατί στο περιθώριο η στιγμιαία τιμή του ρεύματος του θυρίστορ είναι μεγαλύτερη του μηδενός. Ό,τι αναφέρθηκε παραπάνω όπως είπαμε ισχύει και στην περίπτωση που έχουμε επιλέξει τις μέσες τιμές και αυτός είναι ο λόγος που δε θα υπάρχει αναφορά σε αυτή την επιλογή. 5.8 Κυματομορφές κυκλώματος Τα βήματα για την εμφάνιση και την επεξεργασία των φορμών κυματομορφής είναι ακριβώς τα ίδια, όποιο κύκλωμα κι αν επιλέξουμε. Για αυτό το λόγο θα εξετάσουμε μόνο ένα κύκλωμα το οποίο είναι: 1-φασικός 1-παλμικός ανορθωτής με πλήρη έλεγχο (χωρίς δίοδο ελεύθερης ροής) Έχουμε ήδη αναφέρει πολλά για τις κυματομορφές, αλλά έφτασε η στιγμή να τις δούμε αναφέροντας κι άλλα λόγια για αυτές. Μέχρι τώρα είπαμε ότι οι κυματομορφές σχεδιάζονται πάντα σύμφωνα με τις στιγμιαίες τιμές ανεξαρτήτως με την επιλογή τιμών. Καλά μέχρι εδώ, αλλά που γίνεται ο υπολογισμός; Ο υπολογισμός γίνεται στο δεύτερο μέρος του Neapolis για τη φόρμα των κυματομορφών. Επομένως αφού έπρεπε η εφαρμογή μας να τρέχει παράλληλα με αυτή τη φόρμα δεν υπήρχε λόγος να γίνεται ο υπολογισμός δύο φορές. Η εφαρμογή καλεί μία συνάρτηση για μεταβίβαση τιμών κάθε φορά που υπολογίζεται νέα τιμή και κάποια άλλη για να κάνει τη σχεδίαση στις δικές μας κυματομορφές. Για να μην κουραζόμαστε από τώρα με τις λεπτομέρειες, το σκοπό για τον οποίο δημιουργήθηκε κάθε συνάρτηση θα το δούμε στο έβδομο κεφάλαιο όπου είναι η ενότητα για το εγχειρίδιο προγραμματιστή. Στην παρούσα ενότητα απλά θα δούμε τα αποτελέσματα των κυματομορφών υπό συνθήκες. 49

54 Έστω ότι έχουμε ξεκινήσει την προσομοίωση συστήματος βρισκόμαστε στη φόρμα του κυκλώματος και έχουμε επιλέξει να εμφανιστεί η κυματομορφή Is από την μπάρα κουμπιών. Το αποτέλεσμα φαίνεται στο Σχήμα Σχήμα 5.8.1: Φόρμα κυματομορφής Is Τι βλέπουμε στο Σχήμα 5.8.1; Η φόρμα Is εμφανίζεται στην οθόνη. Της οποίας με μία ματιά η τελευταία τιμή προσεγγίζεται περίπου 45. Αλλά την ακριβής τιμή τη βλέπουμε από το αμπερόμετρο πάνω αριστερά που λέει ότι είναι Το μέγεθος της φόρμας κυματομορφής μπορεί να αυξομειώνεται χωρίς να υπάρχει κανένα πρόβλημα και να αυξομειώνεται και η ίδια η κυματομορφή. Η αναφορά αυτή ισχύει και για τη φόρμα του κυκλώματος. Έστω ότι μεγαλώνουμε τη φόρμα της κυματομορφής το αποτέλεσμα είναι αυτό που φαίνεται στο Σχήμα

55 Σχήμα 5.8.2: Αλλαγή μεγέθους φόρμας κυματομορφής Is Το αποτέλεσμα του Σχήματος σε σύγκριση με αυτό του είναι εξίσου καλό. Οι δυνατότητες που μας δίνει η συγκεκριμένη φόρμα είναι είτε να την ξαναβάλουμε στο περιθώριο επιλέγοντας Επιστροφή, είτε να εκτυπώσουμε την κυματομορφή επιλέγοντας Εκτύπωση. Η εκτύπωση δε θα εκτυπώσει όλη τη φόρμα μόνο το χώρο σχεδίασης της κυματομορφής. Το αποτέλεσμα φαίνεται παρακάτω. 51

56 Ας δούμε τι θα γίνει αν τοποθετήσουμε πολλές κυματομορφές στην οθόνη. Όταν επιλέξουμε με τη σειρά Is, Vs και τη Ιο το αποτέλεσμα φαίνεται στο Σχήμα Σχήμα 5.8.3: Πολλές φόρμες κυματομορφής στην οθόνη. 52

57 Η Ιο η οποία είναι η τελευταία φόρμα που επιλέχθηκε είναι και αυτή που έχει την εστίαση. Κάθε φόρμα ξεχωριστά μπορούμε να της αλλάξουμε το μέγεθος και να τη μετακινήσουμε όπου εμείς θέλουμε. Όταν δημιουργήσαμε για πρώτη φορά την εφαρμογή κάθε φορά που επιλέγαμε μία κυματομορφή η προηγουμένη ή οι προηγούμενες φόρμες που ήταν στην οθόνη μεταφέρονταν στο περιθώριο (πίσω από το κύκλωμα). Αυτό ταλαιπωρούσε πολύ το χρήστη και κάθε φορά που εμφάνιζε μία κυματομορφή έπρεπε να επιλέξει ξανά από τη γραμμή εργασιών τις υπόλοιπες φόρμες για να τις ξανά φέρει στο φόντο. Για να λυθεί το πρόβλημα αυτό τοποθετήθηκε κώδικας για να λειτουργεί όπως είδαμε στο σχήμα ΚΕΦΑΛΑΙΟ 6ο Βοηθητικές οδηγίες για την ανάπτυξη κώδικα στο περιβάλλον της Visual Basic Εισαγωγή Στο κεφάλαιο αυτό θα γίνει αναφορά σε τεχνικές που χρησιμοποιήθηκαν στον αναπτυχθέντα κώδικα, με σκοπό να βοηθηθεί ο εκάστοτε προγραμματιστής που θα ασχοληθεί με την συγγραφή κώδικα στο Neapolis. Δεν θα γίνει αναλυτική περιγραφή του περιβάλλοντος της Visual Basic 6, ούτε των εντολών της. Υπάρχει ένα συνοπτικός οδηγός της visual basic 6 στο παράρτημα αυτής της πτυχιακής, για άτομα που δεν έχουν ασχοληθεί ξανά με την συγκεκριμένη γλώσσα προγραμματισμού. Το όλο κεφάλαιο είναι πιο πολύ το αποτέλεσμα συμπερασμάτων, που βγήκαν κατά την αντιμετώπιση συγκεκριμένων προβλημάτων, στην διάρκεια συγγραφής του κώδικα. Για να γίνει πιο κατανοητό 53

58 το κεφάλαιο αυτό ο προγραμματιστής θα πρέπει να έχει κάποιες βασικές γνώσεις της visual basic Δήλωση μεταβλητών, σπουδαιότητα χρήσης της εντολής Option Explicit Ένα μεγάλο πρόβλημα που συναντήθηκε κατά την συγγραφή του κώδικα, όταν ειδικά δεν έχεις ασχοληθεί ξανά με το περιβάλλον της visual basic 6, ήταν αν οι μεταβλητές που είχαμε δηλώσει αρχικά εξακολουθούσαν να διατηρούν τον τύπο που τους είχαμε ορίσει. Για παράδειγμα πολλές φορές ενώ περιμέναμε μια μεταβλητή να είναι τύπου integer, σε ένα άλλο κομμάτι του κώδικα άλλαζε μορφή και έπαιρνε την μορφή variant. Μερικοί από τους λόγους που μπορεί να συνέβαινε αυτό ήταν οι εξής: Είχε γίνει λάθος στην συγγραφή του ονόματος της μεταβλητής π.χ μπορεί να είχε δηλωθεί αρχικά με το όνομα «RectifierCurrent» σαν intiger και εμείς πιο κάτω να την είχαμε χρησιμοποιήσει με το όνομα «Rectifiercurrent». Αυτήν την μεταβλητή η VB θα την θεωρούσε ότι είναι νέα μεταβλητή και αυτόματα θα την έκανε τύπου variant. Να ορίσουμε αρχικά μία μεταβλητή με ένα συγκεκριμένο τύπο και σε άλλο σημείο του κώδικα να χρησιμοποιούμε το ίδιο όνομα της μεταβλητής με άλλο τύπο. Αν δεν χρησιμοποιηθεί η option explicit η VB θα το θεωρήσει σωστό και θα συνεχίσει. Αυτά είναι από τα πιο συχνά λάθη που μπορεί να κάνει ένας προγραμματιστής αν γράφει πάρα πολλές γραμμές κώδικα και οδηγούν σε σημαντικά προβλήματα, ειδικά σε κώδικα που συμμετέχουν πολλά άτομα για την συγγραφή του, με αποτέλεσμα να επικρατεί ένα χάος μεταβλητών. Αυτά τα λάθη μπορούν να αποφευχθούν με την χρήση της εντολής Option explicit,προτού αρχίσουμε να γράφουμε τον κώδικά μας. Πολύ απλά μας υποχρεώνει να δηλώνουμε μεταβλητές που τυχόν δεν έχουμε ορίσει εξ αρχής και βγάζει μηνύματα λάθους στην οθόνη, ανάλογα με την περίπτωση. ΠΡΟΣΟΧΗ : 54

59 Ένα παράδοξο που συναντήσαμε κατά την δήλωση μεταβλητών ήταν η δήλωση πολλών μεταβλητών στη σειρά. Για παράδειγμα θα περιμέναμε γράφοντας την εξής δήλωση : Dim freq,radius,asp As Single ότι οι μεταβλητές freq, radius να δηλωθούν ως τύπου Single. Παρόλα αυτά έχοντας ενεργοποιημένη την option explicit και αφού πατήσουμε το Quick info(πηγαίνοντας στην μεταβλητή που θέλουμε και πατώντας δεξί κλικ στο ποντίκι, όπως φαίνεται στο σχήμα 6.1), βλέπουμε ότι η μεταβλητή μας είναι τύπου Variant, ενώ η μεταβλητή «asp» ως Single όπως φαίνεται στα σχήματα. Σχήμα 5.2 : freq as Variant Σχήμα 6.1 : Quick info Σχήμα 6.3 : asp as Single Για να αποφευχθεί κάτι τέτοιο,η σωστή δήλωση είναι είτε με την χρήση ολόκληρου του ονόματος της δήλωσης, δηλαδή: Dim freq As Single, radius As Single, asp As Single Ή με χρήση της συντομογραφίας για τον τύπο single!, δηλαδή : Dim freq!, radius!, asp! Η σπουδαιότητα του να παραμένει ο τύπος που έχουμε δηλώσει αρχικά και όχι οι μεταβλητές μας να γίνονται αυτόματα τύπου Variant, είναι πολύ απλά, στο παράδειγμα μας, 20 byte παραπάνω στην μνήμη. Αν σκεφτούμε πόσες χιλιάδες μεταβλητές υπάρχουν σε μεγάλα προγράμματα, τύπου Neapolis, λάθος δήλωση μεταβλητών οδηγεί σε μια «βαριά» εφαρμογή, κάτι που όλοι οι προγραμματιστές προσπαθούμε να αποφύγουμε. Το κυριότερο πρόβλημα όμως είναι, ότι το να μετατραπεί μία μεταβλητή π.χ. από τύπο single σε variant οδηγεί την VB να διαχειρίζεται την μεταβλητή όπως εκείνη θέλει δίνοντας απρόβλεπτα αποτελέσματα. Για αυτό προσοχή οι μεταβλητές να δηλώνονται όπως στο παραπάνω υπογραμμισμένο κείμενο. 55

60 6.3 Τα ορίσματα μιας υπορουτίνας Άλλη μια ιδιαιτερότητα που συναντάμε στην VB είναι η δήλωση του τύπου των ορισμάτων που θα χρησιμοποιήσουμε μέσα σε μια υπορουτίνα ( Sub). Ενώ θα περίμενε κανείς πως αν δηλώσουμε τα ορίσματα εξ αρχής στο τμήμα Declarations μιας φόρμας και μάλιστα να τις δηλώσουμε με την μορφή οικουμενικών μεταβλητών (Public), να μπορούμε να τις χρησιμοποιήσουμε σε όλα τα σημεία του κώδικά μας. Παρόλα αυτά, αν δεν τις δηλώσουμε ΠΑΛΙ κατά την δημιουργία της υπορουτίνας, οι μεταβλητές μας γίνονται αυτόματα τύπου variant. Για να δούμε τι εννοούμε, κανονικά, μία υπορουτίνα με ορίσματα έχει την μορφή που φαίνεται στο παρακάτω κομμάτι κώδικα: Sub DrawLoadRe1conCirc(obj As Object, tbox As Boolean) ReDim PointAx(1 To 8) Call Drawline(1, 3, ConPoint(1).x, ConPoint(1).y, 30, 0, "x+", "y0", obj) Call Drawline(3, 4, PointAx(3).x, PointAx(3).y, 0, 25, "x0", "y+", obj) Call DrawResistance(4, "ver", obj) Call Drawline(5, 6, PointAx(5).x, PointAx(5).y, 0, 9, "x0", "y+", obj) Call DrawCoil(6, "ver", obj) Call Drawline(7, 8, PointAx(7).x, PointAx(7).y, 0, 25, "x0", "y+", obj) Call Drawline(2, 8, ConPoint(2).x, ConPoint(2).y, 30, 0, "x+", "y0", obj) 'text boxes*********************************************************** If tbox = True Then Call DrawIV(True, 7, "A", ConPoint(1).x + 10, ConPoint(1).y, "hor") 'Io '********************used textboxes :only textbox7************************************ ' end point: End Sub Τα ορίσματα obj και tbox έχουν χρησιμοποιηθεί και σε άλλα σημεία του κώδικά μας και έχουν ορισθεί εξ αρχής σαν τύπου Object και Boolean αντίστοιχα. Παρόλα αυτά αν δεν κάνουμε ξανά την δήλωση κατά την δημιουργία της υπορουτίνας, η VB 6 αυτόματα τα μετατρέπει αυτά τα ορίσματα σε τύπου variant. Προσοχή λοιπόν να δηλώνονται ξανά. 6.4 Find και Definition Το Find, Definition είναι δύο εργαλεία που η χρήση τους θα μας βοηθήσει πάρα πολύ, ειδικά αν έχουμε να κάνουμε με την συγγραφή κώδικα, που αποτελείται από διαφορετικά τμήματα, που έχουν γραφεί από διαφορετικά άτομα. Και η βοήθεια που μας παρέχουν είναι να βρούμε μεταβλητές, συναρτήσεις, υπορουτίνες μέσα σε χιλιάδες γραμμές κώδικα, που δεν έχουμε ορίσει ή δημιουργήσει εμείς, πολύ εύκολα και πολύ γρήγορα. 56

61 Η εντολή Find βρίσκεται συνήθως στην μπάρα λειτουργιών όπως φαίνεται στο σχήμα 6.4, ενώ η definition για να εμφανιστεί πρέπει να πάμε πάνω στο κομμάτι του κώδικα που θέλουμε, να πατήσουμε δεξί κλικ με το ποντίκι μας και βρίσκεται στο μενού λειτουργιών, όπως φαίνεται στο σχήμα 6.5 Σχήμα 6.4: Κουμπί και υπομενού Find 57

62 Σχήμα 6.5 : Εντολή Definition Αν στο μενού της εντολής find έχουμε μαρκάρει το current module, τότε γίνετε ανεύρεση του στοιχείου που είχαμε δηλώσει αρχικά στο κουτί Find What, μόνο στην φόρμα ή στο module που είμαστε ήδη. Αν έχουμε μαρκάρει την επιλογή Current project γίνετε ανίχνευση του στοιχείου που ψάχνουμε σε όλο το project μας. Είναι γενικότερα μια εντολή που μας βοηθάει να βρούμε ποιες μεταβλητές χρησιμοποιούνται σε ποια σημεία του κώδικα μας και ποιες υπορουτίνες καλούνται από ποίον. Με την εντολή definition αν πάμε πάνω στο στοιχείο που θέλουμε και την χρησιμοποιήσουμε, μας πηγαίνει σε εκείνο το σημείο του κώδικα που έχουμε ορίσει αυτό το στοιχείο, ψάχνοντας σε όλες τις γραμμές κώδικα του project. Αυτό το στοιχείο μπορεί να είναι είτε μεταβλητή, είτε ολόκληρη υπορουτίνα, είτε συνάρτηση. 6.5 Εκσφαλμάτωση (debugging) Εισαγωγή Όσο πιο μεγάλα και πιο σύνθετα γίνονται τα προγράμματα μας, τόσο πιο εύκολο είναι να υποπέσουμε σε λάθη, τα οποία δύσκολα ανιχνεύονται. Ακόμα και ο πιο έμπειρος και προσεκτικός προγραμματιστής δεν μπορεί να αποφύγει τα προγραμματιστικά λάθη, τα αποκαλούμενα bugs και ευθύς εξαρχής να συντάξει προγράμματα που λειτουργούν άψογα σε όλο τον κύκλο ζωής τους. Για το λόγο αυτό μετά από τη συγγραφή του προγράμματος επιβάλλεται να ακολουθήσει η φάση των δοκιμών προκειμένου να εντοπιστούν και να διορθωθούν τα λάθη με τη διαδικασία της εκσφαλμάτωσης (debugging). Σε αυτήν την ενότητα θα ασχοληθούμε με τα εργαλεία εκσφαλμάτωσης που διαθέτει η VB, τα οποία μας επιτρέπουν να διαγνώσουμε τα προβλήματα, να προσδιορίσουμε τα λάθη και να προχωρήσουμε στη διόρθωση τους. 58

63 6.5.2 Κατηγορίες λαθών Ο βαθμός δυσκολίας της εκσφαλμάτωσης εξαρτάται από τα είδη των λαθών, τα οποία εν γένει μπορεί να είναι: Συντακτικά Εκτέλεσης Λογικά Τα συντακτικά λάθη (syntax errors) οφείλονται στην παραβίαση των κανόνων σύνταξης και γραμματικής της VB. Για παράδειγμα, η παράλειψη μιας παρένθεσης ή ενός κόμματος, η λανθασμένη πληκτρολόγηση μιας κωδικής λέξης ή η ελλειπής σύνταξη μιας προγραμματιστικής δομής, αποτελούν συντακτικά λάθη. Τα λάθη αυτά εντοπίζονται εύκολα γιατί μας τα υποδεικνύει άμεσα ο μεταφραστής του περιβάλλοντος εργασίας. Μάλιστα, το περιβάλλον εργασίας, όπως φαίνεται στην εικόνα 6.6, περιέχει τη λειτουργία Auto Syntax Check, η οποία όταν είναι ενεργοποιημένη, κατά την πληκτρολόγηση κάθε γραμμής ελέγχεται ο κώδικας της για κάποια είδη συντακτικών λαθών. 1.Από το μενού επιλέγουμε Tools Options 2. Διαλέγουμε τον καρτελοδείκτη Editor 3.Μαρκάρουμε το πλαίσιο σημείωσης Auto Syntax Check Σχήμα 6.6: Ρύθμιση για αυτόματο συντακτικό και ορθογραφικό έλεγχο 59

64 Αν η γραμμή δεν περιέχει λάθη γίνεται καλλιτεχνική μορφοποίηση της, με τοποθέτηση ενός μόνο κενού διαστήματος μεταξύ των λέξεων, με μπλε χρωματισμό κάποιων κωδικών λέξεων, με τήρηση της ομοιομορφίας κεφαλαίων και πεζών γραμμάτων μέσα στις λέξεις. Αντίθετα, αν η γραμμή περιέχει λάθη χρωματίζεται κόκκινη και ταυτόχρονα εμφανίζεται διαλογικό παράθυρο με μήνυμα που επεξηγεί το λάθος Το πρόγραμμα σε κατάσταση διακοπής Κατά την ανάπτυξη μιας εφαρμογής χρησιμοποιούμε το περιβάλλον εργασίας είτε σε κατάσταση σχεδιασμού (design), οπότε συντάσσουμε και διορθώνουμε τον κώδικα μας χωρίς να μπορούμε να ελέγξουμε τα αποτελέσματα, είτε σε κατάσταση εκτέλεσης (run), οπότε μπορούμε να εκτελέσουμε το πρόγραμμα και να παίρνουμε αποτελέσματα αλλά δεν έχουμε τη δυνατότητα να επεμβαίνουμε και να τροποποιούμε τον κώδικα. Ένας τρίτος τρόπος λειτουργίας του περιβάλλοντος εργασίας είναι η λειτουργία σε κατάσταση διακοπής (break mode). Όταν το περιβάλλον εργασίας βρίσκεται σε κατάσταση διακοπής μπορούμε να πάρουμε στιγμιότυπα της κατάστασης εκτέλεσης, να επέμβουμε στον κώδικα και να υποβοηθήσουμε ποικιλοτρόπως τη διαδικασία εκσφαλμάτωσης. Συγκεκριμένα σε κατάσταση διακοπής μπορούμε: Να τροποποιήσουμε τον κώδικα του προγράμματος. Να ανιχνεύσουμε τη διαδοχή των διαδικασιών που έχουν εκτελεστεί. Να παρακολουθήσουμε τις τιμές μεταβλητών, ιδιοτήτων και παραστάσεων. Να αλλάξουμε τις τιμές μεταβλητών και ιδιοτήτων Να αλλάξουμε τη ροή του προγράμματος. Να ζητήσουμε την εκτέλεση εντολών εκτός κώδικα προγράμματος. Το περιβάλλον εργασίας εισέρχεται σε κατάσταση διακοπής, όταν ενώ εκτελεί ένα πρόγραμμα: Συναντά σημείο διακοπής (breakpoint). Εκτελεί εντολή Stop 60

65 Εκτελεστεί η μέθοδος Assert του αντικειμένου Debug (Debug. Assert) και η συνθήκη που αποτελεί παράμετρό της έχει τιμή False. Πατήσουμε το συνδυασμό πλήκτρων CtrI + Break ή κάνουμε κλικ στο πλήκτρο Break της εργαλειοθήκης εκσφαλμάτωσης. Ανιχνευθεί λάθος εκτέλεσης Εισαγωγή σημείων διακοπής(breakpoints). Τα σημεία διακοπής τα χρησιμοποιούμε για να σταματήσουμε την εκτέλεση του κώδικα μας στα σημεία που είναι ύποπτα για πρόκληση προβλημάτων, ώστε να μας δοθεί η δυνατότητα να αξιοποιήσουμε τα εργαλεία εκσφαλμάτωσης. Τα σημεία διακοπής είναι προσωρινά και δεν αποθηκεύονται μαζί με τον κώδικα. Για να εισάγουμε ένα σημείο διακοπής: 1.Τοποθετούμε το δρομέα στο σημείο του κώδικα στο οποίο επιθυμούμε να γίνει η διακοπή της εκτέλεσης 2.Από τη γραμμή μενού επιλέγουμε Debug Toggle Breakpoint ή πατάμε το πλήκτρο F9. Εναλλακτικά, για να τοποθετήσουμε ένα σημείο διακοπής σε μια γραμμή μπορούμε να κάνουμε κλικ στο περιθώριο του παραθύρου κώδικα, στο ύφος της γραμμής. Η γραμμή του κώδικα στην οποία εισάγεται το σημείο διακοπής σημειώνεται με μια κουκίδα και αποκτά διαφορετικό χρώμα. Μπορούμε να θέσουμε περισσότερα του ενός σημεία διακοπής. Η εκτέλεση του προγράμματος θα διακόπτεται κάθε φορά που συναντάται ένα τέτοιο σημείο. Για να απομακρύνουμε από τον κώδικα ένα σημείο διακοπής ακολουθούμε την ίδια διαδικασία με αυτή της εισαγωγής του. Εναλλακτικά, επιλέγουμε στο μενού Debug την υποεπιλογή Clear All Breakpoints και απομακρύνουμε όλα τα σημεία διακοπής Παράδειγμα: Τοποθετούμε ένα σημείο διακοπής στη γραμμή, (όπως φαίνετε στο σχήμα 6.7): της Call Draw1phReCirc(obj,drawtbox), ώστε πριν γίνει η εκτέλεσή της και πραγματοποιηθεί η κλήση της συνάρτησης Draw1phReCirc, που μπορεί να προκαλέσει λάθος εκτέλεση, να έχουμε την δυνατότητα να ξεκινήσουμε την εκσφαλμάτωση. 61

66 Κάνουμε κλικ στο περιθώρι ο και εισάγεται σημείο διακοπής Σχήμα 6.7 : Εισαγωγή σημείου διακοπής Διαδικασία εκσφαλμάτωσης Όπως ήδη έχουμε αναφέρει, η εύρεση των λογικών λαθών είναι μια από τις πιο επίπονες και δύσκολες διαδικασίες. Το λογικό λάθος δεν είναι δυνατόν να το ανιχνεύσει το υπολογιστικό σύστημα. Την ύπαρξη του τη διαπιστώνουμε εκ των υστέρων από την απόκλιση των αποτελεσμάτων σε σχέση με τα αναμενόμενα. Ο μόνος τρόπος ανίχνευσης των λογικών λαθών είναι η τοποθέτηση σημείων διακοπής στην περιοχή του κώδικα που υποπτευόμαστε ότι βρίσκονται, η ελεγχόμενη εκτέλεση του κώδικα σε αυτή την περιοχή και η παρακολούθηση αλλαγής των τιμώντων μεταβλητών και των ιδιοτήτων των αντικειμένων Βηματική εκτέλεση του προγράμματος Όταν το πρόγραμμα βρίσκεται σε κατάσταση διακοπής, είναι δυνατή η εκτέλεση των εντολών του βήμα βήμα. Η βηματική (stepwise) εκτέλεση πραγματοποιείται με τις επιλογές του μενού Debug. Συγκεκριμένα, με την επιλογή: Step Into (Βήμα στο): Εκτελείται η εντολή στην οποία είχε γίνει η διακοπή. Κατόπιν το περιβάλλον εργασίας επανέρχεται σε κατάσταση διακοπής και μάλιστα στην επόμενη 62

67 εντολή που έχει σειρά. Το πλήκτρο συντόμευσης της επιλογής είναι το πλήκτρο F8. Πατώντας το πλήκτρο F8 ο προγραμματιστής μπορεί να παρακολουθήσει τη διαδρομή που ακολουθεί το πρόγραμμα του, παρατηρώντας το δείκτη εκτέλεσης προγράμματος (κίτρινη διαφανής γραμμή) να πηδά από εντολή σε εντολή. Step Over(Βήμα πάνω από): Εκτελείται η εντολή στην οποία είχε γίνει η διακοπή. Η μόνη διαφορά της Step Over σε σχέση με την Step Into είναι ότι στην περίπτωση που θα συναντήσει υπορουτίνες και συναρτήσεις μέσα στον κώδικα, τις εκτελεί με μιας και όχι εντολή προς εντολή. Έτσι είναι δυνατό να επιταχυνθεί κάπως η διαδικασίας της εκσφαλμάτωσης. Step Out (Βήμα εκτός): Εκτελείται το υπόλοιπο μιας υπορουτίνας ή μιας συνάρτησης και ο δείκτης εκτέλεσης προγράμματος μεταφέρεται στην επόμενη γραμμή της καλούσας διαδικασίας. Run To Cursor (Εκτέλεση μέχρι το δρομέα): Εκτελείται το υπόλοιπο του προγράμματος μέχρι του σημείου που έχει τοποθετηθεί ο δρομέας κειμένου μέσα στον κώδικα. Λειτουργεί δηλαδή σαν να έχει τοποθετηθεί ένα σημείο διακοπής στη γραμμή που βρίσκεται ο δρομέας. Set Next Statement (Θέσε ως επόμενη εντολή): Εντολοδοτείται η παράκαμψη της σειράς των εντολών (χωρίς να πραγματοποιηθεί καμιά εκτέλεση) και η τοποθέτηση της διακοπής στην εντολή που έχουμε υποδείξει με το δρομέα. Χρησιμοποιείται συνήθως για να επαναφέρουμε το σημείο εκτέλεσης των εντολών κάποιες εντολές πίσω και να παρακολουθήσουμε ξανά τον τρόπο εκτέλεσης του προγράμματος. Έλεγχος τιμών μεταβλητών και εκφράσεων Εκτελώντας το πρόγραμμα εντολή εντολή, μπορούμε να δούμε τις τιμές των μεταβλητών και των ιδιοτήτων αντικειμένων τοποθετώντας επάνω στο όνομα τους το δρομέα του ποντικιού. Έχουμε δει ότι δίπλα τους εμφανίζεται αυτόματα μια ετικέτα με την τιμή τους. Όμως, για να έχουμε κάπου συγκεντρωμένες όλες τις 63

68 μεταβλητές και τις παραστάσεις, των οποίων η μεταβολή των τιμών μας ενδιαφέρει, χρησιμοποιούμε το παράθυρο παρακολούθησης (Watch Window). Σε αυτό το παράθυρο προβάλλονται, όχι μόνο οι τιμές των μεταβλητών και των παραστάσεων που έχουμε εισάγει, αλλά και πληροφορίες για την προγραμματιστική μονάδα και τη διαδικασία μέσα στην οποία έχουν την αναφερόμενη τιμή. Επίσης, από το λογισμικό που διαχειρίζεται αυτό το παράθυρο, μπορούμε να ζητήσουμε το πέρασμα υπό συνθήκη σε κατάσταση διακοπής, δηλαδή τη μετάπτωση σε κατάσταση διακοπής, όταν μια από τις υπό παρακολούθηση παραστάσεις αποκτήσει την τιμή True ή αλλάξει τιμή. Αυτή η δυνατότητα είναι πολύ εξυπηρετική, αφού ο προγραμματιστής δεν είναι υποχρεωμένος να παρακολουθεί συνεχώς τις τιμές ιδιαίτερα όταν η μεταβολή τους γίνεται μέσα σε ένα βρόχο. Για την εισαγωγή μιας μεταβλητής ή παράστασης στο παράθυρο παρακολούθησης πραγματοποιούμε τα εξής βήματα, όπως φαίνεται στο σχήμα Από το μενού Debug επιλέγουμε Add Watch οπότε εμφανίζεται το διαλογικό παράθυρο. 2. Στο πλαίσιο Expression πληκτρολογούμε την παράσταση ή τη μεταβλητή. 3. Στην ομάδα Context ορίζουμε την περιοχή ελέγχου της παράστασης, δηλαδή, σε ποια σημεία του κώδικα μας ενδιαφέρει η τιμή της. 4. Στην ομάδα Watch Type επιλέγουμε τον τρόπο απόκρισης του περιβάλλοντος εργασίας στην τιμή της υπό παρακολούθηση παράστασης. Σχήμα 6.8 : εισαγωγή παράστασης στο παράθυρο παρακολούθησης. Αν, πριν ανοίξουμε το διαλογικό παράθυρο Add Watch, ο δρομέας βρίσκεται πάνω στο όνομα μιας μεταβλητής ή μιας ιδιότητας, το πλαίσιο κειμένου Expression συμπληρώνεται αυτόματα. Επίσης, αν επιλέξουμε πρώτα μια παράσταση και στη συνέχεια ανοίξουμε το διαλογικό παράθυρο Add Watch, το 64

69 πλαίσιο κειμένου Expression συμπληρώνεται αυτόματα με τον κώδικα της παράστασης. Στην ομάδα Context συμπληρώνουμε τα πλαίσια Procedure και Module επιλέγοντας τη διαδικασία ή όλες τις διαδικασίες και την προγραμματιστική μονάδα ή όλες τις προγραμματιστικές μονάδες στις οποίες θέλουμε να παρακολουθούμε τις εκφράσεις. Στην ομάδα Watch Type επιλέγουμε τον τρόπο απόκρισης του περιβάλλοντος εργασίας στην υπό παρακολούθηση έκφραση. Συγκεκριμένα επιλέγουμε: Watch Expression:για απλή εμφάνιση της τιμής της έκφρασης Break When Value is True :για διακοπή της εκτέλεσης κάθε φορά που η τιμή της έκφρασης γίνεται αληθής. Break When Value Changes: για διακοπή της εκτέλεσης, όταν η τιμή της έκφρασης αλλάξει. Κάθε έκφραση παρακολούθησης που εμφανίζεται στο παράθυρο μπορεί να διορθωθεί ή να διαγραφεί. Για να διορθώσουμε μια έκφραση επιλέγουμε την έκφραση και από το μενού Debug επιλέγουμε Edit Watch. Για να διαγράψουμε μια έκφραση την επιλέγουμε και πατάμε το πλήκτρο Delete. 65

70 ΚΕΦΑΛΑΙΟ 7ο Εγχειρίδιο Προγραμματιστή 7.1 Εισαγωγή Στο σημείο αυτό της πτυχιακής θα περιγράψουμε ποια βήματα ακολουθήθηκαν, για την έναρξη της συγγραφής του αναπτυχθέντα κώδικα και θα αναλύσουμε κάθε κομμάτι του κώδικα το οποίο δημιουργήθηκε και μπορεί να είναι δυσνόητο για κάποιον που δεν έχει ασχοληθεί με την συγγραφή κώδικα σε Visual Basic και πόσο μάλλον για το περιβάλλον του Neapolis. Επίσης θα γίνει μια περιγραφή του τρόπου που λειτουργεί «Το εναλλακτικό περιβάλλον εξομοίωσης» και ποιο συγκεκριμένα ο μηχανισμός λειτουργίας της SimCircuitForm( η φόρμα του εναλλακτικού περιβάλλοντος εξομοίωσης), έτσι ώστε να γίνει κατανοητό στον μελλοντικό προγραμματιστή, ο τρόπος που καλούνται οι συναρτήσεις, οι υπορουτίνες και πως συνδέονται οι φόρμες και τα πρότυπα μεταξύ τους. 7.2 Προετοιμασία για την έναρξη συγγραφής κώδικα στο περιβάλλον της VB6 για το Νεάπολις. Στο ενότητα αυτή θα παρουσιάσουμε τα βήματα που ακολουθήθηκαν ώστε να μπορέσει ο προγραμματιστής να εξασφαλίσει την σωστή λειτουργία του περιβάλλοντος, στο οποίο θα αναπτύξει τον κώδικα για το Neapolis. Πιο συγκεκριμένα θα δούμε πως πρέπει να γίνει η εγκατάσταση του Visual Studio 6, και πως πρέπει να «στήσουμε» τα αρχεία του Neapolis ώστε να μην εμφανίζονται μηνύματα σφαλμάτων, όταν θα προσπαθήσουμε να ανοίξουμε τα project των αντίστοιχων τμημάτων του Neapolis που μας ενδιαφέρουν. Απαραίτητη προϋπόθεση είναι να στηθεί όλο μας το περιβάλλον ανάπτυξης σε Windows Xp Sp1 ή Sp2 και κάτω(όχι Service Pack 3). To Neapolis και το visual studio 6 είναι παλαιές εφαρμογές και δεν συνιστούνται νέα λειτουργικά (όπως Windows Vista ).Αν έχετε νέο λειτουργικό μπορείτε να χρησιμοποιήσετε περιβάλλον εξομοίωσης, όπως Vmware ή Virualbox ή ότι άλλο βρείτε.τα βήματα που θα ακολουθήσουμε είναι τα εξής: 66

71 7.2.1 Εγκατάσταση Visual Studio 6 Enterprise Πηγαίνουμε αρχικά μέσα στον φάκελο που βρίσκεται η Visual Basic6 πατάμε διπλό κλικ στο SETUP όπως φαίνεται στην εικόνα της επόμενης σελίδας. Εικόνα : Φάκελος της VBasic6 SETUP Αν εμφανιστεί ένα παράθυρο όπως αυτό της εικόνας απλά πατήστε «Run». 67

72 Εικόνα 7.2.2: Μήνυμα ασφαλείας για το SETUP Μετά εμφανίζεται η οθόνη εγκατάστασης όπως φαίνεται στην εικόνα και πατάμε Next. Εικόνα 7.2.3: Αρχική οθόνη εγκατάστασης VS6 Στην επόμενη οθόνη στην εικόνα εμφανίζεται η άδεια χρήσης όπου πατάμε Accept και κατόπιν Next. 68

73 Εικόνα 7.2.4: Οθόνη άδειας χρήσης Στην οθόνη εισαγωγής κωδικού και ονόματος βάζουμε τον παρακάτω κωδικό και το όνομα το οποίο επιθυμούμε και πατάμε Next όπως φαίνεται στην εικόνα Εικόνα 7.2.5: Οθόνη εισαγωγής ονόματος και κωδικού 69

74 Στην παρακάτω οθόνη προσέχουμε να είναι μαρκαρισμένη η περιοχή Update for Java και πατάμε Next. Κατόπιν το σύστημα θα μας προτείνει να κάνουμε επανεκκίνηση και πατάμε OK. Εικόνα 7.2.6: Οθόνη Java Machine Μετά την επανεκκίνηση θα μας εμφανιστεί η οθόνη της εικόνας όπου προσέχουμε να είναι μαρκαρισμένη η επιλογή custom και πατάμε Next. Εικόνα 7.2.7: Οθόνη Options 70

75 Κατόπιν εμφανίζεται η οθόνη της περιοχής όπου θα εγκατασταθεί όπου πατάμε Next Εικόνα 7.2.8: Οθόνη διαδρομής εγκατάστασης Αν μετά την προηγούμενη οθόνη μας εμφανιστεί μήνυμα λάθους για το ACMBOOT απλά πάμε στον φάκελο που είναι τα αρχεία εγκατάστασης βρίσκουμε το συγκεκριμένο exe αρχείο και πατάμε διπλό κλικ όπως φαίνεται στην εικόνα Εικόνα 7.2.9: Οθόνη διαδρομής εγκατάστασης του ACMBOOT 71

76 Αν δεν βγει μήνυμα λάθους θα εμφανιστεί η παρακάτω οθόνη, όπου πατάμε Continue. Εικόνα : Οθόνη εγκατάστασης Μετά ακολουθεί η οθόνη εισαγωγής ονόματος όπου πατάμε OK. Εικόνα : Οθόνη εισαγωγής ονόματος 72

77 Κατόπιν εμφανίζεται η οθόνη εισαγωγής κωδικού, όπου εισάγουμε τον ίδιο κωδικό όπως και πριν, όπως φαίνεται στην εικόνα Εικόνα : Οθόνη εισαγωγής κωδικού Στην οθόνη που ακολουθεί πατάμε αριστερό κλικ μέσα στο τετράγωνο που βρίσκεται αριστερά της λέξης Custom όπως φαίνεται στην εικόνα Εικόνα : Οθόνη εγκατάστασης 73

78 Κατόπιν στην παρακάτω οθόνη πατάμε Select all και στην συνέχεια Continue όπως φαίνεται στην εικόνα Εικόνα : Οθόνη επιλογών εγκατάστασης Μετά εμφανίζεται η οθόνη παραμέτρων όπου προσέχουμε να είναι μαρκαρισμένη η επιλογή Register environment variables όπως φαίνεται στην εικόνα Εικόνα : Οθόνη παραμετροποίησης 74

79 Στην παρακάτω οθόνη της εικόνας πατάμε YES. Εικόνα : Οθόνη SourceSafe Κατόπιν ακολουθεί η εγκατάσταση της VB6 όπως φαίνεται στην εικόνα Εικόνα : Οθόνη Εγκατάστασης Κατόπιν πατάμε OK στο παρακάτω μήνυμα της εικόνας Εικόνα : Οθόνη Μηνύματος 75

80 Τέλος εμφανίζεται το μήνυμα επανεκκίνησης του υπολογιστή όπου πατάμε Restart όπως φαίνεται στην εικόνα Εικόνα : Οθόνη Μηνύματος Επανεκκίνησης Μετά την επανεκκίνηση ενδέχεται να μας ζητηθεί η εγκατάσταση της MSDN Library, όπου θα επιλέξουμε την διαδρομή του σκληρού που βρίσκεται η MSDN.Αν δεν βγει κανένα μήνυμα πηγαίνουμε στον φάκελο που λέει Cd1 MSDN και πατάμε το αντίστοιχο setup αρχείο. Θα εμφανιστεί η οθόνη της εικόνας όπου πατάμε Continue. Εικόνα : Οθόνη εγκατάστασης MSDN 76

81 Στην επόμενη οθόνη πατάμε το τετράγωνο της Full εγκατάστασης όπως φαίνεται στην εικόνα Εικόνα : Οθόνη εγκατάστασης MSDN επιλογές. Κατόπιν εμφανίζεται η οθόνη της διαδικασίας εγκατάστασης και τέλος βγαίνει το μήνυμα επιτυχούς εγκατάστασης της MSDN library όπως φαίνεται στην εικόνα Εικόνα : Οθόνη επιτυχούς εγκατάστασης MSDN. Έτσι ολοκληρώνεται η εγκατάσταση του Visual Studio 6 enterprise με MSDN Library εγκατεστημένη. 77

82 7.2.2 Διαδικασία εγκατάστασης Neapolis Development Αρχικά πηγαίνουμε στον φάκελο που βρίσκεται το Nea4developer και πατάμε αριστερό κλικ στο setup όπως φαίνεται στην εικόνα Εικόνα : Φάκελος Setup Nea4developer. Στην επόμενη οθόνη πατάμε OK όπως φαίνεται στην εικόνα Εικόνα : Οθόνη Setup Nea4developer. 78

83 Κατόπιν πατάμε αριστερό κλικ στο τετράγωνο όπως φαίνεται στην εικόνα Εικόνα : Οθόνη Setup Nea4developer. Στην επόμενη οθόνη πατάμε Continue όπως φαίνεται στην εικόνα Εικόνα : Οθόνη επιλογής φακέλου. Μετά από αυτό ολοκληρώνεται η εγκατάσταση του Nea4Developer. 79

84 Κατόπιν πηγαίνουμε στην διαδρομή program files/neapolis όπως φαίνεται στην εικόνα και πατάμε διπλό αριστερό κλικ στο Nea4develop, όπου εμφανίζεται η οθόνη της εικόνας Εικόνα : Οθόνη φακέλου Nea4develop. Εικόνα : Οθόνη αποσυμπίεσης. 80

85 Στην οθόνη της εικόνας αλλάζουμε την διαδρομή αποσυμπίεσης και γράφουμε την διαδρομή όπως φαίνεται στην οθόνη της εικόνας Εικόνα : Οθόνη αλλαγής διαδρομής αποσυμπίεσης. Κατόπιν πάμε στον σκληρό δίσκο του συστήματος και πατάμε διπλό αριστερό κλικ στον φάκελο Nea4 που δημιουργήθηκε προηγουμένως, όπως φαίνεται στην οθόνη της εικόνας Εικόνα : Οθόνη φακέλου Nea4. 81

86 Κατόπιν μπαίνουμε στον φάκελο files του φακέλου Nea4 όπως φαίνεται στην οθόνη της εικόνας και κάνουμε αποκοπή τον φάκελο NeaFiles. Εικόνα : Οθόνη φακέλου NeaFiles. Τον αντιγράφουμε τέλος στην διαδρομή C:\ και παίρνουμε το αποτέλεσμα της οθόνης στην εικόνα Εικόνα : Οθόνη σκληρού δίσκου συστήματος. 82

87 Μέσα στον φάκελο Nea4 βρίσκονται τα project της Visual Basic όπως φαίνεται στην οθόνη της εικόνας Εικόνα : Φάκελος Nea4 projects VB. Κάνοντας διπλό κλικ στο project που μας ενδιαφέρει(σε μας το Neaprt2) παίρνουμε το αποτέλεσμα της οθόνης στην εικόνα όπου πατάμε Yes στο μήνυμα που πρωτοβγάζει. Εικόνα : Οθόνη περιβάλλοντος VB6. Πλέον το περιβάλλον ανάπτυξης μας είναι έτοιμο και σωστά εγκατεστημένο και μπορούμε να αρχίσουμε την συγγραφή του κώδικά μας. 83

88 7.3 Λειτουργία της εφαρμογής Για να φτάσουμε στο σημείο να καταλάβουμε πιο γρήγορα το σκοπό για τον οποίο δημιουργήθηκε η κάθε συνάρτηση θα πρέπει να δούμε πως δουλεύει το πρόγραμμα. Πριν από αυτά, για να γίνει η υλοποίηση του προγράμματος αν εξαιρέσουμε το γεγονός ότι υπήρξε η ανάγκη να μελετήσουμε αρκετά τη Visual Basic, κατόπιν μελετήσαμε αρκετά τον τρόπο με τον οποίο δουλεύει το δεύτερο μέρος του Neapolis. Ο λόγος της αναφοράς αυτού του γεγονότος είναι διότι βοήθησε αρκετά ώστε να ανακαλύψουμε που θα γίνει η δική μας παρέμβαση. Τα βήματα του προγράμματος Η εφαρμογή που δημιουργήθηκε βρίσκεται σε διαφορετικές καταστάσεις καθώς αυτή εκτελείται. Παρακάτω φαίνονται τα βήματα που ακολουθεί το πρόγραμμα κατά την εκτέλεση. Τα παρακάτω βήματα εκτελούνται τη στιγμή που θα φορτωθεί η φόρμα στη μνήμη. 1. Τοποθετούνται τα κουμπιά εκείνα που αντιστοιχούν στις παραγόμενες μεταβλητές (έτσι ώστε κάνοντας κλικ σε κάποιο από αυτά να εμφανιστεί η αντίστοιχη κυματομορφή) ανάλογα πάντα με το πρόγραμμα το οποίο επιλέχθηκε. 2. Φορτώνονται στη μνήμη οι φόρμες κυματομορφής που αντιστοιχούν σε κάθε παραγόμενη μεταβλητή. 3. Συμπληρώνεται το μενού της φόρμας στη γλώσσα που επέλεξε ο χρήστης κατά την εκτέλεση του Neapolis στο πρώτο μέρος. Αμέσως μετά εκτελείται η Resize της φόρμας εάν την έχουμε ορίσει, όπως έχουμε κάνει στη περίπτωση μας. Σημείωση Η Resize λαμβάνει χώρα όταν ένα αντικείμενο εμφανίζεται για πρώτη φορά στην οθόνη, ή όταν αλλάζει, η κατάσταση του παραθύρου. 84

89 Όπως η προηγούμενη διαδικασία (το φόρτωμα της φόρμας της μνήμης), έτσι κι αυτή εκτελεί διάφορες λειτουργίες οι οποίες φαίνονται στα παρακάτω βήματα. 1. Ο προσδιορισμός του χώρου σχεδίασης. 2. Η σχεδίαση του κυκλώματος. 3. Η τοποθέτηση των οργάνων μέτρησης στην κατάλληλη θέση. Καθώς ξεκινήσει η προσομοίωση, εκτελείται η ακόλουθη διαδικασία σε βήματα: 1. Αφού υπολογιστούν οι τιμές από τη φόρμα SimulationForm ύστερα μεταβιβάζονται οι τιμές στα όργανα μέτρησης. 2. Τοποθετούνται οι τιμές που υπολογίστηκαν σε όλες τις φόρμες κυματομορφής. Έχουμε να κινηθούμε σε πολλές επιλογές κατά τη διάρκεια εκτέλεσης της εφαρμογής, όπως παρουσιάζονται παρακάτω. o Εμφανίζονται οι φόρμες κυματομορφής που θα επιλέξει ο χρήστης. o Η εκτύπωση του κυκλώματος. o Η εκτύπωση κυματομορφής από οποιαδήποτε φόρμα κυματομορφής. o Αλλαγή οριακών τιμών. o Μετάβαση ανάμεσα στη φόρμα κυκλώματος και αυτή των κυματομορφών. Τα περισσότερα από αυτά έχουν οργανωθεί σε συναρτήσεις από τις οποίες οι πιο σημαντικές (αυτές στις οποίες θα παρέμβει κάποιος για να κάνει το ίδιο για τα υπόλοιπα συστήματα) θα αναφερθούν στις επόμενες ενότητες. Σε όλες τις συναρτήσεις που θα αναφερθούν με εξαίρεση τη FillSimCircuitForm θα πρέπει να 85

90 τοποθετηθεί κώδικας παρόμοιος με αυτόν του 1-φασικού 1-παλμικού ανορθωτή για να δουλεύει και για τα άλλα συστήματα προσομοίωσης. Ολόκληρος ο κώδικας βρίσκεται στο Παράρτημα στο Β μέρος. 7.4 Διαδικασία εμφάνισης του επιθυμητού κυκλώματος Για να καταφέρουμε πατώντας την «Εμφάνιση Κυκλώματος» στην βασική φόρμα εξομοίωσης(simulationform, η γνωστή μας φόρμα με τις κυματομορφές), να περάσουμε στην εναλλακτική φόρμα εξομοίωσης (SimCircuitForm, η φόρμα με το επιθυμητό κύκλωμα), θα πρέπει να κάνουμε κάποιες τροποποιήσεις σε καίρια σημεία του κώδικα του Neapart2. Αλλιώς αν δεν το κάνουμε αυτό θα εμφανιστεί ένα σχέδιο του κυκλώματος, ή μήνυμα λάθους ότι το κύκλωμα που ζητάμε δεν είναι διαθέσιμο και δεν πρόκειται ποτέ να πάμε στο περιβάλλον της εναλλακτικής εξομοίωσης, όπως ήδη έχουμε δει. Για να καταφέρουμε να το κάνουμε αυτό θα πρέπει να κάνουμε τα εξής: 1. Στην SimulationForm στην υπορουτίνα Sub Form_Load() πάμε και βρίσκουμε το παρακάτω κομμάτι κώδικα. Select Case Right$(ProgName$, 3) Case "MOT", "CON" ShowFigure.Visible = True ShowFigure.Enabled = True Case Else ShowFigure.Visible = False ShowFigure.Enabled = False End Select Όπως παρατηρούμε δεν υπάρχει καμία αναφορά για το κύκλωμα που μας ενδιαφέρει που στην περίπτωσή μας είναι το RE1DMD. Ποιο συγκεκριμένα ο παραπάνω κώδικας μας λέει το εξής. Έλεγξε από το ProgName τα 3 γράμματα από δεξιά. Αν είναι τα MOT ή CON εμφάνισε το «Εμφάνιση Κυκλώματος», αλλιώς απέκρυψε το. Για να καταφέρουμε η «Εμφάνιση Κυκλώματος» να φαίνεται κάθε φορά που έχουμε επιλέξει ΚΣΣΡ(Κινητήριο σύστημα συνεχούς ρεύματος) 1-φασικου μετατροπέα μετατρέπουμε τον κώδικά μας όπως παρακάτω. 86

91 Select Case Right$(ProgName$, 3) Case "MOT", "CON", "DMD" ShowFigure.Visible = True ShowFigure.Enabled = True Case Else ShowFigure.Visible = False ShowFigure.Enabled = Fals End Select 2. Στην SimulationForm πάμε και βρίσκουμε την Sub ShowFigure_Click(). Ο κώδικας της υπορουτίνας αυτής φαίνεται παρακάτω. Ανάλογα με το τι κύκλωμα έχουμε να εξομοιώσουμε κάθε φορά πρέπει να κάνουμε και την ανττίστοιχη αλλαγή. Για παράδειγμα στην περίπτωσή μας που είχαμε κινητήριο σύστημα 1-φασικού μετατροπέα, θα έπρεπε να προσθέσουμε στα cases το RE1DMD και για να εμφανίζονται τα κατάλληλα σχήματα αντί του εναλλακτικού περιβάλλοντος, καθώς και μηνύματα σφάλματος όταν τα σχέδια απουσιάζουν, έπρεπε να μετασχηματιστεί ο παλαιός κώδικας όπως παρακάτω. Private Sub ShowFigure_Click() Select Case ProgName Case "RE1CON", "RE1DMD" Select Case Left(RectType, 2) Case "1P" Me.Hide SimCircuitForm.Show Case Else Select Case Right$(ProgName$, 3) Case "MOT", "CON", "RMD" Call ShowCircuit CircuitForm.Show 1 Case Else ErrorNumber = 48 Call PMessages End Select End Select Case Else Select Case Right$(ProgName$, 3) Case "MOT", "CON", "RMD" Call ShowCircuit CircuitForm.Show 1 Case Else ErrorNumber = 48 Call PMessages 87

92 End Select End Select End Sub Για να καταλάβετε πως ήταν ο κώδικας πριν την παρέμβαση μας, παραθέτω και τον αρχικό κώδικα. Private Sub ShowFigure_Click() Select Case Right$(ProgName$, 3) Case "MOT", "CON" Call ShowCircuit CircuitForm.Show 1 Case Else ErrorNumber = 48 Call PMessages End Select End Sub Μετά από αυτές τις τροποποιήσεις πλέον θα μπορούμε να εισέλθουμε στην SimCircuitForm που είναι και το κύριο θέμα αυτής της πτυχιακής. 7.5 Εισαγωγή στην φόρμα SimCircuitForm Αφού εισέλθουμε, με την διαδικασία που περιγράψαμε παραπάνω και γίνει κλίση της φόρμας, με την εντολή SimCircuitForm.Show, εκτελούνται ταυτόχρονα η Sub Form_Load() όπως φαίνεται παρακάτω Private Sub Form_Load() '-----Comment this area when you debug.uncomment only when you build '-> Keep the aspect ratio of a form.used with apistuff.bas(by John Armaos) OldWindowProc = SetWindowLong( _ hwnd, GWL_WNDPROC, _ AddressOf NewWindowProc) ' Dim Pi! Pi = 4 * Atn(1) For f = 1 To 20 PeriodPointB(f) = NumPeriodPoints Next f 88

93 ' Πρόσθεσε τα κουμπιά που χρειάζονται για τις παραγόμενες ' μεταβλητές, έτσι ώστε, να μπορεί ο χρήστης ανά πάσα ' στιγμή να εμφανίσει τις αντίστοιχες κυματομορφές. Call AddButtons ' Φόρτωσε τις φόρμες κυματομορφής, δίνοντας πρώτα σε κάθε ' μία τη ταυτότητα που της αντιστοιχεί. Call LoadWaveForms ' Συμπλήρωσε τις λεζάντες (caption) των μενού καθώς και ' των ελεγκτηρίων της τρέχουσας φόρμας. Αυτό θα γίνει ' είτε στα Ελληνικά είτε στα Αγγλικά είτε στα Ισπανικά. ' Ανάλογα δηλαδή με τη γλώσσα που επιλέχθηκε. Select Case Language$ Case "E" Help(1).Caption = "&Help" Case "G" Help(1).Caption = "Βοήθεια" Case "C" Help(1).Caption = "&Ayuda" Case "N" Help(1).Caption = " " Case "D" Help(1).Caption = " " Case Else ErrorNumber = 49 Call PMessages End End Select Call FillSimCircuitForm End Sub Καθώς επίσης ταυτόχρονα εκτελείται και η Private Sub Form_Resize() όπου φαίνεται πιο κάτω Private Sub Form_Resize() Call Picture1_Resize End Sub Κοιτώντας τα παραπάνω κομμάτια κώδικα συμπεραίνουμε γενικά, ότι με το που ανοίγει η φόρμα μας, καλείται το API που κρατάει τo aspect ratio της φόρμας σταθερό(apistuff module), η υπορουτίνα που προσθέτει τα κουμπιά στην μπάρα των κουμπιών της εμφάνισης των κυματομορφών(addbuttons), καθώς και η 89

94 υπορουτίνα που είναι υπεύθυνη για το γέμισμα της φόρμας με κουμπιά και λεζάντες, ενώ επίσης αποδίδει και ονόματα σε αυτά, ανάλογα με την εκάστοτε γλώσσα που έχουμε επιλέξει(fillsimcircuitform). Η Form_Resize καλεί με την σειρά της, την Picture1_Resize ο κώδικας της οποίας φαίνεται παρακάτω: Private Sub Picture1_Resize() ' Κάνε το κύκλωμα να καταλαμβάνει όλη τη φόρμα εκτός του χώρου ' ο οποίος ανήκει στο πίνακα κουμπιών. If SimCircuitForm.ScaleHeight > Toolbar1.Height Then Picture1.Height = SimCircuitForm.ScaleHeight - Toolbar1.Height Picture1.Width = SimCircuitForm.ScaleWidth End If StartBtn.Width = SimCircuitForm.ScaleWidth / 7245 * 1087 StartBtn.Top = Picture1.Height / 376 * 352 ' Τοποθετείτε πάντα στο κέντρο της φόρμας. Όσον αφορά τον άξονα x. StartBtn.Left = SimCircuitForm.ScaleWidth / 2 - StartBtn.Width / 2 Call Picture1_Paint End Sub Όπως διαπιστώνουμε από τα παραπάνω, η συγκεκριμένη υπορουτίνα αφού εξισώσει την κλίμακες της γενικής φόρμας, με την κλίμακα του στοιχείου μέσα στο οποίο θα σχεδιαστεί το κύκλωμα, καλεί τελικά την Picture1_paint Private Sub Picture1_Paint() Call DrawCircuit(Picture1, True) End Sub Αυτή τελικά καλεί την DrawCircuit, που είναι υπεύθυνη για τον σχεδιασμό του κυκλώματος και των οργάνων και θα αναλυθεί πιο κάτω. 7.6 Η συνάρτηση AddButtons Η συνάρτηση AddButtons, αφού πρώτα ελέγξει το σύστημα που έχει επιλεγεί, τοποθετεί τα κουμπιά των παραγόμενων μεταβλητών, με την απαιτούμενη 90

95 λεζάντα, που θα χρειαστούν για να εμφανίζονται οι κυματομορφές τους. Τα κουμπιά αυτά τοποθετούνται σε ένα Toolbar. Αρχικά, η εφαρμογή είχε γίνει με πίνακα κανονικών κουμπιών αλλά το αποτέλεσμα δεν ήταν το ιδανικό, από πολλές απόψεις. Παραδείγματος χάριν, με το Resize της φόρμας SimCircuitForm θα έπρεπε να αλλάζουμε το μέγεθος και τη θέση του κάθε κουμπιού (όπως γίνεται με τα όργανα μέτρησης). Τοποθετήσαμε κώδικα για αυτό και το πετύχαμε αλλά ύστερα έχανε σε εμφάνιση. Ενώ με το Toolbar απλά τα τοποθετούμε με τη σειρά και δε χρειάζεται να ασχολούμαστε με το μέγεθος και τη θέση τους διότι στο ToolBar μπορούμε να του πούμε να το τοποθετήσει είτε στο αριστερό, είτε στο δεξί, είτε στο πάνω, είτε στο κάτω μέρος της φόρμας. Εμείς το τοποθετούμε στο κάτω μέρος. Προέλευση: Χρησιμοποιείται: Φόρμα SimCircuitForm στη Form_Load της SimCircuitForm Περίπου στο τέλος της συνάρτησης που βρίσκονται τρία διαδοχικά Case το έχουμε βάλει σαν σύμβολο όπου δηλώνει ότι θα τοποθετηθεί ο κώδικας για τα υπόλοιπα συστήματα προσομοίωσης. Κώδικας της συνάρτησης Sub AddButtons() ' Έλεγξε το πρόγραμμα επιλογής. Select Case ProgName$ ' Εάν το σύστημα είναι μονοφασικός ανορθωτής. Case "RE1CON" ' ' Εάν είναι ενός παλμού με δίοδο ελεύθερης ροής. If RectType = "1PD" Then ' Τοποθέτησε τα κουμπιά που θα χρειαστείς, ' για τις παραγόμενες μεταβλητές. Toolbar1.Buttons.Add Toolbar1.Buttons(1).Caption = "Is" Toolbar1.Buttons.Add Toolbar1.Buttons(2).Caption = "Vs" 91

96 Toolbar1.Buttons.Add Toolbar1.Buttons(3).Caption = "Vt" Toolbar1.Buttons.Add Toolbar1.Buttons(4).Caption = "It" Toolbar1.Buttons.Add Toolbar1.Buttons(5).Caption = "Ifw" Toolbar1.Buttons.Add Toolbar1.Buttons(6).Caption = "Vo" Toolbar1.Buttons.Add Toolbar1.Buttons(7).Caption = "Io" ' Τοποθέτησε ένα κουμπί με Λεζάντα "-", ' ανενεργό έτσι ώστε να χωριστούν τα ' κουμπιά των παραγώμενων μεταβλητών με ' αυτά των "Inst", "Rms", "Aver". Toolbar1.Buttons.Add Toolbar1.Buttons(8).Caption = "-" Toolbar1.Buttons(8).Enabled = False ' Τοποθέτησε τα κουμπιά "Inst", "Rms", "Aver" ' Στιγμιαίων, ενεργών και μέσων τιμών. Toolbar1.Buttons.Add Toolbar1.Buttons(9).Caption = "Inst" Toolbar1.Buttons.Add Toolbar1.Buttons(10).Caption = "Rms" Toolbar1.Buttons.Add Toolbar1.Buttons(11).Caption = "Aver" ' Σημείωσε το κουμπί Inst και όρισε το σαν προεπιλογή. Toolbar1.Buttons(9).MixedState = True choice = Toolbar1.Buttons(9).Caption ' Διαφορετικά εάν είναι ενός παλμού χωρίς δίοδο ελεύθερης ροής. ElseIf RectType = "1P-" Then ' Τοποθέτησε τα κουμπιά που θα χρειαστείς, ' για τις παραγόμενες μεταβλητές. Toolbar1.Buttons.Add Toolbar1.Buttons(1).Caption = "Is" Toolbar1.Buttons.Add Toolbar1.Buttons(2).Caption = "Vs" Toolbar1.Buttons.Add Toolbar1.Buttons(3).Caption = "Vt" Toolbar1.Buttons.Add Toolbar1.Buttons(4).Caption = "It" Toolbar1.Buttons.Add Toolbar1.Buttons(5).Caption = "Vo" Toolbar1.Buttons.Add 92

97 Toolbar1.Buttons(6).Caption = "Io" ' Τοποθέτησε ένα κουμπί με Λεζάντα "-", ' ανενεργό έτσι ώστε να χωριστούν τα ' κουμπιά των παραγώμενων μεταβλητών με ' αυτά των "Inst", "Rms", "Aver". Toolbar1.Buttons.Add Toolbar1.Buttons(7).Caption = "-" Toolbar1.Buttons(7).Enabled = False ' Τοποθέτησε τα κουμπιά "Inst", "Rms", "Aver" ' Στιγμιαίων, ενεργών και μέσων τιμών. Toolbar1.Buttons.Add Toolbar1.Buttons(8).Caption = "Inst" Toolbar1.Buttons.Add Toolbar1.Buttons(9).Caption = "Rms" Toolbar1.Buttons.Add Toolbar1.Buttons(10).Caption = "Aver" ' Σημείωσε το κουμπί Inst και όρισε το σαν προεπιλογή. Toolbar1.Buttons(8).MixedState = True choice = Toolbar1.Buttons(8).Caption End If ' Case "RE1DMD" If Left(RectType, 2) = "1P" Then ' Τοποθέτησε τα κουμπιά που θα χρειαστείς, ' για τις παραγόμενες μεταβλητές. Toolbar1.Buttons.Add Toolbar1.Buttons(1).Caption = "Is" Toolbar1.Buttons.Add Toolbar1.Buttons(2).Caption = "Vs" Toolbar1.Buttons.Add Toolbar1.Buttons(3).Caption = "Vt" Toolbar1.Buttons.Add Toolbar1.Buttons(4).Caption = "It" Toolbar1.Buttons.Add Toolbar1.Buttons(5).Caption = "Vo" Toolbar1.Buttons.Add Toolbar1.Buttons(6).Caption = "Io" Toolbar1.Buttons.Add Toolbar1.Buttons(7).Caption = "Tr" Toolbar1.Buttons.Add Toolbar1.Buttons(8).Caption = "Sp" ' Τοποθέτησε ένα κουμπί με Λεζάντα "-", ' ανενεργό έτσι ώστε να χωριστούν τα 93

98 ' κουμπιά των παραγώμενων μεταβλητών με ' αυτά των "Inst", "Rms", "Aver". Toolbar1.Buttons.Add Toolbar1.Buttons(9).Caption = "-" Toolbar1.Buttons(9).Enabled = False ' Τοποθέτησε τα κουμπιά "Inst", "Rms", "Aver" ' Στιγμιαίων, ενεργών και μέσων τιμών. Toolbar1.Buttons.Add Toolbar1.Buttons(10).Caption = "Inst" Toolbar1.Buttons.Add Toolbar1.Buttons(11).Caption = "Rms" Toolbar1.Buttons.Add Toolbar1.Buttons(12).Caption = "Aver" ' Σημείωσε το κουμπί Inst και όρισε το σαν προεπιλογή. Toolbar1.Buttons(10).MixedState = True choice = Toolbar1.Buttons(10).Caption End If ' Case ' Case '. '. '. End Select End Sub 7.7 Η συνάρτηση LoadWaveForms Η συνάρτηση LoadWaveForms, ανάλογα με το επιλεγμένο σύστημα δίνει ταυτότητα σε όλες τις φόρμες κυματομορφής και μετά φορτώνει αυτές στη μνήμη. Τι είναι αυτή η ταυτότητα; Για να δημιουργήσουμε τις φόρμες κυματομορφής (WaveForm), χρησιμοποιήσαμε ένα πίνακα με στοιχεία ένα πρότυπο φόρμας. Δηλαδή γράψαμε ένα κώδικα ο οποίος χρησιμοποιείται αυτόνομα ο ίδιος για κάθε φόρμα κυματομορφής. 94

99 Η ταυτότητα διαχωρίζει τον κώδικα που θα εκτελεστεί για κάθε φόρμα κυματομορφής. Θα το δούμε με περισσότερη λεπτομέρεια στην ώρα του (όταν εξηγήσουμε συναρτήσεις της φόρμας WaveForm). Σαν ταυτότητα οι φόρμες κυματομορφής παίρνουν το κείμενο του κουμπιού που τους αντιστοιχεί. Προέλευση: Χρησιμοποιείται: Φόρμα SimCircuitForm στη Form_Load της SimCircuitForm Περίπου στο τέλος της συνάρτησης που βρίσκονται τρία διαδοχικά Case το έχουμε βάλει σαν σύμβολο όπου δηλώνει ότι θα τοποθετηθεί ο κώδικας για τα υπόλοιπα συστήματα προσομοίωσης. Κώδικας της συνάρτησης Sub LoadWaveForms() ' Έλεγξε το πρόγραμμα επιλογής. Select Case ProgName ' Εάν το σύστημα είναι μονοφασικός ανορθωτής. Case "RE1CON" ' Εάν είναι μονοπαλμικός με δίοδο ελεύθερης ροής. If RectType = "1PD" Then ' Δώσε ταυτότητα σε όλες τις φόρμες (κυματομορφής) ώστε ' να αντιστοιχιστούν κάθε παραγόμενη μεταβλητή με μία κυματομορφή. For f = 1 To 7 frms(f).id = Toolbar1.Buttons(f).Caption Next f ' Φόρτωσε στη μνήμη όλες τις φόρμες (κυματομορφής). For f = 1 To 7 Load frms(f) Next f ' Εάν είναι μονοπαλμικός χωρίς δίοδο ελεύθερης ροής. ElseIf RectType = "1P-" Then ' Δώσε ταυτότητα σε όλες τις φόρμες (κυματομορφής) ώστε ' να αντιστοιχιστούν κάθε παραγόμενη μεταβλητή με μία κυματομορφή. For f = 1 To 6 frms(f).id = Toolbar1.Buttons(f).Caption 95

100 Next f ' Φόρτωσε στη μνήμη όλες τις φόρμες (κυματομορφής). For f = 1 To 6 Load frms(f) Next f End If ' Case "RE1DMD" If Left(RectType, 2) = "1P" Then ' Δώσε ταυτότητα σε όλες τις φόρμες (κυματομορφής) ώστε ' να αντιστοιχιστούν κάθε παραγόμενη μεταβλητή με μία κυματομορφή. For f = 1 To 8 frms(f).id = Toolbar1.Buttons(f).Caption Next f ' Φόρτωσε στη μνήμη όλες τις φόρμες (κυματομορφής). For f = 1 To 8 Load frms(f) Next f End If ' Case ' Case '. '. '. End Select End Sub 7.8 Η συνάρτηση FillSimCircuitForm Η συνάρτηση FillSimCircuitForm, ανάλογα με το επιλεγμένο σύστημα συμπληρώνει τις λεζάντες (caption) των μενού καθώς και των ελεγκτηρίων της τρέχουσας φόρμας. Αυτό θα γίνει είτε στα Ελληνικά είτε στα Αγγλικά είτε στα Ισπανικά. Ανάλογα δηλαδή με τη γλώσσα που επιλέχθηκε. Ένα πολύ βασικό σημείο που πρέπει να σταθούμε είναι ότι το Neapolis καλώντας τη συνάρτηση TextMatrix φορτώνει τον πίνακα Matrix με τα κείμενα που θα 96

101 χρειαστούν για τις λεζάντες ελεγκτηρίων, τα μηνύματα προειδοποίησης και για τις τρεις γλώσσες επιλογής. Στη θέση ένα του πίνακα αποθηκεύονται τα μηνύματα αυτά στα Ελληνικά, στη δύο στα Αγγλικά και στη τρία στα Ισπανικά. Όμως ο προγραμματιστής κατά τη σχεδίαση χρειάζεται να γνωρίζει τι περιέχει αυτός ο πίνακας ώστε αν χρειαστεί να εμφανίσει ένα μήνυμα σε άλλο σημείο της φόρμας το οποίο να υπάρχει στο πίνακα μπορεί να δείξει άμεσα εκεί και θα το μεταφράσει σε οποιαδήποτε από τις τρεις γλώσσες. Στo Παράρτημα στο Γ μέρος, λόγω της χρησιμότητας που μόλις αναφέρθηκε παρουσιάζονται τα περιεχόμενα του πίνακα Matrix. Σημείωση Η συναρτηση αυτή δε χρειάζεται να δεχτεί παρέμβαση. Τρέχει για όλα τα συστήματα προσομοίωσης. Προέλευση: Χρησιμοποιείται: Φόρμα SimCircuitForm στη Form_Load της SimCircuitForm Κώδικας της συνάρτησης Sub FillSimCircuitForm() Text$ = Matrix(Mlanguage).System(1) SimCircuitForm.Caption = Text$ + " - " + ProgramTitle$ SimCircuitForm!File.Caption = Matrix(Mlanguage).System(2) SimCircuitForm!Start.Caption = Matrix(Mlanguage).System(4) SimCircuitForm!FilePause.Caption = Matrix(Mlanguage).System(5) SimCircuitForm!Change.Caption = Matrix(Mlanguage).System(6) SimCircuitForm!ChangeParameter(1).Caption = Matrix(Mlanguage).System(7) Select Case ProgName$ Case "IN3MOT" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).System(9) SimCircuitForm!ChangeParameter(5).Visible = 0 Case "CY3IMD" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(7) Case "RE1DMD", "RE3DMD" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System1(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) 97

102 SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(2) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).System1(9) Case "CHPDMD" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System1(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).System1(9) Case "RE1CON", "RE3CON" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(2) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(3) Case "AC3CON" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(2) SimCircuitForm!ChangeParameter(5).Visible = 0 Case "IN1CON", "IN3CON" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).Sysplus(4) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(6) Case "DICMOT", "SY3MOT" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System1(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System1(10) If MotorTypeData = "INDE" Then SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).System1(9) '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Else SimCircuitForm!ChangeParameter(4).Visible = 0 End If SimCircuitForm!ChangeParameter(5).Visible = 0 Case "CY3CON" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(7) Case "IN1MOT" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimCircuitForm!ChangeParameter(4).Visible = 0 SimCircuitForm!ChangeParameter(5).Visible = 0 Case "FC3CON" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).Sysplus(4) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(6) 98

103 Case "CHPCON", "BUCCON", "BOOCON", "BUBCON", "CUKCON", "CPACON", "CPBCON", "CPCCON", "CPDCON", "CPECON" '***** aitor pone BUCCON en la linea anterior **** SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).Sysplus(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(3) Case "CHPCON", "CPACON", "CPBCON", "CPCCON" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).Sysplus(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) Case "DCLCON" SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(9) SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).Sysplus(12) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(10) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(11) Case "IN3IMD", "FC3IMD" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).Sysplus(4) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(6) Case "AC3IMD" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(2) SimCircuitForm!ChangeParameter(5).Visible = 0 Case "SRCIMD" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).System(9) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(13) Case "CSCIMD" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(10) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(14) End Select ' Εάν η γλώσσα που έχει επιλεγεί είναι η Ελληνική. If Mlanguage = 1 Then SimCircuitForm!ShowFigure.Caption = "Εμφάνιση Κυματομορφών" SimCircuitForm!mnu_change_color.Caption = "Αλλαγή χρώματος" SimCircuitForm!mnu_color_circuit.Caption = "Κυκλώματος" ' Εάν η γλώσσα που έχει επιλεγεί είναι η Αγγλική. 99

104 ElseIf Mlanguage = 2 Then SimCircuitForm!ShowFigure.Caption = "Show Waves" SimCircuitForm!mnu_change_color.Caption = "Change Color" SimCircuitForm!mnu_color_circuit.Caption = "Circuit" End If SimCircuitForm!ToPrint.Caption = Matrix(Mlanguage).System(12) SimCircuitForm!PrintCircuit.Caption = Mid(Matrix(Mlanguage).System(27), 2) SimCircuitForm!Experiments.Caption = Matrix(Mlanguage).System(14) SimCircuitForm!Autoloading.Caption = Matrix(Mlanguage).System(15) SimCircuitForm!Exit.Caption = Matrix(Mlanguage).System(20) SimCircuitForm!StartBtn.Caption = Matrix(Mlanguage).System(24) Select Case ProgName$ Case "SY3MOT" SimCircuitForm.Synchronize1.Visible = True SimCircuitForm.Synchronize1.Enabled = True Case Else SimCircuitForm!Synchronize1.Visible = False SimCircuitForm!Synchronize1.Enabled = False End Select End Sub 7.9 Η συνάρτηση DrawCircuit Η DrawCircuit είναι στην ουσία η υπορουτίνα που θα καλέσει μετέπειτα τις συναρτήσεις σχεδιασμού των κυκλωμάτων που μας ενδιαφέρουν. Επίσης εδώ καθορίζεται η κλίμακα του εκάστοτε κυκλώματος σε σχέση με την φόρμα στην οποία εμπεριέχεται και έχει άμεση σχέση με την κλίμακα της κύριας φόρμας. Εδώ ακόμη καθορίζονται και ο αριθμός των textboxes που θα χρησιμοποιούνται κάθε φορά από τα όργανα μέτρησης και μέσα στα οποία θα εμφανίζονται οι αντίστοιχες τιμές. Στο τέλος του κώδικα που υπάρχουν σχόλια, είναι εκεί που θα προσθέσει ο προγραμματιστής τα κυκλώματα που τον ενδιαφέρουν να σχεδιαστούν. 100

105 Προέλευση: Χρησιμοποιείται: Φόρμα SimCircuitForm στη Picture1_Paint της SimCircuitForm Κώδικας της συνάρτησης Private Sub DrawCircuit(obj As Object, drawtbox As Boolean) Xscl = obj.width Yscl = obj.height Xdef = Xscl / 150 Ydef = Yscl / 150 obj.cls For f = 1 To 12 Texts(f).Visible = False Texts(f).MaxLength = 5 Next f '**********how to call draw subroutines examples************************ 'Call Drawline(1, 2, PointAx(1).x + 5, PointAx(1).y + 10, 0, 20, "x0", "y+", obj) 'Call DrawDiode(9, ">", False, obj) 'Call DrawResistance(12, "hor", obj) 'Call DrawCoil(24, "hor", obj) 'Call drawac(45, obj) 'Call DrawIV(True, 1, "-10.02", 45, "ver") '*************************************************************************** Select Case ProgName Case "RE1CON" Call Draw1phReCirc(obj, drawtbox) Call DrawLoadRe1conCirc(obj, drawtbox) Case "RE1DMD" Call Draw1phReCirc(obj, drawtbox) Call DrawDcmotorCirc(obj, drawtbox) Call DrawFieldCirc(obj, drawtbox) ' 'other circuit cases ' End Select End Sub 101

106 7.10 Συναρτήσεις σχεδιασμού στοιχείων κυκλώματος Εισαγωγή Σε παλαιότερες πτυχιακές ο σχεδιασμός ενός κυκλώματος γινόταν εξολοκλήρου σε μια υπορουτίνα. Δηλαδή εκεί μέσα σχεδιάζονταν οι αντιστάσεις, οι πηγές, οι κινητήρες και όλα τα ευθύγραμμα τμήματα που συνέδεαν τα στοιχεία αυτά μεταξύ τους. Επίσης υπήρχαν ξεχωριστές συναρτήσεις που καθόριζαν την μετακίνηση κάθε φορά των textboxes που συνέθεταν τα όργανα, ξεχωριστές συναρτήσεις που συνέδεαν αυτά με την αλλαγή του μεγέθους του παραθύρου κ.ό.κ. Το πρόβλημα ήταν ότι όταν ήθελες να σχεδιάσεις ένα κύκλωμα έπρεπε να σχεδιάζεις κάθε φορά τα στοιχεία του κυκλώματος από την αρχή. Κάτι τέτοιο έκανε τον κώδικα άκαμπτο και δύσχρηστο. Ένας από τους στόχους αυτής της πτυχιακής ήταν να προσομοιώσει τον τρόπο σχεδιασμού με αυτόν γνωστών σχεδιαστικών προγραμμάτων CAD. Δηλαδή να υπάρχουν ευθύγραμμα τμήματα που θα παίζουν το ρόλο του καλωδίου, ξεχωριστές αντιστάσεις, πηγές, κινητήρες, όργανα μέτρησης. Έτσι καλώντας κάθε φορά αυτό που χρειάζεσαι δίνοντας τις συντεταγμένες του στοιχείου στο κύκλωμα, να μπορείς να συνθέτεις κυκλώματα, ανεξαρτήτου βαθμού δυσκολίας. Αυτό κατορθώθηκε φτιάχνοντας σε ξεχωριστές συναρτήσεις κάθε ένα από τα στοιχεία που χρειαζόμαστε και καλώντας τα κάθε φορά με τις κατάλληλες παραμέτρους, να συνθέτουμε ότι πολύπλοκο κύκλωμα επιθυμούμε. Ο τρόπος σχεδίασης δε στηρίζεται σε 1 απόλυτο σημείο στην οθόνη σχεδιασμού και όλα τα υπόλοιπα στοιχεία σχεδιάζονται σε σχετικές συντεταγμένες βάση αυτού του σημείου. Κάτι τέτοιο μας δίνει την δυνατότητα μετακινώντας μόνο ένα σημείο να μπορούμε να μετακινήσουμε όλο το κύκλωμα. Άλλο πλεονέκτημα αυτού του τρόπου σχεδίασης, είναι ότι ο προγραμματιστής μπορεί κάθε φορά ανάλογα με τι στοιχεία χρειάζεται το κύκλωμά του, να φτιάχνει συναρτήσεις και να προσθέτει νέα στοιχεία, π.χ πηνία. 102

107 Όλο αυτά όμως θα γίνουν περισσότερο κατανοητά μελετώντας τους κώδικες σχεδιασμού Η συνάρτηση σχεδιασμού ευθείας Drawline Η συνάρτηση σχεδίασης ευθείας, είναι η σημαντικότερη από όλες, γιατί πολλά από τα στοιχεία του κυκλώματος αποτελούνται από επιμέρους ευθύγραμμα τμήματα. Για να κατανοήσουμε την συνάρτηση Drawline πρέπει πρώτα να αναφερθούμε στο σύστημα συντεταγμένων της Visual Basic. Το σύστημα συντεταγμένων υπακούει στο παρακάτω σχήμα. Βλέποντάς το, συμπεραίνουμε ότι ένα σημείο Α με +Χ συντεταγμένες Α.Χ και Α.Υ που θα έχει μετακινηθεί κατά X=0 και Υ+, θα δημιουργήσει μια ευθεία με κατεύθυνση προς τα κάτω, όπου το δεύτερο σημείο της θα έχει +Υ συντεταγμένες Α.Χ κατά τον άξονα Χ και Α.Υ συν την μετακίνηση κατά Υ, κατά άξονα Υ. Αντίστοιχα αν ένα σημείο μετακινηθεί κατά Χ=0 και Υ- θα δημιουργήσει μια ευθεία με κατεύθυνση προς τα πάνω. Με την ίδια αρχή κατά Χ+ και Υ=0 μια ευθεία προς τα δεξιά, Χ- και Υ=0 μια ευθεία προς αριστερά κ.ό.κ. Κάτι επίσης που πρέπει να σημειωθεί είναι ότι Visual Basic θεωρεί σαν σημείο με συντεταγμένες 0,0 την πάνω αριστερή γωνία της εκάστοτε φόρμας σχεδίασης. Επίσης κάθε σχεδιαστικό τμήμα, ευθείες, κύκλοι κ.τ.λ πολλαπλασιάζονται στο τέλος που καλείται η εξορισμού σχεδιαστική συνάρτηση της VB(στην περίπτωσή μας η obj.line) με τις Xdef και Ydef που είναι στην ουσία η κλίμακα του κυκλώματος που επιθυμούμε και θα κρατάει το ascpect ratio του κυκλώματος αμετάβλητο, ανεξαρτήτως αλλαγής των διαστάσεων του παραθύρου, μέσα στο οποίο σχεδιάστηκε. Καλό είναι να κατανοήσουμε αυτές τις έννοιες, προτού προχωρήσουμε, γιατί όλες οι σχεδιαστικές συναρτήσεις στηρίζονται σε αυτές. Κώδικας συνάρτησης: Private Sub Drawline(pointbeg%, Pointend%, xpos!, ypos!, sx!, sy!, obj As Object) PointAx(pointbeg).x = xpos PointAx(pointbeg).y = ypos '********************************Orientations******************************** PointAx(Pointend).x = PointAx(pointbeg).x + sx 103

108 PointAx(Pointend).y = PointAx(pointbeg).y + sy obj.line (PointAx(pointbeg).x * Xdef, PointAx(pointbeg).y * Ydef)- (PointAx(Pointend).x * Xdef, PointAx(Pointend).y * Ydef) End Sub Επεξήγηση παραμέτρων συνάρτησης: Pointbeg,pointend = μεταβλητές τύπου integer, στις οποίες αποθηκεύονται τα νούμερα των σημείων της ευθείας. Π.χ. το 1 ο το 2 ο κ.ό.κ. xpos,ypos = μεταβλητές τύπου single στις οποίες αποθηκεύονται οι συντεταγμένες του αρχικού σημείου της ευθείας. sx,sy = μεταβλητές τύπου single στις οποίες αποθηκεύονται οι σχετικές συντεταγμένες από το αρχικό σημείο, δηλαδή κατά πόσο έχει μετατοπιστεί το αρχικό σημείο κατά Χ και Υ. Αυτές οι παράμετροι θα καθορίζουν κάθε φορά και την κατεύθυνση της ευθείας. obj = αντικείμενο μέσα στο οποίο θέλουμε να σχεδιάσουμε την ευθεία μας. Κλήση συνάρτησης: Call Drawline(1, 2,10, 15, 10,0, Picture1) Με αυτήν την κλήση θα σχηματιστεί μία ευθεία όπου το 1 ο σημείο θα έχει συνταγμένες 10,15 και το 2 ο θα έχει μετατοπιστεί κατά Χ=10 και Υ=0(σχετικές συντεταγμένες), άρα το νέο σημείο θα έχει συντεταγμένες 20,15(απόλυτες συντεταγμένες). Η ευθεία δηλαδή θα έχει κατεύθυνση προς τα δεξιά Η συνάρτηση σχεδιασμού στοιχείου οργάνου, DrawIV Η συνάρτηση αυτή είναι υπεύθυνη για τον σχεδιασμών των οργάνων. Αμπερομέτρων, βολτομέτρων και ότι επιθυμούμε εμείς. Κώδικας συνάρτησης: 104

109 Private Sub DrawIV(insbool As Boolean, insnum%, insname$, sx!, sy!, d$) Dim PointIV As point_axis Tfont = 3 Theight = Tfont Twidth = 3 * Tfont PointIV.x = sx PointIV.y = sy Select Case d Case "hor" Ttop = PointIV.y - Tfont Tleft = PointIV.x Ltop = PointIV.y + Theight Lleft = PointIV.x + Twidth / 2.5 Case "ver" Ttop = PointIV.y - Tfont Tleft = PointIV.x - Twidth / 2.2 Ltop = PointIV.y - Theight / 1.5 Lleft = PointIV.x + Twidth / 1.5 End Select Texts(insnum).Visible = insbool Texts(insnum).Top = Ttop * Ydef Texts(insnum).Left = Tleft * Xdef Texts(insnum).Height = Theight * Ydef Texts(insnum).Width = Twidth * Xdef Texts(insnum).FontSize = Tfont * Ydef Labels(insnum).Visible = True Labels(insnum).Caption = insname Labels(insnum).Top = Ltop * Ydef Labels(insnum).Left = Lleft * Xdef Labels(insnum).FontSize = Tfont * Ydef Labels(insnum).FontBold = insbool End Sub Επεξήγηση παραμέτρων συνάρτησης: Insbool(instrument bool) = μεταβλητή τύπου Boolean που επιστρέφει true ή false. Παίρνει τιμή true όταν το κύκλωμα είναι προς εμφάνιση στην οθόνη(τα όργανα θέλουμε να φαίνονται) ή false όταν το κύκλωμα θέλουμε να εκτυπωθεί( τα όργανα θέλουμε να μην σχεδιάζονται.) insnum(instrument number) = μεταβλητή τύπου integer που κρατάει το νούμερο του textbox στο οποίο θα εμφανίζεται κάθε φορά η μετρούμενη τιμή 105

110 insname(instrument name) = μεταβλητή τύπου char που κρατάει το όνομα του textbox, άρα είναι η τιμή που χαρακτηρίζει τι τύπου όργανου είναι, π.χ Α,V Ω ή ότι άλλο εμείς επιθυμούμε. sx,sy = μεταβλητές τύπου Single που κρατάνε την τιμή των σχετικών συντεταγμένων του πάνω αριστερά σημείου του τετραγώνου του textbox, σε σχέση με κάποιο άλλο σημείο που μας ενδιαφέρει. Δηλαδή κρατάνε μετατόπιση από το αρχικό σημείο. d = μεταβλητή τύπου char που παίρνει τιμή hor, ver ανάλογα με το αν το textbox σχεδιάζεται πάνω σε κατακόρυφο(ver)ευθύγραμμο τμήμα ή σε οριζόντιο(hor). Κλήση συνάρτησης: Call DrawIV(True, 1, "A", PointAx(1).x + 7, PointAx(1).y, "hor") 'Is Από την κλίση αυτή παρατηρούμε ότι θα σχεδιαστεί ένα textbox το οποίο θα είναι visible, θα έχει αριθμό 1, θα αντιστοιχεί το γράμμα Α, άρα είναι αμπερόμετρο, το πάνω αριστερά σημείο έχει συντεταγμένες ίδιες στον άξονα Υ με το PointAx(1).y και από το PointAx(1).x έχει μετατοπιστεί δεξιά(άρα είναι σε οριζόντιο ευθύγραμμο τμήμα πάνω) κατά 7 μονάδες. Το hor επιβεβαιώνει την παραπάνω διαπίστωση Η συνάρτηση σχεδιασμού στοιχείου αντίστασης DrawResistance Από το όνομα και μόνο καταλαβαίνουμε ότι είναι η συνάρτηση που θα σχεδιάζει την αντίσταση. Αυτή σχεδιάστηκε από επιμέρους ευθύγραμμα τμήματα με μια γωνία μεταξύ τους γύρω στις 10 μοίρες. Για να καταφέρουμε να δώσουμε στην αντίσταση αυτήν την μορφή, χρειάστηκε να πειραματιστούμε αρκετά, με διάφορες τιμές στις μετατοπίσεις των ευθυγράμμων τμημάτων, μέχρι να βρούμε τις επιθυμητή τιμές. Κώδικας συνάρτησης: 106

111 Private Sub DrawResistance(pointbeg%, Direction$, obj As Object) If Direction = "hor" Then 'right to left obj.line (PointAx(pointbeg).x * Xdef, PointAx(pointbeg).y * Ydef)- ((PointAx(pointbeg).x + 1) * Xdef, (PointAx(pointbeg).y - 4) * Ydef) For f = 1 To 7 Step 2 obj.line ((PointAx(pointbeg).x + f) * Xdef, (PointAx(pointbeg).y - 4) * Ydef)- ((PointAx(pointbeg).x + (f + 1)) * Xdef, (PointAx(pointbeg).y + 4) * Ydef) obj.line ((PointAx(pointbeg).x + (f + 1)) * Xdef, (PointAx(pointbeg).y + 4) * Ydef)-((PointAx(pointbeg).x + (f + 2)) * Xdef, (PointAx(pointbeg).y - 4) * Ydef) Next obj.line ((PointAx(pointbeg).x + 9) * Xdef, (PointAx(pointbeg).y - 4) * Ydef)((PointAx(pointbeg).x + 10) * Xdef, (PointAx(pointbeg).y + 4) * Ydef) obj.line ((PointAx(pointbeg).x + 10) * Xdef, (PointAx(pointbeg).y + 4) * Ydef)- ((PointAx(pointbeg).x + 11) * Xdef, PointAx(pointbeg).y * Ydef) PointAx(pointbeg + 1).x = PointAx(pointbeg).x + 11 PointAx(pointbeg + 1).y = PointAx(pointbeg).y End If If Direction = "ver" Then 'up to down obj.line (PointAx(pointbeg).x * Xdef, PointAx(pointbeg).y * Ydef)- ((PointAx(pointbeg).x - 2.8) * Xdef, (PointAx(pointbeg).y + 1.5) * Ydef) For f = 1.5 To 10.5 Step 3 obj.line ((PointAx(pointbeg).x - 2.8) * Xdef, (PointAx(pointbeg).y + f) * Ydef)- ((PointAx(pointbeg).x + 2.8) * Xdef, (PointAx(pointbeg).y + (f + 1.5)) * Ydef) obj.line ((PointAx(pointbeg).x + 2.8) * Xdef, (PointAx(pointbeg).y + (f + 1.5)) * Ydef)-((PointAx(pointbeg).x - 2.8) * Xdef, (PointAx(pointbeg).y + (f + 3)) * Ydef) Next obj.line ((PointAx(pointbeg).x - 2.8) * Xdef, (PointAx(pointbeg).y ) * Ydef)-((PointAx(pointbeg).x + 2.8) * Xdef, (PointAx(pointbeg).y + 15) * Ydef) obj.line ((PointAx(pointbeg).x + 2.8) * Xdef, (PointAx(pointbeg).y + 15) * Ydef)-(PointAx(pointbeg).x * Xdef, (PointAx(pointbeg).y ) * Ydef) PointAx(pointbeg + 1).x = PointAx(pointbeg).x PointAx(pointbeg + 1).y = PointAx(pointbeg).y End If End Sub Επεξήγηση παραμέτρων συνάρτησης: Pointbeg = μεταβλητή τύπου integer που κρατάει την αριθμό του πρώτου σημείου που ξεκινάει ο σχεδιασμός της. Δηλαδή αν η αντίσταση πρέπει να σχεδιαστεί από το 5 ο σημείο του κυκλώματος τότε αυτή η παράμετρος θα έχει κρατήσει την τιμή 5. Οι συντεταγμένες αυτού του σημείου, αφού όλα τα σημεία του κυκλώματος είναι κρατημένα σε πίνακα συντεταγμένων X, Y, όπως πρέπει ήδη να έχετε καταλάβει, θα είναι PointAx(5).x και PointAx(5).y 107

112 Direction = μεταβλητή τύπου char που όπως καταλαβαίνει κανέις από το όνομά της δείχνει αν σχεδιάζεται η αντίσταση κάθετα(ver) ή οριζόντια(hor). Obj = το αντικείμενο πάνω στο οποίο θα σχεδιαστεί. Κλήση συνάρτησης: Call DrawResistance(4, "ver", obj) Θα σχεδιάσει μια αντίσταση που θα ξεκινάει από το 4 ο σημείο του κυκλώματος θα βρίσκεται οριζόντια και θα σχεδιαστεί σε εκείνο το αντικείμενο που θα ορίσει η συνάρτηση σχεδίασης κυκλώματος Η συνάρτηση σχεδιασμού στοιχείου πηγής AC, DrawAc Αυτή η συνάρτηση είναι υπεύθυνη για το σχεδιασμό μιας πηγής να μονοφασικού εναλλασσομένου ρεύματος. Απαραίτητη προϋπόθεση για την κατανόηση αυτής της συνάρτησης είναι η πολύ καλή γνώση της εντολής obj.circle και κάποιες γνώσεις γεωμετρίας. Δεν θα αναλύσουμε τον τρόπο σκέψης για τον σχεδιασμό ενός σχήματος. Άλλωστε αυτό ένα σχήμα μπορεί να γίνει με πολλούς διαφορετικούς τρόπους. Σκοπός είναι να βρούμε το δικό μας προσωπικό τρόπο. Κώδικας συνάρτησης: Sub drawac(pointbeg%, obj As Object) Dim radius!(1 To 2) Dim center(1 To 3) As point_axis Dim PointAc As point_axis PointAc.x = PointAx(pointbeg).x PointAc.y = PointAx(pointbeg).y radius(1) = 5 radius(2) = radius(1) / 4 center(1).x = PointAc.x 108

113 center(1).y = PointAc.y + radius(1) PointAx(pointbeg + 1).x = PointAc.x PointAx(pointbeg + 1).y = PointAc.y + 2 * radius(1) center(2).x = center(1).x - radius(2) center(2).y = center(1).y center(3).x = center(1).x + radius(2) center(3).y = center(1).y obj.circle (center(1).x * Xdef, center(1).y * Ydef), radius(1) * Ydef obj.circle (center(2).x * Xdef, center(2).y * Ydef), radius(2) * Xdef,, 0, Pi obj.circle (center(3).x * Xdef, center(3).y * Ydef), radius(2) * Xdef,, Pi, 0 End Sub Επεξήγηση παραμέτρων συνάρτησης: Pointbeg = ακέραιος αριθμός που κρατάει τον αριθμό του σημείου, από το οποίο θα αρχίσει η σχεδίαση της πηγής. Obj = αντικείμενο μέσα στο οποίο θα σχεδιαστεί η πηγή Κλήση συνάρτησης: Call drawac(2, obj) Με την κλήση αυτή θα σχεδιαστεί μια πηγή εναλλασσομένου με αρχικό σημείο το σημείο Η συνάρτηση σχεδιασμού στοιχείου πηνίου, DrawCoil Αυτή η συνάρτηση είναι υπεύθυνη για την σχεδίαση ενός πηνίου. Ισχύουν οι σχεδιαστικοί κανόνες που έχουμε ήδη αναφέρει και μέχρι τώρα πρέπει να έχουν γίνει απόλυτα κατανοητή. Κώδικας συνάρτησης: Sub DrawCoil(pointbeg%, d$, obj As Object) Select Case d Case "hor" PointAx(pointbeg).x = PointAx(pointbeg).x

114 For f = 1 To 5 obj.circle ((PointAx(pointbeg).x f) * Xdef, PointAx(pointbeg).y * Ydef), 2.7 * Xdef,, Pi, 0, 3.1 'small radius obj.circle ((PointAx(pointbeg).x + f) * Xdef, PointAx(pointbeg).y * Ydef), 2.7 * Xdef,, 0, Pi, 2 'big radius Next f obj.circle ((PointAx(pointbeg).x + 6) * Xdef, PointAx(pointbeg).y * Ydef), 2.7 * Xdef,, 0, Pi, 2 PointAx(pointbeg + 1).x = PointAx(pointbeg).x PointAx(pointbeg + 1).y = PointAx(pointbeg).y Case "ver" PointAx(pointbeg).y = PointAx(pointbeg).y For f = 0 To 8 Step 2 obj.circle (PointAx(pointbeg).x * Xdef, (PointAx(pointbeg).y f) * Ydef), 3 * Xdef,, 3 * Pi / 2, Pi / 2, 1 / 2.5 'big radius obj.circle (PointAx(pointbeg).x * Xdef, (PointAx(pointbeg).y f) * Ydef), 3 * Xdef,, Pi / 2, 3 * Pi / 2, 1 / 4.5 'small radius Next obj.circle (PointAx(pointbeg).x * Xdef, (PointAx(pointbeg).y ) * Ydef), 3 * Xdef,, 3 * Pi / 2, Pi / 2, 1 / 2 PointAx(pointbeg + 1).x = PointAx(pointbeg).x PointAx(pointbeg + 1).y = PointAx(pointbeg).y End Select End Sub Επεξήγηση παραμέτρων συνάρτησης: pointbeg = ακέραιος αριθμός που κρατάει τον αριθμό του σημείου, από το οποίο θα αρχίσει η σχεδίαση του στοιχείου. d = μεταβλητή τύπου char που παίρνει τιμή hor ή ver ανάλογα με το αν το στοιχείο σχεδιάζεται κατακόρυφα(ver) ή σε οριζόντια(hor). obj = αντικείμενο μέσα στο οποίο θα σχεδιαστεί το πηνίο Κλήση συνάρτησης: Call DrawCoil(5, "hor", obj) 110

115 Η κλήση αυτή θα σχεδιάσει ένα πηνίο έχοντας σαν συντεταγμένες τις συντεταγμένες του σημείου 5 του κυκλώματος και θα σχεδιαστεί οριζόντια και μέσα στο αντικείμενο της φόρμας που επιθυμούμε Η συνάρτηση σχεδιασμού στοιχείου διόδου, DrawDiode Η συνάρτηση αυτή είναι υπεύθυνη για τον σχεδιασμό μιας διόδου, με έλεγχο ή χωρίς. Κώδικας συνάρτησης: Sub DrawDiode(pointbeg%, d$, con As Boolean, obj As Object) Select Case d Case ">" obj.line (PointAx(pointbeg).x * Xdef, (PointAx(pointbeg).y + 4) * Ydef)- (PointAx(pointbeg).x * Xdef, (PointAx(pointbeg).y - 4) * Ydef) obj.line (PointAx(pointbeg).x * Xdef, (PointAx(pointbeg).y - 4) * Ydef)- ((PointAx(pointbeg).x + 4) * Xdef, PointAx(pointbeg).y * Ydef) obj.line ((PointAx(pointbeg).x + 4) * Xdef, PointAx(pointbeg).y * Ydef)- (PointAx(pointbeg).x * Xdef, (PointAx(pointbeg).y + 4) * Ydef) obj.line ((PointAx(pointbeg).x + 4) * Xdef, (PointAx(pointbeg).y - 4) * Ydef)- ((PointAx(pointbeg).x + 4) * Xdef, (PointAx(pointbeg).y + 4) * Ydef) If con = True Then obj.line ((PointAx(pointbeg).x + 4) * Xdef, PointAx(pointbeg).y * Ydef)- ((PointAx(pointbeg).x + 5.5) * Xdef, (PointAx(pointbeg).y - 4) * Ydef) 111

116 obj.line ((PointAx(pointbeg).x + 5.5) * Xdef, (PointAx(pointbeg).y - 4) * Ydef)- ((PointAx(pointbeg).x + 5.5) * Xdef, (PointAx(pointbeg).y - 7) * Ydef) Else con = False End If PointAx(pointbeg + 1).x = PointAx(pointbeg).x + 4 PointAx(pointbeg + 1).y = PointAx(pointbeg).y Case "<" obj.line (PointAx(pointbeg).x * Xdef, PointAx(pointbeg).y * Ydef)- ((PointAx(pointbeg).x + 4) * Xdef, (PointAx(pointbeg).y - 4) * Ydef) obj.line ((PointAx(pointbeg).x + 4) * Xdef, (PointAx(pointbeg).y - 4) * Ydef)- ((PointAx(pointbeg).x + 4) * Xdef, (PointAx(pointbeg).y + 4) * Ydef) obj.line ((PointAx(pointbeg).x + 4) * Xdef, (PointAx(pointbeg).y + 4) * Ydef)- (PointAx(pointbeg).x * Xdef, PointAx(pointbeg).y * Ydef) obj.line (PointAx(pointbeg).x * Xdef, (PointAx(pointbeg).y - 4) * Ydef)- (PointAx(pointbeg).x * Xdef, (PointAx(pointbeg).y + 4) * Ydef) If con = True Then obj.line (PointAx(pointbeg).x * Xdef, PointAx(pointbeg).y * Ydef)- ((PointAx(pointbeg).x - 1.5) * Xdef, (PointAx(pointbeg).y - 4) * Ydef) obj.line ((PointAx(pointbeg).x - 1.5) * Xdef, (PointAx(pointbeg).y - 4) * Ydef)- ((PointAx(pointbeg).x - 1.5) * Xdef, (PointAx(pointbeg).y - 7) * Ydef) Else con = False End If PointAx(pointbeg + 1).x = PointAx(pointbeg).x + 4 PointAx(pointbeg + 1).y = PointAx(pointbeg).y Case "^" obj.line (PointAx(pointbeg).x * Xdef, PointAx(pointbeg).y * Ydef)- ((PointAx(pointbeg).x - 2.7) * Xdef, (PointAx(pointbeg).y + 6.5) * Ydef) obj.line ((PointAx(pointbeg).x - 2.7) * Xdef, (PointAx(pointbeg).y + 6.5) * Ydef)-((PointAx(pointbeg).x + 2.7) * Xdef, (PointAx(pointbeg).y + 6.5) * Ydef) obj.line ((PointAx(pointbeg).x + 2.7) * Xdef, (PointAx(pointbeg).y + 6.5) * Ydef)-(PointAx(pointbeg).x * Xdef, PointAx(pointbeg).y * Ydef) obj.line ((PointAx(pointbeg).x - 2.7) * Xdef, PointAx(pointbeg).y * Ydef)- ((PointAx(pointbeg).x + 2.7) * Xdef, PointAx(pointbeg).y * Ydef) If con = True Then obj.line (PointAx(pointbeg).x * Xdef, PointAx(pointbeg).y * Ydef)- ((PointAx(pointbeg).x - 2.7) * Xdef, (PointAx(pointbeg).y - 2.5) * Ydef) obj.line ((PointAx(pointbeg).x - 2.7) * Xdef, (PointAx(pointbeg).y - 2.5) * Ydef)-((PointAx(pointbeg).x - 4.2) * Xdef, (PointAx(pointbeg).y - 2.5) * Ydef) Else con = False End If PointAx(pointbeg + 1).x = PointAx(pointbeg).x PointAx(pointbeg + 1).y = PointAx(pointbeg).y Case "v" 112

117 obj.line ((PointAx(pointbeg).x - 2.7) * Xdef, PointAx(pointbeg).y * Ydef)- ((PointAx(pointbeg).x + 2.7) * Xdef, PointAx(pointbeg).y * Ydef) obj.line ((PointAx(pointbeg).x + 2.7) * Xdef, PointAx(pointbeg).y * Ydef)- (PointAx(pointbeg).x * Xdef, (PointAx(pointbeg).y + 6.5) * Ydef) obj.line (PointAx(pointbeg).x * Xdef, (PointAx(pointbeg).y + 6.5) * Ydef)- ((PointAx(pointbeg).x - 2.7) * Xdef, PointAx(pointbeg).y * Ydef) obj.line ((PointAx(pointbeg).x - 2.7) * Xdef, (PointAx(pointbeg).y + 6.5) * Ydef)-((PointAx(pointbeg).x + 2.7) * Xdef, (PointAx(pointbeg).y + 6.5) * Ydef) If con = True Then obj.line (PointAx(pointbeg).x * Xdef, (PointAx(pointbeg).y + 6.5) * Ydef)- ((PointAx(pointbeg).x - 2.7) * Xdef, (PointAx(pointbeg).y + 9) * Ydef) obj.line ((PointAx(pointbeg).x - 2.7) * Xdef, (PointAx(pointbeg).y + 9) * Ydef)-((PointAx(pointbeg).x - 4.2) * Xdef, (PointAx(pointbeg).y + 9) * Ydef) Else con = False End If PointAx(pointbeg + 1).x = PointAx(pointbeg).x PointAx(pointbeg + 1).y = PointAx(pointbeg).y End Select End Sub Επεξήγηση παραμέτρων συνάρτησης: pointbeg = ακέραιος αριθμός που κρατάει τον αριθμό του σημείου, από το οποίο θα αρχίσει η σχεδίαση του στοιχείου. d = μεταβλητή τύπου char που παίρνει τιμή >, <, ^, v, ανάλογα με την κατεύθυνση που θέλουμε να σχεδιαστεί το στοιχείο. con = μεταβλητή τύπου Boolean πού παίρνει τιμή true ή false ανάλογα με τον αν θέλουμε μία δίοδο με έλεγχο ή χωρίς. obj = αντικείμενο μέσα στο οποίο θα σχεδιαστεί το στοιχείο. Κλήση συνάρτησης: Call DrawDiode(6, ">", False, obj) Με την κλήση αυτή θα σχεδιαστεί μία δίοδος χωρίς έλεγχο, από το 6 σημείο του κυκλώματος έχοντας σαν αρχικές συντεταγμένες τις δικές του, με την κατεύθυνση της καθόδου προς τα δεξιά, πάνω στο αντικείμενο που επιθυμούμε. 113

118 Η συνάρτηση σχεδιασμού στοιχείου κινητήρα, drawmotor Η συνάρτηση αυτή είναι υπεύθυνη για τον σχεδιασμό κινητήρα συνεχούς. Κώδικας συνάρτησης: Sub drawmotor(pointbeg%, obj) Dim radius! Dim center! Dim curbrush As Long, oldbrush As Long Dim xa(1 To 2) As Long, ya(1 To 2) As Long radius = 5 PointAx(pointbeg).y = PointAx(pointbeg).y + 2 center = PointAx(pointbeg).y + radius obj.circle (PointAx(pointbeg).x * Xdef, center * Ydef), radius * Ydef obj.line ((PointAx(pointbeg).x - radius / 4) * Xdef, (PointAx(pointbeg).y + 3 * radius / 2) * Ydef)-((PointAx(pointbeg).x - radius / 4) * Xdef, (PointAx(pointbeg).y + radius / 2) * Ydef) obj.line ((PointAx(pointbeg).x - radius / 4) * Xdef, (PointAx(pointbeg).y + radius / 2) * Ydef)-(PointAx(pointbeg).x * Xdef, center * Ydef) obj.line (PointAx(pointbeg).x * Xdef, center * Ydef)-((PointAx(pointbeg).x + radius / 4) * Xdef, (PointAx(pointbeg).y + radius / 2) * Ydef) obj.line ((PointAx(pointbeg).x + radius / 4) * Xdef, (PointAx(pointbeg).y + radius / 2) * Ydef)-((PointAx(pointbeg).x + radius / 4) * Xdef, (PointAx(pointbeg).y + 3 * radius / 2) * Ydef) PointAx(pointbeg + 1).x = PointAx(pointbeg).x PointAx(pointbeg + 1).y = PointAx(pointbeg).y + 2 * radius obj.line ((PointAx(pointbeg).x - radius / 4) * Xdef, PointAx(pointbeg).y * Ydef)- ((PointAx(pointbeg).x + radius / 4) * Xdef, PointAx(pointbeg).y * Ydef) obj.line ((PointAx(pointbeg).x + radius / 4) * Xdef, PointAx(pointbeg).y * Ydef)- ((PointAx(pointbeg).x + radius / 4) * Xdef, (PointAx(pointbeg).y - 2) * Ydef) obj.line ((PointAx(pointbeg).x + radius / 4) * Xdef, (PointAx(pointbeg).y - 2) * Ydef)-((PointAx(pointbeg).x - radius / 4) * Xdef, (PointAx(pointbeg).y - 2) * Ydef) obj.line ((PointAx(pointbeg).x - radius / 4) * Xdef, (PointAx(pointbeg).y - 2) * Ydef)-((PointAx(pointbeg).x - radius / 4) * Xdef, PointAx(pointbeg).y * Ydef) obj.line ((PointAx(pointbeg + 1).x - radius / 4) * Xdef, PointAx(pointbeg + 1).y * Ydef)-((PointAx(pointbeg + 1).x + radius / 4) * Xdef, PointAx(pointbeg + 1).y * Ydef) obj.line ((PointAx(pointbeg + 1).x + radius / 4) * Xdef, PointAx(pointbeg + 1).y * Ydef)-((PointAx(pointbeg + 1).x + radius / 4) * Xdef, (PointAx(pointbeg + 1).y + 2) * Ydef) obj.line ((PointAx(pointbeg + 1).x + radius / 4) * Xdef, (PointAx(pointbeg + 1).y + 2) * Ydef)-((PointAx(pointbeg + 1).x - radius / 4) * Xdef, (PointAx(pointbeg + 1).y + 2) * Ydef) 114

119 obj.line ((PointAx(pointbeg + 1).x - radius / 4) * Xdef, (PointAx(pointbeg + 1).y + 2) * Ydef)-((PointAx(pointbeg + 1).x - radius / 4) * Xdef, PointAx(pointbeg + 1).y * Ydef) PointAx(pointbeg + 1).y = PointAx(pointbeg + 1).y + 2 xa(1) = PointAx(pointbeg).x * Xdef ya(1) = (PointAx(pointbeg).y - 1) * Ydef xa(2) = PointAx(pointbeg + 1).x * Xdef ya(2) = (PointAx(pointbeg + 1).y - 1) * Ydef curbrush = CreateSolidBrush(obj.ForeColor) oldbrush = SelectObject(obj.hdc, curbrush) ExtFloodFill obj.hdc, xa(1), ya(1), obj.forecolor, 0 ExtFloodFill obj.hdc, xa(2), ya(2), obj.forecolor, 0 SelectObject obj.hdc, oldbrush End Sub Επεξήγηση παραμέτρων συνάρτησης: pointbeg = ακέραιος αριθμός που κρατάει τον αριθμό του σημείου, από το οποίο θα αρχίσει η σχεδίαση του στοιχείου. obj = αντικείμενο μέσα στο οποίο θα σχεδιαστεί το στοιχείο. Κλήση συνάρτησης: Call drawmotor(8, obj) Με την κλήση αυτή θα σχεδιαστεί ένας κινητήρας συνεχούς από το 8 ο σημείο, μέσα στο αντικείμενο στο οποίο θέλουμε Συναρτήσεις σχεδιασμού κυκλωμάτων Εισαγωγή Στην ενότητα αυτή θα δούμε της συναρτήσεις που είναι υπεύθυνες για τον σχεδιασμό ολόκληρου του κυκλώματος, που με την σειρά τους καλούν τις συναρτήσεις σχεδιασμού στοιχείων. Οι συναρτήσεις αυτές επίσης θα καθορίσουν αν θα εμφανίζονται ή όχι τα όργανα μετρήσεων, ποιες θα είναι οι θέσεις που θα 115

120 έχουν τα στοιχεία μέσα το κύκλωμα, θα είναι υπεύθυνες για τον χρωματισμό των βαλβίδων στην περίπτωση που άγουν και στον αποχρωματισμό τους, όταν δεν άγουν, καθώς επίσης στον αν υπάρχει ή όχι δίοδος ελεύθερης ροής. Ο σχεδιασμός γενικά ενός κυκλώματος, στην περίπτωσή μας, υπακούει στο εξής μοντέλο. Επειδή το μεγαλύτερο μέρος τον κυκλωμάτων αποτελούνται από κομμάτια κυκλωμάτων που επαναχρησιμοποιούνται, για να μην σχεδιάζουμε αυτά τα τμήματα κάθε φορά από την αρχή, «σπάμε» ένα κύκλωμα σε δύο μέρη. Σε εκείνο το κομμάτι του μετατροπέα και στο κομμάτι του φορτίου. Το σχεδιασμό του κομματιού του μετατροπέα θα το αναλαμβάνει μια μεγάλη συνάρτηση η οποία θα είναι υπεύθυνη για τον αν ο μετατροπέας είναι μονοπαλμικός η όχι, αν είναι με έλεγχο ή χωρίς, αν έχει δίοδο ελεύθερης ροής ή όχι. Το κομμάτι αυτό θα καταλήγει σε δύο συνδετικά σημεία, από τις συντεταγμένες των οποίων θα ξεκινήσει ο σχεδιασμός του δεύτερου κομματιού του κυκλώματος. Το κομμάτι του σχεδιασμού του φορτίου θα είναι μια συνάρτηση, που στην περίπτωσή μας άλλοτε θα θέτει ως φορτίο μια R-L διάταξη( στην περίπτωση του μονοφασικού μετατροπέα), είτε μια συνάρτηση που θα σχεδιάζει ένα μονοφασικό κινητήρα συνεχούς, άλλοτε με παράλληλη, άλλοτε με ξένη, άλλοτε με σειρά και άλλοτε με μεικτή διέγερση. Με άλλα λόγια ο εκάστοτε προγραμματιστής είναι ελεύθερος να χρησιμοποιήσει με όποιο τρόπο θέλει αυτές τις πολυχρηστικές συναρτήσεις και να τις χρησιμοποιήσει για τον σχεδιασμό πολύπλοκων κυκλωμάτων, έχοντας σαν γνώση μόνο τα συνδετικά σημεία των επιμέρους μερών. Επίσης αν το κύκλωμα που επιθυμεί να σχεδιάσει δεν έχει τμήματα από συναρτήσεις που ήδη υπάρχουν μπορεί να προσθέσει τις δικές του συναρτήσεις κυκλωμάτων, χρησιμοποιώντας τα δικά του συνδετικά σημεία. Ας δούμε αναλυτικά λοιπόν τις συναρτήσεις αυτές. 116

121 Συνάρτηση σχεδιασμού κυκλώματος Draw1phReCirc Η συνάρτηση αυτή είναι υπεύθυνη για τον σχεδιασμού του τμήματος του 1- παλμικού μετατροπέα. Αυτή θα καθορίσει αν ο μετατροπέας είναι με έλεγχο ή χωρίς, αν έχει δίοδο ελεύθερης ροής ή όχι. Προέλευση: Χρησιμοποιείται: Φόρμα SimCircuitForm στη DrawCircuit της SimCircuitForm Κώδικας συνάρτησης: Sub Draw1phReCirc(obj As Object, tbox As Boolean) Select Case Left(RectType, 2) Case "1P" ReDim PointAx(1 To 18) ReDim ConPoint(1 To 2) Call Drawline(1, 2, 15, 20, 0, 40, obj) Call drawac(2, obj) Call Drawline(3, 4, PointAx(3).x, PointAx(3).y, 0, 40, obj) Call Drawline(1, 5, PointAx(1).x, PointAx(1).y, 23, 0, obj) Call Drawline(5, 6, PointAx(5).x, PointAx(5).y, 7, 0, obj) Call Drawline(4, 14, PointAx(4).x, PointAx(4).y, 69.1, 0, obj) 'controled diodes***************************************************** If RectValveType(1, 1, 1) = "D" Then Call DrawDiode(6, ">", False, obj) Else Call DrawDiode(6, ">", True, obj) End If If RectValveState(1, 1, 1) = 1 And bool Then curbrush = CreateSolidBrush(obj.ForeColor) 'fill with collor when it s active oldbrush = SelectObject(obj.hdc, curbrush) ExtFloodFill obj.hdc, (PointAx(6).x + 1) * Xdef, PointAx(6).y * Ydef, obj.forecolor, 0 SelectObject obj.hdc, oldbrush End If '********************************************************************* Call Drawline(7, 9, PointAx(7).x, PointAx(7).y, 25, 0, obj) Call Drawline(9, 13, PointAx(9).x, PointAx(9).y, 10, 0, obj) If Right(RectType, 1) = "D" Then '********** free diode**************** Call Drawline(9, 10, PointAx(9).x, PointAx(9).y, 0, 38.5, obj) Call DrawDiode(10, "^", False, obj) Call Drawline(11, 12, PointAx(11).x, PointAx(11).y, 0, 45, obj) 117

122 If FreeWheelState = 1 And bool Then curbrush = CreateSolidBrush(obj.ForeColor) oldbrush = SelectObject(obj.hdc, curbrush) ExtFloodFill obj.hdc, PointAx(10).x * Xdef, (PointAx(10).y + 1) * Ydef, obj.forecolor, 0 SelectObject obj.hdc, oldbrush End If End If 'text boxes*********************************************************** If tbox = True Then Call Drawline(5, 8, PointAx(5).x, PointAx(5).y, 0, 90, obj) Call DrawIV(True, 1, "A", PointAx(1).x + 7, PointAx(1).y, "hor") 'Is Call DrawIV(True, 2, "V", PointAx(5).x, PointAx(5).y + 42, "ver") 'Vs Call Drawline(15, 16, PointAx(5).x + 3.5, PointAx(5).y, 0, 10, obj) Call Drawline(16, 17, PointAx(16).x, PointAx(16).y, 14, 0, obj) Call Drawline(17, 18, PointAx(17).x, PointAx(17).y, 0, -10, obj) Call DrawIV(True, 3, "V", PointAx(16).x + 3, PointAx(16).y, "hor") 'Vt Call DrawIV(True, 4, "A", PointAx(18).x + 5, PointAx(18).y, "hor") 'It If Right(RectType, 1) = "D" Then '******textbox on freediode******* Call DrawIV(True, 5, "A", PointAx(11).x, PointAx(11).y , "ver") 'Ifw Call Drawline(13, 14, PointAx(13).x, PointAx(13).y, 0, 90, obj) Call DrawIV(True, 6, "V", PointAx(13).x, PointAx(13).y + 42, "ver") 'Vo Else Call Drawline(9, 12, PointAx(9).x, PointAx(9).y, 0, 90, obj) Call DrawIV(True, 6, "V", PointAx(9).x, PointAx(9).y + 42, "ver") End If End If ConPoint(1).x = 84 ConPoint(1).y = 20 ConPoint(2).x = ConPoint(1).x ConPoint(2).y = 110 ' first point x,y coordinates: 15, '**************------dimension:69.1x90(width,height)*********************** ' points from 0,0 to connect next circuit x:84.1,y:20 up point----x:84.1,y:110 down point '***** used textboxes ********************** ' end case 1P End Select End Sub Επεξήγηση παραμέτρων συνάρτησης: obj = το όνομα του αντικειμένου μέσα στο οποίο σχεδιάζεται tbox = μεταβλητή τύπου Boolean που παίρνει τιμή ανάλογα με το αν θέλουμε να εμφανίζονται τα όργανα μέτρησης ή όχι, όπως συμβαίνει στην περίπτωση της εκτύπωσης του κυκλώματος. 118

123 Αποτέλεσμα συνάρτησης: Το αποτέλεσμα της συνάρτησης στην πλήρης μορφή της, δηλαδή με έλεγχο και με δίοδο ελεύθερης ροής, φαίνεται παρακάτω στην εικόνα Σχολιασμός συνάρτησης: Εικόνα : Αποτέλεσμα συνάρτησης Draw1phReCirc Κάτι το οποίο πρέπει να προσέξουμε στην συνάρτηση αυτή είναι το σχόλια στο τέλος του κώδικα. ' first point x,y coordinates: 15, '**************------dimension:69.1x90(width,height)*********************** ' points from 0,0 to connect next circuit x:84.1,y:20 up point----x:84.1,y:110 down point '***** used textboxes ********************** ' end case 1P Τα σημεία αυτά είναι το αρχικό σημείο σχεδιασμού και τα υπόλοιπα δύο είναι τα συνδετικά σημεία, τα οποία θα αποτελέσουν τα αρχικά σημεία για τα υπόλοιπα κομμάτια του κυκλώματος. Αυτό φαίνεται στην εικόνα

124 Εικόνα : Συνδετικά σημεία συνάρτησης Draw1phReCirc Συνάρτηση σχεδιασμού κυκλώματος DrawLoadRe1conCirc Η συνάρτηση αυτή είναι υπεύθυνη για τον σχεδιασμού του τμήματος φορτίου του 1-παλμικού μετατροπέα. Αυτή θα σχεδιάσει τη διάταξη R-L του φορτίου. Προέλευση: Χρησιμοποιείται: Φόρμα SimCircuitForm στη DrawCircuit της SimCircuitForm Κώδικας συνάρτησης: Sub DrawLoadRe1conCirc(obj As Object, tbox As Boolean) ReDim PointAx(1 To 8) Call Drawline(1, 3, ConPoint(1).x, ConPoint(1).y, 30, 0, obj) 120

125 Call Drawline(3, 4, PointAx(3).x, PointAx(3).y, 0, 25, obj) Call DrawResistance(4, "ver", obj) Call Drawline(5, 6, PointAx(5).x, PointAx(5).y, 0, 9, obj) Call DrawCoil(6, "ver", obj) Call Drawline(7, 8, PointAx(7).x, PointAx(7).y, 0, 25, obj) Call Drawline(2, 8, ConPoint(2).x, ConPoint(2).y, 30, 0, obj) 'text boxes*********************************************************** If tbox = True Then Call DrawIV(True, 7, "A", ConPoint(1).x + 10, ConPoint(1).y, "hor") 'Io '******************used textboxes :only textbox7******************* ' end point: End Sub Επεξήγηση παραμέτρων συνάρτησης: obj = το όνομα του αντικειμένου μέσα στο οποίο σχεδιάζεται tbox = μεταβλητή τύπου Boolean που παίρνει τιμή ανάλογα με το αν θέλουμε να εμφανίζονται τα όργανα μέτρησης ή όχι, όπως συμβαίνει στην περίπτωση της εκτύπωσης του κυκλώματος. Αποτέλεσμα συνάρτησης: Το αποτέλεσμα της συνάρτησης φαίνεται στην εικόνα

126 Εικόνα : Αποτέλεσμα συνάρτησης DrawLoadRe1conCirc Συνάρτηση σχεδιασμού κυκλώματος DrawDcmotorCirc Η συνάρτηση αυτή είναι υπεύθυνη για τον σχεδιασμού του τμήματος του κινητήρα συνεχούς ρεύματος. Προέλευση: Χρησιμοποιείται: Φόρμα SimCircuitForm στη DrawCircuit της SimCircuitForm Κώδικας συνάρτησης: 122

127 Sub DrawDcmotorCirc(obj As Object, tbox As Boolean) ReDim PointAx(1 To 10) Call Drawline(1, 3, ConPoint(1).x, ConPoint(1).y, 26, 0, obj) Call DrawResistance(3, "hor", obj) Call Drawline(4, 5, PointAx(4).x, PointAx(4).y, 8, 0, obj) Call Drawline(5, 6, PointAx(5).x, PointAx(5).y, 0, 25, obj) Call DrawCoil(6, "ver", obj) Call Drawline(7, 8, PointAx(7).x, PointAx(7).y, 0, 11.5, obj) Call drawmotor(8, obj) Call Drawline(9, 10, PointAx(9).x, PointAx(9).y, 0, 25, obj) Select Case MotorType Case "INDE", "PARA" Call Drawline(2, 10, ConPoint(2).x, ConPoint(2).y, 45, 0, obj) End Select 'text boxes*********************************************************** If tbox = True Then Call DrawIV(True, 7, "A", PointAx(1).x + 10, PointAx(1).y, "hor") 'Io Call DrawIV(True, 8, "T", PointAx(8).x + 5, PointAx(8).y - 5, "hor") 'Load Call DrawIV(True, 9, "S", PointAx(9).x + 5, PointAx(9).y + 5, "hor") 'Torque End If '********************************************************************** End Sub Επεξήγηση παραμέτρων συνάρτησης: obj = το όνομα του αντικειμένου μέσα στο οποίο σχεδιάζεται tbox = μεταβλητή τύπου Boolean που παίρνει τιμή ανάλογα με το αν θέλουμε να εμφανίζονται τα όργανα μέτρησης ή όχι, όπως συμβαίνει στην περίπτωση της εκτύπωσης του κυκλώματος. Αποτέλεσμα συνάρτησης: Το αποτέλεσμα της συνάρτησης φαίνεται στην εικόνα

128 Εικόνα : Αποτέλεσμα συνάρτησης DrawDcmotorCirc Συνάρτηση σχεδιασμού κυκλώματος DrawFieldCirc Η συνάρτηση αυτή είναι υπεύθυνη για τον σχεδιασμού του τμήματος διέγερσης του κινητήρα. Προέλευση: Χρησιμοποιείται: Φόρμα SimCircuitForm στη DrawCircuit της SimCircuitForm 124

129 Κώδικας συνάρτησης: Sub DrawFieldCirc(obj As Object, tbox As Boolean) ReDim PointAx(1 To 20) Select Case MotorType Case "INDE" Call Drawline(1, 2, ConPoint(2).x + 13, ConPoint(2).y + 20, 0, -50, obj) Call Drawline(2, 3, PointAx(2).x, PointAx(2).y, 2.5, 0, obj) Call DrawResistance(3, "hor", obj) Call Drawline(4, 5, PointAx(4).x, PointAx(4).y, 2.5, 0, obj) Call DrawCoil(5, "hor", obj) Call Drawline(6, 7, PointAx(6).x, PointAx(6).y, 2.5, 0, obj) Call Drawline(7, 8, PointAx(7).x, PointAx(7).y, 0, 50, obj) Call Drawline(1, 9, PointAx(1).x, PointAx(1).y, 12.65, 0, obj) obj.drawwidth = obj.drawwidth + 1 Call Drawline(10, 11, PointAx(9).x, PointAx(9).y - 2, 0, 4, obj) Call Drawline(12, 13, PointAx(9).x + 1, PointAx(9).y - 6, 0, 12, obj) obj.drawwidth = obj.drawwidth - 1 Call Drawline(14, 8, PointAx(9).x + 1, PointAx(9).y, 12.65, 0, obj) 'text boxes*********************************************************** If tbox = True Then Call DrawIV(True, 10, "A", PointAx(1).x, PointAx(1).y - 25, "ver") 'Field current Call Drawline(15, 16, PointAx(2).x, PointAx(2).y + 12, 26.25, 0, obj) Call DrawIV(True, 11, "V", PointAx(15).x + 9, PointAx(15).y, "hor") 'Field voltage End If '*******************************text boxes 10,11*************************************** Case "PARA" Call Drawline(1, 2, ConPoint(1).x + 5, ConPoint(1).y, 0, 20, obj) Call Drawline(2, 3, PointAx(2).x, PointAx(2).y, 25, 0, obj) Call Drawline(3, 4, PointAx(3).x, PointAx(3).y, 0, 8, obj) Call DrawResistance(4, "ver", obj) Call Drawline(5, 6, PointAx(5).x, PointAx(5).y, 0, 8, obj) Call DrawCoil(6, "ver", obj) Call Drawline(7, 8, PointAx(7).x, PointAx(7).y, 0, 22.7, obj) 'text boxes*********************************************************** If tbox = True Then Call DrawIV(True, 10, "A", PointAx(2).x + 8, PointAx(2).y, "hor") 'Field current End If '*******************************text boxes 10,11*************************************** Case "SERI" 125

130 Call Drawline(1, 2, ConPoint(2).x, ConPoint(2).y, 12, 0, obj) Call Drawline(2, 3, PointAx(2).x, PointAx(2).y, 0, -30, obj) Call Drawline(3, 4, PointAx(3).x, PointAx(3).y, 2.5, 0, obj) Call DrawResistance(4, "hor", obj) Call Drawline(5, 6, PointAx(5).x, PointAx(5).y, 2.5, 0, obj) Call DrawCoil(6, "hor", obj) Call Drawline(7, 8, PointAx(7).x, PointAx(7).y, 2.5, 0, obj) Call Drawline(8, 9, PointAx(8).x, PointAx(8).y, 0, 30, obj) Call Drawline(9, 10, PointAx(9).x, PointAx(9).y, 7, 0, obj) 'text boxes*********************************************************** If tbox = True Then Call DrawIV(True, 10, "A", PointAx(1).x - 3, PointAx(1).y, "hor") 'Field current End If '*******************************text boxes 10,11*************************************** Case "COMP" Call Drawline(1, 2, ConPoint(1).x + 5, ConPoint(1).y, 0, 20, obj) If Right(RectType, 1) = "-" Then PointAx(3).x = PointAx(2).x PointAx(3).y = PointAx(2).y Else Call Drawline(2, 3, PointAx(2).x, PointAx(2).y, 7, 0, obj) End If Call Drawline(3, 4, PointAx(3).x, PointAx(3).y, 0, 8, obj) Call DrawResistance(4, "ver", obj) Call Drawline(5, 6, PointAx(5).x, PointAx(5).y, 0, 8, obj) Call DrawCoil(6, "ver", obj) Call Drawline(7, 8, PointAx(7).x, PointAx(7).y, 0, 22.7, obj) Call Drawline(9, 10, ConPoint(2).x, ConPoint(2).y, 17, 0, obj) Call Drawline(10, 11, PointAx(10).x, PointAx(10).y, 0, -30, obj) Call Drawline(11, 12, PointAx(11).x, PointAx(11).y, 1.5, 0, obj) Call DrawResistance(12, "hor", obj) Call Drawline(13, 14, PointAx(13).x, PointAx(13).y, 1.5, 0, obj) Call DrawCoil(14, "hor", obj) Call Drawline(15, 16, PointAx(15).x, PointAx(15).y, 1.5, 0, obj) Call Drawline(16, 17, PointAx(16).x, PointAx(16).y, 0, 30, obj) Call Drawline(17, 18, PointAx(17).x, PointAx(17).y, 5, 0, obj) 'text boxes*********************************************************** If tbox = True Then Call DrawIV(True, 10, "A", PointAx(7).x, PointAx(7).y + 10, "ver") 'Field current End If '*******************************text boxes 10,11*************************************** 126

131 End Select End Sub Επεξήγηση παραμέτρων συνάρτησης: obj = το όνομα του αντικειμένου μέσα στο οποίο σχεδιάζεται tbox = μεταβλητή τύπου Boolean που παίρνει τιμή ανάλογα με το αν θέλουμε να εμφανίζονται τα όργανα μέτρησης ή όχι, όπως συμβαίνει στην περίπτωση της εκτύπωσης του κυκλώματος. Σχολιασμός συνάρτησης: Η συνάρτηση αυτή όπως είναι επόμενο καλείται μαζί με την συνάρτηση σχεδίασης του κινητήρα συνεχούς. Ανάλογα με το είδος της διέγερσης, κάθε φορά θα σχεδιάζεται είτε η παράλληλη, είτε η σε σειρά, είτε η ξένη, είτε η μεικτή. Αποτέλεσμα συνάρτησης: Τα αποτελέσματα της συνάρτησης DrawDcmotorCirc του κινητηρίου συνεχούς, μαζί με την συνάρτηση DrawFieldCirc ανάλογα με το είδος της διέγερσης, φαίνονται στις παρακάτω εικόνες. Κ.Σ.Ρ με διέγερση σειράς Κ.Σ.Ρ με ξένη διέγερση 127

132 Κ.Σ.Ρ με παράλληλη διέγερση Κ.Σ.Ρ με μεικτή διέγερση 7.12 Συναρτήσεις προσομοίωσης Εισαγωγή Η διαδικασία προσομοίωσης ξεκινά όταν πατηθεί το κουμπί «Έναρξη» που βρίσκεται στο κέντρο περίπου της εναλλακτικής φόρμας εξομοίωσης. Με το πάτημα του κουμπιού γίνεται τελικά η εκτέλεση του παρακάτω κώδικα: Private Sub StartBtn_Click() ' Ξεκίνησε την εξομοίωση. Call SimulationForm.StartButton_Click End Sub Όπως βλέπουμε γίνεται ακριβώς ότι θα γινόταν αν πατούσαμε την έναρξη στην προσομοίωση συστήματος στην φόρμα με τις κυματομορφές και από κει και πέρα απλά μεταφέρονται οι τιμές των υπολογισμών στα όργανά μας και η εμφάνιση των κυματομορφών, όταν πατιούνται τα αντίστοιχα κουμπιά από την μπάρα. 128

133 Στην ενότητα αυτή θα αναφερθούμε πιο πολύ στις συναρτήσεις που χρειάστηκαν να παραμετροποιηθούν προκειμένου να έχουμε την σωστή εμφάνιση αποτελεσμάτων, τόσο στα πλαίσια των κυματομορφών, όσο και στα textboxes των οργάνων μέτρησης, για την περίπτωση πιο πολύ του κινητηρίου συστήματος 1- φασικού μετατροπεά Η συνάρτηση LoadValues Η LoadValues καλείται κάθε φορά που υπολογίζονται νέες τιμές στη φόρμα SimulationForm. Η LoadValues ανάλογα με την επιλογή του χρήστη για τις τιμές των οργάνων θα εμφανίζει και τις αντίστοιχες τιμές στα όργανα μέτρησης. Εκτός αυτού καλεί τη συνάρτηση Plot για όλες τις φόρμες της κυματομορφής και τις συναρτήσεις CalcRms και CalcAve. Η συνάρτηση Plot θα δούμε τι ακριβώς κάνει στην επόμενη ενότητα. Προέλευση: Χρησιμοποιείται: Φόρμα SimCircuitForm στη Form_PlotGraphics της φόρμας SimulationForm. Το κάθε σύστημα υπολογίζει διαφορετικές τιμές σε σχέση με άλλο οπότε θα χρειάζεται να μεταβιβάζονται διαφορετικές τιμές. Περίπου στο τέλος της συνάρτησης που βρίσκονται τρία διαδοχικά Case το έχουμε βάλει σαν σύμβολο όπου δηλώνει ότι θα τοποθετηθεί ο κώδικας για τα υπόλοιπα συστήματα προσομοίωσης. Κώδικας συνάρτησης: Public Sub LoadValues() ' Έλεγξε το πρόγραμμα επιλογής. Select Case ProgName$ ' Εάν το σύστημα είναι μονοφασικός ανορθωτής. Case "RE1CON", "RE1DMD" 129

134 ' Εάν είναι ενός παλμού. If Left(RectType, 2) = "1P" Then Call Picture1_Paint ' Έλεγξε ποια είναι η επιλογή σου. Select Case choice$ ' Εάν είναι "Inst" εμφάνισε τις στιγμιαίες τιμές. Case "Inst" Texts(1).Text = RectPrimTranCurrent(1) Texts(2).Text = RectSupVolt(1, 1) Texts(3).Text = RectValveVoltage(1, 1, 1) Texts(4).Text = RectValveCurrent(1, 1, 1) Texts(5).Text = FreeWheelCurrent Texts(6).Text = RectVolt Texts(7).Text = DcLoadCurrent Select Case MotorType Case "INDE", "PARA", "SERI", "COMP" Texts(8).Text = MotorTorque Texts(9).Text = Omega * (30 / Pi) Texts(10).Text = ParFieldCurrent Texts(11).Text = FieldVolt End Select ' Εάν είναι "Rms" εμφάνισε τις ενεργές τιμές. Case "Rms" Texts(1).Text = RectPrimTranCurrentRms Texts(2).Text = RectSupVoltRms Texts(3).Text = RectValveVoltageRms Texts(4).Text = RectValveCurrentRms Texts(5).Text = FreeWheelCurrentRms Texts(6).Text = RectVoltRms Texts(7).Text = DcLoadCurrentRms ' Εάν είναι "Aver" εμφάνισε τις μέσες τιμές. Case "Aver" Texts(1).Text = RectPrimTranCurrentAve Texts(2).Text = RectSupVoltAve Texts(3).Text = RectValveVoltageAve Texts(4).Text = RectValveCurrentAve Texts(5).Text = FreeWheelCurrentAve Texts(6).Text = RectVoltAve Texts(7).Text = DcLoadCurrentAve End Select Select Case ProgName Case "RE1CON" If RectType = "1PD" Then For K = 1 To 7 frms(k).plot Next K ElseIf RectType = "1P-" Then 130

135 For K = 1 To 6 frms(k).plot Next K End If Case "RE1DMD" If Left(RectType, 2) = "1P" Then For K = 1 To 8 frms(k).plot Next K End If End Select ' Υπολόγισε τις ενεργές τιμές. Call CalcRms ' Υπολόγισε τις μέσες τιμές. Call CalcAve End If ' Case ' Case ' Case '. '. '. End Select End Sub Η συνάρτηση Plot Η συνάρτηση Plot, ασχολείται με τη σχεδίαση των φορμών κυματομορφής. Η Plot καλείται κάθε φορά που υπολογίζονται νέες τιμές στη φόρμα SimulationForm. Η κλήση της γίνεται μετά τη μεταβίβαση των προς επιλογή τιμών στα όργανα μέτρησης (μέσα στη LoadValues) και τοποθετεί τις τιμές αυτές στις κυματομορφές. Οι τιμές αποθηκεύονται μέσα σε ένα πίνακα ο οποίος έχει μέγεθος όσα είναι τα βήματα μιας περιόδου. Ο λόγος που επιλέξαμε να τις μεταβιβάζουμε και όχι απλά να κάναμε τη σχεδίαση σύμφωνα με τις τιμές και μετά το τέλος της περιόδου να σβήναμε την κυματομορφή, είναι για είναι πιο εμφανής οποιαδήποτε αλλαγή στο σύστημα. Μετά το τέλος μιας περιόδου οι νέες τιμές αποθηκεύονται μία, μία στις παλιές. Προέλευση: Φόρμα WaveForm 131

136 Χρησιμοποιείται: στη LoadValues της SimCircuitForm. Το κάθε σύστημα υπολογίζει διαφορετικές τιμές σε σχέση με άλλο οπότε θα χρειάζεται να σχεδιάζουμε διαφορετικές φόρμες κυματομορφής. Περίπου στο τέλος της συνάρτησης που βρίσκονται τρία διαδοχικά Case το έχουμε βάλει σαν σύμβολο όπου δηλώνει ότι θα τοποθετηθεί ο κώδικας για τα υπόλοιπα συστήματα προσομοίωσης. Εδώ θα καταλάβουμε και ποιος ήταν ο ρόλος της ταυτότητας που φορτώναμε στη συνάρτηση LoadWaveForms Κώδικας Συνάρτησης: Public Sub Plot() Select Case ProgName ' Εάν το σύστημα είναι μονοφασικός ανορθωτής. Case "RE1CON" ' Εάν είναι ενός παλμού. If Left(RectType, 2) = "1P" Then ' Ανάλογα ποια είναι η τρέχουσα φόρμα αποθήκευσε ' και την αντίστοιχη τιμή στον πίνακα. Select Case id$ Case "Is" table(k) = RectPrimTranCurrent(1) Case "Vs" table(k) = RectSupVolt(1, 1) Case "Vt" table(k) = RectValveVoltage(1, 1, 1) Case "It" table(k) = RectValveCurrent(1, 1, 1) Case "Ifw" table(k) = FreeWheelCurrent Case "Vo" table(k) = RectVolt Case "Io" table(k) = DcLoadCurrent End Select End If 132

137 ' Case "RE1DMD" ' Εάν είναι ενός παλμού. MotorSpeed = Omega * (30 / Pi) If Left(RectType, 2) = "1P" Then ' Ανάλογα ποια είναι η τρέχουσα φόρμα αποθήκευσε ' και την αντίστοιχη τιμή στον πίνακα. Select Case id$ Case "Is" table(k) = RectPrimTranCurrent(1) Case "Vs" table(k) = RectSupVolt(1, 1) Case "Vt" table(k) = RectValveVoltage(1, 1, 1) Case "It" table(k) = RectValveCurrent(1, 1, 1) Case "Vo" table(k) = RectVolt Case "Io" table(k) = DcLoadCurrent Case "Tr" table(k) = MotorTorque Case "Sp" table(k) = MotorSpeed End Select End If ' Case ' Case ' Case '. '. '. End Select ' Αύξησε τη θέση του πίνακα κατά 1 και το i κατά βήμα. K = K + 1 i = i + TimeStep Picture1.Cls Call Picture1_Paint Dim m% ' Κάνε τη σχεδίαση έως ότου βρεις τη 1η κενή θέση στο 133

138 ' πίνακα ή ως το τέλος του πίνακα. For m = 0 To NumPeriodPoints - 1 If IsEmpty(table(m + 1)) Then Exit For Picture1.Line (m * TimeStep, table(m))-((m + 1) * TimeStep, table(m + 1)) Next m% ' Εάν έχει περάσει μία περίοδος δώσε στο δείκτη 1 ώστε ' να αποθηκευτούν οι τιμές για τη νέα περίοδο. If K > NumPeriodPoints Then K = 1 End If End Sub Η συνάρτηση Toolbar1_ButtonClick Η συνάρτηση Toolbar1_ButtonClick, εκτελείτε κάθε φορά που ο χρήστης κάνει κλικ σε κάποιο από τα κουμπιά της μπάρας κουμπιών, είτε αυτό αντιστοιχεί σε κάποια παραγόμενη μεταβλητή είτε σε μία από τις τρεις επιλογές τιμών (Inst, Rms, Aver). Κάνοντας κλικ σε κουμπί που αντιστοιχεί σε παραγόμενη μεταβλητή εμφανίζεται η φόρμα κυματομορφής που της αντιστοιχεί. Κάνοντας κλικ σε κάποια από τις επιλογές τιμών καταχωρεί την επιλογή και μεταβιβάζει τις τιμές στα όργανα μέτρησης. Όλα αυτά γίνονται αφού πρώτα ο χρήστης ελέγξει το σύστημα επιλογής. Το όρισμα της συνάρτησης Button έχει σχέση με τα χαρακτηριστικά του κουμπιού το οποίο πατήθηκε. Παραδείγματος χάριν, για να ελέγξουμε πιο κουμπί πατήθηκε μπορούμε να το κάνουμε είτε ελέγχοντας το δείκτη του κουμπιού (που λέει πιο κουμπί στη σειρά πατήθηκε) είτε τη λεζάντα (Caption) του. Εδώ χρησιμοποιείτε η πρώτη συνθήκη για να αποφύγουμε πολλούς ελέγχους. Προέλευση: Χρησιμοποιείται: Φόρμα SimCircuitForm στη SimCircuitForm Περίπου στο τέλος της συνάρτησης που βρίσκονται τρία διαδοχικά Case το έχουμε βάλει σαν σύμβολο όπου δηλώνει ότι θα τοποθετηθεί ο κώδικας για τα υπόλοιπα συστήματα προσομοίωσης. 134

139 Κώδικας Συνάρτησης: Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) ' Κάθε φορά που κάναμε κλικ στη μπάρα κουμπιών για να εμφανίσουμε μία ' φόρμα κυματομορφής, όσες φόρμες κυματομορφής βρίσκονταν στην οθόνη ' έμπαιναν στο περιθώριο (πίσω από το κύκλωμα). Για να αποφθεχθεί το ' συμβάν αυτό, τοποθετήθηκε ο παρακάτω κώδικας. ' ' Ελέγχει όλες τις φόρμες κυματομορφής. For f = 1 To Toolbar1.Buttons.Count - 4 ' Εάν βρίσκονται στην οθόνη. If frms(f).visible = True And f <> Button.Index Then ' Φέρε αυτές σε πρώτο φόντο. frms(f).show End If Next f Select Case ProgName$ Case "RE1CON" ' Εάν έχουμε μονοπαλμικό με δίοδο ελεύθερης ροής τότε If RectType = "1PD" Then ' Δες το δείκτη του κουμπιού που πατήθηκε. Select Case Button.Index ' Εάν ο δείκτης ανήκει στο διάστημα 1-7 (Δηλαδή έχει επιλεγεί ' κάποια από τις παραγόμενες μεταβλητές. Case 1 To 7 If bool Then ' Εμφάνισε την αντίστοιχη φόρμα. frms(button.index).show End If ' Εάν ο δείκτης είναι 9 δηλαδή πατήθηκε το 9ο κουμπί στη σειρά(inst), Case 9 ' τότε δώσε σαν επιλογή τη Λεζάντα του επιλεγμένου κουμπιού. choice = Toolbar1.Buttons(9).Caption ' Σημείωσε το επιλεγμένο κουμπί Inst. Toolbar1.Buttons(9).MixedState = True Toolbar1.Buttons(10).MixedState = False Toolbar1.Buttons(11).MixedState = False 135

140 ' Εάν ο δείκτης είναι 10 δηλαδή πατήθηκε το 10ο κουμπί στη σειρά(rms), Case 10 ' τότε δώσε σαν επιλογή τη Λεζάντα του επιλεγμένου κουμπιού. choice = Toolbar1.Buttons(10).Caption ' Σημείωσε το επιλεγμένο κουμπί Rms. Toolbar1.Buttons(10).MixedState = True Toolbar1.Buttons(9).MixedState = False Toolbar1.Buttons(11).MixedState = False ' Εάν ο δείκτης είναι 11 δηλαδή πατήθηκε το 11ο κουμπί στη σειρά(aver), Case 11 ' τότε δώσε σαν επιλογή τη Λεζάντα του επιλεγμένου κουμπιού. choice = Toolbar1.Buttons(11).Caption ' Σημείωσε το επιλεγμένο κουμπί Aver. Toolbar1.Buttons(11).MixedState = True Toolbar1.Buttons(9).MixedState = False Toolbar1.Buttons(10).MixedState = False End Select ElseIf RectType = "1P-" Then ' Δες το δείκτη του κουμπιού που πατήθηκε. Select Case Button.Index ' Εάν ο δείκτης ανήκει στο διάστημα 1-6 (Δηλαδή έχει επιλεγεί ' κάποια από τις παραγόμενες μεταβλητές. Case 1 To 6 If bool Then ' Εμφάνισε την αντίστοιχη φόρμα. frms(button.index).show End If ' Εάν ο δείκτης είναι 8 δηλαδή πατήθηκε το 8ο κουμπί στη σειρά(inst), Case 8 ' τότε δώσε σαν επιλογή τη Λεζάντα του επιλεγμένου κουμπιού. choice = Toolbar1.Buttons(8).Caption ' Σημείωσε το επιλεγμένο κουμπί Inst. Toolbar1.Buttons(8).MixedState = True Toolbar1.Buttons(9).MixedState = False Toolbar1.Buttons(10).MixedState = False ' Εάν ο δείκτης είναι 9 δηλαδή πατήθηκε το 9ο κουμπί στη σειρά(rms), Case 9 ' τότε δώσε σαν επιλογή τη Λεζάντα του επιλεγμένου κουμπιού. choice = Toolbar1.Buttons(9).Caption ' Σημείωσε το επιλεγμένο κουμπί Rms. 136

141 Toolbar1.Buttons(9).MixedState = True Toolbar1.Buttons(8).MixedState = False Toolbar1.Buttons(10).MixedState = False ' Εάν ο δείκτης είναι 10 δηλαδή πατήθηκε το 10ο κουμπί στη σειρά(aver), Case 10 ' τότε δώσε σαν επιλογή τη Λεζάντα του επιλεγμένου κουμπιού. choice = Toolbar1.Buttons(10).Caption ' Σημείωσε το επιλεγμένο κουμπί Aver. Toolbar1.Buttons(10).MixedState = True Toolbar1.Buttons(8).MixedState = False Toolbar1.Buttons(9).MixedState = False End Select End If ' Case "RE1DMD" ' Δες το δείκτη του κουμπιού που πατήθηκε. Select Case Button.Index ' Εάν ο δείκτης ανήκει στο διάστημα 1-8 (Δηλαδή έχει επιλεγεί ' κάποια από τις παραγόμενες μεταβλητές. Case 1 To 8 If bool Then ' Εμφάνισε την αντίστοιχη φόρμα. frms(button.index).show End If ' Εάν ο δείκτης είναι 10 δηλαδή πατήθηκε το 10ο κουμπί στη σειρά(inst), Case 10 ' τότε δώσε σαν επιλογή τη Λεζάντα του επιλεγμένου κουμπιού. choice = Toolbar1.Buttons(10).Caption ' Σημείωσε το επιλεγμένο κουμπί Inst. Toolbar1.Buttons(10).MixedState = True Toolbar1.Buttons(11).MixedState = False Toolbar1.Buttons(12).MixedState = False ' Εάν ο δείκτης είναι 11 δηλαδή πατήθηκε το 11ο κουμπί στη σειρά(rms), Case 11 ' τότε δώσε σαν επιλογή τη Λεζάντα του επιλεγμένου κουμπιού. choice = Toolbar1.Buttons(11).Caption ' Σημείωσε το επιλεγμένο κουμπί Rms. Toolbar1.Buttons(11).MixedState = True Toolbar1.Buttons(10).MixedState = False 137

142 Toolbar1.Buttons(12).MixedState = False ' Εάν ο δείκτης είναι 12 δηλαδή πατήθηκε το 12ο κουμπί στη σειρά(aver), Case 12 ' τότε δώσε σαν επιλογή τη Λεζάντα του επιλεγμένου κουμπιού. choice = Toolbar1.Buttons(12).Caption ' Σημείωσε το επιλεγμένο κουμπί Aver. Toolbar1.Buttons(12).MixedState = True Toolbar1.Buttons(10).MixedState = False Toolbar1.Buttons(11).MixedState = False End Select ' Case ' Case ' Case '. '. '. End Select End Sub 7.13 Διαδικασία εκτύπωσης Η διαδικασία εκτύπωσης φαίνεται στον παρακάτω κώδικα Private Sub PrintCircuit_Click() Call DrawCircuit(Picture1, False) Picture2.Picture = Picture1.Image Call DrawCircuit(Picture1, True) Const vbhimetric As Integer = 8 Dim PrnWidth As Double Dim PrnHeight As Double Dim PrnPicWidth As Double PrnWidth = Picture2.scalex(Picture2.ScaleWidth, Picture2.ScaleMode, vbhimetric) PrnHeight = Picture2.scaley(Picture2.ScaleHeight, Picture2.ScaleMode, vbhimetric) Dim Alto As Long, Ancho As Long Printer.ScaleMode = 1 138

143 Alto = Printer.ScaleHeight Ancho = Printer.ScaleWidth Alto = Alto \ 2 - PrnHeight \ 2 Ancho = Ancho \ 2 - PrnWidth \ 2 Printer.PaintPicture Picture2.Picture, Ancho, Alto, PrnWidth, PrnHeight Printer.EndDoc End Sub Όπως βλέπουμε η εκτύπωση γίνεται με τον εξής τρόπο: Καλείται η DrawCircuit μια φορά με παράμετρο false έτσι ώστε να περάσει με την σειρά της αυτή η παράμετρος στις σχεδιαστικές συναρτήσεις και να απενεργοποίηση τα textboxes και κατόπιν ξανακαλεί την ίδια συνάρτηση αλλά με παράμετρο true έτσι ώστε να εμφανιστούν τα όργανα μετρήσεων στην οθόνη. ΚΕΦΑΛΑΙΟ 8ο Συμπεράσματα - Προτάσεις Συμπεράσματα: Αρχικά αυτή η πτυχιακή ξεκίνησε, για να αναπτυχτεί στο εναλλακτικό περιβάλλον εξομοίωσης, το κινητήριο σύστημα 1-φασικού μετατροπέα. Στην πορεία παρατηρήθηκε όμως, ότι επειδή η σχεδίαση των κυκλωμάτων ήταν ιδιαίτερα πολύπλοκη, έπρεπε να γραφτεί ο κώδικας σχεδίασης εξολοκλήρου από την αρχή και να προστεθούν τα προϋπάρχοντα κυκλώματα με τον νυν τρόπο σχεδίασης. Τελικά εμπνευσμένος από τα νέα προγράμματα σχεδίασης CAD, σκέφτηκα να χωρίσω σε επιμέρους τμήματα κάθε στοιχείο του κυκλώματος και να τα ομαδοποιήσω σε σχεδιαστικές συναρτήσεις, ανάλογα με το κύκλωμα που ζητείτε κάθε φορά. Το αποτέλεσμα ήταν πολλές από τις παλιές συναρτήσεις να διαγραφούν, να μικρύνει ο κώδικας σε μέγεθος, από τον αρχικό και με άλλα λόγια να γίνει πιο 139

144 συμπαγής και πιο ευέλικτος, δίνοντας την ευκαιρία στον εκάστοτε συνεχιστή αυτού του μοτίβου, να προσθέτει να αφαιρεί και γενικά να τροποποιεί με οποιονδήποτε τρόπο εκείνος επιθυμεί τον υπάρχοντα κώδικα, χωρίς να υπάρχει θέμα να πειραχτεί ο πυρήνας του. Προτάσεις: Λόγο όγκου της πτυχιακής, κάποια σημεία του κώδικα παρέμειναν όπως είχαν, γιατί η τροποποίηση τους θα επέφερε αλλαγές σε πολλά σημεία. Μια τέτοια περίπτωση είναι η ύπαρξη κοινών σημείων κώδικα, που παρατηρούνται και σε άλλες φόρμες εκτός της αναπτυχθείσας, τα οποία αντί να επαναλαμβάνονται και να επαναχρησιμοποιούνται, μπορεί να γίνεται κλήση στα κομμάτια της φόρμας που βρίσκονται, αλλά με τις κατάλληλες παραμέτρους. Κάτι τέτοιο παρατήρησα στην FillcircuitForm της φόρμας SimcircuitForm, ο κώδικάς της οποίας φαίνεται παρακάτω. Sub FillSimCircuitForm() Text$ = Matrix(Mlanguage).System(1) SimCircuitForm.Caption = Text$ + " - " + ProgramTitle$ SimCircuitForm!File.Caption = Matrix(Mlanguage).System(2) 'Call PrintText("SYSTEM.txt", 3, Text$) 'SimCircuitForm!FileDos.Caption = Text$ SimCircuitForm!Start.Caption = Matrix(Mlanguage).System(4) SimCircuitForm!FilePause.Caption = Matrix(Mlanguage).System(5) SimCircuitForm!Change.Caption = Matrix(Mlanguage).System(6) SimCircuitForm!ChangeParameter(1).Caption = Matrix(Mlanguage).System(7) Select Case ProgName$ Case "IN3MOT" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).System(9) SimCircuitForm!ChangeParameter(5).Visible = 0 Case "CY3IMD" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(7) Case "RE1DMD", "RE3DMD" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System1(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(2) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).System1(9) 140

145 Case "CHPDMD" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System1(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).System1(9) Case "RE1CON", "RE3CON" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(2) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(3) Case "AC3CON" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(2) SimCircuitForm!ChangeParameter(5).Visible = 0 Case "IN1CON", "IN3CON" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).Sysplus(4) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(6) Case "DICMOT", "SY3MOT" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System1(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System1(10) If MotorTypeData = "INDE" Then SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).System1(9) '<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< Else SimCircuitForm!ChangeParameter(4).Visible = 0 End If SimCircuitForm!ChangeParameter(5).Visible = 0 Case "CY3CON" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(7) Case "IN1MOT" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimCircuitForm!ChangeParameter(4).Visible = 0 SimCircuitForm!ChangeParameter(5).Visible = 0 Case "FC3CON" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).Sysplus(4) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(6) Case "CHPCON", "BUCCON", "BOOCON", "BUBCON", "CUKCON", "CPACON", "CPBCON", "CPCCON", "CPDCON", "CPECON" 141

146 '***** aitor pone BUCCON en la linea anterior **** SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).Sysplus(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(3) Case "CHPCON", "CPACON", "CPBCON", "CPCCON" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).Sysplus(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) Case "DCLCON" SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(9) SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).Sysplus(12) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(10) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(11) Case "IN3IMD", "FC3IMD" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).Sysplus(4) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(6) Case "AC3IMD" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(2) SimCircuitForm!ChangeParameter(5).Visible = 0 Case "SRCIMD" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).System(9) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(13) Case "CSCIMD" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimCircuitForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimCircuitForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(10) SimCircuitForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(14) End Select Αυτό το κομμάτι κώδικα αν πάμε στο module General (αρχείο ORDERS.bas) στην συνάρτηση FillForm βλέπουμε τον παρακάτω κώδικα. Public Sub FillForm() Text$ = Matrix(Mlanguage).System(1) SimulationForm.Caption = Text$ + " - " + ProgramTitle$ SimulationForm!File.Caption = Matrix(Mlanguage).System(2) SimulationForm!Start.Caption = Matrix(Mlanguage).System(4) SimulationForm!FilePause.Caption = Matrix(Mlanguage).System(5) SimulationForm!Change.Caption = Matrix(Mlanguage).System(6) 142

147 SimulationForm!ChangeParameter(1).Caption = Matrix(Mlanguage).System(7) Select Case ProgName$ Case "IN3MOT" SimulationForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimulationForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimulationForm!ChangeParameter(4).Caption = Matrix(Mlanguage).System(9) SimulationForm!ChangeParameter(5).Visible = 0 Case "CY3IMD" SimulationForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimulationForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimulationForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimulationForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(7) Case "RE1DMD", "RE3DMD" SimulationForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System1(8) SimulationForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimulationForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(2) SimulationForm!ChangeParameter(5).Caption = Matrix(Mlanguage).System1(9) Case "CHPDMD" SimulationForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System1(8) SimulationForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimulationForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimulationForm!ChangeParameter(5).Caption = Matrix(Mlanguage).System1(9) Case "RE1CON", "RE3CON" SimulationForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimulationForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) SimulationForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(2) SimulationForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(3) Case "AC3CON" SimulationForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimulationForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) SimulationForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(2) SimulationForm!ChangeParameter(5).Visible = 0 Case "IN1CON", "IN3CON" SimulationForm!ChangeParameter(2).Caption = Matrix(Mlanguage).Sysplus(4) SimulationForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) SimulationForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimulationForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(6) Case "DICMOT", "SY3MOT" SimulationForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System1(8) SimulationForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System1(10) If MotorTypeData = "INDE" Then SimulationForm!ChangeParameter(4).Caption = Matrix(Mlanguage).System1(9) Else SimulationForm!ChangeParameter(4).Visible = 0 End If SimulationForm!ChangeParameter(5).Visible = 0 Case "CY3CON" 143

148 SimulationForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimulationForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) SimulationForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimulationForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(7) Case "IN1MOT" SimulationForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimulationForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimulationForm!ChangeParameter(4).Visible = 0 SimulationForm!ChangeParameter(5).Visible = 0 Case "FC3CON" SimulationForm!ChangeParameter(2).Caption = Matrix(Mlanguage).Sysplus(4) SimulationForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) SimulationForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimulationForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(6) Case "CHPCON", "BUCCON", "BOOCON", "BUBCON", "CUKCON", "CPACON", "CPBCON", "CPCCON", "CPDCON", "CPECON" SimulationForm!ChangeParameter(2).Caption = Matrix(Mlanguage).Sysplus(8) SimulationForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) SimulationForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimulationForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(3) Case "CHPCON", "CPACON", "CPBCON", "CPCCON", "CPDCON", "CPECON" SimulationForm!ChangeParameter(2).Caption = Matrix(Mlanguage).Sysplus(8) SimulationForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(1) Case "DCLCON" SimulationForm!ChangeParameter(3).Caption = Matrix(Mlanguage).Sysplus(9) SimulationForm!ChangeParameter(2).Caption = Matrix(Mlanguage).Sysplus(12) SimulationForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(10) SimulationForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(11) Case "IN3IMD", "FC3IMD" SimulationForm!ChangeParameter(2).Caption = Matrix(Mlanguage).Sysplus(4) SimulationForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimulationForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(5) SimulationForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(6) Case "AC3IMD" SimulationForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimulationForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimulationForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(2) SimulationForm!ChangeParameter(5).Visible = 0 Case "SRCIMD" SimulationForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimulationForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimulationForm!ChangeParameter(4).Caption = Matrix(Mlanguage).System(9) SimulationForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(13) Case "CSCIMD" SimulationForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) SimulationForm!ChangeParameter(3).Caption = Matrix(Mlanguage).System(10) SimulationForm!ChangeParameter(4).Caption = Matrix(Mlanguage).Sysplus(10) SimulationForm!ChangeParameter(5).Caption = Matrix(Mlanguage).Sysplus(14) 144

149 End Select SimulationForm!ShowFigure.Caption = Matrix(Mlanguage).System(11) SimulationForm!ToPrint.Caption = Matrix(Mlanguage).System(12) SimulationForm!PrintWhole.Caption = Matrix(Mlanguage).System(13) SimulationForm!Experiments.Caption = Matrix(Mlanguage).System(14) SimulationForm!Autoloading.Caption = Matrix(Mlanguage).System(15) SimulationForm!SSpeed.Caption = Matrix(Mlanguage).System(16) SimulationForm!ChangeSlow.Caption = Matrix(Mlanguage).System(17) SimulationForm!ChangeFast.Caption = Matrix(Mlanguage).System(18) SimulationForm!Exit.Caption = Matrix(Mlanguage).System(20) SimulationForm!StartButton.Caption = Matrix(Mlanguage).System(24) End Sub Όπως βλέπουμε τα δύο κομμάτια κώδικα είναι πανομοιότυπα, αν όχι ίδια. Αυτό ειδικά για τους μελλοντικούς δημιουργούς φορμών, θα μπορούσε να αποφευχθεί, αν προσθέταμε και άλλες παραμέτρους στον πίνακα Matrix και καλούσαμε την Fillform και όχι να γεμίζουμε το πρόγραμμά μας με επαναλαμβανόμενα κομμάτια κώδικα. Μια πρόταση επίσης είναι συγκεκριμένα για το Nepart2 να εμφανίζεται πατώντας την «Βοήθεια» στην εναλλακτική φόρμα εξομοίωσης, συγκεκριμένη βοήθεια για το εναλλακτικό περιβάλλον εξομοίωσης και όχι να εμφανίζεται η γενική βοήθεια του Νεάπολις. Γενικότερα επειδή το Νεάπολις είναι ένα πρόγραμμα πολύπλευρο και πολύπλοκο, οι προτάσεις θα μπορούσαν να συνεχιστούν επ άπειρον. Άλλωστε το μόνο όριο στο μυαλό ενός προγραμματιστή είναι η φαντασία του. 145

150 ΠΑΡΑΡΤΗΜΑ ΜΕΡΟΣ `Α Οδηγός για το περιβάλλον της Visual Basic 6 146

151 Κεφάλαιο 1 Γνωριμία με το περιβάλλον της Visual Basic Εκκίνηση της Visual Basic Θεωρώντας ότι έχουμε ήδη εγκατεστημένη τη VB στον υπολογιστή μας, πάμε να εντοπίσουμε το εικονίδιο εκτέλεσής της. Πατώντας πάνω στο start ή εναλλακτικά «Έναρξη» (για όσους έχουν ελληνικά windows) θα εμφανιστεί το παρακάτω αναδυόμενο μενού επιλογών. Πατώντας στον τελευταίο τίτλο ανοίγει το παράθυρο της Visual Basic. Εναλλακτικά, και εφόσον έχουμε δημιουργήσει κάποια συντόμευση στην επιφάνεια εργασίας, θα μπορούσαμε απλά να κάνουμε διπλό κλικ στο εικονίδιο της VB. 147

152 Περιβάλλον της Visual Basic 6 Με την εκκίνηση της VB θα εμφανιστεί αμέσως ένας οδηγός επιλογής του τύπου του προγράμματος ή στοιχείου που επιθυμούμε να δημιουργήσουμε. Στην διπλανή εικόνα φαίνονται οι επιλογές μας. Θα ασχοληθούμε μόνο με το «Standard EXE», δηλαδή με τη δημιουργία ενός ολοκληρωμέ νο υ προγράμματο ς, και όχι με την δημιουργία κάποιου συστατικού. Στην παραπάνω εικόνα, όπως βλέπουμε, υπάρχουν τρεις βασικές επιλογές: 1 New: Επιλέγουμε τον τύπο του προγράμματος που θα δημιουργήσουμε «από το μηδέν». 2 Existing: Ψάχνουμε στον δίσκο να εντοπίσουμε και να ανοίξουμε ένα ήδη δημιουργημένο και αποθηκευμένο πρόγραμμα (πρόσφατο/recent, ή παλαιότερο). 3 Recent: Μας προτείνει μια λίστα που περιέχει τα προσφάτως ανοιγμένα προγράμματα. Μας απαλλάσσει από τον κόπο να ψάχνουμε διαρκώς ένα project το οποίο επεξεργαζόμαστε συχνά. Σημείωση 1. Συστατικό είναι κάποιο τμήμα ενός project, (module/class module, εργαλείο [ActiveX], βιβλιοθήκη [dll] κτλ). 148

153 2. Από εδώ και πέρα, όταν αναφερόμαστε σε κάποιο πρόγραμμα που δημιουργούμε, θα αναφέρουμε τον όρο project που περιλαμβάνει, τόσο το ζητούμενο, όσο και τη λύση, το αποτέλεσμα, τα συστατικά κτλ. Μόλις επιλέξουμε «Standard EXE» εισερχόμαστε στο κυρίως περιβάλλον της VB: Όπως παρατηρούμε, το περιβάλλον είναι διαιρεμένο σε υπο-περιοχές. Κάθε μια απ αυτές, έχει έναν συγκεκριμένο ρόλο στην υποβοήθηση του προγραμματιστή για τη σύνταξη ενός ολοκληρωμένου project. Ας τις δούμε αναλυτικά: 149

154 ToolBox (Γραμμή εργαλείων) Βρίσκεται στα αριστερά της κεντρικής οθόνης. Περιλαμβάνει τα «στοιχεία ελέγχου» πάνω στα οποία βασίζεται το «χτίσιμο» ενός project. Τα αντικείμενα αυτά καθοδηγούν τον χρήστη στη σύνταξη ενός λογισμικού. Σε αυτά οφείλεται ο όρος «αντικειμενοστραφής προγραμματισμός». Η γραμμή εργαλείων περιλαμβάνει τα βασικά στοιχεία ελέγχου. Ωστόσο, ο χρήστης μπορεί εύκολα να προσθέσει επιπλέον όσα προαιρετικά εργαλεία επιθυμεί. Θα δείξουμε πώς γίνεται αυτό παρακάτω. Properties Window (Παράθυρο ιδιοτήτων) Όλα τα στοιχεία ελέγχου έχουν ιδιότητες. Αυτές είναι παράμετροι που σχετίζονται με την εμφάνιση ενός αντικειμένου (χρώμα, γραμματοσειρά, τίτλος κτλ), με τη θέση του αντικειμένου σε μια φόρμα (απόσταση από το αριστερό και το πάνω άκρο της φόρμας), με το αν είναι προσβάσιμα από το χρήστη, αν είναι ορατά, με τον τύπο εμφάνισής τους και πολλά άλλα. Τα στοιχεία ελέγχου, εκτός από τις ιδιότητες, έχουν συμβάντα (events) και μεθόδους (methods). 150

155 Σημείωση 1. Φόρμα (Form) είναι εκείνο το αντικείμενο πάνω στο οποίο «χτίζουμε» το project μας, το «χαρτί» πάνω στο οποίο θα σχεδιάσουμε τη μορφή του προγράμματός μας. Πρόκειται για την κεντρική μονάδα εργασίας την οποία διαμορφώνουμε οπτικά με τα αντικείμενα που προσθέτουμε επάνω της. Χωρίς τη φόρμα δεν εννοείται αντικειμενοστραφής προγραμματισμός. Πρόγραμμα (με τη στενή έννοια του όρου) χωρίς φόρμα δεν υφίσταται. Μόνο τα ειδικά (καθαρά υπολογιστικά) συστατικά (π.χ. DLL) δεν απαιτούν τη χρήση μιας φόρμας. 1. Συμβάντα ονομάζονται όλες εκείνες οι ενέργειες οι οποίες γίνονται από τον χρήστη κατά τη χρήση του προγράμματος. Για παράδειγμα, συμβάν για ένα κουμπί (button) το οποίο προσθέσαμε σε μια φόρμα, είναι το «κλικ» του ποντικιού, το «δεξί κλικ», το πέρασμα του ποντικιού από πάνω κτλ. Είναι λοιπόν ενέργειες του χρήστη στις οποίες εμείς προσθέτουμε κάποιες λειτουργίες. 2. Μέθοδοι ονομάζονται κάποιες λειτουργίες οι οποίες είναι κατά το πλείστον προαποφασισμένου αποτελέσματος, ενώ εμείς προσθέτουμε απλά μια παράμετρο. Για παράδειγμα, μια ενδεικτική μέθοδος για το button είναι η «move». Το τι θα κάνει είναι προαποφασισμένο. Θα μετακινήσει το κουμπί. Το πού όμως θα μετακινηθεί, το δίνει ο συντάκτης ή ο χρήστης του προγράμματος. 151

156 Project Explorer (Εξερευνητής) O Project Explorer μας δείχνει από ποια συστατικά αποτελείται το project που φτιάχνουμε και μας επιτρέπει την μετάβαση από το ένα στο άλλο. Περιεχόμενα του εξερευνητή είναι οι φόρμες, τα modules, τα class modules κτλ. Σημείωση Module ονομάζεται ένα αυτόνομο τμήμα κώδικα το οποίο δεν περιέχει γραφικό περιβάλλον. Δεν ανήκει σε μια φόρμα, έχει δικό του όνομα, αποθηκεύεται ξεχωριστά και είναι κατάλληλο για χρήση σε πολλά προγράμματα. Ένα module περιέχει συνήθως δηλώσεις τύπων και μεταβλητών, συναρτήσεις και υπορουτίνες. Class Module είναι ένα προωθημένο χαρακτηριστικό της VB. Όταν ένα class module «μεταγλωττίζεται» (compilation & build), δημιουργείται μια βιβλιοθήκη DLL. Αποτελεί μια αυτόνομη ομάδα διαδικασιών και συναρτήσεων η οποία μπορεί να δουλέψει ξεχωριστά από το υπόλοιπο project. Στο παράρτημα-γ θα δούμε τον τρόπο σύνταξη, κατασκευής και χρήσης μιας βιβλιοθήκης DLL (Dynamically Linked Library). Form Layout (Επισκόπηση φορμών) Το παράθυρο αυτό βρίσκεται κάτω δεξιά της κύριας οθόνης. Μας παρουσιάζει μια επισκόπηση για τη θέση στην οποία θα εμφανιστεί η κάθε φόρμα κατά την εκτέλεση του προγράμματος. Μπορούμε να μετακινήσουμε κάθε φόρμα μέσα στην οθόνη, έτσι ώστε να εμφανίζεται εκεί που θέλουμε. 152

157 Immediate Window (Παράθυρο άμεσης εκτύπωσης) Το παράθυρο αυτό βρίσκεται στο κάτω και μέσο του περιβάλλοντος εργασίας. Είναι πολύ χρήσιμο για να αποσφαλματοποιούμε (debuging) ένα project ή να εκτυπώνουμε πρόχειρα αποτελέσματα για έλεγχο. Menu (Μενού επιλογών) Το μενού επιλογών βρίσκεται στην κορυφή του περιβάλλοντος εργασίας και περιλαμβάνει ταξινομημένες όλες τις λειτουργίες της VB. Ας δούμε τις πιο ενδεικτικές κατά κατηγορία: File Δημιουργία νέου Project Άνοιγμα υπάρχοντος Project Αποθήκευση project Αποθήκευση project ως...(όνομα) Αποθήκευση φόρμας Εκτύπωση Δημιουργία EXE οπό project (δημιουργία αυτοτελώς εκτελέσιμου αρχείου) Άνοιγμα πρόσφατων project Έξοδος από τη VB 153

158 Edit Undo / Redo τελευταίας λειτουργίας Αποκοπή Αντιγραφή Επικόλληση Διαγραφή Επιλογή όλων Εύρεση Εύρεση επόμενου Αντικατάσταση 154

159 View Κώδικα Αντικείμενο Εμφάνιση του Immediate Window Εμφάνιση του Project Explorer Εμφάνιση του Properties Window Εμφάνιση του ToolBox Εμφάνιση επιλεγμένων ToolBars Project Προσθήκη φόρμας Προσθήκη Module Προσθήκη Class Module Αφαίρεση φόρμας Αναφορές Στοιχεία ελέγχου Ιδιότητες του Project μας Σημείωση Αναφορές (References): Μας επιτρέπει να συνδέσουμε το project που δημιουργούμε με μια εξωτερική βιβλιοθήκη ή κάποιο άλλο λογισμικό. Θα αναφερθούμε λεπτομερέστερα στο παράρτημα-γ. 155

160 Στοιχεία ελέγχου (Components): Πέρα από τα στοιχεία ελέγχου που υπάρχουν στο ToolBox όταν ανοίγουμε την VB, υπάρχουν πάρα πολλά ακόμα τα οποία, είτε έχει φτιάξει η Microsoft, είτε τρίτοι κατασκευαστές. Κάποια από αυτά θα μας είναι απαραίτητα στην πορεία όπου και θα αναλύσουμε τον τρόπο εισαγωγής τους. 156

161 Ιδιότητες του Project (Project Properties): Είναι γενικές ιδιότητες που αφορούν το project μας όπως το όνομα, η έκδοση, το όνομα του αρχείου βοηθείας, τα σχόλια του κατασκευαστή κτλ. Προτείνεται να συμπληρώνονται εξ αρχής, διότι μας προσφέρουν πολύ χρήσιμες πληροφορίες κατά την ανάπτυξη του προγράμματος. 157

162 Format Τακτοποίηση αντικειμένου στη φόρμα Ίδιο μέγεθος σε 2 αντικείμενα Πύκνωση/αραίωση οριζόντια ή κάθετα διαστημάτων. Κεντράρισμα στην φόρμα Τακτοποίηση στοιχείων οπτικά Κλείδωμα εργαλείων Run Εκτέλεση / συνέχεια Παύση Τερματισμός Tools Δημιουργία/επεξεργασία μενού Επιλογές Σημείωση Επιλογές (Options): Πρόκειται για έναν πίνακα γενικών επιλογών που αφορούν όλο το studio της Visual Basic. Από εκεί ρυθμίζεται ο κάνναβος, οι γραμματοσειρές, τα χρώματα, η διαδικασία της αυτόματης συμπλήρωσης κώδικα, η διαδικασία αυτόματης αποθήκευσης και πολλά άλλα. 158

163 Help Περιεχόμενα Εύρεση με βάση τον όρο Εύρεση Η Microsoft στο διαδίκτυο Η βοήθεια (Help) της Visual Basic είναι πραγματικά πολύ ισχυρή. Διατίθεται και ξεχωριστά από το Visual Studio με το όνομα MSDN. Αποτελεί το καλύτερο βοήθημα, προσφέροντας συμβουλές, δείγματα κώδικα, σύνταξη εντολών κλπ. Αυτό είναι συνοπτικά το περιβάλλον της Visual Basic. Αναφέραμε παραπάνω τις επιλογές που θεωρούμε ότι είναι πιο χρήσιμες κατά τη δημιουργία του project. 159

164 Κεφάλαιο 2 Στοιχεία ελέγχου, χρήση, ιδιότητες, συμβάντα, μέθοδοι Έχουμε ήδη αναφέρει γενικά τι κάνουν τα στοιχεία ελέγχου (Controls). Είναι τα αντικείμενα εκείνα με τα οποία ο χρήστης εκτελεί κάποιες διαδικασίες και λειτουργεί το πρόγραμμα. Για παράδειγμα, προσθέτουμε εμείς ένα κουμπί (Command Button) στη φόρμα μας και στο συμβάν «κλικ» γράφουμε κάποιο κώδικα (πχ να εμφανίζει ένα μήνυμα χαιρετισμού). Ο χρήστης γνωρίζει όταν βλέπει ένα κουμπί ότι πρέπει να το πατήσει για να κάνει κάτι. Όταν όμως υπάρχουν πολλά κουμπιά; Το πρόβλημα λύνεται δίνοντας έναν περιγραφικό τίτλο στο κουμπί που λέει στο χρήστη τι κάνει. Για παράδειγμα, θα μπορούσε να γράφει «Έξοδος από το πρόγραμμα». Ο χρήστης καταλαβαίνει ότι αν το πατήσει, θα τερματιστεί το πρόγραμμα. Αυτός ο τίτλος είναι μια ιδιότητα! Παρακάτω θα δούμε αναλυτικά κάποια στοιχεία ελέγχου συνοδευόμενα από ορισμένες βασικές ιδιότητές τους, συμβάντα και μεθόδους. 160

165 Πριν προχωρήσουμε στην ανάλυση των στοιχείων ελέγχου, θα πούμε πρώτα τους δυνατούς τρόπους με τους οποίους μπορούμε να εισάγουμε οποιοδήποτε στοιχείο ελέγχου επάνω σε μια φόρμα. α) Με διπλό κλικ επάνω στο αντίστοιχο εικονίδιο στη γραμμή εργαλείων. β) Επιλέγοντας το αντίστοιχο εικονίδιο (με απλό κλικ) και σχεδιάζοντάς το επάνω στη φόρμα. γ) Με προγραμματιστικές τεχνικές (προχωρημένη τεχνική, εκτός των στόχων του παρόντος οδηγού). Pointer (Δείκτης): Δεν πρόκειται για στοιχείο ελέγχου, αλλά για δείκτη επιλογής. Δεν έχει ιδιότητες, συμβάντα και μεθόδους. Είναι το προεπιλεγμένο εργαλείο μετά από κάθε ενέργεια. Label (Ετικέτα): Πρόκειται για ένα απλό εργαλείο το οποίο χρησιμοποιούμε για να γράψουμε κάτι (μια λεζάντα / caption). Κατά την εκτέλεση του προγράμματος δεν μπορεί ο χρήστης να επέμβει στο κείμενό της. Οι ιδιότητες (οι οποίες είναι προσβάσιμες από το Properties Window) παρουσιάζονται ταξινομημένες στον παρακάτω πίνακα. Ιδιότητα Επεξήγηση Όρισμα Αποτέλεσμα (Name) Προσδιορίζει το πραγματικό όνομα αναφοράς της Label. Alignment AutoSize BackColor BackStyle BorderStyle Προσδιορίζει τη θέση της λεζάντας μέσα στην Label Προσδιορίζει αν το μέγεθος της Label είναι ακριβώς όσο της αναγραφόμενης λεζάντας Προσδιορίζει το χρώμαφόντο της Label. Προσδιορίζει αν η Label είναι διαφανής (και επιτρέπει την ανάδειξη της φόρμας) ή όχι Προσδιορίζει αν θα υπάρχει περίγραμμα στην Label ή όχι. Οποιοδήποτε όνομα με λατινικούς χαρακτήρες (μπορεί να περιλαμβάνει και αριθμό στο τέλος) το οποίο δεν είναι δεσμευμένο όνομα της Visual Basic. Όλα τα συμβάντα που προγραμματίζουμε, αναφέρονται σε αυτό το όνομα. 0 ή 1 ή 2 0: Η λεζάντα αριστερά 1: Η λεζάντα δεξιά 2: Η λεζάντα στη μέση True ή False True: Μέγεθος Label = μέγεθος λεζάντας False: Μέγεθος Label = όσο το ορίζουμε εμείς. Οποιαδήποτε έγκυρη τιμή χρώματος (από την αναδιπλούμενη λίστα επιλογών) ή εναλλακτικά: VbRed, vbgreen, vbcyan, vbyellow, vbwhite κτλ Αλλάζει το χρώμαφόντο της Label ανάλογα με το όρισμα που του δίνουμε. 0 ή 1 0: (Διαφανής) 1: (Συμπαγής) 0 ή 1 0: Χωρίς περίγραμμα 1: Με περίγραμμα 161

166 Caption Η λεζάντα που θα δείχνει η Label Οποιοδήποτε κείμενο, αριθμός, σύμβολο κτλ και οποιοσδήποτε συνδυασμός των παραπάνω. Μέσα στην Label βλέπουμε ότι έχουμε δώσει ως Caption. Enabled Προσδιορίζει αν η Label θα είναι αποδέκτης συμβάντων. True ή False True: Θα είναι αποδέκτης συμβάντων (π.χ. θα μπορούμε να κάνουμε «κλικ» πάνω της για να ενεργοποιήσουμε κάποιο συμβάν) False: Δεν θα είναι αποδέκτης συμβάντων. H Label θα παρουσιάζεται «γκριζαρισμένη» δηλαδή απενεργοποιημένη. Font Προσδιορίζει τον τύπο της γραμματοσειράς που θα χρησιμοποιηθεί για την παρουσίαση του Caption (λεζάντα) Οποιαδήποτε έγκυρη γραμματοσειρά από την σχετική αναδιπλούμενη λίστα επιλογών. Επίσης από τη σχετική λίστα καθορίζουμε στυλ (πλάγια, έντονα κτλ) καθώς και μέγεθος γραμμάτων. Η εμφανιζόμενη λεζάντα θα εμφανίζεται στο στυλ της επιλεγμένης γραμματοσειράς. ForeColor Προσδιορίζει το χρώμα των γραμμάτων της λεζάντας. Οποιαδήποτε έγκυρη τιμή χρώματος (από την αναδιπλούμενη λίστα επιλογών) ή εναλλακτικά: VbRed, vbgreen, vbcyan, vbyellow κτλ Αλλάζει το χρώμα της λεζάντας σε αυτό που επιλέξαμε. Height Το ύψος του πλαισίου της Label σε twip. Δεν έχει νόημα αν δώσουμε προηγουμένως στην ιδιότητα AutoSize την τιμή True. Οποιαδήποτε θετική ακέραια τιμή. Αρκεί να χωράει στην φόρμα. Αλλάζει το ύψος της Label (όχι και της περιεχόμενης λεζάντας) στην τιμή που δώσαμε. Left Προσδιορίζει την απόσταση της Label οπό το αριστερό άκρο της φόρμας σε twip. Οποιαδήποτε θετική ακέραια τιμή. Τοποθετεί την Label σε όση απόσταση του ορίσουμε από το αριστερό άκρο της φόρμας. MousePointer Προσδιορίζει τον τύπο του «βέλους» του ποντικιού όταν αυτό θα περνάει πάνω από την Label. Οποιαδήποτε έγκυρη τιμή Pointer (από την αναδιπλούμενη λίστα επιλογών) Όταν ο δείκτης βρίσκεται πάνω από τη Label αλλάζει στην συγκεκριμένη μας επιλογή. ToolTipText Ορίζουμε ένα κείμενο το οποίο θέλουμε να εμφανίζεται όταν ο δείκτης του ποντικιού «στέκεται» πάνω από τη Label. Οποιοδήποτε κείμενο, αριθμός, σύμβολο κτλ και οποιοσδήποτε συνδυασμός των παραπάνω. Το κείμενο που ορίζουμε εμφανίζεται μέσα σε ένα κίτρινο πλαίσιο (σαν σημείωση / συμβουλή) 162

167 Top Προσδιορίζει την απόσταση της Label οπό το πάνω άκρο της φόρμας σε twip. Προσδιορίζει αν η Label θα είναι ορατή ή αόρατη στο χρήστη. Το πλάτος του πλαισίου της Label σε twip. Δεν έχει νόημα αν δώσουμε προηγουμένως στην ιδιότητα AutoSize την τιμή True. Προσδιορίζει αν η Label θα αναδιπλώνει το κείμενο σε περισσότερες σειρές αν δεν χωράει σε μια. Οποιαδήποτε θετική ακέραια τιμή. Τοποθετεί την Label σε όση απόσταση του ορίσουμε από το πάνω άκρο της φόρμας. True: Είναι ορατή False: Δεν είναι ορατή Visible True ή False Width Οποιαδήποτε θετική ακέραια τιμή. Αρκεί να χωράει στην φόρμα. Αλλάζει το πλάτος της Label (όχι και της περιεχόμενης λεζάντας) στην τιμή που δώσαμε. WordWrap True ή False True: Αναδιπλώνει το κείμενο. False: Εμφανίζει όσο κείμενο χωράει μέσα στην Label και δεν το αναδιπλώνει. Σημείωση Δεσμευμένο όνομα (reserved word) στην Visual Basic είναι κάθε λέξη, όρος, εντολή, τελεστής, έκφραση ή κατοχυρωμένη συμβολοσειρά η οποία χρησιμοποιείται από την VB για κάποια εσωτερική εργασία. Όλες οι εντολές, οι τελεστές κτλ που θα παρουσιάσουμε σε επόμενα κεφάλαια είναι δεσμευμένες και δεν μπορούμε να χρησιμοποιήσουμε κάποια από αυτές για διαφορετική χρήση (όπως πχ για την ιδιότητα (Name) σε κάποιο στοιχείο ελέγχου). Twip είναι μια μονάδα μέτρησης μήκους που χρησιμοποιεί η Visual Basic (text width in pixels). Είναι η προεπιλεγμένη μονάδα, ωστόσο μπορεί να αλλάξει από μια σχετική ιδιότητα της φόρμας που τη φέρει, όπως θα δούμε παρακάτω. Η μονάδα που θα επιλέξουμε στην φόρμα μεταφέρεται σε όλα τα στοιχεία ελέγχου που περιλαμβάνει. Οι παραπάνω ιδιότητες που αναφέρθηκαν είναι ενδεικτικές (οι πιο σημαντικές). Πολλές από αυτές είναι κοινές για τα περισσότερα στοιχεία ελέγχου, οπότε θα αναφέρονται σχετικά, χωρίς περαιτέρω επεξήγηση. 163

168 Πέραν από τις ιδιότητες των στοιχείων ελέγχου έχουμε και τα συμβάντα: Συμβάν Ενεργοποίηση Αποτέλεσμα Εκτελεί τον κώδικα που έχουμε γράψει εντός της παρακάτω υπορουτίνας συμβάντος (Sub). (Θεωρώ ότι η ιδιότητα (Name) έχει ως όρισμα το «Label1») Αλλαγή Change Όταν αλλάζει το Private Sub Label1_Change() End Sub περιεχόμενο της Label (δηλαδή η Caption) Απλό «κλικ» Click Όταν κάνουμε κλικ Private Sub Label1_Click() End Sub επάνω στην Label. Διπλό «κλικ» DblClick Όταν κάνουμε διπλό κλικ πάνω στην Label Private Sub Label1_DblClick() End Sub Πάτημα και κράτημα πλήκτρου ποντικιού MouseDown Απελευθέρωση πλήκτρου ποντικιού (μετά την παραπάνω ενέργεια) MouseUp Κίνηση του ποντικιού από πάνω MouseMove Όταν κάνουμε κλικ και κρατάμε πατημένο το πλήκτρο. Όταν αφού έχουμε κρατήσει πατημένο το πλήκτρο του ποντικιού, το ελευθερώνουμε. Όταν απλά περνάμε το δείκτη του ποντικιού πάνω από την Label. Private Sub Label1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) End Sub Private Sub Label1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single) End Sub Private Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) End Sub Σημείωση Υπορουτίνα συμβάντος (sub) : Υπορουτίνα (subroutine) είναι ένα τμήμα κώδικα το οποίο εκτελείται όταν εμείς με κάποιο τρόπο καλέσουμε την υπορουτίνα. Όλα τα συμβάντα συνοδεύονται από τέτοιες υπορουτίνες. Για παράδειγμα, όταν κάνουμε «κλικ» σε ένα κουμπί που γράφει «Έξοδος από το πρόγραμμα» (ναι!, είναι η ιδιότητα Caption), εκτελείται αυτόματα το τμήμα του κώδικα που έχουμε ορίσει στο συμβάν του κουμπιού Click, το οποίο «λέει» στο πρόγραμμα να τερματίσει την λειτουργία του. Θα δούμε αναλυτικά τις υπορουτίνες σε επόμενο κεφάλαιο, όπου θα αρχίσουμε να συντάσσουμε τα πρώτα απλά προγράμματα. Για την ώρα κρατήστε στο μυαλό σας ότι κάθε συμβάν ενεργοποιεί την αποκλειστική υπορουτίνα που συνοδεύει την εκάστοτε ενέργεια, και ότι το όνομα κάθε στοιχείου ελέγχου περιλαμβάνεται στο όνομα της υπορουτίνας (όπως π.χ. βλέπετε στον παραπάνω πίνακα των συμβάντων, όπου το όνομα είναι «Label1» ). 164

169 Τέλος, θα δούμε τρεις από τις μεθόδους που συνοδεύουν το Label, παρέχοντας οδηγίες για τη χρήση κάθε μιας. Μέθοδος Επεξήγηση Ορίσματα Σύνταξη (Θεωρώντας ότι το όνομα της Label είναι Label1) Move Refresh ZOrder Μετακινεί (και προαιρετικά επαναδιαστασιολογεί) την Label σε μια νέα θέση. Κάνει «ανανέωση» στην Label Προσδιορίζει το αντικείμενο που θα είναι οπτικά «από πάνω» Left, Top, (Width, Height) τα οποία είναι οι παραπάνω ιδιότητες. 0: (μπροστά από όλα) 1: (πίσω από όλα) Label1.Move 100,200 ή Label1.Move 100,200,400,400 Label1.Refresh Label1.Zorder = 0 Label1.Zorder = 1 165

170 Frame (πλαίσιο): Πρόκειται για ένα εργαλείο ομαδοποίησης στοιχείων ελέγχου επάνω στη φόρμα. Είναι εξαιρετικά χρήσιμο γιατί παρέχει ευελιξία και διευκολύνει την οργάνωση των εργαλείων επάνω στη φόρμα. Οι ιδιότητές του, τα συμβάντα και οι μέθοδοι δεν διαφέρουν από αυτές της Label (κάποιες ωστόσο δεν υπάρχουν) και έτσι θα αναφερθούν επιγραμματικά: 166

171 CheckBox (κουτί ελέγχου): Ένα πολύ σημαντικό εργαλείο το οποίο χρησιμοποιείται για να δώσει στον χρήστη την ευχέρεια να εκτελέσει μια διαδικασία με πολλαπλές επιλογές. Στις ήδη γνωστές ιδιότητες που έχουμε δει παραπάνω, θα προσθέσουμε κάποιες ακόμα οι οποίες αποτελούν το κλειδί της διαχείρισης ενός CheckBox. Ιδιότητα Επεξήγηση Όρισμα Αποτέλεσμα Style Προσδιορίζει το οπτικό αποτέλεσμα του CheckBox. 0: (Standard) 1: (Graphical) 0: Όπως φαίνεται στην παραπάνω εικόνα. 1: Παρουσιάζεται ως κουμπί το οποίο παραμένει πατημένο όταν είναι τσεκαρισμένο Value Προσδιορίζει αν το CheckBox είναι τσεκαρισμένο ή όχι. 0: UnChecked 1: Checked 2: Grayed 0: Μη τσεκαρισμένη επιλογή. 1: Τσεκαρισμένη επιλογή. 2: Τσεκαρισμένη επιλογή ως προεπιλογή (default option) Τα συμβάντα που έχει το CheckBox παρουσιάζονται στον παρακάτω πίνακα. Συμβάν Απλό «κλικ» Click Πάτημα και κράτημα πλήκτρου ποντικιού MouseDown Απελευθέρωση πλήκτρου ποντικιού (μετά από την παραπάνω ενέργεια) MouseUp Κίνηση του ποντικιού από πάνω MouseMove Ενεργοποίηση Όταν κάνουμε κλικ επάνω στo CheckBox. (Παράλληλα αυτό σημαίνει ότι αν είναι επιλεγμένο, αποεπιλέγεται και αντίστροφα) Όταν κάνουμε κλικ και κρατάμε πατημένο το πλήκτρο. Όταν, αφού έχουμε κρατήσει πατημένο το πλήκτρο του ποντικιού, το ελευθερώνουμε. Όταν απλά περνάμε το δείκτη του ποντικιού πάνω από την Label. Αποτέλεσμα Εκτελεί τον κώδικα που έχουμε γράψει εντός της παρακάτω υπορουτίνας συμβάντος (Sub). (Θεωρώ ότι η ιδιότητα (Name) έχει ως όρισμα το «Check1») Private Sub Check1_Click() End Sub Private Sub Check1_MouseDown (Button As Integer, Shift As Integer, X As Single, Y As Single) End Sub Private Sub Check1_MouseUp (Button As Integer, Shift As Integer, X As Single, Y As Single) End Sub Private Sub Check1_MouseMove (Button As Integer, Shift As Integer, X As Single, Y As Single) End Sub 167

172 Σε εστίαση Όταν θέτουμε «προσοχή» σε Private Sub Check1_GotFocus() GotFocus ένα εργαλείο (πχ όταν End Sub μεταφερόμαστε σε αυτό με το Tab Key) Εκτός εστίασης LostFocus Όταν φεύγουμε από ένα εργαλείο. Private Sub Check1_LostFocus () End Sub Οι μέθοδοι που μας ενδιαφέρουν είναι οι ίδιες όπως και στα προηγούμενα στοιχεία ελέγχου (label, frame) και για αυτό δεν θα επαναληφθούν. 168

173 ComboBox (Πλαίσιο αναδιπλούμενης λίστας) : «Διπλωμένο» Το ComboBox είναι ένα πλαίσιο το οποίο χρησιμοποιούμε για οικονομία χώρου, όταν θέλουμε να διαθέσουμε ένα πλήθος επιλογών στον χρήστη. Μας δίνει την δυνατότητα της «Σε ανάπτυξη» απλής ή πολλαπλής επιλογής (ανάλογα με την τιμή μιας συγκεκριμένης ιδιότητας). Οι ιδιότητες που έχει είναι αρκετές. Ωστόσο, θα εξετάσουμε μόνο ορισμένες από αυτές. Οι ιδιότητες που έχουν αναλυθεί σε προηγούμενα στοιχεία ελέγχου θα παραληφθούν για οικονομία χώρου. Ιδιότητα Επεξήγηση Όρισμα Αποτέλεσμα (Name), BackColor, Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Enabled, Font, ForeColor, Height, Left, MousePointer, Style, ToolTipText, Top, Visible, Width Locked Κλειδώνει το ComboBox ώστε να μην μπορεί να γίνει επιλογή. True ή False True: Κλειδωμένο False: Ξεκλείδωτο (ελεύθερο) Sorted Text List ListCount Προσδιορίζει αν τα περιεχόμενα του ComboBox θα είναι ταξινομημένα ή όχι. Προσδιορίζει την τρέχουσα επιλογή (αυτή δηλαδή που εμφανίζεται και όταν η λίστα είναι «διπλωμένη» Επιστρέφει το αντικείμενο που επιλέξαμε Επιστρέφει το πλήθος των καταχωρίσεων στη λίστα του ComboBox. True ή False Κάποιο από τα ορίσματα που περιέχει μέσα στη λίστα. Index: Ένας αριθμός που δείχνει τον αύξοντα αριθμό του αντικειμένου στη λίστα True: Ταξινομημένα False: Ως εισήχθησαν Τρέχων επιλογή vname = Combo1.List (1) Κανένα ilength = Combo1.ListCount 169

174 Σημείωση Τα ονόματα vname και ilength είναι τυχαία. Είναι ονόματα μεταβλητών τα οποία επιλέχθηκαν αυθαίρετα, με μοναδικό περιορισμό να αρχίζουν από γράμμα και να μην είναι δεσμευμένες λέξεις της Visual Basic. To ότι η μια αρχίζει από το γράμμα «v» και η άλλη από το γράμμα «i» είναι μια παραδοχή που γίνεται για να περιγραφούν δυο διαφορετικοί τύποι μεταβλητών: Οι Variant και οι Integer. Οι πρώτες δέχονται όλων των ειδών τις τιμές ενώ οι δεύτερες μόνο ακέραιους. Ο λόγος που επιλέχθηκε στην πρώτη περίπτωση μια Variant είναι γιατί δεν γνωρίζουμε τι είδους τιμή θα μας επιστραφεί. Μπορεί να είναι λέξη, αριθμός, σύμβολα, οτιδήποτε. Στην δεύτερη περίπτωση επιλέχθηκε ένας Integer γιατί το πλήθος των καταχωρήσεων είναι ακέραιος θετικός αριθμός >=0. Θα περιγράψουμε τους τύπους και τον τρόπο δήλωσης των μεταβλητών σε επόμενο κεφάλαιο. Τα συμβάντα που ενεργοποιούνται είναι τα παρακάτω. Συμβάν Ενεργοποίηση Αποτέλεσμα Εκτελεί τον κώδικα που έχουμε γράψει εντός της παρακάτω υπορουτίνας συμβάντος (Sub). (υποτίθεται ότι η ιδιότητα (Name) έχει ως όρισμα το «Combo1») Αλλαγή Change Απλό «κλικ» Click Διπλό «κλικ» DblClick Σε εστίαση GotFocus Όταν αλλάζει το περιεχόμενο του Combo (δηλαδή η Text) Όταν κάνουμε κλικ επάνω στο Combo. Όταν κάνουμε διπλό κλικ πάνω στο Combo Όταν θέτουμε «προσοχή» σε ένα εργαλείο (πχ όταν μεταφερόμαστε σε αυτό με το Tab Key) Private Sub Combo1_Change() End Sub Private Sub Combo1_Click() End Sub Private Sub Combo1_DblClick() End Sub Private Sub Combo1_GotFocus () End Sub Εκτός εστίασης LostFocus Όταν φεύγουμε από ένα εργαλείο. Private Sub Combo1_LostFocus () End Sub Κύλιση Scroll Αναδίπλωση DropDown Όταν «κυλάμε» την αναδιπλούμενη λίστα Όταν πατάμε το βελάκι (στα δεξιά) που δείχνει κάτω. Private Sub Combo1_Scroll() End Sub Private Sub Combo1_DropDown () End Sub 170

175 Οι διαθέσιμες μέθοδοι είναι αυτές που κάνουν το ComboBox να λειτουργεί. Εισάγονται όπως όλες οι μέθοδοι σε περιβάλλον σύνταξης κώδικα. Θα αναπτύξουμε ορισμένες από τις βασικές μεθόδους στη συνέχεια. Μέθοδος Επεξήγηση Ορίσματα Σύνταξη (Θεωρώντας ότι το όνομα του ComboBox είναι Combo1) Clear Διαγράφει τα περιεχόμενα του ComboBox Κανένα Combo1.Clear AddItem RemoveItem Refresh SetFocus Προσθέτει μια εγγραφή (επιλογή) στο ComboBox Διαγράφει ένα αντικείμενο από τη λίστα του ComboBox Κάνει «ανανέωση» στην λίστα. Θέτει τη λίστα «υπό εστίαση» Οτιδήποτε Index: Ένας αριθμός που δείχνει τον αύξοντα αριθμό του αντικειμένου στη λίστα Κανένα Κανένα Combo1.AddItem "Επιλογή 1" Combo1.AddItem "12.45" Combo1.AddItem Combo1.RemoveItem(1) Combo1.RemoveItem(2) κτλ Combo1.Refresh Combo1.SetFocus 171

176 HScrollBar (Οριζόντια μπάρα κύλισης), VScrollBar (Κατακόρυφη μπάρα κύλισης) : Ιδιότητα Οριζόντια Κατακόρυφη Επεξήγηση Όρισμα Αποτέλεσμα Τόσο η οριζόντια όσο και η κατακόρυφη μπάρα κύλισης είναι στοιχεία ελέγχου «πλοηγητικού» χαρακτήρα. Μπορούμε να μετακινηθούμε μεταξύ μιας ελάχιστης και μιας μέγιστης τιμής, εύκολα και γρήγορα. Οι ιδιότητες, τα συμβάντα και οι μέθοδοι είναι κοινές και για τα δύο. Το μόνο που πρακτικά τα κάνει να διαφέρουν είναι ο προσανατολισμός του εργαλείου. Ας τα δούμε αναλυτικότερα. (Name), Enabled, Height, Left, MousePointer, Top, Visible, Width Min Max Value SmallChange LargeChange Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Προσδιορίζει το κάτω όριο του πεδίου τιμών Προσδιορίζει το άνω όριο του πεδίου τιμών Προσδιορίζει την τρέχουσα τιμή Προσδιορίζει την αλλαγή της τρέχουσας τιμής (χρησιμοποιώντας τα βελάκια κατεύθυνσης) Προσδιορίζει την αλλαγή της τρέχουσας τιμής (κάνοντας «κλικ» στο λευκό «σώμα» του εργαλείου, ανάμεσα στα βελάκια κατεύθυνσης) Ακέραιος αριθμός [ , 32767] Ακέραιος αριθμός [ , 32767] μεγαλύτερος του Μin Ακέραιος αριθμός [ , 32767] ανάμεσα στα Min και Max Ακέραιος αριθμός [ , 32767] Ακέραιος αριθμός [ , 32767] Θέτουμε το κάτω όριο Θέτουμε το άνω όριο Θέτουμε / παίρνουμε την τρέχουσα τιμή Πλοήγηση (όπως στην επεξήγηση με αλλαγή τιμής ανά τον δοσμένο αριθμό) Πλοήγηση (όπως στην επεξήγηση με αλλαγή τιμής ανά τον δοσμένο αριθμό) 172

177 Τα συμβάντα της μπάρας κύλισης είναι (τα περισσότερα) λίγο πολύ γνωστά. Εμείς θα παραθέσουμε επιγραμματικά τα γνωστά και θα επεξηγήσουμε τα συμβάντα τα οποία έχουν να κάνουν με τον τρόπο διαχείρισης της μπάρας κύλισης. Συμβάν Ενεργοποίηση Αποτέλεσμα Εκτελεί τον κώδικα που έχουμε γράψει εντός της παρακάτω υπορουτίνας συμβάντος (Sub). (Θεωρώ ότι η ιδιότητα (Name) έχει ως όρισμα το «Hscroll1») GotFocus, LostFocus Όπως προαναφέρθηκαν Private Sub HScroll1_GotFocus() End Sub Private Sub HScroll1_LostFocus() End Sub Αλλαγή Change Κύλιση Scroll Όταν χρησιμοποιούμε τα βελάκια κατεύθυνσης της μπάρας κύλισης για να αλλάξουμε την τιμή της. Όταν χρησιμοποιούμε τον δείκτη θέσης της μπάρας κύλισης για να αλλάξουμε την τιμής της. Private Sub HScroll1_Change() End Sub Private Sub HScroll1_Scroll() End Sub Οι μέθοδοι είναι κοινές με τα περισσότερα ως τώρα στοιχεία ελέγχου Σύνταξη (Θεωρώντας ότι το όνομα του scrollbar είναι Hscroll1) Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν (με όνομα αναφοράς βέβαια το Hscroll1) Μέθοδος Επεξήγηση Ορίσματα Move, Refresh, Zorder, SetFocus 173

178 Timer (Χρονομετρητής): Είναι ένα εργαλείο το οποίο μας επιτρέπει να θέσουμε μια έγκυρη τιμή χρονικής διάρκειας (θα δούμε παρακάτω τη μονάδα), που, με τη λήξη αυτού «πυροδοτεί» κάποιο συμβάν. Είναι αόρατο στον τελικό χρήστη. Οι ιδιότητες και τα συμβάντα που συνοδεύουν τον χρονομετρητή είναι ελάχιστα. Δεν έχει μεθόδους. Ας τα δούμε αναλυτικά. Ιδιότητα Επεξήγηση Όρισμα Αποτέλεσμα Left, Top Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν (χωρίς ωστόσο ουσιαστικό αποτέλεσμα, αφού το εργαλείο είναι αόρατο κατά τη φάση εκτέλεσης) Enabled Το τι κάνει η ιδιότητα Enabled το είδαμε παραπάνω. Σε αυτό το εργαλείο και μόνο, η στιγμή που γίνεται Enabled είναι η στιγμή εκκίνησης της αντίστροφης μέτρησης (Ενεργοποίηση). True ή False Όταν γίνει True αρχίζει να μετράει ο χρόνος που έχουμε ορίσει για την έναρξη της εκτέλεσης. Interval Είναι η ιδιότητα που δέχεται τον χρόνο, μετά το πέρας του οποίου θα εκτελέσει την διαδικασία που ορίζεται σε αυτό. Η μονάδα που χρησιμοποιεί είναι τα msec (1000msec=1sec) Από 0 έως Δίνει την αντίστοιχη τιμή. Το συμβάν του Control Timer είναι ένα: Συμβάν Timer Ενεργοποίηση Όταν το εργαλείο Timer είναι σε κατάσταση Enabled = True και έχει ολοκληρωθεί το χρονικό διάστημα που θέσαμε στο Interval. Αποτέλεσμα Εκτελεί τον κώδικα που έχουμε γράψει εντός της παρακάτω υπορουτίνας συμβάντος (Sub). (Θεωρώ ότι η ιδιότητα (Name) έχει ως όρισμα το «Timer1») Private Sub Timer1_Timer() End Sub 174

179 DriveListBox (Λίστα οδηγών δίσκων), DirListBox (Λίστα φακέλων), FileListBox (Λίστα αρχείων): DriveListBox Το εργαλείο αυτό μας παρέχει τη δυνατότητα πλοήγησης ανάμεσα στους εγκατεστημένους δίσκους στο σύστημά μας. Είναι το πρώτο από μια σειρά συνεργαζόμενων εργαλείων. Δεν επιτρέπει την πλοήγηση στο περιεχόμενο των δίσκων, παρά μόνο στην επιλογή κάποιου. DirListBox Είναι το δεύτερο κατά σειρά χρήσης εργαλείο, λειτουργεί σε δεύτερο επίπεδο, και μας επιτρέπει την επιλογή φακέλου στον δίσκο που ήδη έχουμε προεπιλέξει παραπάνω. Μπορούμε να πλοηγηθούμε στα περιεχόμενα κάποιου φακέλου με το συγκεκριμένο εργαλείο, αλλά το μόνο που μπορούμε να δούμε είναι οι φάκελοι. FileListBox Το τρίτο κατά σειρά εργαλείο (από άποψη χρήσης). Αφού επιλέξουμε δίσκο στο DriveListBox και πλοηγηθούμε στον φάκελο που μας ενδιαφέρει από το DirListBox, επιλέγουμε τελικώς το αρχείο που μας ενδιαφέρει. Ωστόσο αν θέλουμε να δημιουργήσουμε κάποιο αρχείο σε κάποιο φάκελο, τότε μπορούμε να παραλείψουμε το FileListBox. Τα παραπάνω εργαλεία, αν και είναι διαφορετικά, τα εξετάζουμε σαν μια ομάδα, επειδή ο τρόπος λειτουργίας τους είναι παραπλήσιος και συνδέονται όπως είδαμε άμεσα. 175

180 Θα παρουσιάσουμε κάποιες ιδιότητες των παραπάνω εργαλείων, οι οποίες είναι απαραίτητες για τη χρήση τους. DriveListBox Ιδιότητα (Name), BackColor, Enabled, ForeColor, Font, Height, Width, Left, Top, MousePointer, Visible Drive DirListBox Ιδιότητα (Name), BackColor, Enabled, ForeColor, Font, Height, Width, Left, Top, MousePointer, Visible Path FileListBox Ιδιότητα (Name), BackColor, Enabled, ForeColor, Font, Height, Width, Left, Top, MousePointer, Visible Path FileName Επεξήγηση Όρισμα Αποτέλεσμα Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Είναι η βασική ιδιότητα του σχετικού εργαλείου. Μας «επιστρέφει» την επιλογή που κάναμε, ή θέτουμε προορισμό σε κάποιο δίσκο. Όλοι οι υπάρχοντες δίσκοι, όχι ως ονόματα αλλά ως καταχωρημένα «γράμματα». Για παράδειγμα, μπορούμε να θέσουμε: Drive1.Drive = C Παρόλο που μπορεί εμείς να ονομάζουμε τον δίσκο «C» για παράδειγμα «SYSTEM» Ανάλογα με τη χρήση είτε παίρνουμε την τιμή του δίσκου που επιλέγει ο χρήστης, είτε θέτουμε εμείς κάποια τιμή. Επεξήγηση Όρισμα Αποτέλεσμα Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Είναι η βασική ιδιότητα του σχετικού εργαλείου. Μας «επιστρέφει» την επιλογή που κάναμε, ή θέτουμε προορισμό σε κάποιο φάκελο. Όλοι οι υπάρχοντες φάκελοι, στον σχετικό δίσκο. Ανάλογα με τη χρήση είτε παίρνουμε την τιμή του φακέλου που επιλέγει ο χρήστης, είτε θέτουμε εμείς κάποια τιμή. Επεξήγηση Όρισμα Αποτέλεσμα Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Μας «επιστρέφει» την επιλογή που κάναμε, ή θέτουμε προορισμό σε κάποιο φάκελο που περιέχει αρχεία. Ορίζει το αρχείο που επιλέξαμε από το σχετικό εργαλείο. Όλοι οι υπάρχοντες φάκελοι, στον σχετικό δίσκο. Όλα τα υπάρχοντα αρχεία στον επιλεγμένο φάκελο. Ανάλογα με τη χρήση, είτε παίρνουμε την τιμή του φακέλου που επιλέγει ο χρήστης, είτε θέτουμε εμείς κάποια τιμή. Επιλέγουμε κάποιο αρχείο. 176

181 Shape (Σχήμα): Το στοιχείο ελέγχου Shape μας επιτρέπει να προσθέτουμε απλά σχήματα πάνω στις φόρμες μας. Τα σχέδια που παρουσιάζονται δίπλα είναι οι έξι επιλογές που διατίθενται. Το εργαλείο Shape δεν έχει συμβάντα, δηλαδή δεν μπορούμε με κλικ να ενεργοποιήσουμε κάποια διαδικασία. Προσφέρει μόνο διακοσμητικό χαρακτήρα στα προγράμματά μας. Οι ιδιότητες του shape προφανώς έχουν να κάνουν με το στυλ εμφάνισής του. Ιδιότητα Επεξήγηση Όρισμα Αποτέλεσμα (Name), Left,Top, Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Width, Height, Visible BackColor Θέτει το χρώμα του φόντου του αντικειμένου. Έγκυρο τύπο χρώματος (όπως προαναφέρθηκαν) Όπως προαναφέρθηκαν BackStyle BorderColor BorderStyle BorderWidth FillColor FillStyle Θέτει τον τύπο εμφάνισης (συμπαγής ή διαφανής) Θέτει το χρώμα του περιγράμματος του αντικειμένου. Θέτει τον τύπο γραμμής του περιγράμματος. Θέτει το πάχος του περιγράμματος Θέτει το χρώμα του αντικειμένου. Προσδιορίζει τον τρόπο «γεμίσματος» του αντικειμένου. 0 ή 1 0: Διαφανής 1: Συμπαγής Έγκυρο τύπο χρώματος (όπως προαναφέρθηκαν) Όπως προαναφέρθηκαν 0, 1, 2, 3, 4, 5, 6 0: Χωρίς περίγραμμα 1: Συνεχής 2: Παύλες 3: Τελείες 4: Παύλα-τελεία 5: Παύλα τελεία-τελεία 6: Τύπου συνεχής 1 έως 8192 Αλλάζει το πάχος του περιγράμματος Έγκυρο τύπο χρώματος Όπως προαναφέρθηκαν (όπως προαναφέρθηκαν) 0, 1, 2, 3, 4, 5, 6, 7 0: Συμπαγής 1: Χωρίς γέμισμα 2: Οριζόντιες γραμμές 3: Κάθετες γραμμές 4: Διαγώνιες 5: Διαγώνιες 6: Πλέγμα 7: Διαγώνιο πλέγμα 177

182 Shape Προσδιορίζει τον τύπο του σχήματος 0, 1, 2, 3, 4, 5 0: Ορθογώνιο 1: Τετράγωνο 2: Έλλειψη 3: Κύκλος 4: Ορθογώνιο με στρογγυλεμένες γωνίες 5: Τετράγωνο με στρογγυλεμένες γωνίες Οι μέθοδοι του shape είναι ίδιες με αυτές των περισσότερων στοιχείων ελέγχου και δεν θα αναφερθούν ξεχωριστά. Line (Γραμμή): Το εργαλείο Line ανήκει ουσιαστικά στην κατηγορία του εργαλείου Shape. Δεν έχει συμβάντα. Έχει μόνο 2 μεθόδους (Refresh και ZOrder) τις οποίες έχουμε ξαναδεί και απλές ιδιότητες. Ιδιότητα Επεξήγηση Όρισμα Αποτέλεσμα (Name), BorderColor, Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν BorderStyle, BorderWidth, Visible X1 Η τετμημένη του πρώτου άκρου. Πραγματικός αριθμός Y1 X2 Y2 Η τεταγμένη του πρώτου άκρου. Η τετμημένη του δεύτερου άκρου. Η τεταγμένη του δεύτερου άκρου. Πραγματικός αριθμός Πραγματικός αριθμός Πραγματικός αριθμός Προσδιορισμός συντεταγμένων πρώτου σημείου. Προσδιορισμός συντεταγμένων δεύτερου σημείου. 178

183 Image (Εικόνα): Το εργαλείο αυτό μας παρέχει τη δυνατότητα να προσθέτουμε εικόνες σε μια φόρμα. Έχει απλές ιδιότητες, μεθόδους και συμβάντα τα οποία θα τα δούμε συνοπτικά: Ιδιότητα Επεξήγηση Όρισμα Αποτέλεσμα (Name), Appearance, Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν BorderStyle, Enabled, Height, Width, Left, Top, Visible Picture Προσδιορίζουμε το όνομα της εικόνας που θα εμφανίσει (το όνομα του αρχείου) Οποιοδήποτε έγκυρο όνομα αρχείου εικόνας που έχουμε σε κάποιο δίσκο. Εμφανίζει την εικόνα. Stretch Προσδιορίζουμε αν η εικόνα θα συμπιεστεί (οπτικά) ώστε να χωρέσει στο Image που δημιουργήσαμε. True ή False True: Συμπιέζει την εικόνα. False: Παρουσιάζει την εικόνα στο πραγματικό της μέγεθος. Αν το εργαλείο Image είναι πιο μικρό από την εικόνα, την κόβει. Οι μέθοδοι και τα συμβάντα είναι ήδη γνωστά και δεν θα σχολιαστούν. Γνωρίζουμε ήδη πού θα τα βρούμε και πώς αυτά ανταποκρίνονται. Το συγκεκριμένο στοιχείο ελέγχου είναι, όπως θα δούμε παρακάτω, μια ελαφριά έκδοση του PictureBox. 179

184 PictureBox (Πλαίσιο Απεικόνισης): Το PictureBox, σε αντίθεση με το Image, μπορεί να χρησιμοποιηθεί, πέρα από την απλή εμφάνιση μιας εικόνας και ως χώρος σχεδίασης. Μπορούμε να προβάλουμε και να δημιουργήσουμε οτιδήποτε επιθυμούμε πάνω σε ένα PictureBox, από ελεύθερο ή γραμμικό σχέδιο, μέχρι και γραφικές παραστάσεις, να προσθέσουμε εργαλεία και να το χρησιμοποιήσουμε ως ομαδοποιητή κλπ. Είναι λοιπόν ένα πανίσχυρο εργαλείο, αλλά και δύσκολο για πλήρη αξιοποίηση. Θα προσπαθήσουμε να αναφερθούμε σε λίγα χαρακτηριστικά του πλαισίου απεικόνισης ώστε να γίνουν αντιληπτά. Ιδιότητα Επεξήγηση Όρισμα Αποτέλεσμα (Name), Appearance, Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν BackColor, BorderStyle, DrawStyle, DrawWidth, Enabled, FillColor, FillStyle, Font, ForeColor, MousePointer, Height, Width, Left, Top, Picture, Visible Align Προσδιορίζει αν το πλαίσιο απεικόνισης θα παρουσιάζεται προσαρμοσμένο σε κάποια πλευρά της φόρμας. 0, 1, 2, 3, 4 0: Χωρίς προσαρμογή 1: Πάνω 2: Κάτω 3: Αριστερά 4: Δεξιά AutoRedraw Χρησιμοποιείται για να κρατάει στη μνήμη την εικόνα που απεικονίζει (γραφικά) True ή False True: Κρατάει στη μνήμη τα γραφικά. False: Δεν τα κρατάει στη μνήμη. Ένα κρύψιμο της φόρμας διαγράφει τα περιεχόμενα του πλαισίου απεικόνισης. 180

185 AutoSize FontTransparent ScaleMode Προσδιορίζει αν το μέγεθος του πλαισίου θα προσαρμόζεται αυτόματα στο μέγεθος της προβαλλόμενης εικόνας. Προσδιορίζει αν το προβαλλόμενο κείμενο θα αποκρύβει ή όχι τα γραφικά που βρίσκονται από πίσω του. Προσδιορίζει την μονάδα μέτρησης αποστάσεων του πλαισίου απεικόνισης. True ή False True ή False True: Αυτόματη προσαρμογή. False: Καμιά προσαρμογή. True: Τα κείμενα παρουσιάζονται διαφανή False: Τα κείμενα παρουσιάζονται συμπαγή. 0, 1, 2, 3, 4, 5, 6, 7 0: Χρήστη 1: Twip 2: Point 3: Pixel 4: Χαρακτήρας 5: Ίντσα 6: Χιλιοστό 7: Εκατοστό ScaleLeft Προσδιορίζει την τετμημένη του αριστερού άκρου. Οποιοδήποτε έγκυρο πραγματικό αριθμό. ScaleTop ScaleHeight Προσδιορίζει την τεταγμένη του πάνω άκρου. Προσδιορίζει το διάστημα που είναι ορατό κατά τον άξονα των Υ. Οποιοδήποτε έγκυρο πραγματικό αριθμό. Οποιοδήποτε έγκυρο πραγματικό αριθμό. Διαμορφώνουν το χώρο προβολής του πλαισίου απεικόνισης, και δημιουργούν νέο σύστημα συντεταγμένων. ScaleWidth Προσδιορίζει το διάστημα που είναι ορατό κατά τον άξονα των Χ. Οποιοδήποτε έγκυρο πραγματικό αριθμό. Σημείωση Γενικότερα, όπως ήδη έχετε παρατηρήσει, όλα τα μεγέθη των αντικειμένων έχουν ως αρχή μέτρησης την πάνω αριστερή άκρη της οθόνης. Αυτή η άκρη έχει τοπικές συντεταγμένες (0,0). Το ίδιο συμβαίνει και για τις συντεταγμένες της φόρμας. Αυτό όμως δεν είναι ένα βολικό σύστημα συντεταγμένων, διότι αν και τα Χ αυξάνουν από αριστερά προς τα δεξιά, τα Υ αυξάνουν από πάνω προς τα κάτω. Με τις ιδιότητες της κατηγορίας Scale μπορείτε να διαμορφώσετε ένα κανονικό σύστημα συντεταγμένων. Αξίζει να σημειωθεί ότι ιδιότητες τύπου Scale έχει και η φόρμα. 181

186 Οι μέθοδοι που χρησιμοποιεί το PictureBox είναι περισσότερες από κάθε άλλο στοιχείο ελέγχου και χρησιμοποιούνται κυρίως για τις γραφικές απεικονίσεις. Μέθοδος Επεξήγηση Ορίσματα Σύνταξη (Θεωρώντας ότι το όνομα του PictureBox είναι Picture1) Move, SetFocus, ZOrder, Refresh Circle Cls Line Point Pset Scale TextHeight TextWidth Όπως προαναφέρθηκαν Σχεδιάζει ένα κύκλο στο PictureBox. Καθαρίζει το PictureBox από όλα τα γραφικά Σχεδιάζει μια γραμμή στο PictureBox. Επιστρέφει την τιμή του χρώματος σε ένα συγκεκριμένο σημείο. Σχεδιάζει ένα σημείο σε μια συγκεκριμένη θέση. Δημιουργεί ένα πλήρες σύστημα συντεταγμένων Επιστρέφει το ύψος ενός κειμένου στην μονάδα μέτρησης που ορίσαμε. Επιστρέφει το μήκος ενός κειμένου στην μονάδα μέτρησης που ορίσαμε. Όπως προαναφέρθηκαν Κέντρο κύκλου Χ,Υ, ακτίνα R, χρώμα, τμήμα (σε ακτίνια) Κανένα X1,Y1 και X2,Y2, χρώμα Θέση σημείου (Χ,Υ) Θέση σημείου (Χ,Υ), χρώμα Χ1: Χ αριστερά Υ1: Υ πάνω Χ2: Χ δεξιά Υ2: Υ κάτω Κάποιο κείμενο Κάποιο κείμενο Όπως προαναφέρθηκαν (με όνομα αναφοράς βέβαια το Picure1) Picture1.Cirlce (X,Y), R, Color, Start, End Picture1.Cls Picture1.Line (X1,Y1)-(X2,Y2), color TheColor = Picture1.Point (X,Y) Picture1.Pset (X,Y), color Picture1. Scale (X1, Y1)-(X2, Y2) MyH = Picture1.TextHeight (TheText) MyW = Picture1.TextWidth (TheText) Τα συμβάντα είναι ήδη γνωστά, και σίγουρα έχετε ήδη μάθει πως να τα καλείτε και να τα χρησιμοποιείτε. 182

187 TextBox (Πλαίσιο κειμένου) : Το πλαίσιο κειμένου είναι ένα πολύ χρήσιμο εργαλείο το οποίο μας επιτρέπει να εισάγουμε δεδομένα στο πρόγραμμα πριν και κατά τη φάση της εκτέλεσης. Θα δούμε αναλυτικά κάποιες από τις βασικές ιδιότητές του. Ιδιότητα Επεξήγηση Όρισμα Αποτέλεσμα (Name), Alignment, Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Appearance, BackColor, BorderStyle, Enabled, Font, ForeColor, MousePointer, Height, Width, Left, Top, Visible Locked Κλειδώνει το εργαλείο και δεν επιτρέπει πρόσβαση σε αυτό. True ή False True: Κλειδωμένο False: Ελεύθερο MaxLength MultiLine PasswordChar ScrollBars Επιτρέπει ένα μέγιστο πλήθος χαρακτήρων να γραφούν σε αυτό από το χρήστη. Επιτρέπει στο πλαίσιο κειμένου την εισαγωγή πολλών σειρών δεδομένων (κειμένου) Θέτουμε ένα σύμβολο, αριθμό ή γράμμα ο οποίος θα εμφανίζεται στο TextBox ότι και αν εισάγει ο χρήστης. Χρησιμοποιείται για προστασία καταχωρήσεων. Αν έχουμε επιλέξει τη χρήση πολλαπλών σειρών στο TextBox, μπορούμε να προσθέσουμε μπάρες κύλισης οι οποίες κάνουν πιο εύκολη την πρόσβαση στα δεδομένα. Ένας έγκυρος ακέραιος αριθμός. True ή False Οτιδήποτε (1 χαρακτήρα) Δεν επιτρέπει εισαγωγή δεδομένων με πλήθος χαρακτήρων μεγαλύτερο από αυτό που θέσαμε. True: Πολλές σειρές False: Μια σειρά Αποκρύπτονται τα πραγματικά δεδομένα που εισάγει ο χρήστης. 0, 1, 2, 3 0: Χωρίς μπάρες κύλισης 1: Μόνο οριζόντια 2: Μόνο κατακόρυφη 3: Οριζόντια και κατακόρυφη 183

188 Text Η βασικότερη ιδιότητα του πλαισίου κειμένου. Με αυτή μπορούμε να γράψουμε ένα κείμενο ή να λάβουμε αυτό που έγραψε ο χρήστης. Οτιδήποτε Θέτουμε ή λαμβάνουμε το περιεχόμενο του πλαισίου κειμένου. Οι μέθοδοι που χρησιμοποιεί το πλαίσιο κειμένου (Move, Refresh, Zorder κ.α.) είναι όλες γνωστές και δεν θα αναφερθούν αναλυτικά. Όσο αφορά τα συμβάντα, πέρα από τα είδη γνωστά (Click, DoubleClick, Change, MouseMove κτλ), το textbox περιλαμβάνει κάποια επιπλέον, που αφορούν στην πληκτρολόγηση. Συμβάν KeyPress KeyDown KeyUp Ενεργοποίηση Όταν πατάμε κάποιο πλήκτρο (γράφουμε) μέσα σε ένα πλαίσιο κειμένου. Όταν πατάμε κάποιο πλήκτρο (γράφουμε) μέσα σε ένα πλαίσιο κειμένου και το κρατάμε πατημένο. Όταν αφού έχουμε πατήσει (και κρατήσει πατημένο κάποιο πλήκτρο), το «ελευθερώνουμε» Αποτέλεσμα Εκτελεί τον κώδικα που έχουμε γράψει εντός της παρακάτω υπορουτίνας συμβάντος (Sub). (Θεωρώ ότι η ιδιότητα (Name) έχει ως όρισμα το «Text1») Private Sub Text1_KeyPress (KeyAscii As Integer) End Sub Private Sub Text1_KeyDown (KeyCode As Integer, Shift As Integer) End Sub Private Sub Text1_KeyUp (KeyCode As Integer, Shift As Integer) End Sub 184

189 CommandButton (Κουμπί ή πλήκτρο) : Το «κουμπί» είναι το πιο άμεσο εργαλείο που χρησιμοποιείται για να «πυροδοτήσει» την έναρξη κάποιας διαδικασίας. Χρησιμοποιείται σε κάθε εφαρμογή λόγω της απλότητας χειρισμού του. Οι ιδιότητες του κουμπιού αναφέρονται παρακάτω: Ιδιότητα Επεξήγηση Όρισμα Αποτέλεσμα (Name), Appearance, Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν BackColor, Enabled, Font, Height, Width, Left, Top, ToolTipText, MousePointer, Visible Caption Όπως και στο εργαλείο ετικέτα, ορίζουμε ένα κείμενο ή λέξη το οποίο θα αναγράφεται πάνω στο κουμπί. Οτιδήποτε Το κουμπί φέρει πάνω τη σχετική λεζάντα που συνήθως περιγράφει την αρμοδιότητα του κουμπιού. Cancel Default Προσδιορίζει αν ως συντόμευση του κουμπιού θα οριστεί το πλήκτρο [Esc] του πληκτρολογίου. Επιτρέπεται μόνο για ένα κουμπί πάνω σε κάθε φόρμα. Προσδιορίζει αν ως συντόμευση του κουμπιού θα οριστεί το πλήκτρο [Enter] του πληκτρολογίου. Επιτρέπεται μόνο για ένα κουμπί πάνω σε κάθε φόρμα. True ή False True ή False True: Πάτημα του [Esc] ισοδυναμεί με πάτημα του συγκεκριμένου κουμπιού False: Προεπιλεγμένα, δεν αντιστοιχεί το [Esc] True: Πάτημα του [Enter] ισοδυναμεί με πάτημα του συγκεκριμένου κουμπιού False: Προεπιλεγμένα, δεν αντιστοιχεί το [Enter] 185

190 Style DisabledPicture DownPicture Picture Ορίζει το στυλ εμφάνισης του κουμπιού. Προσδιορίζει την εικόνα που θα εμφανίζεται όταν θέτουμε στην ιδιότητα Enabled την τιμή False (δηλαδή όταν απενεργοποιούμε το πλήκτρο) Προσδιορίζει την εικόνα που θα εμφανίζεται όταν πατάμε (ή και κρατάμε πατημένο το κουμπί). Προσδιορίζει την εικόνα που θα εμφανίζεται ως φόντο στο κουμπί. 0 ή 1 0: (Standard): Το πλήκτρο έχει κάποιες προεπιλεγμένες δυνατότητες εμφάνισης. Δεν μπορεί για παράδειγμα να έχει χρώμα ως υπόβαθρο. 1: (Graphical): Το κουμπί αποκτά εξελιγμένη γραφική συμπεριφορά. Μπορούμε να βάλουμε ως υπόβαθρο χρώμα, εικόνα κτλ Οποιοδήποτε έγκυρο αρχείο εικόνας που υπάρχει σε κάποιο δίσκο. Οποιοδήποτε έγκυρο αρχείο εικόνας που υπάρχει σε κάποιο δίσκο. Οποιοδήποτε έγκυρο αρχείο εικόνας που υπάρχει σε κάποιο δίσκο. Η εικόνα εμφανίζεται στο κουμπί, μόλις το απενεργοποιήσουμε. Η εικόνα εμφανίζεται όταν πατήσουμε το κουμπί, ως φόντο. Η εικόνα εμφανίζεται στο κουμπί, ως φόντο. Οι μέθοδοι (Move, Refresh, SetFocus, Zorder) δεν παρουσιάζουν καμία διαφορά με τα υπόλοιπα στοιχεία ελέγχου. Τα συμβάντα μάλιστα, είναι τα απλά συμβάντα των υπόλοιπων εργαλείων. 186

191 OptionButton (Κουμπί επιλογής ή πλήκτρο επιλογής) : Το OptionButton είναι ένα στοιχείο ελέγχου το οποίο μας επιτρέπει να πραγματοποιήσουμε μία και μόνο μία επιλογή από αυτές που μας δίνονται. Μοιάζει με το εργαλείο CheckBox που είδαμε παραπάνω, αλλά η μεγάλη διαφορά έγκειται στο γεγονός ότι στο checkbox μπορούσαμε να επιλέξουμε όσα θέλουμε ταυτόχρονα ή να μην επιλέξουμε κανένα. Στο optionbutton η επιλογή είναι μια και αποκλειστική. Σκεφτείτε για παράδειγμα την ερώτηση «τι χρώμα επιθυμείτε για φόντο;». Προφανώς δεν θα μπορούσατε να επιλέξετε πάνω από ένα, αλλά ούτε και κανένα διότι δεν υπάρχει «κανένα» χρώμα! Ας περάσουμε στις ιδιότητες του πλήκτρου επιλογής. Ιδιότητα Επεξήγηση Όρισμα Αποτέλεσμα (Name), Alignment, Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Appearance, BackColor, DisabledPicture, DownPicture, Enabled, Font, ForeColor, MousePointer, Left, Top, Height, Width, ToolTipText, Visible Caption Όπως και στο εργαλείο κουμπί, ορίζουμε ένα κείμενο ή λέξη το οποίο θα αναγράφεται πάνω στο κουμπί επιλογής. Οτιδήποτε Το κουμπί επιλογής φέρει πάνω τη σχετική λεζάντα που συνήθως περιγράφει την αρμοδιότητά του. 187

192 Style Picture Value Ορίζει το στυλ εμφάνιστης του κουμπιού επιλογής. Προσδιορίζει την εικόνα που θα εμφανίζεται ως φόντο στο κουμπί επιλογής. Προϋπόθεση να έχουμε ορίσει στην ιδιότητα Style την τιμή Graphical. Είναι η κύρια ιδιότητα η οποία σηματοδοτεί αν ένα πλήκτρο επιλογής είναι «επιλεγμένο» 0 ή 1 0: (Standard): Το πλήκτρο επιλογής έχει κάποιες προεπιλεγμένες δυνατότητες εμφάνισης. Σε αντίθεση με το CommandButton μπορεί να έχει χρώμα ως υπόβαθρο, αλλά όχι εικόνα. Παράλληλα εμφανίζεται οπτικά ως «ετικέτα» με ένα «κυκλάκι» το οποίο ανάλογα με την επιλογή μας είτε είναι άδειο είτε εμφανίζει εσωτερικά μια μαύρη «μπίλια». 1: (Graphical): Το κουμπί επιλογής αποκτά εμφάνιση παρόμοια με του CommandButton. Η διαφορά έγκειται στο γεγονός ότι το επιλεγμένο κουμπί επιλογής εμφανίζεται πατημένο κάτω ενώ τα υπόλοιπα σηκωμένα. Στην συγκεκριμένη περίπτωση μπορούμε να τοποθετήσουμε ως φόντο εικόνα. Οποιοδήποτε έγκυρο αρχείο εικόνας που υπάρχει σε κάποιο δίσκο. True ή False Η εικόνα εμφανίζεται στο κουμπί επιλογής, ως φόντο. True: Είναι το επιλεγμένο πλήκτρο. False: Δεν είναι το επιλεγμένο. 188

193 ListBox (Πλαίσιο λίστας): Το πλαίσιο λίστας μοιάζει πάρα πολύ με το πλαίσιο αναδιπλούμενης λίστας (ComboBox), τόσο στον τρόπο της λειτουργίας και της διαχείρισης, όσο και στην εμφάνιση. Ιδιότητα Επεξήγηση Όρισμα Αποτέλεσμα (Name), BackColor, Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Enabled, Font, ForeColor, Height, Left, MousePointer, ToolTipText, Top, Visible, Width Locked Κλειδώνει το ListBox ώστε να μην μπορεί να γίνει επιλογή. True ή False True: Κλειδωμένο False: Ξεκλείδωτο (ελεύθερο) Sorted MultiSelect Style ListΙndex ListCount Προσδιορίζει αν τα περιεχόμενα του ListBox θα είναι ταξινομημένα ή όχι. Προσδιορίζει τον τρόπο επιλογής των στοιχείων της λίστας Προσδιορίζει τον τρόπο εμφάνισης. Προσδιορίζει τον αυτόματο κωδικό καταχώριση ς Επιστρέφει το πλήθος των καταχωρήσεων Ν. True ή False True: Ταξινομημένα False: Ως εισήχθησαν 0 ή 1 ή 2 0: Δεν επιτρέπεται η πολλαπλή επιλογή 1: Επιτρέπεται η πολλαπλή επιλογή με απλό κλικ. 2: Επιτρέπεται η πολλαπλή επιλογή με χρήση του πλήκτρο [Shift] ή [Ctrl]. 0 ή 1 0: Standard: (Όπως εμφανίζεται στο αριστερό σχήμα) 1: CheckBox: (Όπως εμφανίζεται στο δεξιό σχήμα) Δεδομένου ότι οι Ν καταχωρίσεις αριθμούνται από 0...Ν1 Είναι μόνο για ανάγνωση. Σύνταξη (έστω ότι το εργαλείο ονομάζεται List1): AnInteger = List1.Listindex Σύνταξη (έστω ότι το εργαλείο ονομάζεται List1): AllRegs = List1.ListCount 189

194 List Εξομοίωση κυκλωμάτων 1/3 Κινητηρίου συστήματος συνεχούς ρεύματος Επιστρέφει την ίδια την καταχώριση που επιλέγουμε βάση του ListIndex Ως όρισμα δέχεται το όρισμα του ListIndex. Σύνταξη (έστω ότι το εργαλείο ονομάζεται List1): MyChoice = List1.List (List1.ListIndex) Οι μέθοδοι και τα συμβάντα είναι ίδια με αυτές του ComboBox. Ωστόσο, υπάρχει ένα συμβάν που χρησιμοποιεί το ListBox όταν ως Style έχει οριστεί η τιμή CheckBox: Συμβάν ItemCheck Ενεργοποίηση Όταν τσεκάρουμε μια καταχώριση στο πλαίσιο λίστας. Δεξιά η τιμή του «Item» είναι ο αριθμός καταχώριση ς της επιλογής που τσεκάρουμε. Αποτέλεσμα Εκτελεί τον κώδικα που έχουμε γράψει εντός της παρακάτω υπορουτίνας συμβάντος (Sub). (Θεωρώ ότι η ιδιότητα (Name) έχει ως όρισμα το «List1») Private Sub List1_ItemCheck (Item As Integer) End Sub 190

195 Form (Φόρμα): Η φόρμα αποτελεί το πιο σημαντικό στοιχείο ελέγχου. Πάνω της τοποθετούνται όλα τα εργαλεία τα οποία συνθέτουν το τελικό αποτέλεσμα (Project). Έχει πολλές ιδιότητες, συμβάντα και μεθόδους. Θα παρατηρήσατε ήδη ότι η φόρμα περιλαμβάνει εκ φύσεως ένα μικρό εικονίδιο (image), έναν τίτλο (Label), 3 CommandButtons καθώς και κάποια «αόρατα» στοιχεία χειρισμού. Στο παραπάνω σχήμα αναγράφονται οι ονομασίες των στοιχείων που βλέπετε. Η παραπάνω μορφή της φόρμας (απλή μορφή) ενσωματώνει τα στοιχεία ελέγχου που αναφέραμε προηγουμένως ως ιδιότητες. Πριν ξεκινήσουμε να τις βλέπουμε θα παραθέσουμε κάποια μικρά σχόλια για αυτές. Εικονίδιο: Οι περισσότερες, αν όχι όλες οι εφαρμογές, τα προγράμματα και τα παιχνίδια που έχετε εγκατεστημένα στον προσωπικό σας Η/Υ, παρουσιάζονται στην επιφάνεια εργασίας των Windows με ένα χαρακτηριστικό εικονίδιο. Το εικονίδιο αυτό δεν είναι τίποτα περισσότερο από αυτό που θα δώσετε εσείς στην φόρμα, κατά τη σύνταξη ενός προγράμματος. 191

196 Τίτλος: Ο τίτλος (ο οποίος δίνεται από την ιδιότητα Caption) πρέπει να περιγράφει συνοπτικά τη γενική λειτουργία του προγράμματος, ή όταν το πρόγραμμα που γράφουμε αποτελείται από περισσότερες της μιας φόρμες, να περιγράφει συνοπτικά το ρόλο της συγκεκριμένης φόρμας στο συνολικό project. Πλήκτρα ελέγχου: Τα πλήκτρα ελέγχου (τα οποία, αν επιθυμούμε, μπορούμε να απενεργοποιήσουμε) είναι διαχειριστικά εργαλεία της φόρμας. Με τη χρήση τους μπορούμε να «σμικρύνουμε» τη φόρμα, να τη μεγιστοποιήσουμε ώστε να καλύπτει όλη την οθόνη, ή τέλος να την κλείσουμε. Μπάρα τίτλου: Περιλαμβάνει τα παραπάνω στοιχεία. Ο ρόλος της επίσης είναι να επιτρέπει την μετακίνηση της φόρμας πάνω στην οθόνη. Περίγραμμα φόρμας: Έχει το ίδιο στυλ με τον τίτλο και χρησιμοποιείται για να μπορούμε να αλλάζουμε δυναμικά το μέγεθος της φόρμας. Ενεργός χώρος: Είναι ο υπόλοιπος (και μεγαλύτερος) χώρος της φόρμας πάνω στον οποίο μπορούμε να σχεδιάσουμε, να τοποθετήσουμε εργαλεία κ.τ.λ. Ιδιότητα (Name), Appearance, AutoRedraw, BackColor, Caption, Enabled, FillColor, FillStyle, Font, FontTransparent, ForeColor, Left, Top, Height, Width, MousePointer, Picture, ScaleMode, ScaleLeft, ScaleHeight, ScaleWidth, Visible Επεξήγηση Όρισμα Αποτέλεσμα Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν 192

197 ΒorderStyle ControlBox Icon MaxButton MinButton Καθορίζει ουσιαστικά το στυλ εμφάνισης της φόρμας, αν περιλαμβάνει τα πλήκτρα ελέγχου, αν επιτρέπεται η μετακίνησή της κτλ Εμφανίζει ή αποκρύβει τα πλήκτρα ελέγχου της φόρμας. Θέτει το εικονίδιο της φόρμας. Ενεργοποιεί ή απενεργοποεί το πλήκτρο μεγιστοποίησης της φόρμας (από τα πλήκτρα ελέγχου) Ενεργοποιεί ή απενεργοποεί το πλήκτρο ελαχιστοποίησης της φόρμας (από τα πλήκτρα ελέγχου) 0, 1, 2, 3, 4, 5 0: None: Η φόρμα εμφανίζεται μόνο ως ενεργός χώρος. 1: Fixed Single: Η φόρμα εμφανίζεται με τίτλο, εικονίδιο, ενώ από τα πλήκτρα ελέγχου υπάρχει μόνο το πλήκτρο κλεισίματος. Δεν επιτρέπει αλλαγή μεγέθους της φόρμας. 2: Sizable: Η κανονική μορφή της φόρμας όπως την είδαμε παραπάνω. 3: Fixed Dialog: Μοιάζει ιδιαίτερα με την Fixed Single. 4: Fixed Tool Window: Η μορφή της φόρμας είναι κάπως «Light», μοιάζει με την Fixed Single, δεν επιτρέπει αλλαγή μεγέθους. 5: Sizable ToolWindow: Είναι σαν την προηγούμενη μορφή αλλά επιτρέπει την αλλαγή μεγέθους της φόρμας. True ή False True: Εμφανίζει τα πλήκτρα ελέγχου. False: Αποκρύβει τα πλήκτρα ελέγχου. Ico, cur τύπο αρχείων Εμφανίζει το εικνίδιο. εικόνας. True ή False True: Ενεργοποιεί False: Απενεργοποιεί True ή False True: Ενεργοποιεί False: Απενεργοποιεί 193

198 MDIChild Moveable StartUpPosition WindowState Προσδιορίζει αν μια φόρμα υπόκειται μιας άλλης φόρμας. Η φόρμα στην οποία μπορεί να υπόκεινται άλλες φόρμες δεν είναι η απλή φόρμα που εξετάζουμε. Ονομάζεται MDI Form και πρέπει να την προσθέσουμε ξεχωριστά. Προσδιορίζει αν η φόρμα θα μπορεί να μετακινηθεί από τον χρήστη στην οθόνη. Προσδιορίζει την θέση εμφάνισης της φόρμας στην οθόνη κατά την εκτέλεση. Προσδιορίζει το μέγεθος της φόρμας κατά την εκκίνηση. True ή False True: Την υποτάσσει στην MDI Form False: Η φόρμα παραμένει στην ελεύθερη μορφή της True ή False True: Επιτρέπει την μετακίνηση. False: Απαγορεύει την μετακίνηση. 0, 1, 2, 3 0: Manual: Όπου έχει προσδιορίσει ο χρήστης. 1: CenterOwner: Στο κέντρο της φόρμας που την περιέχει (Για MDI φόρμες κυρίως) 2: CenterScreen: Στο κέντρο της οθόνης. 3: WindowsDefault: Στην προεπιλεγμένη από τα Windows θέση. 0, 1, 2 0: Το μέγεθος που έχει δώσει ο χρήστης 1: Ελαχιστοποιημένη 2: Μεγιστοποιημένη Οι μέθοδοι της φόρμας παρουσιάζονται παρακάτω Σύνταξη (Θεωρώντας ότι το όνομα της φόρμας είναι Form1) Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Όπως προαναφέρθηκαν Μέθοδος Επεξήγηση Ορίσματα Circle, Cls, Line, Move, Point, Pset, Refresh, Scale, ScaleX, ScaleY, SetFocus, TextHeight, TextWidth, ZOrder Hide PopUpMenu Αποκρύβει οπτικά τη φόρμα. Χρησιμοποιεί κάποιο MENU ως αναδυόμενο MENU Κανένα To όνομα του MENU Form1.Hide Form1.PopUpMenu [Ονομα] PrintForm Εκτυπώνει τη φόρμα Κανένα Form1.PrintForm Show Εμφανίζει τη φόρμα Κανένα Form1.Show 194

199 Σημείωση MENU: Δεν θεωρείται στοιχείο ελέγχου αλλά στην πραγματικότητα δεν διαφέρει καθόλου από αυτά. Το έχουμε δει όλοι σε προγράμματα που δουλεύουμε. Έχουμε δει και το Menu επιλογών της Visual Basic σε προηγούμενο κεφάλαιο. Το πώς δημιουργούμε και χειριζόμαστε ένα Menu θα το δούμε στο επόμενο κεφάλαιο. Η φόρμα διαχειρίζεται πολλά συμβάντα. Τα συμβάντα γνωρίζετε ήδη πού θα τα βρείτε, οπότε τα γνωστά δεν θα αναφερθούν. Συμβάν Ενεργοποίηση Αποτέλεσμα Εκτελεί τον κώδικα που έχουμε γράψει εντός της παρακάτω υπορουτίνας συμβάντος (Sub). (Θεωρώ ότι η ιδιότητα (Name) έχει ως όρισμα το «Form1») Activate DeActivate Initialize Load QueryUnload Resize Terminate Unload Ενεργοποιείται όταν η φόρμα γίνεται ενεργή, δηλαδή για παράδειγμα όταν πατήσουμε για πρώτη φορά πάνω της (εστιάζουμε πάνω της). Ενεργοποιείται όταν η φόρμα γίνεται ανενεργή, δηλαδή για παράδειγμα όταν εστιάσουμε την προσοχή μας σε άλλη φόρμα. Ενεργοποιείται όταν η φόρμα «ξεκινάει» για πρώτη φορά. Ενεργοποιείται όταν η φόρμα «φορτώνει» για πρώτη φορά. Ενεργοποιείται όταν κλείνουμε την φόρμα από το πλήκτρο [x] των πλήκτρων ελέγχου. Ενεργοποιείται όταν μεταβάλλουμε το μέγεθος της φόρμας. Ενεργοποιείται όταν κλείσουμε όλες τις φόρμες ενός project. Ουσιαστικά θα έπρεπε να είναι τερματισμός προγράμματος και όχι τερματισμός φόρμας. Ενεργοποιείται όταν η φόρμα «αποφορτώνεται». Private Sub Form_Activate() End Sub Private Sub Form_Deactivate() End Sub Private Sub Form_Initialize() End Sub Private Sub Form_Load() End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) End Sub Private Sub Form_Resize() End Sub Private Sub Form_Terminate() End Sub Private Sub Form_Unload (Cancel As Integer) End Sub 195

200 Κεφάλαιο 4 1) Μεταβλητές (Τύποι, χρήση, δήλωση, σύνταξη) 2) Πίνακες μεταβλητών 1) Μεταβλητές Μεταβλητές ονομάζονται εκείνες οι παράμετροι τις οποίες χρησιμοποιούμε για να αποθηκεύσουμε κάποια τιμή. Υπάρχουν εξ ορισμού διάφοροι τύποι μεταβλητών οι οποίοι χρησιμοποιούνται ανάλογα με τον τύπο των δεδομένων των οποίων επιθυμούμε να «αποθηκεύσουμε» την τιμή. Τι σημαίνουν όμως τα παραπάνω, και γιατί έχουμε τύπους μεταβλητών; Η απάντηση είναι απλή. Πρώτον διότι μπορούμε εύκολα να κατηγοριοποιήσουμε τα δεδομένα μας και δεύτερον για οικονομία μνήμης, άρα και για την αύξηση της ταχύτητας επεξεργασίας. Η σύνταξη των μεταβλητών είναι πολύ απλή υπόθεση. Φανταστείτε την εξής μαθηματική πράξη: Result = Η λέξη «Result» είναι μια μεταβλητή την οποία χρησιμοποιούμε για να αποθηκεύσουμε το αποτέλεσμα της παραπάνω πράξης. Result = X1 + X4 Σε αυτή την δήλωση (η οποία είναι στην ουσία μια εντολή αντικατάστασης) τόσο η Result όσο και οι X1, X4 είναι μεταβλητές. Ας υποθέσουμε ότι η τιμή της Χ1 ισούται με 12 (Χ1 = 12) ενώ η Χ4 ισούται με 5. Τότε η Result παίρνει αυτόματα την τιμή 17. Η παραπάνω δηλαδή έκφραση μπορεί να καταχωρίζει στην τιμή της Result οποιοδήποτε αποτέλεσμα της παραπάνω μαθηματικής πράξης. Άρα η τιμή που φέρει δεν είναι σταθερή αλλά μεταβλητή (ανάλογα με τα δεδομένα των Χ1 και Χ4). Για αυτό το λόγο οι Result, X1, X4 ονομάζονται μεταβλητές. Οι μεταβλητές μπορούν να καταχωρίσουν οποιαδήποτε τιμή (όχι μόνο αριθμητική). Για να καταλάβουμε ακριβώς τον τρόπο που δουλεύουν, θα δούμε τους τύπους των μεταβλητών που μπορούμε να χρησιμοποιήσουμε, καθώς και τα ορίσματα (τιμές) τα οποία δέχονται ανάλογα με τον τύπο. Τύπος Μέγεθος Επεξήγηση Όρισμα που δέχεται Byte 1 byte Μικρός ακέραιος ακέραιο αριθμό στο [0 255] Integer 2 bytes Ακέραιος ακέραιο αριθμό στο [ ] Long 4 bytes Μεγάλος ακέραιος ακέραιο αριθμό στο [ ] Single 4 bytes Πραγματικός αριθμός απλής ακρίβειας Πραγματικό αριθμό στο [ * *10-45] για αρνητικούς και [ *

201 *1038] για θετικούς. Double 8 bytes Πραγματικός αριθμός διπλής ακρίβειας Πραγματικό αριθμό στο [ * * ] για αρνητικούς και [ * *10308] για θετικούς. String 1 byte / χαρακτήρα Κείμενο Οτιδήποτε, αλλά το αναγνωρίζει ως κείμενο Variant 8 bytes Διάφοροι Όλους τους τύπους δεδομένων. Boolean 1 byte Λογικός True ή False Πώς όμως δηλώνουμε σε κάποια μεταβλητή τον τύπο τον οποίο θα ακολουθήσει; Η δήλωση κάθε μεταβλητής γίνεται με μια κωδική (δεσμευμένη από την Visual Basic) έκφραση. Ο τρόπος δήλωσης διαφέρει ανάλογα με το αν επιθυμούμε τη χρήση της τιμής κάποιας μεταβλητής «δημόσια» στο πρόγραμμά μας, ή μόνο «τοπικά». Στην πραγματικότητα υπάρχουν περισσότεροι τρόποι δήλωσης μεταβλητών από τις δύο βασικές που θα αναλύσουμε στην συνέχεια. Τοπική δήλωση: Dim Σύνταξη: Dim MyVariable As Τύπος Παραδείγματα: Dim MyName As Variant Dim MyCounter As Integer Dim Ok_Pressed As Boolean Dim X3, Y3, X4, Y4 As Double Παρατήρηση: Η Dim χρησιμοποιείται μέσα σε οποιαδήποτε κλήση συμβάντος, αλλά ποτέ έξω από αυτές. Η τιμή της μεταβλητής που δηλώνεται κατά αυτόν τον τρόπο κρατάει την τιμή της μόνο μέσα στην υπορουτίνα στην οποία δηλώνεται. Private Sub Command1_Click() Dim MyName As Variant MyName = George Print MyName End Sub Επιχειρώντας να εκτυπώσουμε την τιμή της παραπάνω μεταβλητής (MyName) από μια άλλη υπορουτίνα, διαπιστώνουμε ότι θα εκτυπωθεί ένα κενό, δηλαδή τίποτα. Αυτό συμβαίνει γιατί η μεταβλητή MyName δεν μπορεί να «κρατήσει» την τιμή που της δώσαμε έξω από την υπορουτίνα στην οποία δηλώθηκε. Private Sub Command2_Click() Print MyName End Sub 197

202 Δημόσια δήλωση: Public Σύνταξη: Public MyVariable As Τύπος Παραδείγματα: Public MyName As Variant Public MyCounter As Integer Public Ok_Pressed As Boolean Public X3, Y3, X4, Y4 As Double Παρατήρηση: Η Public χρησιμοποιείται μόνο στο τμήμα Declarations του κώδικα (Δηλώσεις). Δεν πρέπει δηλαδή να βρίσκεται μέσα σε κάποια υπορουτίνα. Η τιμή της μεταβλητής που δηλώνεται κατά αυτόν τον τρόπο κρατάει την τιμή της αναλλοίωτη σε όλο το πρόγραμμα, και εξαρτάται μόνο από την φόρμα που τη φέρει. Αν χρησιμοποιηθεί από οποιαδήποτε υπορουτίνα ή συνάρτηση του προγράμματος θα επιστρέψει την πραγματική τιμή που της δόθηκε. Γιατί όμως μια public μεταβλητή εξαρτάται από τη φόρμα που τη φέρει; Η μεταβλητή που δηλώνεται ως Public μπορεί πρακτικά να χρησιμοποιηθεί από οποιαδήποτε φόρμα του προγράμματος. Απλά για να χρησιμοποιηθεί από μια δεύτερη φόρμα δεν αρκεί το όνομά της, αλλά όπως είδαμε και με τις ιδιότητες, θα πρέπει να κληθεί με τον παρακάτω τρόπο (Έστω από τη Form2, ενώ η μεταβλητή ανήκει στην Form1) : Print Form1.MyName Για την ακρίβεια, όταν μια μεταβλητή δηλωθεί ως Public, τότε αυτομάτως δηλώνεται η ύπαρξή της και στην αναδιπλούμενη λίστα ιδιοτήτων της φόρμας (η οποία όπως είδαμε καλείται με το όνομα της φόρμας και έπειτα πατώντας την τελεία). Ας δούμε στη συνέχεια κάποιες προτάσεις δηλώσεων, συνοδευόμενες πλέον με σύνταξη εκχώρησης τιμής σε κάθε μεταβλητή. Θα θεωρήσουμε ότι οι μεταβλητές δηλώνονται ως τοπικές στο συμβάν κλικ ενός κουμπιού: Private Sub Command1_Click() Dim MyName As Variant Dim MyCounter As Integer Dim Pressed As Boolean Dim X3, Y3, X4, Y4 As Double MyName = "George" MyCounter = 12 Pressed = True X3 = Y3 = X4 = (X3 + Y3) / 2 Y4 = X3 - X4 End Sub Στο παραπάνω τμήμα κώδικα βλέπουμε ότι και η λέξη «True» (όπως και η «False») είναι επίσης δεσμευμένες από τη VB. Στην μεταβλητή MyName χρησιμοποιήσαμε εισαγωγικά για να εισάγουμε το κείμενο George. Αν δεν χρησιμοποιούσαμε εισαγωγικά, τότε η VB θα καταλάβαινε 198

203 (εσφαλμένα) ότι η λέξη George δεν είναι τίποτα άλλο από μια μεταβλητή. Η MyCounter, επειδή είναι δηλωμένη ως Integer aν έπαιρνε την τιμή «George» προφανώς θα προκαλούσε διακοπή της εκτέλεσης του προγράμματος λόγω λάθους (με ένα ενοχλητικό μήνυμα σφάλματος!). Γιατί; Διότι περιμένει ακέραια τιμή ως όρισμα, και μάλιστα από το πεδίο τιμών που προαναφέραμε. Αν ωστόσο της δίναμε την τιμή δεν θα επέστρεφε λάθος. Απλά θα στρογγυλοποιούσε τον αριθμό στον πλησιέστερο ακέραιο (στο 13). Η μεταβλητή Pressed, λόγω του ότι γνωρίζει επακριβώς τις τιμές που περιμένει (True ή False), μας καθοδηγεί έτσι ώστε να μην κάνουμε λάθος. Γράφοντας δηλαδή Pressed, πατώντας το «=» μας εμφανίζει δίπλα μια λίστα με τις επιλογές True και False μόνο, για να επιλέξουμε. Λάθη θα προέκυπταν και στις μεταβλητές που είναι δηλωμένες ως πραγματικές (απλής ή διπλής ακρίβειας) δηλαδή είτε Single είτε Double, εάν επιχειρούσαμε να καταχωρίσουμε σε αυτές κάτι πέρα από μια αριθμητική τιμή (που ανήκει στα προαναφερθέντα διαστήματα). Στις μεταβλητές Χ4 και Υ4 δεν δίνουμε απευθείας τιμές. Απλά συντάσσουμε μια μαθηματική παράσταση η οποία περιέχει μεταβλητές και αριθμούς σε οποιονδήποτε συνδυασμό, και την «αφήνουμε» να μας υπολογίσει το αποτέλεσμα. Πιθανές απορίες: 1. Πως επιλέγω κατάλληλο όνομα για μια μεταβλητή; 2. Είναι υποχρεωτική η δήλωση των μεταβλητών; (1). Οι μόνες αληθινές δεσμεύσεις που υπάρχουν για την επιλογή του ονόματος είναι: α) Να μην ξεκινάει το όνομα από σύμβολο ή αριθμό. β) Να μην είναι δεσμευμένη λέξη από την Visual Basic. Ωστόσο καλό είναι να υιοθετήσουμε κάποιο σκεπτικό επιλογής ονόματος, ώστε όταν συναντάμε την μεταβλητή να καταλαβαίνουμε και τον τύπο της. Για παράδειγμα μπορούμε να χρησιμοποιούμε πεζούς χαρακτήρες πριν το όνομα: Dim vmyname As Variant Dim imycounter As Integer Dim bopressed As Boolean Dim dx3, dy3, dx4, dy4 As Double Dim sinumber As Single Dim snameoffile As String. Dim lcounter As Long (2). Για να καταστήσουμε κάποια μεταβλητή «δημόσια» πρέπει οπωσδήποτε να τη δηλώσουμε. Για τις τοπικές μπορούμε να αποφύγουμε την δήλωση. Τότε όμως 199

204 θεωρούνται ως Variant (γενικού τύπου), καταλαμβάνουν αρκετή μνήμη, και δεν θυμόμαστε εύκολα πού τις χρησιμοποιούμε. Αν όμως έχουμε εισάγει (ή έχει εισαχθεί αυτόματα) την πρόταση Option Explicit στο τμήμα Declarations του κώδικα, τότε η απουσία δήλωσης οδηγεί σε σφάλμα. Γενικά θα πρέπει να θυμόμαστε τους εξής κανόνες κατά τη χρήση μεταβλητών: Α) Η μεταβλητή η οποία βρίσκεται αριστερά της «ισότητας» στην ουσία είναι αυτή στην οποία εκχωρείται το αποτέλεσμα (ή οτιδήποτε δώσουμε) το οποίο βρίσκεται στα δεξιά του «=». Χ1 = Χ2 * Υ2 * Χ3 / Χ Στην παραπάνω παράσταση το αποτέλεσμα της πράξης εκχωρείτε στην μεταβλητή Χ1. Β) Δεν ισχύει στις μεταβλητές η αλγεβρική ισότητα (κατά την καταχώριση τιμής), δηλαδή αν και η παρακάτω παράσταση αλγεβρικά είναι εσφαλμένη, Χ3 = Χ στην Visual Basic σημαίνει: Αύξησε την τιμή της μεταβλητής Χ3 κατά (το ίδιο ισχύει για οποιαδήποτε έκφραση όσο πολύπλοκη και αν είναι). Δηλαδή όπου το όνομα της μεταβλητής βρίσκεται και αριστερά και δεξιά της ισότητας, σημαίνει ότι η τιμή που θα καταχωρισθεί τελικώς στην μεταβλητή είναι συνάρτηση της προηγούμενης τιμής που κρατούσε. Χ1 = Χ1 = Χ2 * (Υ2 * Χ1 ) / (Χ Χ1) 2) Πίνακες Μεταβλητών Σε κάποιες διαδικασίες, χρειαζόμαστε ένα πλήθος μεταβλητών οι οποίες θα δέχονται ως όρισμα ιδίου τύπου δεδομένα. Σε κάποιες άλλες περιπτώσεις, μας είναι άγνωστο το πλήθος των μεταβλητών που θα απαιτηθούν. Υποθέστε ότι έχουμε κάποιο αρχείο το οποίο περιέχει συντεταγμένες, και θέλουμε να το διαβάσουμε και να καταχωρίσουμε κάθε τιμή από αυτό το αρχείο σε μια ξεχωριστή μεταβλητή. Όταν ο χρήστης «τρέχει» το πρόγραμμα, δεν γνωρίζει πόσο μεγάλο είναι το αρχείο που ανοίγει (πόσες γραμμές / records περιέχει), αλλά τον ενδιαφέρει να διαβάσει όλα τα δεδομένα. Προφανώς δεν θα μπορούσαμε να γράψουμε δηλώσεις για κάθε μεταβλητή (μπορεί να χρειαζόταν εκατομμύρια τέτοιες δηλώσεις!!!). Σε αυτές τις περιπτώσεις η λύση δίνεται με τη χρήση πινάκων μεταβλητών. Οι τύποι των πινάκων μεταβλητών, καθώς και ο τρόπος δήλωσής τους, είναι ο ίδιος με τις απλές μεταβλητές. Αυτό που αλλάζει είναι η σύνταξη και η χρήση της ίδιας της μεταβλητής πίνακα. Μοναδική εξαίρεση αποτελεί το γεγονός ότι η δήλωση πίνακα ως Public είναι εφικτή μόνο μέσα σε ένα Module. Επειδή όμως προς το παρόν δεν θα ασχοληθούμε με τη δημόσια δήλωση πίνακα, το ζήτημα αυτό θα το αντιμετωπιστεί σε επόμενο κεφάλαιο. 200

205 Παράδειγμα δήλωσης πίνακα με 65 στοιχεία: Dim MyAr(65) As Single Αυτό που κάνουμε εδώ είναι να προσδιορίσουμε μέσα σε παρένθεση το πλήθος των στοιχείων που επιθυμούμε. Ο MyAr είναι ένας μονοδιάστατος πίνακας στοιχείων. Μπορούμε να έχουμε n-διάστατους πίνακες, π.χ. Dim MyAr(65, 5, 4) As Single Στον προγραμματισμό απλών προβλημάτων θα δυσκολευόμασταν να αντιληφθούμε τι σημαίνει ένας πίνακας με γραμμές, στήλες και βάθος. Στην Visual Basic όμως φανταστείτε ότι μπορείτε να έχετε πολλές «διαστάσεις» ακόμα! Dim MyAr(65, 5, 4, 2, 12) As Single Πώς όμως χρησιμοποιούμε αυτά τα στοιχεία; Πώς γίνεται η σύνταξη αυτού του είδους των μεταβλητών; Όπως και στις απλές μεταβλητές, με μόνη διαφορά ότι θα πρέπει να «δείχνουμε» τη μεταβλητή στην οποία αναφερόμαστε. Παράδειγμα: Dim dx(50, 3) As Double dx(1, 2) = dx(10, 1) = dx(50, 3) = Δεν μπορούμε να ξεπεράσουμε τα όρια καμίας διάστασης από αυτές που έχουμε δηλώσει στην πρόταση Dim. Οι «δείκτες» μπορεί να είναι μόνο ακέραιοι αριθμοί. Τι γίνεται όμως αν δεν γνωρίζουμε το μέγεθος του πίνακα που θα απαιτηθεί από το πρόγραμμά μας; Σε αυτή την περίπτωση ο πίνακας δηλώνεται «σκέτος», δηλαδή χωρίς ορίσματα: Dim MyArray( ) As Single Αργότερα ο χρήστης μπορεί να επαναδιαστασιολογήσει (ReDim) τον πίνακα MyArray προσδιορίζοντας επακριβώς τις διαστάσεις του πίνακα με την βοήθεια μεταβλητών. ReDim MyArray(iNumber1, inumber2) [As Single] Χρησιμοποιούμε αγκύλες ( [ ] ) στον παραπάνω κώδικα για να επισημάνουμε το γεγονός ότι η δήλωση εντός των αγκυλών ΔΕΝ είναι πλέον υποχρεωτική. Αν όμως χρησιμοποιηθεί, δεν επιτρέπεται να επιφέρει την αλλαγή του τύπου του πίνακα διότι αυτή η ενέργεια θα οδηγούσε σε σφάλμα. Παρατήρηση: Χρησιμοποιούμε κάποιες μεταβλητές τις οποίες ονομάζουμε inumber1 και inumber2. Αυτό γίνεται για να καταδειχθεί ότι ως διάσταση ενός πίνακα δεν μπορεί να χρησιμοποιηθεί τίποτα πέρα από έναν ακέραιο αριθμό (Byte, Integer, Long). 201

206 Κεφάλαιο 5 Θα αναλύσουμε δύο διαφορετικούς τρόπους σύγκρισης, ή αλλιώς δύο διαφορετικά set εντολών. If Then Else (End If) Σύνταξη: If Συνθήκη Then Αυτό Else Άλλο Εντολές και τελεστές σύγκρισης Παράδειγμα: MyNum1 = 12 MyNum2 = 23 If MyNum1 > MyNum2 Then MsgBox Ο πρώτος είναι μεγαλύτερος! Else MsgBox O δεύτερος είναι μεγαλύτερος ή ίσος! Η παραπάνω σύνταξη των εντολών If...Then...Else αποτελεί την πιο απλή αλλά παράλληλα και την πλέον «αδύναμη» μορφή. Στην πραγματικότητα οι εντολές αυτές μπορούν να χρησιμοποιηθούν ποικιλοτρόπως και με χειρισμό περισσότερων συνθηκών. Πριν προχωρήσουμε όμως, ας δούμε τους τελεστές σύγκρισης. Τελεστής Επεξήγηση = Ίσο με > Μεγαλύτερο από < Μικρότερο από >= Μεγαλύτερο ή ίσο από =< Μικρότερο ή ίσο από <> Διαφορά από Στον παραπάνω πίνακα αναφερόμαστε στη σύγκριση του πρώτου ορίσματος σε σχέση με το δεύτερο (δηλαδή τη σύγκριση του ορίσματος που βρίσκεται αριστερά του τελεστή, σε σχέση με το όρισμα που βρίσκεται στα δεξιά). Σημείωση Όρισμα (argument): η τιμή που απαιτείται από μια συνάρτηση, εντολή, υπορουτίνα, κα, προκειμένου να γίνει κάποιος (υπο)λογισμός, π.χ. Cos(3.14), η τιμή 3.14 είναι το όρισμα της εσωτερικής συνάρτησης «συνημίτονο» MsgBox Ο πρώτος είναι μεγαλύτερος!, όπου το κείμενο που περιέχεται στα εισαγωγικά αποτελεί το όρισμα για τη συνάρτηση MsgBox και το οποίο θα εκτυπωθεί στην οθόνη ως αποτέλεσμα της εκτέλεσης της εντολής. 202

207 Yπάρχουν κάποιες σχέσεις οι οποίες μας επιτρέπουν να εξετάσουμε μια πιο πολύπλοκη συνθήκη. Ας υποθέσουμε ότι θέλουμε στο παραπάνω παράδειγμα να ελέγξουμε αν ο πρώτος αριθμός είναι μικρότερος ή μεγαλύτερος του δεύτερου και παράλληλα, αν ο πρώτος αριθμός είναι μικρότερος ή μεγαλύτερος του 10. Για να το πετύχουμε, θα πρέπει πιθανόν να χρησιμοποιήσουμε κάποια συνδετική λογική σχέση: Σχέση And Not Or Xor Επεξήγηση Να ισχύει η πρώτη και η δεύτερη (κτλ) συνθήκη Να μην ισχύει η συνθήκη Να ισχύει είτε η πρώτη είτε η δεύτερη (κτλ) συνθήκη Να ισχύει ή η πρώτη ή η δεύτερη (κτλ) αλλά μόνο η μία Η δομη πολλαπλής επιλογής Select Case Πολλές φορές θέλουμε να συγκρίνουμε την τιμή μιας αριθμητικής ή αλφαριθμητικής παράστασης με πολλές διαφορετικές τιμές και ανάλογα με την τιμή με την οποία είναι ίση να εκτελέσουμε και μια αντίστοιχη ομάδα εντολών. Η λειτουργία αυτή μπορεί να κωδικοποιηθεί όπως είδαμε με δομή If... Then... Εlse If. Όμως η VB διαθέτει άλλη μια δομή πολλαπλής επιλογής, τη δομή Select Case, με τη βοήθεια της οποίας οι κωδικοποιήσεις, στην ειδική αυτή περίπτωση, γίνονται πιο ευανάγνωστες. Η γενική μορφή της δομής είναι: Select Case παράσταση Case τιμή 1, τιμή 2 Εντολές Case Εlse τιμή 1,τιμή 2 Εντολές End Select Στην αρχή υπολογίζεται η τιμή της παράστασης και στη συνέχεια συγκρίνεται με κάθε τιμή της λίστας τιμών που ακολουθεί την πρώτη Case. Αν η τιμή της παράστασης βρεθεί ίση με μια από αυτές τις τιμές εκτελείται η πρώτη ομάδα εντολών και οι υπόλοιπες ομάδες αγνοούνται. Αν η τιμή της παράστασης δε βρεθεί ίση με κάποια από αυτές τις τιμές αγνοείται η πρώτη ομάδα εντολών και γίνεται έλεγχος με τις τιμές της δεύτερης Case κ.ο.κ.αν καμιά από τις τιμές των Case δεν είναι ίση με την τιμή της παράστασης εκτελούνται οι εντολές της ομάδας Case Εlse. Η ύπαρξη της Case Εlse μέσα στη δομή δεν είναι υποχρεωτική. 203

208 Κεφάλαιο 6 Βρόγχοι (επαναληπτικές διαδικασίες) Βρόγχοι στη Visual Basic ονομάζονται οι επαναληπτικές διαδικασίες που δημιουργούμε με σκοπό την εκτέλεση κάποιων τμημάτων κώδικα περισσότερες από μία φορές. Όλες οι επαναληπτικές διαδικασίες χαρακτηρίζονται από κάποια συνθήκη επανάληψης. Έτσι, υπάρχουν οι σταθερές επαναληπτικές διαδικασίες και οι μεταβλητές. Στη συνέχεια θα αναλύσουμε τους παραπάνω βρόγχους, ξεκινώντας από αυτόν που χρησιμοποιεί προκαθορισμένο κύκλο επαναλήψεων. For [Step] Next Χρησιμοποιείται για σταθερό κύκλο επαναλήψεων. Σύνταξη: For μεταβλητή = αρχή Το τέλος [Step βήμα] Κώδικας προς εκτέλεση Next μεταβλητή Θα συνεχίσουμε με τους βρόγχους μεταβλητής επαναληπτικότητας (επανάληψη βάση δυναμικής συνθήκης). Ουσιαστικά πρόκειται για ένα βρόγχο αλλά με παραλλαγές. Ας δούμε πρώτα την απλούστερη και πιο διαδεδομένη του μορφή. While Wend Χρησιμοποιείται για μεταβλητό κύκλο επαναλήψεων. Σύνταξη: While συνθήκη Κώδικας προς εκτέλεση Wend Εκτελεί ένα μεταβλητό κύκλο επαναλήψεων ανάλογα με τη συνθήκη. Do While / Until Loop Χρησιμοποιείται για μεταβλητό κύκλο επαναλήψεων. Σύνταξη: Do While συνθήκη Κώδικας προς εκτέλεση [Exit Do] Loop Σε αυτή την περίπτωση το μόνο που αλλάζει είναι ο τρόπος σύνταξης (Do Loop). Σαν αποτέλεσμα και τρόπο λειτουργίας είναι ακριβώς το ίδιο με το απλό While Wend. Έχει προστεθεί όμως δυνατότητα Exit Do για βίαιο τερματισμό του βρόγχου (κάτι αντίστοιχο με το Exit For). 204

209 Do Until συνθήκη Κώδικας προς εκτέλεση [Exit Do] Loop Στη σύνταξη του βρόγχου με αντικατάσταση του While με το Until, ο βρόγχος εκτελείται μέχρι να ικανοποιηθεί η συνθήκη. Παράδειγμα κώδικα με χρήση Do Until Loop Private Sub Command1_Click() q = 10 Do Until q >= 30 Debug.Print q q= q +1 Loop End Sub H διαδικασία σταματάει όταν το q φτάσει την τιμή 30. Αυτό που κάνει ο βρόγχος είναι να εκτελείται Ώσπου το q να φτάσει την επιθυμητή τιμή. Στους βρόγχους μεταβλητής επαναληπτικότητας, η τιμή της μεταβλητής που ελέγχουμε (ή οποιασδήποτε συνθήκης) μένει αναλλοίωτη. Δεν ισχύει αυτό που ισχύει για το βρόγχο For Next όπου το Next αλλάζει την τιμή της μεταβλητής που ελέγχει προσθέτοντάς της το βήμα. Στους βρόγχους με Loop ή Wend πρέπει ο χρήστης (ή κάποια άλλη διαδικασία) να ικανοποιήσει τη συνθήκη ελέγχου από τον βρόγχο. Οι παραπάνω Do Loop έχουν και εναλλακτικό τρόπο σύνταξης: Do Κώδικας προς εκτέλεση [Exit Do] Loop While συνθήκη Do Κώδικας προς εκτέλεση [Exit Do] Loop Until συνθήκη H συνθήκη πλέον ελέγχεται στο τέλος του βρόγχου και όχι στην αρχή. Αυτό το χαρακτηριστικό δίνει μεγάλη ευελιξία στην χρήση των Do Loop βρόγχων, αφού επιτρέπει τον κώδικα εντός του βρόγχου να εκτελεστεί τουλάχιστον μια φορά, και έπειτα να γίνει o έλεγχος κατά πόσον ικανοποιείται η συνθήκη. Υποθέστε ότι σας ζητείται κάποιος κωδικός ασφαλείας για να εισέλθετε σε ένα σύστημα. Με τον τρόπο αυτό, σας δίνεται η ευκαιρία να εισάγεται έναν κωδικό και εάν δεν είναι ο σωστός, τότε να σας ξαναζητηθεί. Private Sub Command1_Click() Do MyAnswer = InputBox("Τύπωσε τον κωδικό εισόδου", "Έλεγχος ασφαλείας") Loop Until MyAnswer = "LetMeIn!" MsgBox "Καλώς ήρθατε!" End Sub Private Sub Command1_Click() Do MyAnswer = InputBox("Τύπωσε τον κωδικό εισόδου", "Έλεγχος ασφαλείας") Loop While MyAnswer <> "LetMeIn!" MsgBox "Καλώς ήρθατε!" End Sub Ta παραπάνω προγράμματα κάνουν ακριβώς το ίδιο πράγμα!!! 205

210 Κεφάλαιο 7 Γραφικά Στους υπολογιστές οι εικόνες, τα εικονίδια, τα σχήματα, τα σχέδια και τα διαγράμματα χαρακτηρίζονται με τον όρο γραφικά (graphics). Τα γραφικά αποτελούν απαραίτητο στοιχείο κάθε σύγχρονης εφαρμογής, ανεξάρτητα από το αν η εικόνα αποτελεί ή όχι το θεματικό της αντικείμενο. Από τη φύση του ο άνθρωπος μπορεί να αντλήσει πολύ πιο γρήγορα και εύκολα τις πληροφορίες που απεικονίζονται με γραφικό τρόπο, από ότι τις πληροφορίες που περιέχονται σε ένα κείμενο ή σε έναν πίνακα αριθμών. Η VB διαθέτει δύο διαφορετικούς τρόπους για τη δημιουργία γραφικών. Στον έναν τρόπο χρησιμοποιούνται τα εργαλεία γραφικών της παλέτας εργαλείων ενώ στον άλλο χρησιμοποιούνται οι μέθοδοι γραφικών της γλώσσας προγραμματισμού. Το ποιος από τους δύο τρόπους θα χρησιμοποιηθεί, εξαρτάται από το τι ακριβώς θέλουμε να πετύχουμε. Κάποια απλά γραφικά (γραμμές, ορθογώνια, κύκλους, ελλείψεις κλπ) μπορούμε να τα "ζωγραφίσουμε" εξαρχής πάνω σε μια φόρμα κατά τη δημιουργία της διεπαφής, χρησιμοποιώντας τα εργαλεία γραφικών. Έτσι, χωρίς να γράψουμε καθόλου κώδικα βλέπουμε το τελικό οπτικό αποτέλεσμα. Κάποια άλλα γραφικά, τα οποία είναι πιο σύνθετα και μπορούν να περιγραφούν μόνον από αλγορίθμους ή για τα οποία υπάρχει η απαίτηση να εμφανιστούν κατά τη διάρκεια εκτέλεσης του προγράμματος ως εφέ, επιβάλλεται να δημιουργηθούν από μεθόδους γραφικών, που καλούνται μέσα από κώδικα προγράμματος. Γραφικά μπορούμε να δημιουργήσουμε μέσα σε μια φόρμα ή μέσα σε ένα πλαίσιο εικόνας χρησιμοποιώντας τα εργαλεία ή/και τις μεθόδους γραφικών. Επίσης, μπορούμε να εκτυπώσουμε γραφικά στον εκτυπωτή, αξιοποιώντας τις μεθόδους γραφικών που υποστηρίζει το ειδικό αντικείμενο Pr i nter. Εργαλεία γραφικών Όπως έχουμε ήδη δει στο μάθημα 4, τα εργαλεία γραφικών του περιβάλλοντος εργασίας της VB είναι: το εργαλείο "γραμμή" (line), το εργαλείο "γεωμετρικό σχήμα" (shape), το εργαλείο "εικόνα" (image) και το εργαλείο "πλαίσιο εικόνας" (picture box). Με το εργαλείο "γραμμή" σχεδιάζουμε ευθύγραμμα αρχής και τέλους τμήματα. Χαρακτηριστικές οπτικές ιδιότητες των ευθύγραμμωντμημάτων είναι οι: XI, Υ1 και Χ2, Υ2: Οι συντεταγμένες του σημείου αρχής (x1,y1) και οι συντεταγμένες του σημείου τερματισμού (x2,y2). 206

211 BorderWidth: Το πάχος της γραμμής. BorderStyle: Το είδος της γραμμής, όταν το πάχος της έχει τιμή 1, με τιμές: Οι συντεταγμένες αρχής και τέλους 0 - Transparent Διαφανής 1 - Solid Συμπαγής 2 - Dash Διακεκομμένη 3 - Dot Με κουκκίδες 4 - Dash-Dot Διακεκομμένη με κουκκίδες Είδη γραμμής BorderColor: To χρώμα της γραμμής. DrawMode: Ο τρόπος σχεδίασης. Η ιδιότητα αυτή δέχεται 16 διαφορετικές τιμές καικαθορίζει τον τρόπο, με τον οποίο εμφανίζονται και αλληλεπιδρούν οι γραμμές, και γενικάόλα τα γραφικά, που δημιουργούνται πάνω στην περιοχή σχεδίασης, με αυτά που έχουν σχεδιαστεί ήδη. Έτσι, η εξορισμού τιμή της DrawMode (13-Copy Pen (Default)) σχεδιάζει πάνω από τα γραφικά που υπάρχουν ήδη, με το χρώμα που ορίζει η τιμή της ιδιότητας ForeColor του αντικειμένου που περιγράφει την περιοχή σχεδίασης, η τιμή 6-lnvert αντιστρέφει το χρώμα, ενώ άλλες τιμές της DrawMode συνδυάζουν τα χρώματα με διάφορους τρόπους και επιτρέπουν τη δημιουργία οπτικών εφέ. BorderColor: To χρώμα της γραμμής. DrawMode: Ο τρόπος σχεδίασης. Η ιδιότητα αυτή δέχεται 16 διαφορετικές τιμές καικαθορίζει τον τρόπο, με τον οποίο εμφανίζονται και αλληλεπιδρούν οι γραμμές, και γενικά όλα τα γραφικά, που δημιουργούνται πάνω στην περιοχή σχεδίασης, με αυτά που έχουν σχεδιαστεί ήδη. Έτσι, η εξορισμού τιμή της DrawMode (13-Copy Pen (Default)) σχεδιάζει πάνω από τα γραφικά που υπάρχουν ήδη, με το χρώμα που ορίζει η τιμή της ιδιότητας ForeColor του αντικειμένου που περιγράφει την περιοχή σχεδίασης, η τιμή 6-lnvert αντιστρέφει το χρώμα, ενώ άλλες τιμές της DrawMode συνδυάζουν τα χρώματα με διάφορους τρόπους και επιτρέπουν τη δημιουργία οπτικών εφέ. 207

212 Με το εργαλείο "γεωμετρικό σχήμα", ανάλογα με την τιμή της ιδιότητας Shape, σχεδιάζουμε ορθογώνια, ή παράγωγα των ορθογωνίων, κύκλους, ελλείψεις κ. ά. Συγκεκριμένα, η ιδιότητα Shape μπορεί να πάρει τις τιμές: 0 - Rectangle Ορθογώνιο 1 - Square Τετράγωνο 2 - Oval Έλλειψη 3 - Circle Κύκλος 4 - Rounded Rectangle Ορθογώνιο με στρογγυλεμένες γωνίες 5 - Rounded Square Τετράγωνο με στρογγυλεμένες γωνίες Το εργαλείο γεωμετρικό σχήμα" Γεωμετρικά σχήματα Τα γεωμετρικά σχήματα χαρακτηρίζονται από τις οπτικές ιδιότητες BorderWidth, BorderStyle, BorderColor, DrawMode, τις οποίες ήδη μελετήσαμε στο εργαλείο "γραμμή". Επιπλέον, τα γεωμετρικά σχήματα έχουν και τις ιδιότητες: BackStyle: Είδος φόντου, που καθορίζει αν το φόντο του εσωτερικού του σχήματος θα είναι γεμισμένο με χρώμα ή διαφανές. Συγκεκριμένα, η ιδιότητα μπορεί να πάρει τις τιμές: 0 - Transparent Διαφανές 1 - Opaque Γεμισμένο με χρώμα 2 Filistyle: Είδος γεμίσματος. Καθορίζει τον τρόπο με τον οποίο θα γραμμοσκιαστεί το εσωτερικό του σχήματος. 0 - Solid Συμπαγές 1 - Transparent Διαφανές 2 - Horizontal Line Με οριζόντιες γραμμές 3 - Vertical Line Με κατακόρυφες γραμμές 4 - Upward Diagonal Με διαγώνιες γραμμές προς τα πάνω 5 - Downward Diagonal Με διαγώνιες γραμμές προς τα κάτω 6 - Cross Με σταυρωτές γραμμές 7 - Diagonal Cross Με διαγώνιες σταυρωτές γραμμές BackColor, FillColor: Χρώμα φόντου και χρώμα γραμμοσκίασης, αντίστοιχα. Η σχεδίαση με μεθόδους γραφικών Η σχεδίαση με μεθόδους γραφικών μπορεί να γίνει στο εσωτερικό μιας φόρμας, στο εσωτερικό ενός πλαισίου εικόνας, στο χαρτί του εκτυπωτή. Οι πιο απλές μέθοδοι γραφικών είναι οι ακόλουθες: Pset: αποδίδει το χρώμα που ορίζουμε σε συγκεκριμένο σημείο (point) του αντικειμένου στο οποίο αναφέρεται (φόρμα, πλαίσιο εικόνας, εκτυπωτής). Η σύνταξη της είναι: αντικείμενο.pset Step (x, y) χρώμα Line: σχεδιάζει γραμμές και ορθογώνια σχήματα στο εσωτερικό του αντικειμένου στο οποίο αναφέρεται (φόρμα, πλαίσιο εικόνας, εκτυπωτής). Η σύνταξη της είναι: αντικείμενο. Line Step (x1, y1) Step f(x2, y2), χρώμα, BF 208

213 Circle:σχεδιάζει καμπυλόγραμμα σχήματα (κύκλους, ελλείψεις, τόξα) στο εσωτερικό του αντικειμένου στο οποίο αναφέρεται (φόρμα, πλαίσιο εικόνας, εκτυπωτής). Η σύνταξη της είναι: αντικείμενο. Circle Step (x, y), ακτίνα, χρώμα, αρχή, τέλος, λόγος_μορφής Cls: καθαρίζει όλα τα γραφικά και το κείμενο, τα οποία έχουν δημιουργηθεί πάνω σε μια φόρμα ή ένα πλαίσιο εικόνας με μεθόδους σχεδίασης κατά την εκτέλεση της εφαρμογής. Η σύνταξη της είναι: αντικείμενο. Cls Σε όλες τις μεθόδους, η αναφορά του ονόματος του αντικειμένου σχεδίασης είναι προαιρετική. Αν απουσιάζει το αντικείμενο, η μέθοδος αναφέρεται στη φόρμα, στην οποία υπάρχει ο αντίστοιχος κώδικας. Επίσης, προαιρετικές είναι και οι αναφορές κάποιων από τις παραμέτρους, για παράδειγμα της παραμέτρου χρώμα, λόγος_μορφής κ.ά. Όταν έχει παραλειφθεί μια παράμετρος, ενώ δεν παραλείπονται οι παράμετροι που την ακολουθούν, πρέπει να γίνεται δέσμευση της θέσης της με ένα κόμμα. Τέλος, προαιρετική είναι και η χρήση της κωδικής λέξης Step (βήμα). Αν υπάρχει η κωδική λέξη Step η σχεδίαση αρχίζει με συντεταγμένες σχετικές ως προς το σημείο που έχει γίνει η τελευταία σχεδίαση. Σχεδίαση σημείων Για να σχεδιάσουμε ένα σημείο σε ένα αντικείμενο πρέπει να αναφέρουμε υποχρεωτικά τις συντεταγμένες του (χ, γ). Η δήλωση του χρώματος, όπως έχει αναφερθεί, είναι προαιρετική. Αν η παράμετρος χρώμα δεν είναι συμπληρωμένη, χρησιμοποιείται ως χρώμα αυτό που έχει δηλωθεί στην ιδιότητα ForeColor του αντικειμένου (φόρμας, πλαισίου εικόνας, εκτυπωτή) στο εσωτερικό του οποίου γίνεται η σχεδίαση. Παράδειγμα. Σε μια φόρμα τοποθετούμε ένα πλαίσιο εικόνας με το όνομα Canvas και δύο πλήκτρα. Το ένα πλήκτρο, με το όνομα PaintLine, σχεδιάζει μια γραμμή. Το άλλο πλήκτρο, με το όνομα ClearCanva, διαγράφει το περιεχόμενο του πλαισίου εικόνας. Σχεδίαση πλάγιας γραμμής από συστοιχία Ο κώδικας για το πλήκτρο ClearCanva είναι: PrivateSub ClearCanvas_Click() Canvas.Cls End Sub 209

214 Ο κώδικας για το πλήκτρο Paintline μπορεί να γραφεί ως: PrivateSubPaintline_CIick() Dim i As Long For i = 0 To 5000 Canvas.PSet (i, i), vbbiack Next End Sub ή με τη χρήση της κωδικής λέξης Step στη μέθοδο Pset ως: Private Sub PaintLine_CI ick() Dim i As Long Canvas.PSet (0, 0) For i = 1 To 5000 Canvas. PSet Step (1, 1), vbblack Next End Sub Και μόνο με τη μέθοδο Pset μπορούμε να δημιουργήσουμε όλες τις υπορουτίνες σχεδίασης γραμμών και σχημάτων και να σχεδιάσουμε οποιαδήποτε εικόνα σε ένα αντικείμενο σχεδίασης. Σχεδίαση ευθύγραμμων τμημάτων, τετραγώνων και ορθογώνιων Για να σχεδιάσουμε ένα ευθύγραμμο τμήμα σε ένα αντικείμενο σχεδίασης καθορίζουμε, προαιρετικά τις συντεταγμένες (x1,y1) του σημείου αρχής και υποχρεωτικά τις συντεταγμένες (x2,y2) του σημείου τερματισμού. Αν παραλείψουμε το σημείο αρχής, η VB θεωρεί ότι αυτό είναι το τρέχον σημείο γραφής επί του αντικειμένου σχεδίασης, που προσδιορίζεται μέσω των ιδιοτήτων του Currentx και CurrentY (τρέχουσα συντεταγμένη χ και τρέχουσα συντεταγμένη y) ή από την τελευταία μέθοδο γραφικών, που έχουμε χρησιμοποιήσει. Διαφορετικά, η σχεδίαση της γραμμής ξεκινάει από την πάνω αριστερή γωνία του αντικειμένου. Όπως και με τη σχεδίαση σημείων, έτσι και με τη σχεδίαση γραμμών, αν η παράμετρος χρώμα δεν είναι συμπληρωμένη, χρησιμοποιείται ως χρώμα αυτό που έχει δηλωθεί στην ιδιότητα ForeColor του αντικειμένου (φόρμας, πλαισίου εικόνας, εκτυπωτή) στο εσωτερικό του οποίου γίνεται η σχεδίαση. Επίσης, το πάχος της γραμμής καθορίζεται από την ιδιότητα DrawWidth του αντικειμένου σχεδίασης, το είδος της γραμμής από την ιδιότητα του DrawStyle και ο τρόπος σχεδίασης από την ιδιότητα DrawMode. Αν χρησιμοποιήσουμε την κωδική λέξη Step του σημείου αρχής, δηλώνουμε ότι οι συντεταγμένες του ορίζονται σε σχέση με την τρέχουσα θέση (Currentx, CurrentY). Αν χρησιμοποιήσουμε την κωδική λέξη Step του σημείου τερματισμού, δηλώνουμε ότι οι συντεταγμένες του ορίζονται σε σχέση με το σημείο αρχής. Σημείωση: Από το παράθυρο επισκόπησης αντικειμένων (Object Browser) μπορούμε να δούμε τις εσωτερικές σταθερές που έχουν οριστεί για τις τιμές των ιδιοτήτων: DrawWidth, DrawStyle, DrawMode. 210

215 Παράδειγμα. Οι εντολές: Line (500, 0)-(500, 500), vbblue Line (0, 500)-(500, 500), vbred σχεδιάζουν στη φόρμα (αφού δεν αναφέρεται όνομα αντικειμένου) μια οριζόντια μπλε γραμμή και μια κατακόρυφη κόκκινη γραμμή αντίστοιχα. Αν η εντολή: Line -Step(500, 500), vbgreen είναι η πρώτη εντολή σχεδίασης, σχεδιάζει μια πλάγια πράσινη γραμμή στη φόρμα, αρχίζοντας από το πάνω αριστερό σημείο της. Την ίδια λειτουργία πραγματοποιούν και οι εντολές: Me.ForeCoIor=vbGreen PSet (0, 0) Line -Step(500, 500) Για να σχεδιάσουμε ένα ορθογώνιο σχήμα σε ένα αντικείμενο ακολουθούμε τα βήματα που αφορούν το σχεδιασμό γραμμής και συμπληρώνουμε τη σύνταξη με την παράμετρο Β (Box). Παράδειγμα. Η εντολή: αντικείμενο. Line (χ1, y1) - (χ2, y2),, Β είναι ισοδύναμη με το σύνολο των εντολών: αντικείμενο.line (χ1, y1) - (χ2, y1) αντικείμενο.line (χ2, y1) - (χ2, y2) αντικείμενο.line (χ2, y2) - (χ1, y2) αντικείμενο.line (χ1, y2) - (χ1, y1) Μαζί με την παράμετρο Β μπορούμε να χρησιμοποιήσουμε, προαιρετικά, και την παράμετρο F (Fill). Χε αυτήν την περίπτωση το εσωτερικό του ορθογώνιου χρωματίζεται με το ίδιο χρώμα που χρησιμοποιείται για τις πλευρές. Παράδειγμα. Η εντολή: Line (2000, 500)-Step(500, 500),, Β σχεδιάζει χρησιμοποιώντας το χρώμα, που καθορίζει η ιδιότητα ForeColor της φόρμας,ένα τετράγωνο του οποίου η μια κορυφή βρίσκεται στο σημείο (2000, 500) και το οποίο έχει μήκος πλευράς 500. Για να σχεδιαστεί το ίδιο τετράγωνο με χρωματισμένο το εσωτερικό του, η εντολή πρέπει να γραφτεί ως εξής: Line (2000, 500)-Step(500, 500),, BF 211

216 Σχεδίαση κύκλων, ελλείψεων, τόξων και τομέων Για τη σχεδίαση ενός κύκλου πρέπει να καθορίσουμε, υποχρεωτικά, τις συντεταγμένες (x,y) του κέντρου του και το μήκος της ακτίνας του. Αν χρησιμοποιήσουμε την κωδική λέξη Step του σημείου αρχής, δηλώνουμε ότι οι συντεταγμένες του ορίζονται σε σχέση με την τρέχουσα θέση (Currentx, CurrentY). Στη γεωμετρία για τη σχεδίαση μιας έλλειψης χρειάζεται η αναφορά του κέντρου συμμετρίας της και τα μήκη του μεγάλου και του μικρού άξονα της. Στη μέθοδο Circle η παράμετρος ακτίνα αντιστοιχεί στο μεγάλο άξονα. Το μήκος της ακτίνας του μικρού άξονα υπολογίζεται διαιρώντας την ακτίνα με το λόγο_μορφής (aspect ratio). Αν ο λόγος_μορφής έχει τιμή μικρότερη του 1, η ακτίνα είναι η ακτίνα του χ-άξονα και η έλλειψη εκτείνεται κατά μήκος του οριζόντιου άξονα, ενώ αν ο λόγος έχει τιμή μεγαλύτερη ή ίση με 1 η ακτίνα είναι η ακτίνα του y-άξονα και η έλλειψη εκτείνεται κατά μήκος του κατακόρυφου άξονα. Αν δεν υπάρχει η κωδική λέξη Step, το ζευγάρι (χ, y) είναι οι απόλυτες συντεταγμένες του άξονα συμμετρίας, ενώ αν υπάρχει είναι οι σχετικές του συντεταγμένες. Παράδειγμα. Δείγματα λόγου μορφής Η εντολή: Circle (3000, 1000), 750 σχεδιάζει έναν κύκλο με κέντρο το σημείο (3000, 1000) και ακτίνα 750. Επίσης, οι εντολές: Circle (1000, 1000), 750,,,,1/2 Circle (2500, 1000), 750,,,, 2 σχεδιάζουν την αριστερή και τη δεξιά έλλειψη, αντίστοιχα, της εικόνας. Με τη μέθοδο Circle μπορούμε να σχεδιάσουμε τόξα και τομείς κύκλων ή ελλείψεων. Σε αυτήν την περίπτωση πρέπει να συμπληρώσουμε τις παραμέτρους αρχή και τέλος που καθορίζουν τη γωνία από την οποία θα αρχίσει και τη γωνία στην οποία θα τελειώσει, αντίστοιχα, η σχεδίαση της έλλειψης ή του κύκλου. Οι γωνίες πρέπει να είναι εκφρασμένες σε ακτίνια και οι τιμές τους πρέπει να είναι μεταξύ -2π και 2π. Η μέτρηση των γωνιών αρχίζει από το δεξιότερο σημείο του κύκλου και η φορά διαγραφής τους είναι αντίθετη της φοράς κίνησης των δεικτών του ρολογιού. Αυτό έχει κάποια δόση ασυμφωνίας με τα μαθηματικά, μια και το σημείο (0,0) βρίσκεται στην πάνω αριστερή γωνία, αλλά βολεύει γιατί με αυτή τη φορά έχουμε συνηθίσει να προσανατολιζόμαστε στον τριγωνομετρικό κύκλο. Παράδειγμα. Το τόξο που σχεδιάζεται με την εντολή: Circle (3500, 2500), 1200,, , 0 είναι το κάτω ημικύκλιο, ενώ το τόξο που σχεδιάζεται με την εντολή: Circle (3500, 2500), 1200,, 0, είναι το πάνω ημικύκλιο. 212

217 Αν η τιμή ενός άκρου του τόξου είναι αρνητική, σχεδιάζεται και η ακτίνα που συνδέει το άκρο με το κέντρο. Αν και τα δυο άκρα έχουν αρνητικές τιμές, σχεδιάζονται και οι δυο ακτίνες και το σχήμα που προκύπτει είναι ένας κυκλικός ή ένας ελλειπτικός τομέας. Παράδειγμα. Το τμήμα προγράμματος: Dim π, r As Single3 π = 4 * Atn(1) r = 600 FillColor = vbyellow FillStyle = vbsolid Circle (1250,1300), r Circle (1000,1000), r/4,, π, 0 Circle (1500,1000), r/4,, π, 0 Circle (1250,1300), r/2,, 5/4*π, 7/4*π σχεδιάζει ένα συνεσταλμένο χαρούμενο προσωπάκι. Επίσης, το τμήμα προγράμματος: Dim 8, r As Single π = 4 * Atn(1) r = 600 FillStyle = vbsolid FillColor = vbyel low Circle (1500, 1000), r,, -π/8, -15*π/8 FillColor = vbwhite Circle (1500, 1000-r/3), r/10 σχεδιάζει το γνωστό "πραγματευτή", τον packman Τέλος, το τμήμα προγράμματος: Dim π, r As Single Line (1000, 600)-(1500, 600) Circle (1500, 1000), r,, -3*π/2,-π/2) Circle (2190, 1200-r/3), r/10 Line (1000, 1400)-(1500, 1400) Line (2250, 1000)-(2500, 1000) σχεδιάζει μια πύλη NAND. Διαχείριση χρώματος Eίδαμε ότι τα χρώματα μπορούμε να τα αναπαραστήσουμε ως δεκαεξαδικούς αριθμούς. Επίσης, είδαμε ότι υπάρχουν κάποιες εσωτερικές σταθερές που αντιστοιχούν στα χρώματα. Για τον ακριβή καθορισμό του χρώματος η VB διαθέτει δύο συναρτήσεις, την RGB και την QBColor. Η συνάρτηση RGB (red, green, blue) To όνομα της συνάρτησης παράγεται από τα αρχικά των λέξεων Red (κόκκινο), Green (πράσινο) και Blue (μπλε). Απαιτεί τρία ορίσματα με τιμές από 0-255, που καθορίζουν τη συμμετοχή των χρωμάτων κόκκινου, πράσινου και μπλε στη δημιουργία του επιθυμητούχρώματος. Το κάτω όριο 0 υποδηλώνει την έλλειψη του αντίστοιχου 213

218 χρώματος, ενώ το πάνω όριο 255 υποδηλώνει τη μέγιστη δυνατή συμμετοχή του. Η συνάρτηση επιστρέφει ένα μεγάλο ακέραιο ο οποίος αντιπροσωπεύει την τιμή του χρώματος. Η συνάρτηση QBColor (χρώμα) Η συνάρτηση αυτή δέχεται ως παράμετρο έναν ακέραιο από 0 έως 15, ο οποίος αντιστοιχεί σε ένα από τα 16 χρώματα που χρησιμοποιούσε η QuickBasic (πρόγονος της VB) και επιστρέφει τον αντίστοιχο κωδικό του RGB χρώματος. Συγκεκριμένα, οι τιμές που δέχεται στην παράμετρο χρώμα η QBColor και τα αντίστοιχα χρώματα είναι: 0 Μαύρο 8 Γκρι 1 Μπλε 9 Ανοιχτό μπλε 2 Πράσινο 10 Ανοιχτό 3 Κυανό 11 Ανοιχτό κυανό 4 Κόκκινο 12 Ανοιχτό 5 Μωβ 13 Ανοιχτό μωβ 6 Κίτρινο 14 Ανοιχτό κίτρινο 7 Άσπρο 15 Έντονο άσπρο Η μέθοδος Point Η μέθοδος Ροint επιστρέφει την RGB τιμή του χρώματος ενός συγκεκριμένου σημείου (point). Η γενική μορφή της μεθόδου είναι: αντικείμενο.ροint(x,y) Αν το σημείο που καθορίζουν οι συντεταγμένες χ, y βρίσκεται εκτός του αντικειμένου, η μέθοδος επιστρέφει την τιμή -1 Η υπορουτίνα: Private Sub Canvas_MouseDown(Button As Integer, _ Shift As Integer, X As Single, Y As Single Sample. BackColor = Canvas.Point(X, Y) End Sub με κάθε κλικ του ποντικιού πάνω στο πλαίσιο εικόνας Canvas, λαμβάνει δείγμα χρώματος και το παρουσιάζει ως χρώμα υποβάθρου στο πλαίσιο εικόνας Sample. Canvas Sample Οι ιδιότητες AutoRedraw και ClipControls Κάθε γραφικό που δημιουργείται με χρήση μεθόδων γραφικών στη φόρμα ή στο πλαίσιο εικόνας, αν καλυφθεί προσωρινά από ένα άλλο αντικείμενο θα χαθεί. Το ίδιο συμβαίνει αν ελαχιστοποιήσουμε μια φόρμα που περιέχει γραφικά και στη συνέχεια την επαναφέρουμε στο κανονικό της μέγεθος. Το πρόβλημα μπορούμε να το λύσουμε με το συμβάν Paint και να ξαναδημιουργήσουμε την εικόνα στην οθόνη. Ωστόσο, η VB προσφέρει μια πιο απλή 214

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

ΠΡΟΣΟΜΟΙΩΣΗ ΚΥΚΛΩΜΑΤΩΝ ΤΡΙΦΑΣΙΚΩΝ ΚΥΚΛΟΜΕΤΑΤΡΟΠΕΩΝ ΓΕΦΥΡΑΣ 6 ΚΑΙ 12 ΠΑΛΜΩΝ ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΑΒΑΛΑΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΠΡΟΣΟΜΟΙΩΣΗ ΚΥΚΛΩΜΑΤΩΝ ΤΡΙΦΑΣΙΚΩΝ ΚΥΚΛΟΜΕΤΑΤΡΟΠΕΩΝ ΓΕΦΥΡΑΣ 6 ΚΑΙ 12 ΠΑΛΜΩΝ ΣΠΟΥΔΑΣΤΡΙΑ

Διαβάστε περισσότερα

ΤΕΙ ΚΑΒΑΛΑΣ 2012. 1.1 Εισαγωγή Αντικείμενο πτυχιακής εργασίας.σελ. 2. 1.2 Περιεχόμενα εγχειριδίου Αναφοράς Προγραμμάτων.. σελ. 3

ΤΕΙ ΚΑΒΑΛΑΣ 2012. 1.1 Εισαγωγή Αντικείμενο πτυχιακής εργασίας.σελ. 2. 1.2 Περιεχόμενα εγχειριδίου Αναφοράς Προγραμμάτων.. σελ. 3 1 ΠΕΡΙΕΧΟΜΕΝΑ 1.1 Εισαγωγή Αντικείμενο πτυχιακής εργασίας.σελ. 2 1.2 Περιεχόμενα εγχειριδίου Αναφοράς Προγραμμάτων.. σελ. 3 1.3 Παράδειγμα τριφασικού επαγωγικού κινητήρα..σελ. 4-9 1.4 Σχεδίαση στο Visio

Διαβάστε περισσότερα

Μέθοδοι Ελέγχου Ηλεκτρικών Κινητήρων Σ.Ρ.

Μέθοδοι Ελέγχου Ηλεκτρικών Κινητήρων Σ.Ρ. Μέθοδοι Ελέγχου Ηλεκτρικών Κινητήρων Σ.Ρ. Ευθυμίου Σωτήρης Δέδες Παναγιώτης 26/06/2014 Εισαγωγή Σκοπός αυτής της παρουσίασης είναι η συνοπτική περιγραφή τριών διαφορετικών μεθόδων ελέγχου κινητήρων Σ.Ρ.

Διαβάστε περισσότερα

3.2.1 Χαρακτηριστικά & δυνατότητες προσομοίωσης Οθόνη προσομοίωσης κυματομορφών.29

3.2.1 Χαρακτηριστικά & δυνατότητες προσομοίωσης Οθόνη προσομοίωσης κυματομορφών.29 ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΑΒΑΛΑΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ Προσομοίωση κυκλωμάτων κινητήριων συστημάτων επαγωγικού κινητήρα με στατικό έλεγχο

Διαβάστε περισσότερα

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

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010 Τμήμα Πληροφορικής & Επικοινωνιών Τομέας Υπολογιστικών Τεχνικών & Συστημάτων Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010 Ιωάννης Γεωργουδάκης - Πάρις Μαστοροκώστας Σεπτέμβριος 2011 ΠΕΡΙΕΧΟΜΕΝΑ

Διαβάστε περισσότερα

Αναπαραγωγή με αρχεία ήχου

Αναπαραγωγή με αρχεία ήχου Αναπαραγωγή με αρχεία ήχου Ανοίγει η παρουσίαση και εμφανίζεται η διαφάνεια τίτλου, "Πειράματα με αρχεία ήχου". Άσκηση 1: Εισαγωγή ήχου για συνεχή αναπαραγωγή Βήμα 1: Εισαγωγή ήχου Στη διαφάνεια 1, με

Διαβάστε περισσότερα

Ελέγξτε την ταινία σας

Ελέγξτε την ταινία σας Ελέγξτε την ταινία σας Σε αυτές τις ασκήσεις, θα κάνετε εισαγωγή μιας ταινίας και θα χρησιμοποιήσετε τις επιλογές που παρουσιάστηκαν στο μάθημα. Άσκηση 1: Εισαγωγή αρχείου ταινίας 1. Κάντε κλικ στη μικρογραφία

Διαβάστε περισσότερα

Διατάξεις εκκίνησης κινητήρων ΣΡ

Διατάξεις εκκίνησης κινητήρων ΣΡ Διατάξεις εκκίνησης κινητήρων ΣΡ Η διάταξη ελέγχου και προστασίας του κινητήρα ΣΡ πρέπει: 1. Να προστατεύει τον κινητήρα από βραχυκυκλώματα στην ίδια τη διάταξη προστασίας 2. Να προστατεύει τον κινητήρα

Διαβάστε περισσότερα

ΓΕΝΙΚΟ ΝΟΣΟΚΟΜΕΙΟ ΡΟΔΟΥ ΤΜΗΜΑ ΟΡΓΑΝΩΣΗΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΦΑΡΜΟΓΗ ΔΙΑΧΕΙΡΙΣΗΣ ΝΟΣΗΛΕΙΑΣ ΑΣΘΕΝΩΝ ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΕΚΔΟΣΗ 1.0

ΓΕΝΙΚΟ ΝΟΣΟΚΟΜΕΙΟ ΡΟΔΟΥ ΤΜΗΜΑ ΟΡΓΑΝΩΣΗΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΦΑΡΜΟΓΗ ΔΙΑΧΕΙΡΙΣΗΣ ΝΟΣΗΛΕΙΑΣ ΑΣΘΕΝΩΝ ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΕΚΔΟΣΗ 1.0 ΓΕΝΙΚΟ ΝΟΣΟΚΟΜΕΙΟ ΡΟΔΟΥ ΤΜΗΜΑ ΟΡΓΑΝΩΣΗΣ & ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΦΑΡΜΟΓΗ ΔΙΑΧΕΙΡΙΣΗΣ ΝΟΣΗΛΕΙΑΣ ΑΣΘΕΝΩΝ ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΕΚΔΟΣΗ 1.0 2012 Τµήµα Οργάνωσης & Πληροφορικής - 1 - ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

Διαβάστε περισσότερα

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΟΛΟΚΛΗΡΩΜΕΝΟΥ ΠΛΗΡΟΦΟΡΙΑΚΟΥ ΣΥΣΤΗΜΑΤΟΣ (ΟΠΣ) ΓΙΑ ΤΗΝ ΠΡΟΓΡΑΜΜΑΤΙΚΗ ΠΕΡΙΟΔΟ ΣΕΣ

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΟΛΟΚΛΗΡΩΜΕΝΟΥ ΠΛΗΡΟΦΟΡΙΑΚΟΥ ΣΥΣΤΗΜΑΤΟΣ (ΟΠΣ) ΓΙΑ ΤΗΝ ΠΡΟΓΡΑΜΜΑΤΙΚΗ ΠΕΡΙΟΔΟ ΣΕΣ ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΟΛΟΚΛΗΡΩΜΕΝΟΥ ΠΛΗΡΟΦΟΡΙΑΚΟΥ ΣΥΣΤΗΜΑΤΟΣ (ΟΠΣ) ΓΙΑ ΤΗΝ ΠΡΟΓΡΑΜΜΑΤΙΚΗ ΠΕΡΙΟΔΟ ΣΕΣ 2014-2020 ΕΝΟΤΗΤΑ «ΔΙΑΧΕΙΡΙΣΗ ΠΡΟΣΚΛΗΣΕΩΝ ΕΡΓΩΝ ΣΧΕΔΙΩΝ ΧΟΡΗΓΙΩΝ» 1η Έκδοση: 2015 ΠΕΡΙΕΧΟΜΕΝΑ 1. ΕΙΣΑΓΩΓΗ...3

Διαβάστε περισσότερα

ΤΕΙ ΚΑΒΑΛΑΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΙΑΣ ΕΡΓΑΣΤΗΡΙΟ ΗΛΕΚΤΡΟΝΙΚΩΝ ΙΣΧΥΟΣ ρ. Ιωάννης Χ. ερµεντζόγλου ΑΣΚΗΣΗ 3 ΙΠΑΛΜΙΚΟΣ ΜΟΝΟΦΑΣΙΚΟΣ ΜΕΤΑΤΡΟΠΕΑΣ ΜΕΣΑΙΑΣ ΛΗΨΕΩΣ 3.

ΤΕΙ ΚΑΒΑΛΑΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΙΑΣ ΕΡΓΑΣΤΗΡΙΟ ΗΛΕΚΤΡΟΝΙΚΩΝ ΙΣΧΥΟΣ ρ. Ιωάννης Χ. ερµεντζόγλου ΑΣΚΗΣΗ 3 ΙΠΑΛΜΙΚΟΣ ΜΟΝΟΦΑΣΙΚΟΣ ΜΕΤΑΤΡΟΠΕΑΣ ΜΕΣΑΙΑΣ ΛΗΨΕΩΣ 3. ΕΡΓΑΣΤΗΡΙΟ ΗΛΕΚΤΡΟΝΙΚΩΝ ΙΣΧΥΟΣ ΑΣΚΗΣΗ 3 ΙΠΑΛΜΙΚΟΣ ΜΕΤΑΤΡΟΠΕΑΣ ΜΕ Μ/Σ ΜΕΣΑΙΑΣ ΛΗΨΗΣ ΤΕΙ ΚΑΒΑΛΑΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΙΑΣ ΕΡΓΑΣΤΗΡΙΟ ΗΛΕΚΤΡΟΝΙΚΩΝ ΙΣΧΥΟΣ ρ. Ιωάννης Χ. ερµεντζόγλου ΑΣΚΗΣΗ 3 ΙΠΑΛΜΙΚΟΣ ΜΟΝΟΦΑΣΙΚΟΣ

Διαβάστε περισσότερα

Λεπτομέριες τοιχοποιίας Σχεδίαση κάτοψης

Λεπτομέριες τοιχοποιίας Σχεδίαση κάτοψης 1 Λεπτομέριες τοιχοποιϊας Σχεδίαση κάτοψης Λεπτομέριες τοιχοποιίας Σχεδίαση κάτοψης Ξεκινώντας το πρόγραμμα εμφανίζονται οι επιλογές σχετικά με το τι θέλετε να κάνετε. Δημιουργώντας Νέο Δωμάτιο Όταν ο

Διαβάστε περισσότερα

Εφαρμογή Ηλεκτρονικής Υποβολής Δηλώσεων Ε9. Οδηγίες Χρήσης

Εφαρμογή Ηλεκτρονικής Υποβολής Δηλώσεων Ε9. Οδηγίες Χρήσης Εφαρμογή Ηλεκτρονικής Υποβολής Δηλώσεων Ε9 Οδηγίες Χρήσης Πίνακας Περιεχομένων 1. Αρχική οθόνη... 3 2. Αρχική Οθόνη Πιστοποιημένου Χρήστη... 4 2.1. Οριστικοποίηση της Περιουσιακής Εικόνας... 5 2.2. Καρτέλες

Διαβάστε περισσότερα

Πως θα κατασκευάσω το πρώτο πρόγραμμα;

Πως θα κατασκευάσω το πρώτο πρόγραμμα; Εργαστήριο Δομημένος Προγραμματισμός (C#) Τμήμα Μηχανολογίας Νικόλαος Ζ. Ζάχαρης Καθηγητής Εφαρμογών Σκοπός Να γίνει εξοικείωση το μαθητών με τον ΗΥ και το λειτουργικό σύστημα. - Επίδειξη του My Computer

Διαβάστε περισσότερα

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Επεξεργασία πινάκων

Εργαστήριο «Τεχνολογία Πολιτισμικού Λογισμικού» Ενότητα. Επεξεργασία πινάκων Ενότητα 4 Επεξεργασία πινάκων 36 37 4.1 Προσθήκη πεδίων Για να εισάγετε ένα πεδίο σε ένα πίνακα που υπάρχει ήδη στη βάση δεδομένων σας, βάζετε τον κέρσορα του ποντικιού στο πεδίο πάνω από το οποίο θέλετε

Διαβάστε περισσότερα

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

Προγραμματισμός ΙI (Θ) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κεντρικής Μακεδονίας - Σέρρες Τμήμα Μηχανικών Πληροφορικής Προγραμματισμός ΙI (Θ) Δρ. Δημήτρης Βαρσάμης Επίκουρος Καθηγητής Μάρτιος 2017 Δρ. Δημήτρης Βαρσάμης Μάρτιος 2017

Διαβάστε περισσότερα

Πώς μπορούμε να δημιουργούμε γεωμετρικά σχέδια με τη Logo;

Πώς μπορούμε να δημιουργούμε γεωμετρικά σχέδια με τη Logo; Κεφάλαιο 2 Εισαγωγή Πώς μπορούμε να δημιουργούμε γεωμετρικά σχέδια με τη Logo; Η Logo είναι μία από τις πολλές γλώσσες προγραμματισμού. Κάθε γλώσσα προγραμματισμού έχει σκοπό τη δημιουργία προγραμμάτων

Διαβάστε περισσότερα

Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ

Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ Field Service Management ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ 1 ΠΕΡΙΕΧΟΜΕΝΑ 1. ΑΝΑΛΥΣΗ ΜΕΝΟΥ ΕΦΑΡΜΟΓΗΣ... 4 2. ΕΠΕΞΗΓΗΣΗ ΚΕΝΤΡΙΚΟΥ ΜΕΝΟΥ ΚΑΡΤΕΛΑΣ... 5 3. ΔΗΜΙΟΥΡΓΙΑ ΠΕΛΑΤΗ... 6 4. ΑΝΑΖΗΤΗΣΗ ΠΕΛΑΤΗ... 6 5. ΕΠΕΞΕΡΓΑΣΙΑ/ΔΙΑΓΡΑΦΗ

Διαβάστε περισσότερα

ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ. ΠΡΟΣΟΜΟΙΩΣΗ ΚΙΝΗΤΗΡΩΝ ΣΥΝΕΧΟΥΣ ΚΑΙ ΕΝΑΛΛΑΣΣΟΜΕΝΟΥ ΡΕΥΜΑΤΟΣ (ΕΜΦΑΝΙΣΗ ΚΥΚΛΩΜΑΤΟΣ) ΣΤΟ NEAPOLIS v6.

ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ. ΠΡΟΣΟΜΟΙΩΣΗ ΚΙΝΗΤΗΡΩΝ ΣΥΝΕΧΟΥΣ ΚΑΙ ΕΝΑΛΛΑΣΣΟΜΕΝΟΥ ΡΕΥΜΑΤΟΣ (ΕΜΦΑΝΙΣΗ ΚΥΚΛΩΜΑΤΟΣ) ΣΤΟ NEAPOLIS v6. ΤΕΙ ΚΑΒΑΛΑΣ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΠΡΟΣΟΜΟΙΩΣΗ ΚΙΝΗΤΗΡΩΝ ΣΥΝΕΧΟΥΣ ΚΑΙ ΕΝΑΛΛΑΣΣΟΜΕΝΟΥ ΡΕΥΜΑΤΟΣ (ΕΜΦΑΝΙΣΗ ΚΥΚΛΩΜΑΤΟΣ) ΣΤΟ NEAPOLIS v6.1 ΤΩΝ ΣΠΟΥΔΑΣΤΡΙΩΝ: ΚΥΡΑΖΟΓΛΟΥ ΓΕΩΡΓΙΑ ΛΩΛΗ

Διαβάστε περισσότερα

Σχεδίαση Μισθοδοτικής Κατάστασης.

Σχεδίαση Μισθοδοτικής Κατάστασης. Σχεδίαση Μισθοδοτικής Κατάστασης. Το συγκεκριμένο εγχειρίδιο δημιουργήθηκε για να βοηθήσει την κατανόηση της διαδικασίας σχεδίασης μισθοδοτικής κατάστασης. Παρακάτω προτείνεται μια αλληλουχία ενεργειών

Διαβάστε περισσότερα

WiFi V-Timer ΕΚΔΟΣΗ 2Η

WiFi V-Timer ΕΚΔΟΣΗ 2Η ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ WiFi V-Timer ΕΚΔΟΣΗ 2Η 1 ΠΕΡΙΕΧΟΜΕΝΑ 1. ΓΝΩΡΙΜΙΑ ΜΕ ΤΟ WiFi V-Timer... 3 2. ΠΛΕΟΝΕΚΤΗΜΑΤΑ ΤΟΥ WiFi V-Timer... 4 3. ΤΟΠΙΚΟΣ ΧΕΙΡΙΣΜΟΣ ΤΟΥ WiFi V-Timer... 5 4. ΕΓΚΑΤΑΣΤΑΣΗ ΤΗΣ ΕΦΑΡΜΟΓΗΣ

Διαβάστε περισσότερα

Αυτόματο Κλείσιμο Ισολογισμού

Αυτόματο Κλείσιμο Ισολογισμού Αυτόματο Κλείσιμο Ισολογισμού Το συγκεκριμένο εγχειρίδιο δημιουργήθηκε για να βοηθήσει την κατανόηση της διαδικασίας διαχείρισης Οδηγιών Αυτόματου Κλεισίματος Ισολογισμού στην εφαρμογή extra Λογιστική

Διαβάστε περισσότερα

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

Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010 Τμήμα Πληροφορικής & Τηλ/νιών Τομέας Προγ/σμού & Τεχνολογίας Λογισμικού Συνοπτικό εγχειρίδιο χρήσης του Microsoft Visual Studio 2010 Δρ. Νικόλαος Θ. Λιόλιος Καθηγητής Φεβρουάριος 2012 1. Εισαγωγή Το Visual

Διαβάστε περισσότερα

Βασικές Εντολές MicroWorlds Pro.

Βασικές Εντολές MicroWorlds Pro. Βασικές Εντολές MicroWorlds Pro. 1. μπροστά (μπ) αριθμός Μετακινεί τη χελώνα προς τα εμπρός. π.χ. μπροστά 100 2. πίσω (πι) αριθμός Μετακινεί τη χελώνα προς τα πίσω. π.χ. πι 30 3. δεξιά (δε) αριθμός Στρέφει

Διαβάστε περισσότερα

Ειδικά Θέματα Παραμετροποίησης. Ασφάλεια Εφαρμογής Εναρμόνιση με τον κανονισμό GDRP. Data Communication A.E.

Ειδικά Θέματα Παραμετροποίησης. Ασφάλεια Εφαρμογής Εναρμόνιση με τον κανονισμό GDRP. Data Communication A.E. Ασφάλεια Εφαρμογής Εναρμόνιση με τον κανονισμό GDRP Γενικός Κανονισμός Προστασίας Προσωπικών Δεδομένων (GDPR) Η συμμόρφωση της εφαρμογής Premium HRM Μισθοδοσία της Data Communication με το GDPR Στις οδηγίες

Διαβάστε περισσότερα

Εγχειρίδιο λειτουργιών χρήστη (επιχείρησης) στο Mathiteia4u

Εγχειρίδιο λειτουργιών χρήστη (επιχείρησης) στο Mathiteia4u Εγχειρίδιο λειτουργιών χρήστη (επιχείρησης) στο Mathiteia4u Μέσω της ηλεκτρονικής πύλης www.mathiteia4u.gov.gr δίνεται πρόσβαση σε ένα νέο πρόγραμμα για την στήριξη νέων που έχουν μόλις αποφοιτήσει από

Διαβάστε περισσότερα

Interactive Power Point

Interactive Power Point Interactive Power Point Οι περισσότεροι χρήστες γνωρίζουν τη χρήση του Microsoft Power Point για τη δημιουργία παρουσιάσεων. Αυτό όμως που λίγοι γνωρίζουν, είναι ότι το πρόγραμμα αυτό, έχει δυνατότητες

Διαβάστε περισσότερα

Σχεδίαση Μισθοδοτικής Κατάστασης

Σχεδίαση Μισθοδοτικής Κατάστασης Σχεδίαση Μισθοδοτικής Κατάστασης Το συγκεκριμένο εγχειρίδιο δημιουργήθηκε για να βοηθήσει την κατανόηση της Διαδικασίας Σχεδίασης Μισθοδοτικής Κατάστασης. Παρακάτω προτείνεται μια αλληλουχία ενεργειών

Διαβάστε περισσότερα

10 - ΗΛΕΚΤΡΙΚΕΣ ΜΗΧΑΝΕΣ

10 - ΗΛΕΚΤΡΙΚΕΣ ΜΗΧΑΝΕΣ 10 - ΗΛΕΚΤΡΙΚΕΣ ΜΗΧΑΝΕΣ Ηλεκτρική μηχανή ονομάζεται κάθε διάταξη η οποία μετατρέπει τη μηχανική ενεργεια σε ηλεκτρική ή αντίστροφα ή μετατρεπει τα χαρακτηριστικά του ηλεκτρικού ρεύματος. Οι ηλεκτρικες

Διαβάστε περισσότερα

ΜΑΘΗΜΑ: Ηλεκτρονικά Ισχύος

ΜΑΘΗΜΑ: Ηλεκτρονικά Ισχύος ΜΑΘΗΜΑ: Ηλεκτρονικά Ισχύος ΔΙΔΑΣΚΩΝ: Γιώργος Χριστοφορίδης ΤΜΗΜΑ: Ηλεκτρολόγων Μηχανικών Τ.Ε. 1 Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό,

Διαβάστε περισσότερα

Διαδικτυακό Περιβάλλον Διαχείρισης Ασκήσεων Προγραμματισμού

Διαδικτυακό Περιβάλλον Διαχείρισης Ασκήσεων Προγραμματισμού ΠΑΝΕΠΙΣΤΗΜΙΟ ΜΑΚΕΔΟΝΙΑΣ ΔΙΑΤΜΗΜΑΤΙΚΟ ΜΕΤΑΠΤΥΧΙΑΚΟ ΠΡΟΓΡΑΜΜΑ ΣΤΑ ΠΛΗΡΟΦΟΡΙΑΚΑ ΣΥΣΤΗΜΑΤΑ Διπλωματική Εργασία με θέμα: Διαδικτυακό Περιβάλλον Διαχείρισης Ασκήσεων Προγραμματισμού Καραγιάννης Ιωάννης Α.Μ.

Διαβάστε περισσότερα

5. ΜΟΝΟΦΑΣΙΚΟΙ ΚΑΙ ΑΛΛΟΙ ΚΙΝΗΤΗΡΕΣ

5. ΜΟΝΟΦΑΣΙΚΟΙ ΚΑΙ ΑΛΛΟΙ ΚΙΝΗΤΗΡΕΣ 73 5. ΜΟΝΟΦΑΣΙΚΟΙ ΚΑΙ ΑΛΛΟΙ ΚΙΝΗΤΗΡΕΣ Στην συνέχεια εξετάζονται οι µονοφασικοί επαγωγικοί κινητήρες αλλά και ορισµένοι άλλοι όπως οι τριφασικοί σύγχρονοι κινητήρες που υπάρχουν σε µικρό ποσοστό σε βιοµηχανικές

Διαβάστε περισσότερα

ΕΡΓΑΣΤΗΡΙΟ ΗΛΕΚΤΡΟΝΙΚΩΝ ΙΣΧΥΟΣ ΑΣΚΗΣΗ 1 ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΔΙΟΔΟΥΣ & ΤΑ ΘΥΡΙΣΤΟΡ ΜΕΡΟΣ ΠΡΩΤΟ

ΕΡΓΑΣΤΗΡΙΟ ΗΛΕΚΤΡΟΝΙΚΩΝ ΙΣΧΥΟΣ ΑΣΚΗΣΗ 1 ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΔΙΟΔΟΥΣ & ΤΑ ΘΥΡΙΣΤΟΡ ΜΕΡΟΣ ΠΡΩΤΟ ΕΡΓΑΣΤΗΡΙΟ ΗΛΕΚΤΡΟΝΙΚΩΝ ΙΣΧΥΟΣ ΑΣΚΗΣΗ 1 ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΔΙΟΔΟΥΣ & ΤΑ ΘΥΡΙΣΤΟΡ ΜΕΡΟΣ ΠΡΩΤΟ ΤΕΙ ΑΝΑΤΟΛΙΚΗΣ ΜΑΚΕΔΟΝΙΑΣ & ΘΡΑΚΗΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ Τ.Ε. ΕΡΓΑΣΤΗΡΙΟ ΗΛΕΚΤΡΟΝΙΚΩΝ ΙΣΧΥΟΣ & ΚΙΝΗΤΗΡΙΩΝ

Διαβάστε περισσότερα

To περιβάλλον Ανάπτυξης εφαρμογών της Visual Basic 2008 Express Edition

To περιβάλλον Ανάπτυξης εφαρμογών της Visual Basic 2008 Express Edition To περιβάλλον Ανάπτυξης εφαρμογών της Visual Basic 2008 Express Edition Πίνακας Περιεχομένων To περιβάλλον Ανάπτυξης εφαρμογών της Visual Basic 2008 Express Edition... 1 Εκτέλεση του περιβάλλοντος ανάπτυξης

Διαβάστε περισσότερα

Εγχειρίδιο Χρήσης Φορέα Πιστοποίησης

Εγχειρίδιο Χρήσης Φορέα Πιστοποίησης Εγχειρίδιο Χρήσης Φορέα Πιστοποίησης ΕΙΣΟΔΟΣ ΣΤΗΝ ΕΦΑΡΜΟΓΗ Για την είσοδο στην εφαρμογή απαιτείται, 1. Πλοηγός ιστοσελίδων (Internet Explorer, Mozilla Firefox, Google Chrome, Netscape Navigator), 2. Όνομα

Διαβάστε περισσότερα

Τεχνολογικό Εκπαιδευτικό Ίδρυμα Πάτρας

Τεχνολογικό Εκπαιδευτικό Ίδρυμα Πάτρας Τεχνολογικό Εκπαιδευτικό Ίδρυμα Πάτρας Επιχειρησιακό Πρόγραμμα «Εκπαίδευση και δια Βίου Μάθηση» Δομή Απασχόλησης και Σταδιοδρομίας (ΔΑΣΤΑ) ΤΕΙ Πατρών MIS: 304457 Οδηγίες Χρήσης για τους Φορείς Απασχόλησης

Διαβάστε περισσότερα

ΗΛΕΚΤΡΟΝΙΚΑ ΙΣΧΥΟΣ ΗΜΥ 444

ΗΛΕΚΤΡΟΝΙΚΑ ΙΣΧΥΟΣ ΗΜΥ 444 ΗΛΕΚΤΡΟΝΙΚΑ ΙΣΧΥΟΣ ΗΜΥ 444 ΣΥΝΘΕΣΗ DC ΚΑΙ ΧΑΜΗΛΗΣ ΣΥΧΝΟΤΗΤΑΣ AC Δρ Ανδρέας Σταύρου ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ 1 Τα Θέματα Διακοπτικός πόλος

Διαβάστε περισσότερα

Αλλαγή της εμφάνισης κειμένου: μέγεθος γραμματοσειράς, είδος γραμματοσειράς

Αλλαγή της εμφάνισης κειμένου: μέγεθος γραμματοσειράς, είδος γραμματοσειράς 3.3.1.1 Αλλαγή της εμφάνισης κειμένου: μέγεθος γραμματοσειράς, είδος γραμματοσειράς Γραμματοσειρές Η λέξη γραμματοσειρά αναφέρεται στο στυλ που εμφανίζονται τα γράμματα. Παρακάτω ακολουθούν κάποια παραδείγματα,

Διαβάστε περισσότερα

Γεωργάκης Αριστείδης ΠΕ20

Γεωργάκης Αριστείδης ΠΕ20 1 Εκκίνηση για πρώτη φορά Όπως συμβαίνει και με τις υπόλοιπες εφαρμογές του OpenOffice, έτσι και το Impress μπορούμε να το εκκινήσουμε μέσω της συντόμευσης που εγκαθίσταται αυτόματα στην επιφάνεια εργασίας

Διαβάστε περισσότερα

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

Γ ΓΥΜΝΑΣΙΟΥ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕ ΤΗ ΓΛΩΣΣΑ MicroWorlds Pro Για να μπορέσουμε να εισάγουμε δεδομένα από το πληκτρολόγιο αλλά και για να εξάγουμε εμφανίσουμε αποτελέσματα στην οθόνη του υπολογιστή χρησιμοποιούμε τις εντολές Εισόδου και Εξόδου αντίστοιχα. Σύνταξη

Διαβάστε περισσότερα

Εγχειρίδιο Χρήσης Προσωποποιημένων Υπηρεσιών Γ.Ε.ΜΗ. (Επιμελητήρια)

Εγχειρίδιο Χρήσης Προσωποποιημένων Υπηρεσιών Γ.Ε.ΜΗ. (Επιμελητήρια) Εγχειρίδιο Χρήσης Προσωποποιημένων Υπηρεσιών Γ.Ε.ΜΗ. (Επιμελητήρια) Ιούνιος 2013 Περιεχόμενα: Εισαγωγή... 3 1. Επιμελητήριο... 3 1.1 Διαχειριστής Αιτήσεων Επιμελητηρίου... 3 1.1.1. Είσοδος... 3 1.1.2.

Διαβάστε περισσότερα

Benzina v1.8.1.23 Βασικές Οδηγίες Χρήσης

Benzina v1.8.1.23 Βασικές Οδηγίες Χρήσης Benzina v1.8.1.23 Βασικές Οδηγίες Χρήσης 1 Οδηγίες Εγκατάστασης Η έκδοση του Benzina που θα εγκατασταθεί είναι συμβατή μόνο με τα λειτουργικά συστήματα Windows 2000/XP ή νεότερα. Γενικά Κάνοντας διπλό

Διαβάστε περισσότερα

Αυτόματο Κλείσιμο Ισολογισμού

Αυτόματο Κλείσιμο Ισολογισμού Αυτόματο Κλείσιμο Ισολογισμού Το συγκεκριμένο εγχειρίδιο δημιουργήθηκε για να βοηθήσει την κατανόηση της διαδικασίας διαχείρισης Οδηγιών Αυτόματου Κλεισίματος Ισολογισμού στην εφαρμογή Business Λογιστική

Διαβάστε περισσότερα

Μελέτη προβλημάτων ΠΗΙ λόγω λειτουργίας βοηθητικών προωστήριων μηχανισμών

Μελέτη προβλημάτων ΠΗΙ λόγω λειτουργίας βοηθητικών προωστήριων μηχανισμών «ΔιερΕΥνηση Και Aντιμετώπιση προβλημάτων ποιότητας ηλεκτρικής Ισχύος σε Συστήματα Ηλεκτρικής Ενέργειας (ΣΗΕ) πλοίων» (ΔΕΥ.Κ.Α.Λ.Ι.ΩΝ) πράξη ΘΑΛΗΣ-ΕΜΠ, πράξη ένταξης 11012/9.7.2012, MIS: 380164, Κωδ.ΕΔΕΙΛ/ΕΜΠ:

Διαβάστε περισσότερα

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015 ΤΕΧΝΟΛΟΓΙΑ (Ι) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΘΕΩΡΗΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ Μάθημα : Αυτοματισμοί και

Διαβάστε περισσότερα

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ. Ενότητα: Τοπικές vs Καθολικές Μεταβλητές ΚΥΡΟΠΟΥΛΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ. Τμήμα Διοίκηση Επιχειρήσεων (Κοζάνη) ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ενότητα: Τοπικές vs Καθολικές Μεταβλητές ΚΥΡΟΠΟΥΛΟΣ ΚΩΝΣΤΑΝΤΙΝΟΣ Τμήμα Διοίκηση Επιχειρήσεων (Κοζάνη) Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons.

Διαβάστε περισσότερα

FPU EJ. Κατάλογος περιεχομένων

FPU EJ. Κατάλογος περιεχομένων FPU EJ Κατάλογος περιεχομένων FPU EJ...1 1. Μενού...2 2. Master Reset...3 3. Ώρα / Ημερομηνία...4 4. Τμήματα...6 5. Μηδενισμός Ζ & Μεταφορά στοιχείων...9 6. FORMAT προσωρινής μνήμης...10 7. Αλλαγή ταχύτητας...10

Διαβάστε περισσότερα

ΣΗΜΕΙΩΣΕΙΣ. στη γλώσσα προγραμματισμού. Γκέτσιος Βασίλειος

ΣΗΜΕΙΩΣΕΙΣ. στη γλώσσα προγραμματισμού. Γκέτσιος Βασίλειος ΣΗΜΕΙΩΣΕΙΣ στη γλώσσα προγραμματισμού Microsoft Worlds Pro Γκέτσιος Βασίλειος Σημειώσεις στη γλώσσα προγραμματισμού Microsoft Worlds Pro σελ. 1 Το περιβάλλον προγραμματισμού Microsoft Worlds Pro Μενού

Διαβάστε περισσότερα

Simplifying Complexity. Οδηγός Χρήσης Διαδικτυακής Πλατφόρμας

Simplifying Complexity. Οδηγός Χρήσης Διαδικτυακής Πλατφόρμας Simplifying Complexity Οδηγός Χρήσης Διαδικτυακής Πλατφόρμας Περιεχόμενα 1 Εισαγωγή... 2 2 Οδηγίες Χρήσης... 2 2.1 Πρώτη Εγγραφή στην Πλατφόρμα... 2 2.2 Είσοδος στην Πλατφόρμα... 4 2.3 Δημιουργία Καρτέλας

Διαβάστε περισσότερα

Εγχειρίδιο χρήσης για τον φοιτητή

Εγχειρίδιο χρήσης για τον φοιτητή Εγχειρίδιο χρήσης για τον φοιτητή 1 Αρχική οθόνη Όταν κάποιος χρήστης εισέρχεται για πρώτη φορά στο σύστημα εμφανίζεται η παρακάτω οθόνη/σελίδα: Στα αριστερά της οθόνης εμφανίζεται η φόρμα σύνδεσης στην

Διαβάστε περισσότερα

Διαδικασία Χρήσης Module Αναλυτικής Λογιστικής

Διαδικασία Χρήσης Module Αναλυτικής Λογιστικής Διαδικασία Χρήσης Module Αναλυτικής Λογιστικής 1 Περίληψη Με την Αναλυτική Λογιστική πραγματοποιείται η παρακολούθηση όλου του κυκλώματος και η ενημέρωση της Αναλυτικής Λογιστικής από την εφαρμογή Hyper

Διαβάστε περισσότερα

Δημιουργία και Σύνδεση με Στήλες Βιβλίου

Δημιουργία και Σύνδεση με Στήλες Βιβλίου Δημιουργία και Σύνδεση με Στήλες Βιβλίου Το συγκεκριμένο εγχειρίδιο δημιουργήθηκε για να βοηθήσει την κατανόηση της Διαδικασίας Στηλών Βιβλίων. Παρακάτω προτείνεται μια αλληλουχία ενεργειών την οποία ο

Διαβάστε περισσότερα

3η Εργαστηριακή Άσκηση: Εύρεση χαρακτηριστικής και συντελεστή απόδοσης κινητήρα συνεχούς ρεύµατος

3η Εργαστηριακή Άσκηση: Εύρεση χαρακτηριστικής και συντελεστή απόδοσης κινητήρα συνεχούς ρεύµατος Ονοµατεπώνυµο: Αριθµός Μητρώου: Εξάµηνο: Υπογραφή Εργαστήριο Ηλεκτροµηχανικών Συστηµάτων Μετατροπής Ενέργειας 3η Εργαστηριακή Άσκηση: Εύρεση χαρακτηριστικής και συντελεστή απόδοσης κινητήρα συνεχούς ρεύµατος

Διαβάστε περισσότερα

Τεχνικό ενχειρίδιο προγραμματιζόμενου θερμοστατη AutoHeat

Τεχνικό ενχειρίδιο προγραμματιζόμενου θερμοστατη AutoHeat Τεχνικό ενχειρίδιο προγραμματιζόμενου θερμοστατη AutoHeat Επτά τρόποι λειτουργίας: Άνεση, Νυχτερινή, Αντιπαγωτική, Fil-Pilote, Chrono, Χρονοδιακόπτης-2h, Stand-by. - Λειτουργία "Άνεσης": Ο θερμοστάτης

Διαβάστε περισσότερα

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΥΠΟΣΥΣΤΗΜΑΤΟΣ ΑΓΡΟΠΕΡΙΒΑΛΛΟΝΤΙΚΩΝ ΕΝΙΣΧΥΣΕΩΝ. Μέτρο 2.2.1

ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΗΣ ΥΠΟΣΥΣΤΗΜΑΤΟΣ ΑΓΡΟΠΕΡΙΒΑΛΛΟΝΤΙΚΩΝ ΕΝΙΣΧΥΣΕΩΝ. Μέτρο 2.2.1 On line ΔΗΛΩΣΗ ΕΦΑΡΜΟΓΗΣ Μέτρο 2.2.1 ΙΑΝΟΥΑΡΙΟΣ 2017 ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ 1 ΓΕΝΙΚΕΣ ΛΕΙΤΟΥΡΓΙΕΣ... 3 1.1 Υποχρεωτικά Πεδία... 3 1.2 Βοηθητική Λίστα Τιμών (drop down list)... 3 1.3 Αναζήτηση... 3 1.3.1

Διαβάστε περισσότερα

1. ΔΗΜΙΟΥΡΓΙΑ ΝΕΑΣ ΧΡΗΣΗΣ 2. ΚΑΤΑΡΤΙΣΗ ΠΡΟΫΠΟΛΟΓΙΣΜΟΥ

1. ΔΗΜΙΟΥΡΓΙΑ ΝΕΑΣ ΧΡΗΣΗΣ 2. ΚΑΤΑΡΤΙΣΗ ΠΡΟΫΠΟΛΟΓΙΣΜΟΥ 1. ΔΗΜΙΟΥΡΓΙΑ ΝΕΑΣ ΧΡΗΣΗΣ 2. ΚΑΤΑΡΤΙΣΗ ΠΡΟΫΠΟΛΟΓΙΣΜΟΥ Σελίδα 1 ΠΕΡΙΕΧΟΜΕΝΑ ΠΕΡΙΕΧΟΜΕΝΑ... 2 ΔΗΜΙΟΥΡΓΙΑ ΝΕΑΣ ΧΡΗΣΗΣ... 3 1 ο Βήμα: Δημιουργία νέας χρήσης.... 3 2 ο Βήμα: Εισαγωγή στην νέα χρήση... 3 3ο

Διαβάστε περισσότερα

Εγχειρίδιο διαχείρισης χρηστών και λιστών διανομής για τον Υπεύθυνο Φορέα του Δικτύου "Σύζευξις" -1-

Εγχειρίδιο διαχείρισης χρηστών και λιστών διανομής για τον Υπεύθυνο Φορέα του Δικτύου Σύζευξις -1- -1- 1 Διαχείριση Χρηστών...3 1.1 Υπηρεσίες...5 1.1.1 Δημιουργία νέου χρήστη...6 1.1.2 Αναζήτηση χρήστη...7 1.1.2 Επεξεργασία στοιχείων χρήστη...8 1.1.3 Δημιουργία /Επεξεργασία mailbox plan...10 1.1.4 Ενεργοποίηση

Διαβάστε περισσότερα

Εφαρμογή Ηλεκτρονικής Υποβολής Δηλώσεων Ε9

Εφαρμογή Ηλεκτρονικής Υποβολής Δηλώσεων Ε9 ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΥΠΟΥΡΓΕΙΟ ΟΙΚΟΝΟΜΙΚΩΝ ΓΕΝΙΚΗ ΓΡΑΜΜΑΤΕΙΑ ΠΛΗΡΟΦΟΡΙΑΚΩΝ ΣΥΣΤΗΜΑΤΩΝ Εφαρμογή Ηλεκτρονικής Υποβολής Δηλώσεων Ε9 Οδηγίες Χρήσης Δεκέμβριος 2011 [1] Πίνακας Περιεχομένων 1. Αρχική Οθόνη...

Διαβάστε περισσότερα

ΙΤ=ΙS RT RS. Uεπ. Άσκηση 5 Ηλεκτρικοί κινητήρες DC

ΙΤ=ΙS RT RS. Uεπ. Άσκηση 5 Ηλεκτρικοί κινητήρες DC Άσκηση 5 Ηλεκτρικοί κινητήρες DC 5.1 Σκοπός της Άσκησης Σκοπός την Άσκησης είναι η μελέτη του τρόπου λειτουργίας και ελέγχου των ηλεκτρικών κινητήρων DC. Αναλύονται ο τρόπος εκκίνησης και ρύθμισης της

Διαβάστε περισσότερα

Εγχειρίδιο Χρήσης Εφαρμογής Συστήματος Διαχείρισης Λογισμικού

Εγχειρίδιο Χρήσης Εφαρμογής Συστήματος Διαχείρισης Λογισμικού Πανεπιστήμιο Αιγαίου Εγχειρίδιο Χρήσης Εφαρμογής Συστήματος Διαχείρισης Λογισμικού Έκδοση 1.2 Περιεχόμενα 1. Είσοδος και Έξοδος από το Σύστημα... 3 2. Βοήθεια... 3 3. Αλλαγή Συνθηματικού... 3 4. Διαχείριση

Διαβάστε περισσότερα

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

3 ο Εργαστήριο Μεταβλητές, Τελεστές 3 ο Εργαστήριο Μεταβλητές, Τελεστές Μια μεταβλητή έχει ένα όνομα και ουσιαστικά είναι ένας δείκτης σε μια συγκεκριμένη θέση στη μνήμη του υπολογιστή. Στη θέση μνήμης στην οποία δείχνει μια μεταβλητή αποθηκεύονται

Διαβάστε περισσότερα

ΟΔΗΓΙΕΣ ΕΙΣΑΓΩΓΗΣ ΚΑΤΑΛΟΓΟΥ ΥΠΟΧΡΕΩΝ ΑΠΟ ΑΡΧΕΙΟ EXCEL

ΟΔΗΓΙΕΣ ΕΙΣΑΓΩΓΗΣ ΚΑΤΑΛΟΓΟΥ ΥΠΟΧΡΕΩΝ ΑΠΟ ΑΡΧΕΙΟ EXCEL ΟΔΗΓΙΕΣ ΕΙΣΑΓΩΓΗΣ ΚΑΤΑΛΟΓΟΥ ΥΠΟΧΡΕΩΝ ΑΠΟ ΑΡΧΕΙΟ EXCEL Η σύνδεση του χρήστη στο σύστημα επιτυγχάνεται με τη χρήση των προσωπικών του κωδικών TAXISnet στη διεύθυνση h ps://www.pothen.gr/pothen-back/sub1-public

Διαβάστε περισσότερα

ΟΔΗΓΙΕΣ ΓΙΑ ΤΟ ΠΑΙΧΝΙΔΙ.

ΟΔΗΓΙΕΣ ΓΙΑ ΤΟ ΠΑΙΧΝΙΔΙ. ΟΔΗΓΙΕΣ ΓΙΑ ΤΟ ΠΑΙΧΝΙΔΙ. Το πρώτο πράγμα που βλέπουμε μόλις ξεκινάμε το παιχνίδι είναι μια λίστα με όλα τα διαθέσιμα βίντεο με τα οποία μπορούμε να εξασκηθούμε. Σε αυτή περιλαμβάνονται επίσης πληροφορίες

Διαβάστε περισσότερα

BakeMe v Βασικές Οδηγίες Χρήσης

BakeMe v Βασικές Οδηγίες Χρήσης BakeMe v1.8.1.23 Βασικές Οδηγίες Χρήσης 1 Οδηγίες Εγκατάστασης Η έκδοση του BakeMe είναι συμβατή μόνο με τα λειτουργικά συστήματα Windows 2000/XP ή νεότερα. Γενικά Από τα περιεχόμενα του cd ή από το φάκελο

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Παρακάτω προτείνεται μια αλληλουχία ενεργειών την οποία ο χρήστης πρέπει να ακολουθήσει για να αξιοποιήσει τις δυνατότητες της εφαρμογής.

Παρακάτω προτείνεται μια αλληλουχία ενεργειών την οποία ο χρήστης πρέπει να ακολουθήσει για να αξιοποιήσει τις δυνατότητες της εφαρμογής. Απογραφή Το συγκεκριμένο εγχειρίδιο δημιουργήθηκε για να βοηθήσει την κατανόηση της διαδικασίας διαχείρισης Απογραφής Ειδών. Παρακάτω προτείνεται μια αλληλουχία ενεργειών την οποία ο χρήστης πρέπει να

Διαβάστε περισσότερα

Ο Οδηγός γρήγορης εκκίνησης

Ο Οδηγός γρήγορης εκκίνησης Ο Οδηγός γρήγορης εκκίνησης του Microsoft PowerPoint 2013 έχει διαφορετική εμφάνιση από προηγούμενες εκδόσεις. Γι αυτό το λόγο, δημιουργήσαμε αυτόν τον οδηγό για να ελαχιστοποιήσουμε την καμπύλη εκμάθησης.

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 1 ΜΟΝΟΦΑΣΙΚΟΣ ΜΕΤΑΣΧΗΜΑΤΙΣΤΗΣ

ΑΣΚΗΣΗ 1 ΜΟΝΟΦΑΣΙΚΟΣ ΜΕΤΑΣΧΗΜΑΤΙΣΤΗΣ ΑΣΚΗΣΗ 1 ΜΟΝΟΦΑΣΙΚΟΣ ΜΕΤΑΣΧΗΜΑΤΙΣΤΗΣ Α.1 ΘΕΩΡΗΤΙΚΗ ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΜΟΝΟΦΑΣΙΚΟ ΜΕΤΑΣΧΗΜΑΤΙΣΤΗ Ο μετασχηματιστής είναι μια ηλεκτρική διάταξη που μετατρέπει εναλλασσόμενη ηλεκτρική ενέργεια ενός επιπέδου τάσης

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

Φύλλα εργασίας. MicroWorlds Pro. Πολυμεσικές Εφαρμογές με την χρήση της γλώσσας LOGO Στο Γυμνάσιο. Β. Χ. Χρυσοχοΐδης

Φύλλα εργασίας. MicroWorlds Pro. Πολυμεσικές Εφαρμογές με την χρήση της γλώσσας LOGO Στο Γυμνάσιο. Β. Χ. Χρυσοχοΐδης Φύλλα εργασίας MicroWorlds Pro Πολυμεσικές Εφαρμογές με την χρήση της γλώσσας LOGO Στο Γυμνάσιο Β. Χ. Χρυσοχοΐδης Πρόεδρος Συλλόγου Εκπαιδευτικών Πληροφορικής Φλώρινας 2 «Σχεδίαση και ανάπτυξη δραστηριοτήτων

Διαβάστε περισσότερα

Οδηγίες αρθρογράφησης στην ιστοσελίδα του 2ου ΓΕΛ Καματερού

Οδηγίες αρθρογράφησης στην ιστοσελίδα του 2ου ΓΕΛ Καματερού ΟΔΗΓΙΕΣ ΑΡΘΡΟΓΡΑΦΗΣΗΣ ΣΤΟ SITE «2 ο ΓΕΛ ΚΑΜΑΤΕΡΟΥ» Οι παρακάτω οδηγίες αφορούν στους αρθρογράφους για το Site «2 ου ΓΕΛ ΚΑΜΑΤΕΡΟΥ». Ειδικότερα, ας υποθέσουμε ότι ο χρήστης «user» με Συνθηματικό χρήστη

Διαβάστε περισσότερα

ΟΔΗΓΟΣ ΧΡΗΣΗΣ(ΜΑΝUΑL) ΔΙΑΧΕΙΡΙΣΤΗ-ΧΡΗΣΤΗ.

ΟΔΗΓΟΣ ΧΡΗΣΗΣ(ΜΑΝUΑL) ΔΙΑΧΕΙΡΙΣΤΗ-ΧΡΗΣΤΗ. ΟΔΗΓΟΣ ΧΡΗΣΗΣ(ΜΑΝUΑL) ΔΙΑΧΕΙΡΙΣΤΗ-ΧΡΗΣΤΗ. Οδηγός Διαχειριστή Το m-learning Toolkit είναι μια ολοκληρωμένη πλατφόρμα εξ αποστάσεως εκπαίδευσης που έχει σχεδιαστεί για να υπάρχει η δυνατότητα της πρόσβασης

Διαβάστε περισσότερα

3. ΟΠΣ/ ΚΠΣ ΚΠ : Προγραμματισμός

3. ΟΠΣ/ ΚΠΣ ΚΠ : Προγραμματισμός 3. ΟΠΣ/ ΚΠΣ ΚΠ : Προγραμματισμός 3.1. Διαχείριση Δομής ΚΠΣ 3.1.1 Ορισμός ΚΠΣ Προκειμένου να ορίσουμε ένα ΚΠΣ ακολουθούμε την εξής διαδικασία: Αρχικά από το μενού Προγραμματισμός επιλέγουμε Διαχείριση ΚΠΣ

Διαβάστε περισσότερα

Γεννήτριες ΣΡ Ξένης Διέγερσης

Γεννήτριες ΣΡ Ξένης Διέγερσης Γεννήτριες ΣΡ Ξένης Διέγερσης Γεννήτριες ΣΡ Γεννήτριες ανεξάρτητης διέγερσης: το κύκλωμα που παράγει το κύριο πεδίο (κύκλωμα διέγερσης) τροφοδοτείται από μία ξεχωριστή πηγή, ανεξάρτητη από τη γεννήτρια

Διαβάστε περισσότερα

3η Εργαστηριακή Άσκηση: Εύρεση χαρακτηριστικής και συντελεστή απόδοσης κινητήρα συνεχούς ρεύµατος

3η Εργαστηριακή Άσκηση: Εύρεση χαρακτηριστικής και συντελεστή απόδοσης κινητήρα συνεχούς ρεύµατος Ονοµατεπώνυµο: Αριθµός Μητρώου: Εξάµηνο: Υπογραφή Εργαστήριο Ηλεκτροµηχανικών Συστηµάτων Μετατροπής Ενέργειας 3η Εργαστηριακή Άσκηση: Εύρεση χαρακτηριστικής και συντελεστή απόδοσης κινητήρα συνεχούς ρεύµατος

Διαβάστε περισσότερα

Σχεδιασμός εκτυπώσεων ERG

Σχεδιασμός εκτυπώσεων ERG Σχεδιασμός εκτυπώσεων ERG Περιεχόμενα Δημιουργία εκτυπώσεων ERG... 3 Επιλογή πεδίων... 4 Λεπτομέρειες... 6 Καθορισμός φίλτρων... 6 Ταξινόμηση και ομαδοποίηση... 7 Εξαγόμενο εκτύπωσης... 7 Δικαιώματα πρόσβασης...

Διαβάστε περισσότερα

Εγχειρίδιο λειτουργιών χρήστη (αποφοίτου) στο Mathiteia4u

Εγχειρίδιο λειτουργιών χρήστη (αποφοίτου) στο Mathiteia4u Εγχειρίδιο λειτουργιών χρήστη (αποφοίτου) στο Mathiteia4u Μέσω της ηλεκτρονικής πύλης www.mathiteia4u.gov.gr δίνεται πρόσβαση σε ένα νέο πρόγραμμα για την στήριξη νέων που έχουν μόλις αποφοιτήσει από την

Διαβάστε περισσότερα

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 5. Ρυθμίζοντας τη Φορά Περιστροφής. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων

Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 5. Ρυθμίζοντας τη Φορά Περιστροφής. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων Σκοπός Συλλογή & Επεξεργασία Δεδομένων Εργαστήριο 5 Ρυθμίζοντας τη Φορά Περιστροφής DC Κινητήρα. Σύστημα Συλλογής & Επεξεργασίας Μετρήσεων Βασική δομή ενός προγράμματος στο LabVIEW. Εμπρόσθιο Πλαίσιο (front

Διαβάστε περισσότερα

ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ ΙΟΥΝΙΟΥ 2007

ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ ΙΟΥΝΙΟΥ 2007 ΤΕΙ ΠΕΙΡΑΙΑ ΣΧΟΛΗ ΣΤΕΦ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΙΑΣ ΔΙΔΑΣΚΩΝ: Δρ. Π. Β. Μαλατέστας, Καθηγητής ΗΜΕΡΟΜΗΝΙΑ : 5//7 Μάθημα : Ηλεκτρική Κίνηση ΕΞΕΤΑΣΤΙΚΗ ΠΕΡΙΟΔΟΣ ΙΟΥΝΙΟΥ 7 ΘΕΜΑ ο (4%) Κινητήρας με γραμμική χαρακτηριστική

Διαβάστε περισσότερα

Οδηγίες για το CABRI - GEOMETRY II Μωυσιάδης Πολυχρόνης - Δόρτσιος Κώστας

Οδηγίες για το CABRI - GEOMETRY II Μωυσιάδης Πολυχρόνης - Δόρτσιος Κώστας Οδηγίες για το CABRI - GEOMETRY II Μωυσιάδης Πολυχρόνης - Δόρτσιος Κώστας Εκτελώντας το πρόγραμμα παίρνουμε ένα παράθυρο εργασίας Γεωμετρικών εφαρμογών. Τα βασικά κουμπιά και τα μενού έχουν την παρακάτω

Διαβάστε περισσότερα

Σενάριο Χρήσης myschool

Σενάριο Χρήσης myschool Σενάριο Χρήσης ΦΟΡΕΙΣ Επιβεβαίωση των Στοιχείων του Φορέα Αρχικά, θα κληθείτε να ελέγξετε την ορθότητα των στοιχείων του Φορέα σας. Επιλέγοντας την καρτέλα «Φορείς», από το μενού που βρίσκεται στο πάνω

Διαβάστε περισσότερα

ΓΡΑΠΤΕΣ ΠΡΟΑΓΩΓΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΙΟΥΝΙΟΥ

ΓΡΑΠΤΕΣ ΠΡΟΑΓΩΓΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΙΟΥΝΙΟΥ ΓΡΑΠΤΕΣ ΠΡΟΑΓΩΓΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΙΟΥΝΙΟΥ ΜΑΘΗΜΑ : Πληροφορική Κατεύθυνσης ΤΑΞΗ : Β Αρ. σελίδων : 11 Ηµεροµηνία : 10/6/2008 Ώρα Έναρξης : 7:45 π.µ ιάρκεια : 2 ώρες Ονοµατεπώνυµο :...Τµήµα : Αριθµός :...Βαθµός

Διαβάστε περισσότερα

«Αβάκιο» Οδηγός χρήσης Μικρόκοσμου που αποτελείται από τις ψηφίδες Καμβάς, Χελώνα, Γλώσσα, Μεταβολέας, Χρώματα.

«Αβάκιο» Οδηγός χρήσης Μικρόκοσμου που αποτελείται από τις ψηφίδες Καμβάς, Χελώνα, Γλώσσα, Μεταβολέας, Χρώματα. «Αβάκιο» Οδηγός χρήσης Μικρόκοσμου που αποτελείται από τις ψηφίδες Καμβάς, Χελώνα, Γλώσσα, Μεταβολέας, Χρώματα. Πώς θα δουλέψεις με το Χελωνόκοσμο την πρώτη φορά 1. Θα χρησιμοποιήσεις το αριστερό πλήκτρο

Διαβάστε περισσότερα

Copyright 2017 HP Development Company, L.P.

Copyright 2017 HP Development Company, L.P. Οδηγός χρήσης Copyright 2017 HP Development Company, L.P. Οι πληροφορίες στο παρόν έγγραφο μπορεί να αλλάξουν χωρίς προειδοποίηση. Οι μοναδικές εγγυήσεις για τα προϊόντα και τις υπηρεσίες της HP είναι

Διαβάστε περισσότερα

Σχεδίαση και ανάπτυξη δραστηριοτήτων στο προγραμματιστικό περιβάλλον MicroWorlds Pro

Σχεδίαση και ανάπτυξη δραστηριοτήτων στο προγραμματιστικό περιβάλλον MicroWorlds Pro «Σχεδίαση και ανάπτυξη δραστηριοτήτων στο προγραμματιστικό περιβάλλον MicroWorlds Pro» Φύλλο Εργασίας 1 Ο μαθητής εξοικειώνεται με το περιβάλλον της Logo και του Microworlds Pro και μαθαίνει να δημιουργεί

Διαβάστε περισσότερα

ΓΛΩΣΣΑ Η ΕΛΛΗΝΙΚΗ ΟΙ ΠΕΡΙΠΕΤΕΙΕΣ ΤΩΝ ΛΕΞΕΩΝ. Εγχειρίδιο λογισμικού

ΓΛΩΣΣΑ Η ΕΛΛΗΝΙΚΗ ΟΙ ΠΕΡΙΠΕΤΕΙΕΣ ΤΩΝ ΛΕΞΕΩΝ. Εγχειρίδιο λογισμικού ΓΛΩΣΣΑ Η ΕΛΛΗΝΙΚΗ ΟΙ ΠΕΡΙΠΕΤΕΙΕΣ ΤΩΝ ΛΕΞΕΩΝ Εγχειρίδιο λογισμικού 1 ΠΕΡΙΕΧΟΜΕΝΑ ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ...3 ΑΛΛΑ ΛΕΙΤΟΥΡΓΙΚΑ ΕΙΚΟΝΙΔΙΑ...4 ΣΥΝΟΠΤΙΚΗ ΒΑΘΜΟΛΟΓΙΑ ΜΑΘΗΤΩΝ...5 ΣΥΝΟΠΤΙΚΗ ΒΑΘΜΟΛΟΓΙΑ ΜΑΘΗΤΗ...6 ΑΣΚΗΣΗ

Διαβάστε περισσότερα

Εγχειρίδιο Χρήσης V3.0

Εγχειρίδιο Χρήσης V3.0 ΕΦΑΡΜΟΓΗ ΔΙΑΧΕΙΡΙΣΗΣ ΠΕΡΙΕΧΟΜΕΝΟΥ Εγχειρίδιο Χρήσης V3.0 Πίνακας Περιεχομένων: 1. Σύνδεση με την συσκευή 3 1.1 Σύνδεση μέσω Wi-Fi Direct.... 3 1.2 Ενσύρματη σύνδεση (LAN) 3 1.3 Ασύρματη σύνδεση (WiFi).

Διαβάστε περισσότερα

Vodafone Business Connect

Vodafone Business Connect Vodafone Business Connect Vodafone Business WebHosting Αναλυτικός Οδηγός Χρήσης Photo Album Αναλυτικός οδηγός χρήσης: Photo Album Vodafone Business Connect - Υπηρεσίες φιλοξενίας εταιρικού e-mail & web

Διαβάστε περισσότερα

Ηλεκτρικές Μηχανές ΙΙ

Ηλεκτρικές Μηχανές ΙΙ ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Ηλεκτρικές Μηχανές ΙΙ Ενότητα 7: Μέθοδοι Εκκίνησης και Πέδησης Ασύγχρονων Τριφασικών Κινητήρων Ηρακλής Βυλλιώτης Τμήμα Ηλεκτρολόγων

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 4 η ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΜΗΧΑΝΕΣ ΣΥΝΕΧΟΥΣ ΡΕΥΜΑΤΟΣ

ΑΣΚΗΣΗ 4 η ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΜΗΧΑΝΕΣ ΣΥΝΕΧΟΥΣ ΡΕΥΜΑΤΟΣ ΑΣΚΗΣΗ 4 η ΕΙΣΑΓΩΓΗ ΣΤΙΣ ΜΗΧΑΝΕΣ ΣΥΝΕΧΟΥΣ ΡΕΥΜΑΤΟΣ Σκοπός της Άσκησης: Σκοπός της εργαστηριακής άσκησης είναι α) η κατανόηση της αρχής λειτουργίας των μηχανών συνεχούς ρεύματος, β) η ανάλυση της κατασκευαστικών

Διαβάστε περισσότερα

Φώτα - Εκτύπωση Αποθήκευση εικόνας

Φώτα - Εκτύπωση Αποθήκευση εικόνας Φώτα - Εκτύπωση Αποθήκευση εικόνας 1 Φώτα Εισαγωγή φωτεινών πηγών στην κάτοψη Το 1992 σας δίνει την δυνατότητα να τοποθετήσετε φώτα στην μελέτη, έτσι ώστε να έχετε πιο ρεαλιστικό αποτέλεσμα. Οι φωτεινές

Διαβάστε περισσότερα

Συστήματα Αυτομάτου Ελέγχου ΙΙ Γιώργος Σούλτης 167

Συστήματα Αυτομάτου Ελέγχου ΙΙ Γιώργος Σούλτης 167 Προσομοίωση πραγματικών συστημάτων στο MATLAB Είδαμε μέχρι τώρα πως μπορούμε να υπολογίσουμε την συνάρτηση μεταφοράς σε πραγματικά συστήματα. Ο υπολογισμός της συνάρτησης μεταφοράς στη ουσία είναι η «γραμμικοποίηση»

Διαβάστε περισσότερα

ΕΓΧΕΙΡΙΔΙΟ ΟΔΗΓΙΩΝ ΧΡΗΣΤΗ. Ηλεκτρονική Υποβολή Α.Π.Δ.

ΕΓΧΕΙΡΙΔΙΟ ΟΔΗΓΙΩΝ ΧΡΗΣΤΗ. Ηλεκτρονική Υποβολή Α.Π.Δ. ΕΓΧΕΙΡΙΔΙΟ ΟΔΗΓΙΩΝ ΧΡΗΣΤΗ Ηλεκτρονική Υποβολή Α.Π.Δ. ΠΕΡΙΕΧΟΜΕΝΑ 1) Είσοδος στην εφαρμογή 2) Δημιουργία Περιόδου Υποβολής 2.α) Ακύρωση Περιόδου Υποβολής 3) Μέθοδος Υποβολής: Συμπλήρωση Φόρμας 3.α) Συμπλήρωση

Διαβάστε περισσότερα

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

Εισαγωγή στην εφαρμογή Βασική Σελίδα (Activity) Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10 Περιεχόμενα Εισαγωγή στην εφαρμογή... 2 Βασική Σελίδα (Activity)... 3 Ρυθμίσεις... 3 Πελάτες... 6 Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10 Αποθήκη... 11 Αναζήτηση προϊόντος...

Διαβάστε περισσότερα

Η. ΠΙΘΑΝΑ ΕΡΩΤΗΜΑΤΑ... 227

Η. ΠΙΘΑΝΑ ΕΡΩΤΗΜΑΤΑ... 227 ΠΕΡΙΕΧΟΜΕΝΑ Η. ΠΙΘΑΝΑ ΕΡΩΤΗΜΑΤΑ... 227 1. ΓΕΝΙΚΑ... 227 2. ΓΕΝΙΚΗ ΛΟΓΙΣΤΙΚΗ... 228 3. ΠΕΛΑΤΕΣ ΠΡΟΜΗΘΕΥΤΕΣ... 230 4. ΑΞΙΟΓΡΑΦΑ... 232 4. ΑΣΦΑΛΕΙΑ... 232 copyright DATA COMMUNICATION ΠΙΘΑΝΑ ΕΡΩΤΗΜΑΤΑ Η.

Διαβάστε περισσότερα

ΝΕΕΣ ΔΥΝΑΤΟΤΗΤΕΣ-ΒΕΛΤΙΩΣΕΙΣ ΑΝΑΒΑΘΜΙΣΗΣ 2.60

ΝΕΕΣ ΔΥΝΑΤΟΤΗΤΕΣ-ΒΕΛΤΙΩΣΕΙΣ ΑΝΑΒΑΘΜΙΣΗΣ 2.60 ΝΕΕΣ ΔΥΝΑΤΟΤΗΤΕΣ-ΒΕΛΤΙΩΣΕΙΣ ΑΝΑΒΑΘΜΙΣΗΣ 2.60 Περιεχόμενα 1. Βελτίωση. Προσθήκη νέου εργαλείου για μεταφορά χκ στην επόμενη χρήση.... 2 ΕΛΕΓΧΟΣ ΚΑΙ ΜΕΤΑΦΟΡΑ ΧΡΗΜΑΤΙΚΩΝ ΚΑΤΑΛΟΓΩΝ ΣΤΗΝ ΕΠΟΜΕΝΗ ΧΡΗΣΗ... 2

Διαβάστε περισσότερα

H countif μετράει το πλήθος των κελιών, σε μία περιοχή που ικανοποιεί την καθορισμένη συνθήκη.

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

Διαβάστε περισσότερα

Εξεταστική περίοδος χειμερινού εξαμήνου

Εξεταστική περίοδος χειμερινού εξαμήνου Τ.Ε.Ι. ΠΕΙΡΑΙΑ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΙΑΣ Διδάσκων: Δρ. Π. Β. Μαλατέστας, Καθηγητής Ημερομηνία : 06/0/0 Διάρκεια: h 5in Ονοματεπώνυμο σπουδαστή: Αριθμός μητρώου: Μάθημα : Ηλεκτρική

Διαβάστε περισσότερα

ΑΣΚΗΣΗ 7 ΚΥΚΛΩΜΑ R-L-C: ΣΥΝΔΕΣΗ ΣΕ ΣΕΙΡΑ ΣΥΝΤΟΝΙΣΜΟΣ

ΑΣΚΗΣΗ 7 ΚΥΚΛΩΜΑ R-L-C: ΣΥΝΔΕΣΗ ΣΕ ΣΕΙΡΑ ΣΥΝΤΟΝΙΣΜΟΣ ΑΣΚΗΣΗ 7 ΚΥΚΛΩΜΑ R-L-C: ΣΥΝΔΕΣΗ ΣΕ ΣΕΙΡΑ ΣΥΝΤΟΝΙΣΜΟΣ 1 Σκοπός Στην άσκηση αυτή μελετάται η συμπεριφορά ενός κυκλώματος RLC σε σειρά κατά την εφαρμογή εναλλασσόμενου ρεύματος. Συγκεκριμένα μελετάται η μεταβολή

Διαβάστε περισσότερα

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό

> μεγαλύτερο <= μικρότερο ή ίσο < μικρότερο == ισότητα >= μεγαλύτερο ή ίσο!= διαφορετικό 5 ο Εργαστήριο Λογικοί Τελεστές, Δομές Ελέγχου Λογικοί Τελεστές > μεγαλύτερο = μεγαλύτερο ή ίσο!= διαφορετικό Οι λογικοί τελεστές χρησιμοποιούνται για να ελέγξουμε

Διαβάστε περισσότερα