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

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

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

Transcript

1 ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙΔΕΥΤΙΚΟ ΙΔΡΥΜΑ ΚΑΒΑΛΑΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΒΙΟΜΗΧΑΝΙΚΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΠΡΟΣΟΜΟΙΩΣΗ ΚΥΚΛΩΜΑΤΩΝ ΤΡΙΦΑΣΙΚΩΝ ΚΥΚΛΟΜΕΤΑΤΡΟΠΕΩΝ ΓΕΦΥΡΑΣ 6 ΚΑΙ 12 ΠΑΛΜΩΝ ΣΠΟΥΔΑΣΤΡΙΑ Χρηστίδου Σοφία ΕΙΣΗΓΗΤΗΣ Δρ. Κυραναστάσης Γεώργιος ΚΑΒΑΛΑ

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

3 ΚΕΦΑΛΑΙΟ 3 Μερική ανάλυση του Neapolis Τα μέρη του Neapolis Neapolis (Neapolis.exe) Οθόνη αρχικών ρυθμίσεων Φόρμα «Προσδιορισμού Συστήματος» Neapart2 (Neapart2.exe) Οθόνη κυματομορφών συστήματος Οθόνη εμφάνισης κυκλώματος Neapart3 (Neapart3.exe)...30 ΚΕΦΑΛΑΙΟ 4 Εγχειρίδιο χρήστη Περιγραφή εναλλακτικής φόρμας προσομοίωσης Διαδικασία για την εισαγωγή στο εναλλακτικό περιβάλλον προσομοίωσης, μέσω της επιλογής << Εμφάνιση Κυκλώματος >> Μέρη της φόρμας << Εμφάνιση Κυκλώματος >> Μπάρα επιλογών Μπάρα εμφάνισης αποτελεσμάτων Αλλαγή χρώματος σχεδίασης..38 ΚΕΦΑΛΑΙΟ 5 Κυκλώματα που αναπτύχθηκαν Εμφάνιση αποτελεσμάτων Κυκλώματα που αναπτύχθηκαν Τριφασικός κυκλομετροπέας γέφυρας 6 παλμών Τριφασικός κυκλομετροπέας γέφυρας 12 παλμών Προσομοίωση συστήματος Ανάλυση αποτελεσμάτων Κυματομορφές κυκλώματος..45 3

4 ΚΕΦΑΛΑΙΟ 6 Βοηθητικές οδηγίες για την ανάπτυξη κώδικα στο περιβάλλον της Visual Basic Εισαγωγή Προετοιμασία για την έναρξη συγγραφής κώδικα στο περιβάλλον της VB6 για το Neapolis Εγκατάσταση του Visual Studio 6 Enterprise Διαδικασία εγκατάστασης Neapolis Development Λειτουργία της εφαρμογής Διαδικασία εμφάνισης του επιθυμητού κυκλώματος Εισαγωγή στη φόρμα SimCircuitForm Η συνάρτηση AddButtons Η συνάρτηση LoadWaveForms Η συνάρτηση FillSimCircuitForm Η συνάρτηση DrawCircuit Συναρτήσεις σχεδιασμού στοιχείων κυκλώματος Εισαγωγή Η συνάρτηση σχεδιασμού ευθείας Drawline Η συνάρτηση σχεδιασμού στοιχείου οργάνων,drawiv Η συνάρτηση σχεδιασμού στοιχείου αντίστασης, DrawResistance Η συνάρτηση σχεδιασμού στοιχείου πηνίου, DrawCoil Η συνάρτηση σχεδιασμού στοιχείου διόδου, DrawDiode Η συνάρτηση σχεδιασμού στοιχείου πηγής εναλλασσόμενου,drawacc Συναρτήσεις σχεδιασμού κυκλωμάτων Εισαγωγή Συναρτήσεις σχεδιασμού κυκλώματος 3-φ κυκλομετατροπέα γέφυρας 6παλμών Συναρτήσεις σχεδιασμού κυκλώματος 3-φ κυκλομετατροπέα γέφυρας 12παλμών Συναρτήσεις Προσομοίωσης Εισαγωγή Η συνάρτηση LoadValues Η συνάρτηση Plot Η συνάρτηση Toolbar1_ButtonClick Η συνάρτηση Form_Load Διαδικασία Εκτύπωσης

5 ΚΕΦΑΛΑΙΟ 7 Οδηγός για το περιβάλλον της Visual Basic Οδηγίες κατά την εκκίνηση Δήλωση μεταβλητών Μεταβλητές Πίνακες μεταβλητών Εσωτερικές συναρτήσεις Εντολές και τελεστές συγκρισής Βρόγχοι (επαναληπτικές διαδικασίες) Γραφικά..233 ΠΑΡΑΡΤΗΜΑ..246 Πίνακα Matrix..246 ΒΙΒΛΙΟΓΡΑΦΙΑ 256 5

6 Εισαγωγή Η παρούσα πτυχιακή εργασία αποτελεί κομμάτι μιας μεγάλης προσπάθειας του καθηγητή Κυραναστάση Γεώργιου και κατόπιν, των φοιτητών του. Σκοπός αυτής της προσπάθειας είναι η αναβάθμιση του προγράμματος Neapolis για ένα πιο ευχάριστο, εύχρηστο, πρακτικό και κατανοητό περιβάλλον για τον χρήστη με μεγαλύτερη ευελιξία, χρησιμοποιώντας σχήματα και διάφορες άλλες δυνατότητες που κάνουν το πρόγραμμα πιο ανταγωνιστικό και πιο χρήσιμο. Πιο συγκεκριμένα, στην παρούσα εργασία αναπτύσσεται το κομμάτι του 3φασικού κυκλομετατροπέα γέφυρας 6 και 12 παλμών. Κατά την διάρκεια της εξομοίωσης του κυκλώματος θα έχουμε την δυνατότητα να βλέπουμε το κύκλωμα με την επιλογή «εμφάνιση κυκλώματος», θα μπορούμε να κατανοήσουμε την λειτουργία του κυκλώματος βάσει των χρωματικών αλλαγών των διόδων, να παίρνουμε μετρήσεις από τα υπάρχοντα όργανα του κυκλώματος, να εμφανίζουμε τις ενεργές και μέσες τιμές επιλέγοντας τα κουμπιά Rms και Aver αντίστοιχα, ενώ με το πάτημα ανάλογων κουμπιών θα έχουμε την δυνατότητα να βλέπουμε τις κυματομορφές σε ξεχωριστά παράθυρα για πιο εύκολη μελέτη. Τέλος, θα έχουμε την δυνατότητα να επιστρέψουμε και να επανέλθουμε από το «αρχικό περιβάλλον προσομοίωσης» στο «εμφάνιση κυκλώματος» και το αντίθετο. 6

7 ΚΕΦΑΛΑΙΟ 1 ΔΟΜΗ ΑΠΑΙΤΗΣΕΙΣ ΠΤΥΧΙΑΚΗΣ 1.1 Δομή πτυχιακής Η πτυχιακή διασπάται στα παρακάτω τμήματα: Περιγραφή του 3φ - Κυκλομετροπέα Γέφυρας. Εδώ θα αναφέρουμε κάποια θεωρητικά στοιχεία του κυκλομετατροπέα γέφυρας με τον οποίο θα ασχοληθούμε. Μερική Περιγραφή του Νεάπολις. Στο συγκεκριμένο τμήμα θα περιγράψουμε με λίγα λόγια τα τμήματα εκείνα του Νεάπολις τα οποία θα συναντήσει ο αναγνώστης και πώς συνδέεται το περιβάλλον το οποίο αναπτύξαμε με το ήδη υπάρχον. Περιγραφή του Εμφανιζόμενου Κυκλώματος - Εγχειρίδιο Χρήστη. Στο τμήμα αυτό θα αναλυθεί το περιβάλλον που δημιουργήθηκε, ποιες είναι οι λειτουργίες του και πως μπορούν αυτές να χρησιμοποιηθούν από τον χρήστη. Κυκλώματα που Αναπτύχθηκαν Περιγραφή Αποτελεσμάτων. Εδώ συγκεκριμένα αναλύονται όλα τα κυκλώματα που αναπτύχθηκαν καθώς και τα αποτελέσματα που εμφανίζονται από τα εκάστοτε κυκλώματα. Εγχειρίδιο Προγραμματιστή Αναλυτική Περιγραφή του Κώδικα που αναπτύχθηκε. Στο κομμάτι αυτό της πτυχιακής θα γίνει αναλυτική περιγραφή των βημάτων που έγιναν για την έναρξη συγγραφής κώδικα καθώς και ανάλυση αυτού. Οδηγός για την Visual Basic 6.0. Εδώ θα βρει ο αναγνώστης έναν συνοπτικό οδηγό για την Visual Basic 6. Κώδικας που αναπτύχθηκε. Εδώ μπορεί να δει κάποιος όλο τον κώδικα που αναπτύχθηκε και τμήματα κώδικα αναγκαία για τον προγραμματιστή. Παράρτημα. Παράθεση πίνακα Matrix. 1.2 Απαιτήσεις πτυχιακής Σχεδίαση κυκλωμάτων 3φ-Κυκλομετατροπέα Γέφυρας (6παλμών και 12παλμών). Εμφάνιση αποτελεσμάτων κατά την προσομοίωση. 7

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

9 ΚΕΦΑΛΑΙΟ 2 ΣΥΝΤΟΜΗ ΠΕΡΙΓΡΑΦΗ ΤΩΝ ΧΑΡΑΚΤΗΡΙΣΤΙΚΩΝ ΚΑΙ ΤΗΣ ΛΕΙΤΟΥΡΓΙΑΣ ΤΩΝ ΚΥΚΛΟΜΕΤΑΤΡΟΠΕΩΝ 2.1. Σύντομη περιγραφή των χαρακτηριστικών των κυκλομετατροπέων Οι κυκλομετατροπείς είναι διατάξεις ελεγχομένων ανορθωτών που μετατρέπουν πολυφασικές εναλλασσόμενες κυματομορφές σε μονοφασικές ή τριφασικές με ελεγχόμενη συχνότητα και πλάτος χωρίς την ενδιάμεση μετατροπή τους σε συνεχείς κυματομορφές. Στην πιο απλή μορφή τους αποτελούνται από μία σειρά θυρίστορς που χρησιμοποιούνται σαν ελεγχόμενοι διακόπτες. Κατά κανόνα, τα θυρίστορς κάθε φάσεως είναι τοποθετημένα σε δύο ομάδες. Τα θυρίστορς κάθε ομάδας είναι τοποθετημένα σε τριάδες έτσι ώστε η διεύθυνση αγωγής κάθε ομάδας να είναι αντίθετη από την διεύθυνση αγωγής της άλλης. Ανάλογα με τον τρόπο συνδέσεως των τριάδων κάθε ομάδας, οι κυκλομετατροπείς διακρίνονται σε δύο μεγάλες κατηγορίες: Παράλληλοι ή μεσαίας λήψεως, στους οποίους οι τριάδες συνδέονται παράλληλα και, Σε σειρά ή γέφυρας, στους οποίους οι τριάδες συνδέονται σε σειρά. Ο αριθμός των θυρίστορς κάθε ομάδας μίας φάσεως λέγεται αριθμός παλμών του κυκλομετατροπέα. Σχήμα 2.1: Kύκλωμα Tριφασικού Kυκλομετατροπέα 3 παλμών 9

10 Η βασική λειτουργία του κυκλομετατροπέα είναι να κατασκευάζει μία ανώμαλη κυματομορφή τάσεως στην έξοδο με την επιθυμητή συχνότητα, άμεσα από τις κυματομορφές των τάσεων της εισόδου, ανοίγοντας και κλείνοντας τους διακόπτες θυρίστορς με κατάλληλο τρόπο. Αυτή η ανώμαλη κυματομορφή φιλτράρεται, αν χρειάζεται, και έτσι μπορεί να παραχθεί μία τελική κυματομορφή πολύ καλής ποιότητας. Λόγω του ότι τα θυρίστορς παρουσιάζουν σχετικά μικρές απώλειες, οι κυκλομετατροπείς είναι ικανοί να μετατρέπουν κυματομορφές μεγάλης ισχύος με πολύ καλή απόδοση. Με κατάλληλο έλεγχο των χρονικών στιγμών εναύσεως των θυρίστορς είναι δυνατή η ρύθμιση τόσο της συχνότητας όσο και του πλάτους των κυματομορφών της τάσεως εξόδου. Λόγω του ότι η μεταφορά του ρεύματος μεταξύ των θυρίστορς ελέγχεται από τις τάσεις τροφοδοσίας, η μέγιστη χρήσιμη συχνότητα εξόδου είναι για τις πιο πρακτικές περιπτώσεις μικρότερη από την συχνότητα της εισόδου. Τυπικά η μέγιστη χρήσιμη συχνότητα εξόδου βρίσκεται ανάμεσα στο ⅓ και τα ¾ της συχνότητας εισόδου, ανάλογα με τον αριθμό παλμών του κυκλομετατροπέα και την παραμόρφωση που επιτρέπεται στην έξοδο. Σχήμα 2.2 : θεωρητική κυματομορφή τάσεως εξόδου μίας φάσης τριφασικού κυκλομετατροπέα 6 παλμών για μέγιστη επιθυμητή τάση και συχνότητα εξόδου ίση με το 1/6 της συχνότητας εισόδου Ο κυκλομετατροπέας μπορεί να λειτουργήσει με φορτία κάθε συντελεστή ισχύος και η ισχύς μπορεί να μεταφέρεται και από την είσοδο προς την έξοδο και αντίστροφα. Η λειτουργία του χαρακτηρίζεται από την παραγωγή αρμονικών στο κύκλωμα τόσο της εξόδου όσο και της εισόδου. Ο συντελεστής ισχύος που παρουσιάζει στην είσοδο είναι μόνιμα επαγωγικός ανεξάρτητα από τον συντελεστή ισχύος του συνδεδεμένου φορτίου. Η παραμόρφωση της κυματομορφής της τάσεως εξόδου αυξάνει όσο μεγαλώνει ο λόγος των συχνοτήτων εξόδου εισόδου. Ταυτόχρονα η παραμόρφωση αυτή μειώνεται όσο μεγαλώνει ο αριθμός παλμών του κυκλομετατροπέα για τον ίδιο λόγο συχνοτήτων. 10

11 Για να αυξηθεί η ισχύς που πρέπει να μεταφερθεί μέσω του κυκλομετατροπέα κατά κανόνα πρέπει να αυξηθεί ο αριθμός των παλμών του. Στην δική μας περίπτωση, στους κυκλομετατροπείς γέφυρας, η αύξηση της ισχύος γίνεται με αύξηση της τάσεως, δηλαδή με αύξηση του αριθμού των σε σειρά συνδεδεμένων τριάδων κάθε ομάδας Αρχή και τρόποι λειτουργίας του κυκλομετατροπέα Ο τρόπος λειτουργίας του κυκλομετατροπέα έχει άμεση σχέση με την δομή του κυκλώματος κάθε φάσεως εξόδου του που αποτελείται από θυρίστορς κατανεμημένα σε δύο ομάδες. Τα θυρίστορς που φέρουν το θετικό ρεύμα της φάσεως ανήκουν στην θετική ομάδα και εκείνα που φέρουν το αρνητικό ρεύμα ανήκουν στην αρνητική. Έτσι κάθε ομάδα μπορεί να άγει προς μία μόνο κατεύθυνση. Εξετάζοντας μία φάση εξόδου του κυκλομετατροπέα και παίρνοντας υπόψη μόνο την θεμελιώδη συνιστώσα του ρεύματος και της τάσεως εξόδου, η φάση αυτή μπορεί να παρασταθεί σαν ένα σύστημα δύο πηγών τάσεως εναλλασσόμενου ρεύματος με την συχνότητα και το πλάτος που πρέπει να υπάρχουν στην έξοδο (όπως φαίνονται στο σχήμα 2.3.). Αυτό το σύστημα θα αναφέρεται σαν ιδανικοποιημένος κυκλομετατροπέας. Οι δίοδοι που υπάρχουν σε σειρά με την κάθε πηγή τάσεως παριστάνουν την συνθήκη αγωγής ρεύματος μόνο προς την μία κατεύθυνση. Για λόγους αναφοράς, η θετική ομάδα ονομάζεται θετικός μετατροπέας και η αρνητική ομάδα αρνητικός μετατροπέας. Σχήμα 2.3: O Ιδανικοποιημένος Μετατροπέας Το σύστημα ελέγχου του ιδανικοποιημένου κυκλομετατροπέα είναι τέτοιο ώστε οι ισοδύναμες πηγές τάσεως κάθε μετατροπέα να έχουν το ίδιο πλάτος, την ίδια συχνότητα και την ίδια φάση. Είναι φανερό ότι το φορτίο βλέπει από τους 11

12 ακροδέκτες της εξόδου μία πηγή τάσεως με μηδενική εσωτερική αντίσταση, οπότε και το ρεύμα φορτίου μπορεί να κυκλοφορήσει σε οποιαδήποτε κατεύθυνση σε κάθε χρονική στιγμή, ανεξάρτητα από την στιγμιαία πολικότητα της τάσεως. Δηλαδή, είναι δυνατό η μέση ισχύς να ρέει είτε προς ή από τους ακροδέκτες εξόδου και ο κυκλομετατροπέας να μπορεί να λειτουργήσει με φορτία οποιουδήποτε συντελεστή ισχύος. Αυτό σημαίνει ότι σε περιπτώσεις που ο συντελεστής ισχύος του φορτίου είναι μικρότερος από την μονάδα, κάθε μετατροπέας, κατά την διάρκεια μίας ημιπεριόδου του ρεύματος φορτίου, παράγει και θετικά και αρνητικά κομμάτια της κυματομορφής της τάσεως εξόδου, δηλαδή λειτουργεί και σαν ανορθωτής και σαν αντιστροφέας. Είναι γνωστό ότι η μέση τάση εξόδου ενός απλού μετατροπέα δύο τεταρτημορίων είναι μηδέν όταν η γωνία εναύσεως των θυρίστορς του είναι 90 μοίρες. Έτσι μπορεί να δεχτεί κανείς ότι το σημείο ηρεμίας ενός κυκλομετατροπέα θα είναι εκείνο που οι γωνίες εναύσεως και των δύο μετατροπέων του είναι 90 μοίρες. Για την παραγωγή μίας μέσης θετικής τάσεως εξόδου, η γωνία εναύσεως του θετικού μετατροπέα πρέπει να είναι μικρότερη των 90 μοιρών κατά α μοίρες και η αντίστοιχη του αρνητικού μετατροπέα μεγαλύτερη των 90 μοιρών κατά α μοίρες. Το αντίστροφο πρέπει να γίνει για την παραγωγή μίας μέσης αρνητικής τάσεως. Από τα παραπάνω γίνεται φανερό ότι για την παραγωγή μίας μέσης μεταβαλλόμενης τάσεως οι γωνίες των δύο μετατροπέων πρέπει να κάνουν μια συνεχή ταλάντωση γύρω από τις 90 μοίρες. Οι ταλαντώσεις των γωνιών εναύσεως πρέπει να έχουν αντίθετη φάση μεταξύ τους, έτσι ώστε το άθροισμα τους να είναι 180 μοίρες. Με έλεγχο της συχνότητας και του πλάτους αυτής της ταλαντώσεως, η επιθυμητή τάση εξόδου μπορεί να ελέγχεται. Στην πράξη όμως, επειδή οι γωνίες εναύσεως των μετατροπέων υπολογίζονται σε διακεκριμένα χρονικά διαστήματα, παρουσιάζονται στιγμιαίες διαφορές τάσεως μεταξύ των δύο μετατροπέων που, εφόσον δεν υπάρχει κάποια αντίσταση στο κύκλωμα, μπορούν να δημιουργήσουν άπειρο, θεωρητικά, εσωτερικό ρεύμα. Το ρεύμα αυτό είναι συνέπεια της ταυτόχρονης αγωγής και των δύο μετατροπέων. Πρέπει λοιπόν ή να χρησιμοποιηθεί κάποιο μέσο ελέγχου ή μειώσεως αυτού του ρεύματος ή να ελέγχονται οι παλμοί εναύσεως με τέτοιο τρόπο ώστε να μην μπορεί να κυκλοφορήσει εσωτερικό ρεύμα μεταξύ των μετατροπέων. 12

13 Σχήμα 2.4: Κυματομορφές του ιδανικοποιημένου κυκλομετατροπέα για φορτίο επαγωγικού και χωρητικού συντελεστή ισχύος. Από τα παραπάνω, είναι φανερό ότι ο κυκλομετατροπέας μπορεί να λειτουργεί με δύο βασικούς τρόπους λειτουργίας, δηλαδή με εσωτερικό ή χωρίς εσωτερικό ρεύμα. Συνήθως οι κυκλομετατροπείς λειτουργούν με εσωτερικό ρεύμα μόνο σε μερικές περιπτώσεις και μόνο για ένα μικρό κομμάτι της περιόδου του ρεύματος εξόδου Λειτουργία χωρίς εσωτερικό ρεύμα Όταν ο κυκλομετατροπέας λειτουργεί χωρίς εσωτερικό ρεύμα, κάθε μετατροπέας επιτρέπεται να άγει μόνο κατά την αντίστοιχη ημιπερίοδο του ρεύματος φορτίου, ενώ κατά την άλλη είναι εντελώς μπλοκαρισμένος. Έτσι δεν κυκλοφορεί εσωτερικό ρεύμα μεταξύ των δύο μετατροπέων γιατί μόνο ένας μετατροπέας άγει σε κάθε χρονική στιγμή Λειτουργία με εσωτερικό ρεύμα Όταν ο κυκλομετατροπέας λειτουργεί με εσωτερικό ρεύμα, και οι δύο μετατροπείς μπορούν να άγουν ταυτόχρονα. Η λειτουργία με εσωτερικό ρεύμα σε κυκλομετατροπέα 6 παλμών φαίνεται στο παρακάτω σχήμα. 13

14 Σχήμα 2.5.: Κυματομορφές που δείχνουν την λειτουργία με εσωτερικό ρεύμα σε κυκλομετατροπέα 6 παλμών. Η αγωγή και των δύο μετατροπέων έχει σαν αποτέλεσμα την κυκλοφορία ενός εσωτερικού ρεύματος μεταξύ τους επιπρόσθετα στο ρεύμα φορτίου. Ένα μέρος από αυτό το ρεύμα οφείλεται σε στιγμιαίες διαφορές της τάσεως των δύο μετατροπέων, ενώ το υπόλοιπο είναι ένα αυτοδιεγειρόμενο ρεύμα που οφείλεται στην αποθηκευμένη ενέργεια του πηνίου που τοποθετείται μεταξύ των μετατροπέων για την μείωση του πρώτου. Το αυτοδιεγειρόμενο μέρος του εσωτερικού ρεύματος δεν εξαρτάται από τυχόν στιγμιαίες διαφορές τάσεως των μετατροπέων και θεωρητικά είναι ανεξάρτητο από την τιμή της επαγωγής του πηνίου περιορισμού του εσωτερικού ρεύματος. Αντιθέτως, είναι συνέπεια της φύσεως του εναλλασσομένου ρεύματος φορτίου. Στην πράξη για σχετικά μικρό λόγο συχνοτήτων εξόδου-εισόδου αυτό το ρεύμα μπορεί και να μην υπάρχει. Η μέση τιμή του αυτοδιεγειρόμενου εσωτερικού ρεύματος φτάνει μέχρι το 57% της μέσης τιμής του ρεύματος φορτίου. Αυτό σημαίνει ότι οι μετατροπείς, εκτός από το χρήσιμο ρεύμα φορτίου, πρέπει να τροφοδοτήσουν και ένα σημαντικά μεγάλο ρεύμα που δεν παράγει χρήσιμη ισχύ. Για τον λόγο αυτό, αυτός ο τρόπος λειτουργίας χρησιμοποιείται σε ειδικές μόνο περιπτώσεις, για μικρές τιμές του ρεύματος φορτίου και μόνο σε ένα μικρό κομμάτι της περιόδου του ρεύματος φορτίου. 14

15 2.3. Προβλήματα και μέθοδοι ελέγχου κυκλομετατροπέων Το σύστημα ελέγχου του κυκλομετατροπέα έχει να κάνει δύο δουλειές. Η πρώτη είναι να διαλέξει την χρονική στιγμή που θα αλλάξει η παλμοδοτούμενη ομάδα και η δεύτερη να διαλέξει την χρονική στιγμή που θα δώσει παλμό στα θυρίστορς της ομάδας αυτής. Κατά κανόνα, η αλλαγή παλμοδοτούμενης ομάδας είναι συνέπεια της αλλαγής πολικότητας του ρεύματος φορτίου, ενώ η παλμοδότηση ενός θυρίστορ έχει σχέση με την μορφή της κυματομορφής της επιθυμητής τάσεως εξόδου Έλεγχος επιλογής ομάδας Τα κύρια προβλήματα στην επιλογή ομάδας προέρχονται από ασυνέχειες του ρεύματος φορτίου πριν από την αλλαγή σημείου στην ημιπερίοδο του και κατά συνέπεια είναι προβλήματα αναγνωρίσεως της σωστής αλλαγής σημείου του ρεύματος φορτίου. Τέτοιες ασυνέχειες στο ρεύμα παρουσιάζονται και κατά την φόρτιση του κυκλομετατροπέα με καθαρά χωρητικό ή ισχυρά χωρητικό φορτίο L C του οποίου η επαγωγή είναι ανίκανη να διατηρήσει συνεχές ρεύμα. Μία τέτοια περίπτωση φαίνεται στο παρακάτω σχήμα. Σχήμα 2.6 :Θεωρητικές κυματομορφές ισχυρά χωρητικά φορτισμένου κυκλομετατροπέα. Για την αντιμετώπιση αυτού του προβλήματος έχουν προταθεί αρκετές λύσεις, κάθε μία από τις οποίες έχει άμεση σχέση με το συγκεκριμένο πρόβλημα για το οποίο προτάθηκε. Η πρώτη από αυτές προτείνει ένα κλειστό βρόγχο ελέγχου της στιγμιαίας διαφοράς μεταξύ επιθυμητής και πραγματικής τάσεως εξόδου με σκοπό την διόρθωση της γωνίας εναύσεως και τον εξαναγκασμό της πραγματικής τάσεως να ακολουθεί την επιθυμητή. Στην πράξη υπάρχει μια παραμόρφωση και για την 15

16 μέθοδο αυτή, συγκεκριμένα στο σημείο αλλαγής σημείου του ρεύματος που μειώνεται σημαντικά όσο αυξάνει ο λόγος των συχνοτήτων εισόδου-εξόδου. Μία άλλη λύση είναι η λειτουργία με εσωτερικό ρεύμα στα σημεία που υπάρχει κίνδυνος ασυνέχειας, οπότε εφόσον και οι δύο ομάδες παλμοδοτούνται ταυτόχρονα, δεν υπάρχει πρόβλημα επιλογής. Θα πρέπει όμως να ληφθεί πρόνοια ώστε η περίοδος αγωγής και των ομάδων να είναι μικρή με σκοπό να αποφευχθεί η επιπρόσθετη φόρτιση με μεγάλο εσωτερικό αυτοδιεγειρόμενο ρεύμα. Έχει υπολογιστεί ότι το επιπλέον ρεύμα φτάνει μόνο τα 2% του ρεύματος φορτίου αν οι δύο ομάδες άγουν όταν το ρεύμα φορτίου είναι μικρότερο κατ απόλυτη τιμή του 20% της μέγιστης τιμής του. Πάλι όμως υπάρχει μία μικρή παραμόρφωση όταν γίνεται μετάπτωση από την αγωγή της μίας ομάδας στην αγωγή και των δύο και αντίστροφα. Μια τρίτη λύση είναι η σταθερή επιλογή της πρώτης αλλαγής σημείου του ρεύματος φορτίου εκεί που τελειώνει η περίοδος του σαν σημείου αλλαγής παλμοδοτούμενης ομάδας, ενώ αγνοούνται τυχόν επόμενοι μηδενισμοί για ένα διάστημα, μέχρις ότου υπάρχει σίγουρη περίοδος συνεχούς αγωγής. Τροποποιήσεις της παραπάνω μεθόδου θεωρούν σαν σημείο νέας επιλογής εκείνο που θα παρουσιαστεί αφού το ρεύμα φορτίου ξεπεράσει μια ορισμένη τιμή ή αν το ρεύμα σε μία άλλη φάση έχει συγκεκριμένη πολικότητα, αν φυσικά πρόκειται για τριφασικό κυκλομετατροπέα. Η τελευταία τροποποίηση έχει το πλεονέκτημα ότι η αλλαγή παλμοδοτούμενης ομάδας είναι ανεξάρτητη από τον χρόνο ή το πλάτος και μπορεί να εφαρμοστεί για έλεγχο της συχνότητας σε μεγάλη περιοχή και με μεταβλητό φορτίο. Και αυτή όμως η μέθοδος παρουσιάζει παραμόρφωση, και μάλιστα μερικές φορές σημαντική, ιδιαίτερα αν κοντά στο τέλος της περιόδου υπάρχει κυμάτωση ή και ασυνέχειες στο ρεύμα φορτίου. Μία τελευταία μέθοδος χρησιμοποιεί μετά από φιλτράρισμα την θεμελιώδη συνιστώσα του ρεύματος φορτίου για την επιλογή ομάδας, με αποτέλεσμα σχεδόν εξαφάνιση της παραμόρφωσης της κυματομορφής εξόδου. Στην πράξη όμως, ο μηδενισμός του ρεύματος δεν γίνεται ακριβώς στο σημείο μηδενισμού της θεμελιώδους συνιστώσας του και έτσι αναγκαστικά χρησιμοποιείται ο πλησιέστερος πραγματικός. Το πρόβλημα της επιλογής γίνεται δύσκολο αν ο πραγματικός μηδενισμός συμβαίνει πριν από εκείνον της θεμελιώδους, ενώ η λήψη της θεμελιώδους χωρίς φασική μετατόπιση είναι ένα άλλο πρόβλημα σε εφαρμογές με μεγάλη περιοχή μεταβολής συχνότητας και φορτίου Έλεγχος επιλογής θυρίστορ Η μέθοδος των τεμνομένων συνημιτονικών κυμάτων, που είναι κλασική για τον έλεγχο των χρονικών στιγμών εναύσεως των θυρίστορς του κυκλομετατροπέα και 16

17 βάση για μια σειρά παρεμφερών μεθόδων ελέγχου, καθορίζει τις στιγμές εναύσεως των θυρίστορς από την τομή της κυματομορφής της επιθυμητής τάσεως εξόδου κάθε φάσεως με ένα σύστημα συνημιτονικών κυμάτων που προέρχονται από τις κυματομορφές των τάσεων της τροφοδοσίας. Η μέθοδος αυτή παράγει την ελάχιστη δυνατή συνολική παραμόρφωση στην κυματομορφή της τάσεως εξόδου (σχήμα 2.7.). Σχήμα 2.7. : Θεωρητικές κυματομορφές, ενδεικτικές της λειτουργίας της μεθόδου των τεμνομένων συνημιτονικών κυμάτων Σαν μέθοδος ανοιχτού βρόγχου όμως, δημιουργεί ορισμένη παραμόρφωση, η οποία χωρίς κατάλληλο έλεγχο μπορεί να οδηγήσει σε αστάθεια. Η πρώτη πηγή παραμορφώσεως έχει σχέση με τις υποαρμονικές που αναπόφευκτα έχει η κυματομορφή της τάσεως εξόδου. Οι υποαρμονικές έχουν σχετικά μικρό πλάτος, αλλά αν το κύκλωμα του φορτίου έχει μικρή αντίσταση σε αυτές, θα δημιουργηθεί σημαντικό υποαρμονικό ρεύμα φορτίου, ιδιαίτερα επιβλαβές για φορτία όπως οι ασύγχρονοι κινητήρες. Μια δεύτερη πηγή παραμορφώσεως είναι οι αναπόφευκτες πρακτικές ατέλειες στα κυκλώματα παλμοδοτήσεως, ιδιαίτερα όταν χρειάζεται να λειτουργήσει ο κυκλομετατροπέας με σχετικά μικρή τάση εξόδου και σε μεγάλη περιοχή συχνοτήτων εξόδου. Η μείωση αυτής της παραμόρφωσης μπορεί να γίνει με την ανατροφοδότηση της κυματομορφής της τάσεως εξόδου, κατάλληλα φιλτραρισμένης στην αναλογική τάση που παριστάνει την επιθυμητή έξοδο, με σκοπό την διόρθωση της γωνίας έναυσης χωρίς μεταβολή στην βασική διαδικασία. 17

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

19 μεταφορά του ρεύματος από θυρίστορ σε θυρίστορ. Παρουσιάζεται τότε ταυτόχρονη αγωγή δύο θυρίστορς ανά τριάδα, ή και περισσότερων μερικές φορές, κατά την περίοδο που ανάβει ένα θυρίστορ για να πάρει αυτό το ρεύμα ή μέρος του ρεύματος φορτίου. Η διάρκεια της ταυτόχρονης αγωγής εξαρτάται από το ρεύμα που πρόκειται να μεταφερθεί, την γωνία έναυσης και την επαγωγή του μετασχηματιστή. Η επίδραση στα εξωτερικά χαρακτηριστικά συνίσταται σε μείωση της μέσης τάσης εξόδου και τροποποίηση του αρμονικού περιεχομένου της. Ακόμα προκαλεί μια μικρή μείωση στον συντελεστή μετατοπίσεως στην είσοδο και τροποποίηση του αρμονικού περιεχομένου του ρεύματος εισόδου. Η ανάλυση της επίδρασης αυτής είναι πολύ δύσκολη με αναλυτική μέθοδο και έχει γίνει μόνο ποιοτικά και προσεγγιστικά. Η δυναμική εξομοίωση όμως μπορεί να δώσει μια εκτίμηση της επιδράσεως αυτής με κάθε επιθυμητή ακρίβεια. Στο σχήμα 2.8. φαίνεται η θεωρητική επίδραση της επαγωγικής αντίστασης του μετασχηματιστή τροφοδοσίας στην τάση εξόδου κυκλομετατροπέα 6 παλμών με μονοφασική έξοδο. Στους κυκλομετατροπείς μεσαίας λήψεως, σε κάθε χρονική στιγμή, οι τάσεις των φάσεων τροφοδοσίας που συνδέονται σε δύο παράλληλες διαδοχικές τριάδες παρουσιάζουν μεταξύ τους σημαντική διαφορά φάσεως με αποτέλεσμα τα ρεύματα κάθε τριάδας να μεταβάλλονται πολύ απότομα, να μην είναι δυνατό να διατηρηθεί η ταυτόχρονη αγωγή τους και να παρουσιάζεται υπερφόρτιση της μίας ως προς την άλλη, ακόμη και αγωγή μόνο μίας από τις δύο διαδοχικές. Για την αποφυγή αυτής της έντονης διακυμάνσεως στα ρεύματα και με σκοπό την κατά το δυνατό ισοκατανομή τους, τοποθετούνται ανάμεσα σε δύο διαδοχικές τριάδες και σε διαδοχικά ζεύγη τριάδων εσωτερικά πηνία εξομαλύνσεως. Οι διακυμάνσεις της τάσεως στα άκρα των πηνίων που συνδέουν διαδοχικά ζεύγη τριάδων έχουν περίπου το μισό πλάτος και έτσι τα πηνία αυτά μπορούν να έχουν μικρότερη επαγωγή. Στην πράξη δεν υπάρχει τέλεια ισοκατανομή ρευμάτων και για μικρή φόρτιση του κυκλομετατροπέα μπορεί να άγει μόνο μία τριάδα ανά ομάδα, ενώ άγει μόνο μία στην λειτουργία χωρίς φορτίο. 19

20 Σχήμα 2.8. :Θεωρητικές κυματομορφές μονοφασικού κυκλομετατροπέα 6 παλμών με και χωρίς την επίδραση της επαγωγής τροφοδοσίας. Συνήθως η σχετική ισοκατανομή διατηρείται στο μεγαλύτερο κομμάτι της περιόδου του ρεύματος φορτίου. Στο σχήμα παρακάτω φαίνεται η θετική ομάδα μιας φάσης ενός κυκλομετατροπέα μεσαίας λήψεως 12 παλμών με εσωτερικά πηνία εξομαλύνσεως. Σχήμα 2.9. : Τα εσωτερικά πηνία εξομαλύνσεως στην θετική ομάδα μιας φάσης του κυκλομετατροπέα 12 παλμών. 20

21 Ένα τρίτο παθητικό στοιχείο του κυκλομετατροπέα είναι το πηνίο περιορισμού του εσωτερικού ρεύματος που τοποθετείται μεταξύ των δύο ομάδων κάθε φάσεως με σκοπό την μείωση του εσωτερικού ρεύματος που δημιουργείται κατά την ταυτόχρονη αγωγή και των δύο ομάδων της φάσεως. Το πηνίο αυτό δεν είναι απαραίτητο όταν το σύστημα ελέγχου είναι τέτοιο που να παλμοδοτεί μόνο μία από τις δύο ομάδες κάθε φάσεως Διατάξεις κυκλομετατροπέων Υπάρχουν πολλές διατάξεις που χρησιμοποιούν την αρχή λειτουργίας του κυκλομετατροπέα με διάφορο βαθμό πολυπλοκότητας η κάθε μία. Η πολυπλοκότητα αυτή είναι αποτέλεσμα των απαιτήσεων για μεταφορά μεγάλης ισχύος χωρίς σημαντικό ποσοστό αρμονικών. Ανάλογα με τον τρόπο συνδέσεως των διακεκριμένων τριάδων θυρίστορς κάθε ομάδας μίας φάσεως, οι κυκλομετατροπείς χωρίζονται σε δύο μεγάλες κατηγορίες: τους κυκλομετατροπείς μεσαίας λήψεως (παράλληλη σύνδεση τριάδων με εσωτερικά πηνία εξομαλύνσεως) και τους κυκλομετατροπείς γέφυρας (σε σειρά σύνδεση τριάδων). Η διάκριση αυτή αναφέρεται στην εσωτερική δομή του κυκλώματος κάθε ομάδας και φάσεως, δηλαδή καθορίζει την δομή του μονοφασικού κυκλομετροπέα. Σχήμα : Μονοφασικός κυκλομετατροπέας μεσαίας λήψεως 6 παλμών και ένας αντίστοιχος γέφυρας. Εκτός από την παραπάνω διάκριση στην εσωτερική δομή, υπάρχει και διάκριση στον τρόπο συνδέσεως των μονοφασικών κυκλομετατροπέων για την λήψη τριφασικών κυματομορφών. Εδώ διακρίνονται τρείς κατηγορίες τριφασικών κυκλομετατροπέων. 21

22 Α) οι συμμετρικοί κυκλομετατροπείς (μεσαίας λήψεως ή γέφυρας ) έχουν τρεις φάσεις εξόδου ίδιες κυκλωματικά μεταξύ τους με διαφορά φάσεως 120 μοίρες στην παλμοδότηση κάθε φάσεως εξόδου. Η τροφοδοσία και των τριών φάσεων γίνεται από κοινό δευτερεύον στον συμμετρικό κυκλομετατροπέα μεσαίας λήψεως, ενώ χρειάζεται ανεξάρτητη τροφοδοσία για κάθε φάση ή ανεξάρτητες φάσεις στον συμμετρικό κυκλομετατροπέα γέφυρας. Σχήμα 2.11.: Συμμετρικός τριφασικός κυκλομετατροπέας μεσαίας λήψεως 12 παλμών Β) οι κυκλομετατροπείς ανοιχτού τριγώνου (μεσαίας λήψεως ή γέφυρας) χρησιμοποιούν δύο μόνο μονοφασικούς κυκλομετατροπείς με τις εξόδους τους συνδεδεμένες κατά τρίγωνο. Έχουν μικρότερο συντελεστή χρησιμοποιήσεως, χρειάζονται λιγότερα θυρίστορς, αλλά η ασυμμετρία του κυκλώματος απαιτεί πολύπλοκο σύστημα ελέγχου. Στην έξοδό τους δίνουν πιο παραμορφωμένες κυματομορφές τάσεων, το ρεύμα των θυρίστορς είναι μεγαλύτερο του ρεύματος φορτίου και ο συντελεστής ισχύος τους είναι μικρότερος εκείνου των συμμετρικών. 22

23 Σχήμα :Συμμετρικός τριφασικός κυκλομετατροπέας γέφυρας 12 παλμών. Σχήμα : Τριφασικός κυκλομετατροπέας ανοιχτού τριγώνου γέφυρας 6 παλμών. 23

24 Γ) οι κυκλομετατροπείς δακτυλίου (μεσαίας λήψεως ή γέφυρας) χρησιμοποιούν τρεις μονοφασικούς κυκλομετατροπείς συνδεδεμένους κυκλικά με φορτίο συνδεδεμένο κατά τρίγωνο. Γενικά έχουν κάπως καλύτερη συμπεριφορά από τους ανοιχτού τριγώνου αλλά κατώτεροι εκείνης των συμμετρικών. Σχήμα :Τριφασικός κυκλομετατροπέας δακτυλίου γέφυρας 6 παλμών Τυπικές εφαρμογές Προς το παρόν, δύο είναι οι κύριες περιοχές εφαρμογών των κυκλομετατροπέων. Η πρώτη αναφέρεται στα κινητήρια συστήματα μεταβλητής ταχύτητας με ρύθμιση της συχνότητας τροφοδοσίας κινητήρων εναλλασσόμενου ρεύματος. Η δεύτερη αναφέρεται στις τροφοδοσίες ισχύος σταθερής συχνότητας από γεννήτριες μεταβαλλόμενης ταχύτητας. Στην πρώτη περιοχή εφαρμογών, οι κυκλομετατροπείς χρησιμοποιούνται σε κινητήρια συστήματα σύγχρονων και ασύγχρονων τριφασικών κινητήρων μεγάλης ισχύος και μικρής ταχύτητας σε καθαρά βιομηχανικές εφαρμογές όπως η βιομηχανία τσιμέντου, όπου χρειάζονται κινητήρια συστήματα με τυπικές τιμές ταχύτητας 15 στροφές το λεπτό και ισχύς μέχρι 8 ΜW. Η χρησιμοποίηση οδοντωτών τροχών για να ληφθεί αυτή η ταχύτητα από τυπικούς τριφασικούς κινητήρες με ταχύτητες μεταξύ 500 και 1000 rpm απαιτεί μεγάλους οδοντωτούς τροχούς, ενώ η 24

25 χρησιμοποίηση κινητήρων συνεχούς ρεύματος περιορίζεται από την οριακή αντοχή του συλλέκτη και την συχνή και δαπανηρή συντήρηση. Σχήμα :Το βασικό κύκλωμα ισχύος ενός κινητήριου συστήματος κυκλομετατροπέασύγχρονου κινητήρα. Στην δεύτερη περιοχή εφαρμογών ανήκουν τα τροφοδοτικά ισχύος σταθερής συχνότητας. Τυπικό παράδειγμα είναι το σύστημα μεταβλητής ταχύτητας σταθερής συχνότητας που χρησιμοποιείται στα αεροπλάνα. Εδώ η κινητήρια μηχανή του αεροπλάνου, της οποίας η ταχύτητα δεν είναι σταθερή, τροφοδοτεί μια γεννήτρια της οποίας η συχνότητα εξαρτάται από την ταχύτητα του αεροπλάνου. Παλιότερα χρησιμοποιούταν ένας υδραυλικός ρυθμιστής μεταξύ κινητήριας μηχανής και γεννήτριας ώστε η γεννήτρια να έχει περίπου σταθερές στροφές. Κύριο μειονέκτημα ήταν η συχνή και δαπανηρή συντήρηση. Η χρησιμοποίηση ενός κυκλομετατροπέα σε συνδυασμό με φίλτρο στην έξοδο της γεννήτριας απάλλαξε το σύστημα από τα βασικά του μειονεκτήματα και ταυτόχρονα το έκανε πιο γρήγορο και πιο αξιόπιστο. Στην περιοχή αυτή ανήκει και η τάση να χρησιμοποιηθεί ο κυκλομετατροπέας για την παροχή ισχύος σταθερής συχνότητας από ανεμογεννήτριες. 25

26 2.7. Αρμονική παραμόρφωση κυματομορφών κυκλομετατροπέων Αρμονικό περιεχόμενο της τάσεως εξόδου Η γνώση του αρμονικού περιεχομένου της τάσεως εξόδου είναι ουσιώδεις για τον προσδιορισμό των απαιτήσεων του φίλτρου όπως και των ορίων της αποδόσεως του κυκλομετατροπέα. Η ακριβής μορφή και δομή της κυματομορφής της τάσεως εξόδου εξαρτάται άμεσα από τους εξής παράγοντες (για τον ιδανικό κυκλομετατροπέα): Τον αριθμό παλμών του κυκλομετατροπέα Τον λόγο των συχνοτήτων εξόδου- εισόδου Το σχετικό πλάτος της τάσεως εξόδου Τον συντελεστή ισχύος του φορτίου Την χρησιμοποιούμενη μέθοδο ελέγχου Οι εκφράσεις που προκύπτουν για το αρμονικό περιεχόμενο μετά από ιδιαίτερα σύνθετη μαθηματική ανάλυση και όχι λίγες απλοποιήσεις είναι εξαιρετικά πολύπλοκες. Δεν έχει υπολογιστεί ακριβώς η επίδραση στο αρμονικό περιεχόμενο της επαγωγικής αντιστάσεως της πηγής παρά μονάχα ποιοτικά. Οι αρμονικές και υποαρμονικές έχουν αναλυτικά υπολογιστεί σαν άθροισμα γινομένου των τάσεων τροφοδοσίας και μιας διακοπτικής συναρτήσεως που προκύπτει από την χρησιμοποιούμενη μέθοδο ελέγχου. Κύριο πλεονέκτημα της μεθόδου αυτής είναι ότι μπορούν να προκύψουν γενικές εκφράσεις που περιλαμβάνουν όλους τους παράγοντες από τους οποίους εξαρτάται το αρμονικό περιεχόμενο. Οι αρμονικές που παρουσιάζονται στους κυκλομετατροπείς χωρίς εσωτερικό ρεύμα έχουν συχνότητες που είναι αθροίσματα ή διαφορές μεταξύ πολλαπλάσιων των συχνοτήτων εισόδου και εξόδου. Έτσι κάθε αρμονική συχνότητα είναι συνάρτηση τόσο της συχνότητας εξόδου όσο και της συχνότητας εισόδου. Δεν παρατηρούνται ακέραια πολλαπλάσια της συχνότητας εξόδου, εκτός από ορισμένους λόγους συχνοτήτων εξόδου-εισόδου. Φυσικά όλα τα παραπάνω ισχύουν για την περίπτωση που χρησιμοποιείται η ιδανική μέθοδος των τεμνόμενων συνημιτονικών κυμάτων. Όταν ο κυκλομετατροπέας λειτουργεί με συνεχές εσωτερικό ρεύμα ορισμένες οικογένειες αρμονικών δεν παρουσιάζονται. Οι αρμονικές συχνότητες παρουσιάζονται σε ομάδες που υπάρχουν όλες στις κυματομορφές των τριών παλμών και εξαφανίζονται βαθμιαία όσο αυξάνει ο αριθμός παλμών. Το πλάτος των παρουσιαζόμενων αρμονικών εξαρτάται από τον συντελεστή ισχύος του φορτίου και το σχετικό πλάτος της κυματομορφής της τάσεως εξόδου για λειτουργία χωρίς εσωτερικό ρεύμα και μόνο από το σχετικό πλάτος για 26

27 λειτουργία με συνεχές εσωτερικό ρεύμα. Ταυτόχρονα το πλάτος είναι ανεξάρτητο από την συχνότητα της αρμονικής. Δεν έχει καθοριστεί ακόμα ένα γενικό κριτήριο για την οριακή τιμή του λόγου των συχνοτήτων εξόδου-εισόδου που θα δίνει την μέγιστη επιτρεπτή αρμονική παραμόρφωση χωρίς την χρήση φίλτρου. Έτσι αυτή η τιμή καθορίζεται από τις απαιτήσεις της κάθε ιδιαίτερης εφαρμογής. Εάν για παράδειγμα καθοριστεί σαν μέγιστο πλάτος αρμονικής συχνότητας ένα πλάτος ίσο με 2,5% της θεμελιώδους, τότε για μλεγιστο πλάτος της τάσεως εξόδου και συντελεστή ισχύος φορτίου 1 προκύπτουν οι εξής τιμές για τον μέγιστο λόγο συχνοτήτων εξόδου-εισόδου fo/fi: Για κυκλομετατροπέα 3 παλμών.33 Για κυκλομετατροπέα 6 παλμών.5 Για κυκλομετατροπέα 12 παλμών.7 Η επίδραση της επαγωγικής αντιστάσεως της πηγής μπορεί να συνοψιστεί στα εξής: στους μονοφασικούς κυκλομετατροπείς δημιουργείται μια ξεχωριστή οικογένεια αρμονικών που παρουσιάζονται σε συχνότητες που είναι ακέραια πολλαπλάσια της συχνότητας εξόδου. Το πλάτος αυτών των αρμονικών είναι ασήμαντο (1-2% της θεμελιώδους), μειώνεται όσο μειώνεται ο λόγος των συχνοτήτων εξόδου-εισόδου και εξαρτάται από τον συντελεστή ισχύος του φορτίου. Στους τριφασικούς κυκλομετατροπείς το πλάτος των αρμονικών της οικογένειας των ακέραιων πολλαπλάσιων αυξάνει Αρμονικό περιεχόμενο του ρεύματος εισόδου Για τον προσδιορισμό των ονομαστικών τιμών και των χαρακτηριστικών της τροφοδοσίας και του μετασχηματιστή τροφοδοσίας είναι σημαντική η γνώση του αρμονικού περιεχομένου του ρεύματος εισόδου. Ο θεωρητικός υπολογισμός γίνεται με τον ίδιο τρόπο που χρησιμοποιήθηκε για την τάση εξόδου. Το ρεύμα εξόδου θεωρείται καθαρά ημιτονικό, δεν παίρνεται υπόψη η επαγωγική αντίσταση της πηγής ούτε και οι πρακτικές ατέλειες των κυκλωμάτων ελέγχου. Από τα αποτελέσματα της αναλύσεως που είναι ιδιαίτερα πολύπλοκη, φαίνεται ότι το ρεύμα εισόδου έχει δύο θεμελιώσεις συνιστώσες, μια ωμική και μία επαγωγική που η σχέση τους εξαρτάται τόσο από τον συντελεστή ισχύος του φορτίου όσο και από το σχετικό πλάτος της τάσεως εξόδου, ενώ είναι ανεξάρτητη από τον αριθμό παλμών, τον λόγο συχνοτήτων και τον αριθμό των φάσεων εξόδου. Ο συντελεστής ισχύος στην είσοδο του κυκλομετατροπέα είναι πάντα μικρότερος από εκείνον του φορτίου και είναι πάντα, ανεξάρτητα από εκείνον του φορτίου, επαγωγικός και μειώνεται όσο μειώνεται το σχετικό πλάτος της τάσεως εξόδου. 27

28 Υπάρχει μία μεγάλη ποικιλία αρμονικών συχνοτήτων στο ρεύμα εισόδου, ιδιαίτερα στους μονοφασικούς κυκλομετατροπείς, μερικές από τις οποίες είναι ανεξάρτητες από την διαμόρφωση του κυκλώματος ενώ άλλες εμφανίζονται σε μερικά από αυτά. Δεν φαίνεται να υπάρχει σημαντικό πρόβλημα αρμονικών του ρεύματος εισόδου στους τριφασικούς κυκλομετατροπείς. Το πλάτος είναι συνάρτηση μόνο του σχετικού πλάτους της τάσεως εξόδου και του συντελεστή ισχύος του φορτίου. Στους τριφασικούς κυκλομετατροπείς με σχετικά μεγάλο αριθμό παλμών, στην πράξη, δεν υπάρχει πρόβλημα αρμονικών στο ρεύμα του δικτύου τροφοδοσίας ούτε και πρόβλημα ασύμμετρης φορτίσεως των φάσεών του. Το πρόβλημα της επαγωγικής συνιστώσας του ρεύματος εισόδου που αυξάνει την Rms τιμή χωρίς να αυξάνει την χρήσιμη ισχύ αντιμετωπίζεται με την σε σειρά σύνδεση δύο ή περισσοτέρων μετατροπέων και την λειτουργία τους κατά τρόπο να εργάζεται με το μέγιστο πλάτος τάσεως εξόδου και ο άλλος με μικρότερο. Έτσι το άθροισμα των επαγωγικών συνιστωσών των ρευμάτων εισόδων τους, που όταν εργάζονται χωριστά αυξάνει όσο μειώνεται το σχετικό πλάτος της τάσεως εξόδου, μπορεί να μειωθεί ακόμα και στο μισό. 28

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

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

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

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

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

34 Σχήμα 3.8: Οθόνη εμφάνισης κυκλώματος 6παλμών Σχήμα 3.9.: Οθόνη εμφάνισης κυκλώματος 12παλμών 34

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

36 ΚΕΦΑΛΑΙΟ 4 ΕΓΧΕΙΡΙΔΙΟ ΧΡΗΣΤΗ- ΠΕΡΙΓΡΑΦΗ ΕΝΑΛΛΑΚΤΙΚΗΣ ΦΟΡΜΑΣ ΠΡΟΣΟΜΟΙΩΣΗΣ 4.1. Διαδικασία για την εισαγωγή στο εναλλακτικό περιβάλλον προσομοίωσης, μέσω της επιλογής «Εμφάνισης Κυκλώματος» Όπως ήδη αναφέρθηκε, για την εμφάνιση κυκλώματος του 3-φ μετατροπέα συχνότητας, μέσω της προσομοίωσης πρέπει να επιλεχθεί από το μενού το αντίστοιχο σύστημα όπως φαίνεται στο παρακάτω Σχήμα 4.1. Σχήμα 4.1.: Επιλογή 3-φ Μετατροπέα συχνότητας. Αφού γίνει αυτό, ενεργοποιείται η επιλογή «Προσδιορισμός συστήματος» στο μενού επιλογών της αρχικής οθόνης ρυθμίσεων. Κατόπιν πατάμε το κουμπί και οδηγούμαστε στην αντίστοιχη οθόνη. Μόλις εμφανιστεί η οθόνη για τον «Προσδιορισμό συστήματος», στην ανορθωτική διάταξη μπορούμε να κάνουμε όποια αλλαγή θέλουμε στα πλαίσια των επιλογών που μας δίνονται εννοείτε, όπως φαίνεται στο Σχήμα

37 Σχήμα 4.2.: Αλλαγή στοιχείων ανορθωτή. Αφού ολοκληρωθεί το παραπάνω βήμα και γίνουν και οι υπόλοιπες ρυθμίσεις στον «Προσδιορισμό συστήματος», στην μπάρα επιλογών πατάμε «Αρχείο» και κατόπιν «Έξοδος». Τώρα έχουν αποθηκευτεί οι ρυθμίσεις μας και, αφού κλείσει η προηγούμενη οθόνη, στην αρχική οθόνη ρυθμίσεων έχει ενεργοποιηθεί η επιλογή «Προσομοίωση συστήματος». Πατάμε το αντίστοιχο κουμπί και βγαίνουμε στην κύρια οθόνη προσομοίωσης με τις κυματομορφές. Τέλος, σε αυτήν την οθόνη πατάμε στην μπάρα επιλογών το «Αρχείο» και εκεί εμφανίζεται η επιλογή «Εμφάνιση κυκλώματος», όπως φαίνεται στο Σχήμα 4.3. Αυτή θα μας οδηγήσει στην εναλλακτική φόρμα προσομοίωσης. Σχήμα 4.3.: Επιλογή «Εμφάνιση κυκλώματος» 37

38 4.2. Μέρη της φόρμας «Εμφάνισης Κυκλώματος» Θεωρώντας ότι έχουμε μπει στην φόρμα αυτή με την διαδικασία που περιγράψαμε, όταν φορτωθεί, παίρνουμε το αποτέλεσμα του σχήματος 4.4 και 4.5. Σχήμα 4.4.: Φόρμα «Εμφάνιση Κυκλώματος» 3φασικου κυκλομετατροπέα γέφυρας 6 παλμών Σχήμα 4.5.: Φόρμα «Εμφάνιση Κυκλώματος» 3φασικου κυκλομετατροπέα γέφυρας 12 παλμών 38

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

40 Δηλαδή μπορούμε να αλλάξουμε μεταβλητές που είχαν οριστεί αρχικά στην φόρμα «Προσδιορισμός συστήματος, που στον Ρυθμιστή Buck, είναι η τάση τροφοδοσίας, η συχνότητα αντιστροφέα, η γωνία φορτίου, η σχετική τάση εξόδου και ο λόγος συχνότητας κατατμ/εξόδου. Υπομενού «Πειράματα»: Εδώ όπως φαίνεται στο σχήμα 4.8. μπορεί να γίνει χρήση της αυτόματης φόρτισης, μια διαδικασία που υπάρχει και στην φόρμα των κυματομορφών και περιγράφεται αναλυτικά στο εγχειρίδιο χρήσης του Neapolis. Σχήμα 4.8.: Υπομενού «Πειράματα» Υπομενού «Ταχύτητα Προσομοίωσης» Εδώ όπως φαίνεται στο σχήμα 4.9. μπορεί να γίνει χρήση της αργής ή γρήγορης προσομοίωσης των κυματομορφών του κυκλώματος, μια διαδικασία που υπάρχει και στην φόρμα των κυματομορφών και περιγράφεται αναλυτικά στο εγχειρίδιο χρήσης του Neapolis. Σχήμα 4.9.: Υπομενού «Ταχύτητα Προσομοίωσης» Υπομενού «Βοήθεια»: Εδώ βρίσκεται η επιλογή της θεωρίας του εκάστοτε συστήματος. 40

41 Σχήμα 4.10: Υπομενού «Βοήθεια» Μπάρα Εμφάνισης Αποτελεσμάτων Η μπάρα αυτή όπως φαίνεται στο Σχήμα περιέχει τα κουμπιά για την εμφάνιση των κυματομορφών στην διάρκεια μιας περιόδου και τα κουμπιά για την αλλαγή της εμφάνισης των αποτελεσμάτων στα όργανα μετρήσεων από μια κατάσταση σε μια άλλη. Σχήμα 4.11.: Μπάρα Εμφάνισης Αποτελεσμάτων Πιο συγκεκριμένα τα κουμπιά, κατά σειρά εμφάνισης, έχουν τις εξής λειτουργίες: Is: Εμφανίζει την κυματομορφή του ρεύματος εισόδου. Vs: Εμφανίζει την κυματομορφή της τάσης εισόδου. Iο: Εμφανίζει την κυματομορφή του ρεύματος εξόδου. Vo: Εμφανίζει την κυματομορφή της τάσης εξόδου. It: Εμφανίζει την κυματομορφή του ρεύματος σε μία βαλβίδα. Vt: Εμφανίζει την κυματομορφή της τάσης σε μία βαλβίδα. Inst: Εμφανίζει στα όργανα μετρήσεων στιγμιαίες τιμές (Προεπιλογή). Rms: Εμφανίζει στα όργανα μέτρησης ενεργές τιμές. Aver: Εμφανίζει στα όργανα μέτρησης μέσες τιμές. Αξίζει να αναφερθεί ότι οι αλλαγές αυτές και η εμφάνιση των αποτελεσμάτων μπορούν να γίνουν καθ όλη την διάρκεια της προσομοίωσης. 41

42 Ένα παράδειγμα του πως είναι το σύστημα κατά την διάρκεια της εμφάνισης των αποτελεσμάτων φαίνεται στο Σχήμα 4.12 ( α,β) και 4.13(α,β). Σχήμα 4.12α: Εμφάνιση Ιnst τιμών για το 6P Σχήμα 4.12β: Εμφάνιση κυματομορφής ρεύματος εισόδου Ii κατά την λειτουργία 42

43 Σχήμα 4.13α: Εμφάνιση Ιnst τιμών για το 12P Σχήμα 4.13β: Εμφάνιση κυματομορφής ρεύματος εισόδου Ii κατά την λειτουργία 4.3. Αλλαγή χρώματος σχεδίασης Άλλη μια επιλογή στην εναλλακτική φόρμα προσομοίωσης είναι η αλλαγή του χρώματος του σχεδιαζόμενου κάθε φορά κυκλώματος. Κάνοντας δεξί κλικ στο χώρο σχεδίασης του κυκλώματος εμφανίζεται ένα αναδυόμενο μενού όπως φαίνεται στο Σχήμα

44 Σχήμα 4.14.: Αλλαγή χρώματος στο κύκλωμα Το αναδυόμενο μενού δε φαίνεται τόσο καθαρά όπως στο Σχήμα 4.15 Σχήμα 4.15.: Αναδυόμενο μενού Αλλαγής χρώματος Αλλαγή χρώματος μπορούμε να κάνουμε είτε έχει ξεκινήσει η προσομοίωση είτε όχι. Κάνοντας κλικ στην επιλογή Αλλαγή χρώματος->κυκλώματος εμφανίζεται ένα ColorDialog ώστε να επιλέξουμε το χρώμα που θέλουμε. Βλέπε Σχήμα Σχήμα 4.16.: ColorDialog 44

45 Εάν πατήσουμε άκυρο δε θα κάνει καμία αλλαγή στο χρώμα. Εάν όμως επιλέξουμε το κόκκινο, το κύκλωμα θα γίνει όπως φαίνεται στο Σχήμα Σχήμα 4.17.: Σχεδίαση κυκλώματος με κόκκινο χρώμα. Κατά την προσομοίωση εάν η/το δίοδος-τρανζίστορ άγουν τότε συμπληρώνεται το εσωτερικό τους με το χρώμα της σχεδίασης. Τη τρέχουσα στιγμή, κάναμε το χρώμα σχεδίασης να είναι το κόκκινο. Συνεπώς, οι δίοδοι θα συμπληρωθούν με κόκκινο χρώμα (σχήμα 4.18). 45

46 Σχήμα 4.18.: Αγωγή διόδου με επιλεγμένο χρώμα σχεδίασης το κόκκινο. 46

47 ΚΕΦΑΛΑΙΟ 5 ΚΥΚΛΩΜΑΤΑ ΠΟΥ ΑΝΑΠΤΥΧΘΗΚΑΝ ΕΜΦΑΝΙΣΗ ΑΠΟΤΕΛΕΣΜΑΤΩΝ 5.1. Κυκλώματα που αναπτύχθηκαν Στην ενότητα αυτή θα παρουσιάσουμε σχηματικά, όλα τα κυκλώματα που αναπτύχθηκαν. Η εμφάνιση των κυκλωμάτων καθορίζεται όπως ήδη έχουμε αναφέρει, από τις παραμέτρους που δίνονται από τον χρήστη στην αρχική οθόνη επιλογών, όπου εκεί καθορίζεται το είδος του συστήματος και στην φόρμα προσδιορισμού του συστήματος, όπου εκεί καθορίζονται οι ιδιότητες του συστήματος. Σε αυτή την πτυχιακή αναπτύχθηκαν τα παρακάτω κυκλώματα: 3-φ Κυκλομετατροπέας Γέφυρας 6παλμών. 3-φ Κυκλομετατροπέας Γέφυρας 12παλμών φ Κυκλομετατροπέας Γέφυρας 6παλμών Εάν ο χρήστης κατά το προσδιορισμό του συστήματος επιλέξει στον τύπο μετατροπείς των 3φ κυκλομετατροπέα «6παλμών» και κατόπιν στην Προσομοίωση συστήματος, επιλέξει από το υπομενού «Αρχείο» της φόρμας με τις κυματομορφές το «Εμφάνιση Κυκλώματος», θα εμφανιστεί η φόρμα όπως φαίνεται στο Σχήμα 5.1. Σχήμα 5.1.: 3-φ Κυκλομετατροπέας Γέφυρας 6παλμών. Παρατηρούμε ότι το μεγαλύτερο μέρος της φόρμας καταλαμβάνεται από το κύκλωμα πάνω στο οποίο τοποθετούνται μερικά TextBoxes που έχουν σαν κείμενο 47

48 είτε V είτε A. Αυτό γίνεται διότι έχουν οριστεί σαν βολτόμετρα ή αμπερόμετρα. Θα είναι δηλαδή τα όργανα μέτρησης πάνω στα οποία θα εμφανίζονται οι στιγμιαίες τιμές του κυκλώματος. Οι λεζάντες του μενού είναι στα ελληνικά επειδή στο πρώτο μέρος του Neapolis έχει επιλεγεί η ελληνική γλώσσα. Κάτω από το κύκλωμα, βλέπουμε την μπάρα κουμπιών. Κάθε κουμπί με εξαίρεση των Inst, Rms, Aver αντιστοιχεί και σε μία κυματομορφή. Κάνοντας κλικ σε κάποιο από τα κουμπιά αυτά (π.χ Ιi, Vο, Iv) εάν είχαμε ξεκινήσει την προσομοίωση θα εμφάνιζε μια καμπύλη που έχει σχέση και με τις τιμές που βγάζει το αντίστοιχο όργανο μέτρησης. Τα κουμπιά Inst, Rms, Aver προσδιορίζουν τις τιμές που θα εμφανίζουν τα όργανα μέτρησης. Σαν προεπιλογή είναι η Inst. Με την επιλογή αυτή θα εμφανίζονται οι στιγμιαίες τιμές στα όργανα μέτρησης. Με την επιλογή Rms εμφανίζονται οι ενεργές τιμές στα όργανα μέτρησης ενώ με την Aver, οι μέσες τιμές. Σημείωση: Ανεξαρτήτως ποια τιμή έχουμε επιλέξει να εμφανίζεται στα όργανα μέτρησης, οι κυματομορφές σχεδιάζονται πάντα με βάση τις στιγμιαίες τιμές φ Κυκλομετατροπέας Γέφυρας 12παλμών Εάν ο χρήστης κατά το προσδιορισμό του συστήματος επιλέξει στον τύπο μετατροπείς των 3φ κυκλομετατροπέα γέφυρας «12παλμών» και κατόπιν στην Προσομοίωση συστήματος, επιλέξει από το υπομενού «Αρχείο» της φόρμας με τις κυματομορφές το «Εμφάνιση Κυκλώματος», θα εμφανιστεί η φόρμα όπως φαίνεται στο Σχήμα 5.2. Σχήμα 5.2.: 3-φ Κυκλομετατροπέας Γέφυρας 12παλμών. 48

49 Παρατηρούμε ότι το μεγαλύτερο μέρος της φόρμας καταλαμβάνεται από το κύκλωμα πάνω στο οποίο τοποθετούνται μερικά TextBoxes που έχουν σαν κείμενο είτε V είτε A. Αυτό γίνεται διότι έχουν οριστεί σαν βολτόμετρα ή αμπερόμετρα. Θα είναι δηλαδή τα όργανα μέτρησης πάνω στα οποία θα εμφανίζονται οι στιγμιαίες τιμές του κυκλώματος. Οι λεζάντες του μενού είναι στα ελληνικά, επειδή στο πρώτο μέρος του Neapolis έχει επιλεγεί η ελληνική γλώσσα. Κάτω από το κύκλωμα, βλέπουμε την μπάρα κουμπιών. Κάθε κουμπί με εξαίρεση των Inst, Rms, Aver αντιστοιχεί και σε μία κυματομορφή. Κάνοντας κλικ σε κάποιο από τα κουμπιά αυτά (π.χ Ιi, Vο, Iv) εάν είχαμε ξεκινήσει την προσομοίωση θα εμφάνιζε μια καμπύλη που έχει σχέση και με τις τιμές που βγάζει το αντίστοιχο όργανο μέτρησης. Τα κουμπιά Inst, Rms, Aver προσδιορίζουν τις τιμές που θα εμφανίζουν τα όργανα μέτρησης. Σαν προεπιλογή είναι η Inst. Με την επιλογή αυτή θα εμφανίζονται οι στιγμιαίες τιμές στα όργανα μέτρησης. Με την επιλογή Rms εμφανίζονται οι ενεργές τιμές στα όργανα μέτρησης ενώ με την Aver οι μέσες τιμές. Σημείωση: Ανεξαρτήτως ποια τιμή έχουμε επιλέξει να εμφανίζεται στα όργανα μέτρησης, οι κυματομορφές σχεδιάζονται πάντα με βάση τις στιγμιαίες τιμές Προσομοίωση συστήματος-ανάλυση αποτελεσμάτων. Τα βήματα για την προσομοίωση κυκλώματος είναι ακριβώς τα ίδια, όποιο κύκλωμα και αν επιλέξουμε. Έτσι και εμείς θα εξετάσουμε μόνο ένα κύκλωμα του 3- φ κυκλομετατροπέα γέφυρας 6παλμών. Η εκκίνηση της προσομοίωσης γίνεται με τους εξής τρόπους: 1. Μέσω της φόρμας κυματομορφών κάνοντας κλικ στο κουμπί Έναρξη ή μέσω του υπομενού Αρχείο->Έναρξη μεταβαίνουμε όποια στιγμή θέλουμε να δούμε και από τη φόρμα του κυκλώματος την προσομοίωση. 2. Μέσω της φόρμας κυκλώματος κάνοντας κλικ στο κουμπί Έναρξη ή μέσω του υπομενού Αρχείο->Έναρξη. Αφού αρχίσει η προσομοίωση εμφανίζονται ανά βήμα τιμές στα όργανα μέτρησης. Κατά την προσομοίωση το κουμπί της «έναρξης» αποκρύπτεται. Επίσης παρατηρούμε ότι στην περίπτωση αγωγής της διόδου, συμπληρώνονται με το χρώμα σχεδίασης που στην παρούσα φάση είναι το μαύρο (σχήμα 5.3). 49

50 Σχήμα 5.3.: Προσομοίωση 3-φ κυκλομετατροπέα γέφυρας 6παλμών. Οι τιμές που εμφανίζονται στα όργανα μέτρησης είναι οι στιγμιαίες τιμές, διότι έχουν οριστεί ως προεπιλογή, όπως αυτό φαίνεται στο Σχήμα 5.4. Σχήμα 5.4: Επιλογή τιμών 5.5. Κυματομορφές Κυκλώματος Τα βήματα για την εμφάνιση και την επεξεργασία των φορμών κυματομορφής είναι ακριβώς τα ίδια, όποιο κύκλωμα κι αν επιλέξουμε. Για αυτό το λόγο θα εξετάσουμε μόνο ένα κύκλωμα το οποίο είναι ο 3-φ κυκλομετατροπέας γέφυρας 6παλμών. Μέχρι τώρα είπαμε ότι οι κυματομορφές σχεδιάζονται πάντα σύμφωνα με τις στιγμιαίες τιμές ανεξαρτήτως με την επιλογή τιμών. Αλλά που γίνεται ο υπολογισμός; Ο υπολογισμός γίνεται στο δεύτερο μέρος του Neapolis για τη φόρμα κυματομορφών. Επομένως, αφού έπρεπε η εφαρμογή μας να τρέχει παράλληλα με αυτή τη φόρμα, δεν υπήρχε λόγος να γίνεται ο υπολογισμός δύο φορές. Η εφαρμογή καλεί μια συνάρτηση για μεταβίβαση τιμών κάθε φορά που υπολογίζεται νέα τιμή 50

51 και κάποια άλλη για να κάνει τη σχεδίαση στις δικές μας κυματομορφές. Περισσότερες λεπτομέρειες στο έβδομο κεφάλαιο και στην ενότητα για το εγχειρίδιο προγραμματιστή. Στην παρούσα ενότητα απλά θα δούμε τα αποτελέσματα των κυματομορφών υπό συνθήκες. Έστω ότι έχουμε ξεκινήσει την προσομοίωση συστήματος βρισκόμαστε στην φόρμα του κυκλώματος και έχουμε επιλέξει να εμφανιστεί η κυματομορφή Vi από την μπάρα κουμπιών. Το αποτέλεσμα φαίνεται στο Σχήμα 5.5. Σχήμα 5.5.: Φόρμα Κυματομορφής Vi Τι βλέπουμε στο Σχήμα 5.5; Η φόρμα Vi εμφανίζει στην οθόνη και βλέπουμε ποια τιμή προσεγγίζει, αλλά για περισσότερη ακρίβεια παρατηρούμε το βολτόμετρο(v). Το μέγεθος της φόρμας κυματομορφής μπορεί να αυξομειώνεται χωρίς να υπάρχει κανένα πρόβλημα και να αυξομειώνεται και η ίδια η κυματομορφή. Η αναφορά αυτή ισχύει και για την φόρμα του κυκλώματος. Η δυνατότητα που μας δίνει η συγκεκριμένη φόρμα είναι να την ξαναβάλουμε στο περιθώριο επιλέγοντας «Επιστροφή». Ας δούμε τι θα γίνει αν τοποθετήσουμε πολλές κυματομορφές στην οθόνη. Όταν επιλέξουμε με τη σειρά Vi, Vo, Ii, Io, Iv, Vv, το αποτέλεσμα φαίνεται στο Σχήμα

52 Σχήμα 5.6.: Όλες οι φόρμες κυματομορφών στην οθόνη. Σε κάθε φόρμα ξεχωριστά μπορούμε να αλλάξουμε το μέγεθος και την μετακινήσουμε όπου εμείς θέλουμε. Όταν δημιουργήσουμε για πρώτη φορά την εφαρμογή, κάθε φορά που επιλέγαμε μια κυματομορφή η προηγούμενη ή οι προηγούμενες φόρμες που ήταν στην οθόνη μεταφέρονταν στο περιθώριο (πίσω από το κύκλωμα). Αυτό ταλαιπωρούσε πολύ το χρήστη και κάθε φορά που εμφάνιζε μια κυματομορφή έπρεπε να επιλέξει ξανά από τη γραμμή εργασιών τις υπόλοιπες φόρμες για να τις ξαναφέρει στο φόντο. Για να λυθεί το πρόβλημα τοποθετήθηκε κώδικας για να λειτουργεί όπως είδαμε στο Σχήμα

53 ΚΕΦΑΛΑΙΟ 6 ΒΟΗΘΗΤΙΚΕΣ ΟΔΗΓΙΕΣ ΓΙΑ ΤΗΝ ΑΝΑΠΤΥΞΗ ΚΩΔΙΚΑ ΣΤΟ ΠΕΡΙΒΑΛΛΟΝ ΤΗΣ VISUAL BASIC 6.1. Εισαγωγή Στο σημείο αυτό της πτυχιακής θα περιγράψουμε ποια βήματα ακολουθήθηκαν για την έναρξη της συγγραφής του κώδικα και θα αναλύσουμε κάθε κομμάτι του κώδικα το οποίο δημιουργήθηκε και μπορεί να είναι δυσνόητο για κάποιον που δεν έχει ασχοληθεί με την συγγραφή κώδικα σε Visual Basic και πόσο μάλλον για το περιβάλλον του Neapolis. Επίσης θα γίνει μια περιγραφή του τρόπου που λειτουργεί «Το εναλλακτικό περιβάλλον προσομοίωσης» και πιο συγκεκριμένα ο μηχανισμός λειτουργίας της SimCircuitForm(η φόρμα του εναλλακτικού περιβάλλοντος προσομοίωσης) έτσι ώστε να γίνει κατανοητό στον μελλοντικό προγραμματιστή ο τρόπος που καλούνται οι συναρτήσεις, οι υπορουτίνες και πως συνδέονται οι φόρμες και τα πρότυπα μεταξύ τους Προετοιμασία για την έναρξη συγγραφής κώδικα στο περιβάλλον της VB6 για το Νεάπολις. Στην ενότητα αυτή θα παρουσιάσουμε τα βήματα που ακολουθήθηκαν ώστε να μπορέσει ο προγραμματιστής να εξασφαλίσει την σωστή λειτουργία του περιβάλλοντος, στο οποίο θα αναπτύξει τον κώδικα για το Neapolis. Πιο συγκεκριμένα θα δούμε πώς πρέπει να γίνει η εγκατάσταση του Visual Studio 6 και πως πρέπει να «στήσουμε» τα αρχεία του Neapolis ώστε να μην εμφανίζονται μηνύματα σφαλμάτων, όταν θα προσπαθήσουμε να ανοίξουμε τα project των αντίστοιχων τμημάτων του Neapolis που μας ενδιαφέρουν. 53

54 Εγκατάσταση Visual Studio 6 Enterprise Πηγαίνουμε αρχικά μέσα στον φάκελο που βρίσκεται η Visual Basic 6 πατάμε διπλό κλικ στο SETUP όπως φαίνεται στην εικόνα της επόμενης σελίδας. Εικόνα 6.1.: Φάκελος VBasic6-SETUP Αν εμφανιστεί ένα παράθυρο όπως αυτό της εικόνας 6.2 απλά πατήστε Run. Εικόνα 6.2.: Μήνυμα ασφαλείας για το SETUP Μετά εμφανίζεται η οθόνη εγκατάστασης όπως φαίνεται στην Εικόνα 6.3 και Πατάμε Next. 54

55 Εικόνα 6.3.: Αρχική οθόνη εγκατάστασης VB6 Στην επόμενη οθόνη στην Εικόνα 6.4 εμφανίζεται η άδεια χρήσης, επιλέγουμε Accept και μετά Next. Εικόνα 6.4.: Οθόνη Άδειας Χρήσης Στην οθόνη εισαγωγή κωδικού και ονόματος βάζουμε τον παρακάτω κωδικό και το όνομα το οποίο επιθυμούμε και πατάμε Next όπως φαίνεται στην Εικόνα

56 Εικόνα 6.5.: Οθόνη εισαγωγής κωδικού και ονόματος Στην παραπάνω οθόνη προσέχουμε να είναι τσεκαρισμένη η επιλογή Update Microsoft Virtual Machine for Java και πατάμε Next. Κατόπιν το σύστημα θα μας προτείνει να κάνουμε επανεκκίνηση και πατάμε ΟΚ. Εικόνα 6.6.: Οθόνη Java Machine Μετά την επανεκκίνηση θα μας εμφανιστεί η οθόνη της εικόνας 6.7 όπου προσέχουμε να είναι τσεκαρισμένη η επιλογή Custom και πατάμε Next. 56

57 Εικόνα 6.7.: Οθόνη Options Κατόπιν εμφανίζεται η οθόνη της περιοχής όπου θα εγκατασταθεί και πατάμε Next. Εικόνα 6.8.: Οθόνη διαδρομής εγκατάστασης Αν μετά την προηγούμενη οθόνη μας εμφανιστεί μήνυμα λάθους για το ACMBOOT απλά πάμε στον φάκελο όπου είναι τα αρχεία εγκατάστασης βρίσκουμε το συγκεκριμένο αρχείο exe και πατάμε διπλό κλικ όπως φαίνεται στην Εικόνα 6.9. Εικόνα 6.9.: Οθόνη διαδρομής εγκατάστασης ACMBOT 57

58 Εάν δεν βγει μήνυμα λάθους θα εμφανιστεί η παρακάτω οθόνη, όπου πατάμε Continue. Εικόνα 6.10.: Οθόνη εγκατάστασης Μετά ακολουθεί η οθόνη εισαγωγής ονόματος και πατάμε ΟΚ. Εικόνα 6.11.: Οθόνη εισαγωγής ονόματος Κατόπιν εμφανίζεται η οθόνη εισαγωγής κωδικού, όπου εισάγουμε τον ίδιο κωδικό όπως και πριν, όπως φαίνεται στην εικόνα Εικόνα 6.12.: Οθόνη εισαγωγής κωδικού 58

59 Στην οθόνη που ακολουθεί πατάμε αριστερό κλικ μέσα στο τετράγωνο που βρίσκεται αριστερά της λέξης Custom όπως φαίνεται στην εικόνα Εικόνα 6.13.: Οθόνη εγκατάστασης Κατόπιν στην παρακάτω οθόνη πατάμε Select All και στην συνέχεια Continue όπως φαίνεται στην Εικόνα Εικόνα 6.14.: Οθόνη επιλογών εγκατάστασης Μετά εμφανίζεται η οθόνη παραμέτρων όπου προσέχουμε η τσεκαρισμένη η επιλογή Register Environment Variables όπως φαίνεται στο Σχήμα Εικόνα 6.15.: Οθόνη παραμετροποίησης 59

60 Στην παρακάτω οθόνη της εικόνας 6.16 πατάμε YES. Εικόνα 6.16.: Οθόνη SourceSafe Κατόπιν ακολουθεί η εγκατάσταση της VB6, όπως φαίνεται στην Εικόνα Εικόνα 6.17.: Οθόνη εγκατάστασης Κατόπιν πατάμε ΟΚ στο παρακάτω μήνυμα της Εικόνας Εικόνα 6.18.: Οθόνη Μηνύματος Τέλος εμφανίζεται το μήνυμα επανεκκίνησης του υπολογιστή και πατάμε Restart, όπως φαίνεται στην Εικόνα Εικόνα : Οθόνη μηνύματος επανεκκίνησης Μετά την επανεκκίνηση ενδέχεται να μας ζητηθεί η εγκατάσταση της MSDN Library, όπου θα επιλέξουμε την διαδρομή του σκληρού δίσκου που βρίσκεται η 60

61 MSDN. Αν δεν βγει κανένα μήνυμα πηγαίνουμε στον φάκελο που λέει CD1 MSDN και πατάμε το αντίστοιχο setup αρχείο. Θα εμφανιστεί η οθόνη της εικόνας 6.20 όπου πατάμε Continue. Εικόνα 6.20.: Οθόνη Εγκατάστασης MSDN Στην επόμενη οθόνη το τετράγωνο της Full εγκατάστασης όπως φαίνεται στην Εικόνα Εικόνα 6.21.: Οθόνη εγκατάστασης MSDN επιλογές Κατόπιν εμφανίζεται η οθόνη της διαδικασίας εγκατάστασης και τέλος βγαίνει το μήνυμα της επιτυχούς εγκατάστασης της MSDN Library, όπως φαίνεται στην εικόνα

62 Εικόνα 6.22.: Οθόνη επιτυχούς εγκατάστασης MSDN Έτσι ολοκληρώνεται η εγκατάσταση του Visual Studio 6 Enterprise με MSDN Library εγκατεστημένη Διαδικασία εγκατάστασης Neapolis Development. Αρχικά πηγαίνουμε στον φάκελο που βρίσκεται το Nea4developer και πατάμε αριστερό κλικ στο setup όπως φαίνεται στην εικόνα Εικόνα 6.23.:Φάκελος Setup Nea4developer Στην επόμενη οθόνη πατάμε ΟΚ όπως φαίνεται στην εικόνα Εικόνα 6.24.: Οθόνη SETUP Nea4developer 62

63 Κατόπιν πατάμε αριστερό κλικ στο τετράγωνο όπως φαίνεται στην εικόνα Εικόνα 6.25.: Οθόνη SETUP Nea4developer Στην επόμενη οθόνη πατάμε Continue όπως φαίνεται στην εικόνα Εικόνα 6.26.: Οθόνη επιλογής φακέλου Μετά από αυτό ολοκληρώνεται η εγκατάσταση του Nea4developer. Κατόπιν πηγαίνουμε στην διαδρομή Program Files/Neapolis όπως φαίνεται στην Εικόνα 6.27 και πατάμε διπλό αριστερό κλικ στο Nea4developer, όπου εμφανίζεται η οθόνη της εικόνας

64 Εικόνα 6.27.: Οθόνη φακέλου Nea4developer Εικόνα 6.28.: Οθόνη αποσυμπίεσης Στην οθόνη της εικόνας 6.28 αλλάζουμε την διαδρομή αποσυμπίεσης και γράφουμε την διαδρομή όπως φαίνεται στην οθόνη της εικόνας Εικόνα 6.29.: Οθόνη αλλαγής διαδρομής αποσυμπίεσης 64

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

66 Μέσα στον φάκελο Nea4 βρίσκονται τα project της Visual Basic, όπως φαίνεται στην οθόνη της εικόνας Εικόνα 6.33.: Φάκελος Nea4 projects VB Κάνοντας διπλό κλικ στο project που μας ενδιαφέρει (σε εμάς το Neapart2) παίρνουμε το αποτέλεσμα της οθόνης στην εικόνα 6.34 όπου πατάμε Yes στο μήνυμα που πρωτοβγάζει. Εικόνα 6.34.: Οθόνη περιβάλλοντος VB6 Πλέον το περιβάλλον ανάπτυξης μας είναι έτοιμο και σωστά εγκατεστημένο και μπορούμε να αρχίσουμε την συγγραφή του κώδικα μας Λειτουργία της εφαρμογής Για να φτάσουμε στο σημείο να καταλάβουμε πιο γρήγορα το σκοπό για τον οποίο δημιουργήθηκε η κάθε συνάρτηση θα πρέπει να δούμε πως δουλεύει το πρόγραμμα. Πριν από αυτά, για να γίνει η υλοποίηση του προγράμματος αν εξαιρέσουμε το γεγονός ότι υπήρξε η ανάγκη να μελετήσουμε αρκετά τη Visual Basic 6, κατόπιν μελετήσαμε αρκετά τον τρόπο με τον οποίο δουλεύει το δεύτερο μέρος του Neapolis. Ο λόγος της αναφοράς αυτού του γεγονότος είναι διότι βοήθησε αρκετά ώστε ανακαλύψουμε που θα γίνει η δική μας παρέμβαση. 66

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

68 Τα περισσότερα από αυτά έχουν οργανωθεί σε συναρτήσεις από τις οποίες οι πιο σημαντικές (αυτές στις οποίες θα παρέμβει κάποιος για να κάνει το ίδιο για τα υπόλοιπα συστήματα) θα αναφερθούν στις επόμενες ενότητες. Σε όλες τις συναρτήσεις που θα αναφερθούν με εξαίρεση τη FillSimCircuitForm θα πρέπει να τοποθετηθεί κώδικας παρόμοιος με αυτόν του Ρυθμιστή Buck για να δουλεύει και για τα άλλα συστήματα προσομοίωσης Διαδικασία εμφάνισης του επιθυμητού κυκλώματος. Για να καταφέρουμε πατώντας την «Εμφάνιση Κυκλώματος» στην βασική φόρμα προσομοίωσης(simulation Form, η γνωστή μας φόρμα με τις κυματομορφές), να περάσουμε στην εναλλακτική φόρμα προσομοίωσης (SimCircuitForm, η φόρμα με το επιθυμητό κύκλωμα), θα πρέπει να κάνουμε κάποιες τροποποιήσεις σε καίρια σημεία του κώδικα του Neapart2. Αλλιώς αν δεν το κάνουμε αυτό θα εμφανιστεί ένα σχέδιο του κυκλώματος, ή μήνυμα λάθους ότι το κύκλωμα που ζητάμε δεν είναι διαθέσιμο και δεν πρόκειται ποτέ να πάμε στο περιβάλλον της εναλλακτικής προσομοίωσης, όπως έχουμε δει. Για να καταφέρουμε να το κάνουμε αυτό θα πρέπει να κάνουμε τα εξής: 1. Στην SimulationForm πάμε και βρίσκουμε την Sub ShowFigure_Click( ). Ο κώδικας της υπορουτίνας αυτής φαίνεται παρακάτω. Ανάλογα με το τι κύκλωμα έχουμε να προσομοιώσουμε κάθε φορά πρέπει να κάνουμε και την αντίστοιχη αλλαγή. Για παράδειγμα, επειδή στην περίπτωση μας έχουμε τον μετατροπέα συχνότητας, θα έπρεπε να προσθέσουμε το Case CΥ3CON για να εμφανίζονται τα κατάλληλα σχήματα αντί του εναλλακτικού περιβάλλοντος, καθώς και μηνύματα σφάλματος όταν τα σχέδια απουσιάζουν. Οπότε έπρεπε να αλλαχθεί ο παλιός κώδικας όπως παρακάτω: Private Sub ShowFigure_Click() εμφανίζει την φόρμα κυκλώματος εφόσον έχει κατασκευαστεί για το επιλεγμένο σύστημα Select Case ProgName Case "DCLCON", "FC3CON", "RE1CON", "BUCCON", "BOOCON", "BUBCON", "CUKCON", "RE1DMD" Me.Hide SimCircuitForm.Show Case "IN3MOT", "DICMOT", "IN1MOT", "SY3MOT" Me.Hide SimCircuitForm.Show Case "RE3CON", "RE3DMD", "IN3CON", "IN1CON", "IN3IMD" 68

69 Me.Hide SimCircuitForm.Show Case "CY3CON" Me.Hide SimCircuitForm.Show ErrorNumber = 48 Call PMessages End Select End Sub Για να καταλάβετε πως ήταν ο κώδικας πριν την παρέμβαση μας, παραθέτω και τον αρχικό κώδικα. Private Sub ShowFigure_Click() Select Case ProgName Case "DCLCON", "FC3CON", "RE1CON", "BUCCON", "BOOCON", "BUBCON", "CUKCON", "RE1DMD" Me.Hide SimCircuitForm.Show Case "IN3MOT", "DICMOT", "IN1MOT", "SY3MOT" Me.Hide SimCircuitForm.Show ErrorNumber = 48 Call PMessages End Select End Sub 6.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) 69

70 OldWindowProc = SetWindowLong( _ hwnd, GWL_WNDPROC, _ AddressOf NewWindowProc) Dim Pi! Pi = 4 * Atn(1) SimCircuitForm.Top = 0 SimCircuitForm.Left = 0 SimCircuitForm.Picture1.Cls For f = 1 To 130 PeriodPointB(f) = NumPeriodPoints Next f Πρόσθεσε τα κουμπιά που χρειάζονται για τις παραγόμενες μεταβλητές, έτσι ώστε, να μπορεί ο χρήστης ανά πάσα στιγμή να εμφανίσει τις αντίστοιχες κυματομορφές 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 = " " 70

71 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 που κρατάει το aspect ratio της φόρμας σταθερό(apistuff module), η υπορουτίνα που προσθέτει τα κουμπιά στην μπάρα των κουμπιών της εμφάνισης των κυματομορφών (AddButtons), καθώς και η υπορουτίνα που είναι υπεύθυνη για το γέμισμα της φόρμας με κουμπιά και λεζάντες, ενώ επίσης αποδίδει και ονόματα σε αυτά, ανάλογα με την εκάστοτε γλώσσα που έχουμε επιλέξει (FillSimCircuitForm). Η Form_Resize καλεί με την σειρά της, την Picture1_Resize o κώδικας της οποίας φαίνεται παρακάτω: Private Sub Picture1_Resize() Κάνε το κύκλωμα να καταλαμβάνει όλη τη φόρμα εκτός του χώρου ο οποίος ανήκει στο πίνακα κουμπιών. If SimCircuitForm.ScaleHeight > Toolbar1.Height Then Picture1.Height = SimCircuitForm.ScaleHeight - Toolbar1.Height Picture1.Width = SimCircuitForm.ScaleWidth StartBtn.Width = SimCircuitForm.ScaleWidth / 7245 * 1087 StartBtn.Top = Picture1.Height / 376 * 352 Τοποθετείτε πάντα στο κέντρο της φόρμας. Όσον αφορά τον άξονα x. 71

72 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, που είναι υπεύθυνη για τον σχεδιασμό του κυκλώματος και των οργάνων και θα αναλυθεί πιο κάτω Η συνάρτηση AddButtons Η συνάρτηση AddButtons, αφού πρώτα ελέγξει το σύστημα που έχει επιλεγεί, τοποθετεί τα κουμπιά των παραγόμενων μεταβλητών κάτω από το κύκλωμα, με την απαιτούμενη λεζάντα, που θα χρειαστούν για να εμφανίζονται οι κυματομορφές τους. Τα κουμπιά αυτά τοποθετούνται σε ένα Toolbar. Αρχικά, η εφαρμογή είχε γίνει με πίνακα κανονικών κουμπιών αλλά το αποτέλεσμα δεν ήταν ιδανικό, από πολλές απόψεις. Παραδείγματος χάριν, με το Resize της φόρμας SimCircuitForm θα έπρεπε να αλλάζουμε το μέγεθος και τη θέση του κάθε κουμπιού (όπως γίνεται με τα όργανα μέτρησης). Τοποθετήσαμε κώδικα για αυτό και το πετύχαμε αλλά υστερούσε σε εμφάνιση. Ενώ με το Toolbar απλά τα τοποθετούμε με τη σειρά και δε χρειάζεται να ασχολούμαστε με το μέγεθος και τη θέσης τους διότι στο Toolbar μπορούμε να του πούμε να το τοποθετήσει είτε στο αριστερό, είτε στο δεξιό, είτε στο πάνω, είτε στο κάτω μέρος της φόρμας. Για τα σχήματα μας τοποθετείτε στο κάτω μέρος. Εμείς για την περίπτωση μας προσθέσαμε το Case CY3CON. Προέλευση: Χρησιμοποιείται: Φόρμα SimCircuitForm στη Form_Load της SimCircuitForm Περίπου στο τέλος της συνάρτησης που βρίσκονται τρία διαδοχικά Case το έχουμε σαν σύμβολο όπου δηλώνει ότι θα τοποθετηθεί ο κώδικας για τα υπόλοιπα συστήματα προσομοίωσης. Κώδικας της συνάρτησης: 72

73 Sub AddButtons() πρόσθεση των κουμπιών επιλογής μεταβλητής για σχεδίαση Select Case ProgName$ Case "CY3CON" Toolbar1.Buttons.Add Toolbar1.Buttons(1).Caption = "Vi" Tash eisodou Toolbar1.Buttons.Add Toolbar1.Buttons(2).Caption = "Vo" Tash eksodou Toolbar1.Buttons.Add Toolbar1.Buttons(3).Caption = "Ii" Reuma eisodou Toolbar1.Buttons.Add Toolbar1.Buttons(4).Caption = "Io" Reuma eksodou Toolbar1.Buttons.Add Toolbar1.Buttons(5).Caption = "Iv" Reuma valvidas Toolbar1.Buttons.Add Toolbar1.Buttons(6).Caption = "Vv" Tash valvidas Toolbar1.Buttons.Add Toolbar1.Buttons(7).Caption = "-" Τοποθέτησε ένα κουμπί με λεζάντα "-", ανενεργό έτσι ώτσε να χωριστούν τα κουμπιά των παραγωμενων μεταβλητών με αυτά των "Inst", "Rms", "Aver". 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 Select End Sub 6.7. Η συνάρτηση LoadWaveForms Η συνάρτηση LoadWaveForms, ανάλογα με το επιλεγμένο σύστημα δίνει ταυτότητα σε όλες τις φόρμες κυματομορφής και μετά φορτώνει αυτές στη μνήμη. Τι είναι αυτή η ταυτότητα; 73

74 Για να δημιουργήσουμε τις φόρμες κυματομορφής (WaveForm), χρησιμοποιήσαμε ένα πίνακα με στοιχεία ένα πρότυπο φόρμας. Δηλαδή, γράψαμε ένα κώδικα ο οποίος χρησιμοποιείται αυτόνομα ο ίδιος για κάθε φόρμα κυματομορφής. Η ταυτότητα αυτή διαχωρίζει τον κώδικα που θα εκτελεστεί για κάθε φόρμα κυματομορφής. Θα το δούμε με λεπτομέρεια όταν εξηγήσουμε συναρτήσεις της φόρμας WaveForm. Σαν ταυτότητα οι φόρμες κυματομορφής παίρνουν το κείμενο του κουμπιού που τους αντιστοιχεί. Εμείς για την περίπτωση μας προσθέσαμε το Case CY3CON. Προέλευση: Χρησιμοποιείται: Φόρμα SimCircuitForm στη Form_Load της SimCircuitForm Περίπου στο τέλος της συνάρτησης που βρίσκονται τρία διαδοχικά Case το έχουμε βάλει σαν σύμβολο όπου δηλώνει ότι θα τοποθετηθεί ο κώδικας για τα υπόλοιπα συστήματα προσομοίωσης. Κώδικας συνάρτησης: βάλε ετικέτες στις φόρμες κυμστομορφών και φόρτωσέ τες Case "CY3CON" For f = 1 To 6 frms(f).id = Toolbar1.Buttons(f).Caption Load frms(f) Next f End Select End Sub 6.8. Η συνάρτηση FillSimCircuitForm Η συνάρτηση FillSimCircuitForm, ανάλογα με το επιλεγμένο σύστημα συμπληρώνει τις λεζάντες (caption) των μενού καθώς και των ελεγκτηρίων της τρέχουσας φόρμας. Αυτό θα γίνει είτε στα Ελληνικά είτε στα Αγγλικά είτε στα Ισπανικά. Ανάλογα δηλαδή με τη γλώσσα που επιλέχθηκε. Ένα βασικό σημείο που πρέπει να σταθούμε είναι ότι το Neapolis καλώντας τη συνάρτηση TextMatrix φορτώνει τον πίνακα Matrix με τα κείμενα που θα χρειαστούν για τις λεζάντες ελεγκτηρίων, τα μηνύματα προειδοποίησης και για τις τρεις γλώσσες επιλογής. Στη θέση ένα του πίνακα αποθηκεύονται τα μηνύματα αυτά στα Ελληνικά, στη δύο στα Αγγλικά και στη τρία στα Ισπανικά. Όμως ο προγραμματιστής κατά τη σχεδίαση χρειάζεται να γνωρίζει τι περιέχει αυτός ο 74

75 πίνακας ώστε να χρειαστεί να εμφανίσει σε άλλο σημείο της φόρμας το οποίο να υπάρχει στο πίνακα μπορεί να δείξει άμεσα εκεί και θα το μεταφράσει σε οποιαδήποτε από τις τρείς γλώσσες. Στο Παράρτημα Γ, λόγω της χρησιμότητας που μόλις αναφέρθηκε παρουσιάζονται τα περιεχόμενα του πίνακα Matrix. Σημείωση: Η συνάρτηση αυτή δε χρειάζεται να δεχτεί παρέμβαση. Τρέχει για όλα τα συστήματα προσομοίωσης. Προέλευση: Χρησιμοποιείται: Φόρμα SimCircuitForm στη Form_Load της SimCircuitForm Public Sub FillSimCircuitForm( ) Sub FillSimCircuitForm() Fill SimCircuit Form Captions 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) 75

76 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 SimCircuitForm!ChangeParameter(5).Visible = 0 Case "CY3CON" SimCircuitForm!ChangeParameter(2).Caption = Matrix(Mlanguage).System(8) 76

77 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" 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) 77

78 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 Εάν η γλώσσα που έχει επιλεγεί είναι η Ελληνική Select Case Mlanguage Case 1 SimCircuitForm!ShowFigure.Caption = "Εμφάνιση κυματομορφών" SimCircuitForm!mnu_change_color.Caption = "Αλλαγή χρώματος" SimCircuitForm!mnu_color_circuit.Caption = "Κυκλώματος" Εάν η γλώσσα που έχει επιλεγεί είναι η Αγγλική ή η Ισπανική Case 2, 3 SimCircuitForm!ShowFigure.Caption = "Show Waves" SimCircuitForm!mnu_change_color.Caption = "Change Color" SimCircuitForm!mnu_color_circuit.Caption = "Circuit" End Select SimCircuitForm!Experiments.Caption = Matrix(Mlanguage).System(14) SimCircuitForm!Autoloading1.Caption = Matrix(Mlanguage).System(15) SimCircuitForm!Exit.Caption = Matrix(Mlanguage).System(20) SimCircuitForm!StartBtn.Caption = Matrix(Mlanguage).System(24) Select Case ProgName$ 78

79 Case "SY3MOT" SimCircuitForm.Synchronize1.Visible = True SimCircuitForm.Synchronize1.Enabled = True Case Else SimCircuitForm!Synchronize1.Visible = False SimCircuitForm!Synchronize1.Enabled = False End Select Select Case ProgName$ Case "CY3CON" SimCircuitForm.Synchronize1.Visible = True SimCircuitForm.Synchronize1.Enabled = True Case Else SimCircuitForm!Synchronize1.Visible = False SimCircuitForm!Synchronize1.Enabled = False End Select End Sub 6.9. Η συνάρτηση DrawCircuit Η DrawCircuit είναι στην ουσία η υπορουτίνα που θα καλέσει μετέπειτα τις συναρτήσεις σχεδιασμού των κυκλωμάτων που μας ενδιαφέρουν. Επίσης εδώ καθορίζεται η κλίμακα του εκάστοτε κυκλώματος σε σχέση με την φόρμα στην οποία εμπεριέχεται και άμεση σχέση με την κλίμακα της κύριας φόρμας. Εδώ ακόμη καθορίζονται και ο αριθμός των textboxes που θα χρησιμοποιούνται κάθε φορά από τα όργανα μέτρησης και μέσα στα οποία θα εμφανίζονται οι αντίστοιχες τιμές. Στο τέλος του κώδικα που υπάρχουν σχόλια, είναι εκεί που θα προσθέσει ο προγραμματιστής τα κυκλώματα που τον ενδιαφέρουν να σχεδιαστούν. Εμείς για την περίπτωση μας προσθέσαμε το Case CY3CON Προέλευση: Φόρμα SimCircuitForm Χρησιμοποιείται: στη Picture1_Paint της SimCircuitForm Κώδικας της συνάρτησης: Private Sub DrawCircuit(obj As Object, drawtbox As Boolean) Draw Circuit of selected device type 79

80 Xscl = obj.width Yscl = obj.height Define Pixel/PlotPoints ratios Select Case ProgName$ Case "CY3CON" Select Case CycPulseNumber% Case 6 Xdef = Xscl / 500 Ydef = Yscl / 400 Case 12 Xdef = Xscl / 500 Ydef = Yscl / 800 End Select obj.cls For f = 1 To 100 όσα έχουν οριστεί στην φόρμα Texts(f).Visible = False Labels(f).Visible = False Texts(f).MaxLength = 5 Next f Case "CY3CON" Select Case CycPulseNumber% σχεδιασμός κυκλώματος 3φ κυκλομετατροπέα γέφυρας 6 παλμών Case 6 Call Draw6P1CY3CON(obj, drawtbox) Call Draw6pCy3Converter(obj, drawtbox) σχεδιασμός κυκλώματος 3φ κυκλομετατροπέα γέφυρας 12 παλμών Case 12 Call Draw12P1CY3CON(obj, drawtbox) Call Draw12pCy3Converter(obj, drawtbox) End Select End Sub Συναρτήσεις σχεδιασμού στοιχείων κυκλώματος Εισαγωγή Σε παλιότερες πτυχιακές ο σχεδιασμός ενός κυκλώματος γινόταν εξ ολοκλήρου σε μια υπορουτίνα. Δηλαδή εκεί μέσα σχεδιάζονταν οι αντιστάσεις, οι πηγές, οι κινητήρες και όλα τα ευθύγραμμα τμήματα που συνέδεαν τα στοιχεία αυτά μεταξύ τους. Επίσης υπήρχαν ξεχωριστές συναρτήσεις που καθόριζαν την μετακίνηση κάθε 80

81 φορά των textboxes που συνέθεταν τα όργανα, ξεχωριστές συναρτήσεις που συνέδεαν αυτά με την αλλαγή του μεγέθους του παραθύρου. Το πρόβλημα ήταν ότι όταν ήθελες να σχεδιάσεις ένα κύκλωμα έπρεπε να σχεδιάζεις κάθε φορά τα στοιχεία του κυκλώματος από την αρχή. Κάτι τέτοιο έκανε τον κώδικα άκαμπτο και δύσχρηστο. Με την νέα έκδοση αυτό άλλξε και στο σύστημα υπάρχουν ευθύγραμμα τμήματα που παίζουν το ρόλο του καλωδίου, ξεχωριστές αντιστάσεις, πηγές, κινητήρες, όργανα μέτρησης. Έτσι καλώντας κάθε φορά αυτό που χρειάζεσαι δίνοντας τις συντεταγμένες του στοιχείου στο κύκλωμα μπορείς να συνθέτεις κυκλώματα ανεξαρτήτως βαθμού δυσκολίας. Αυτό κατορθώθηκε φτιάχνοντας σε ξεχωριστές συναρτήσεις κάθε ένα από τα τοιχεία που χρειαζόμαστε και καλώντας τα κάθε φορά με τις κατάλληλες παραμέτρους να συνθέτουμε ότι πολύπλοκο κύκλωμα επιθυμούμε. Ο τρόπος σχεδίασης δεν στηρίζεται σε ένα απόλυτο σημείο στην οθόνη σχεδιασμού και όλα τα υπόλοιπα στοιχεία σχεδιάζονται σε σχετικές συντεταγμένες βάση αυτού του σημείου. Κάτι τέτοιο μας δίνει την δυνατότητα μετακινώντας μόνο ένα σημείο να μπορούμε να μετακινήσουμε όλο το κύκλωμα.άλλο πλεονέκτημα αυτού του τρόπου σχεδίασης είναι ότι ο προγραμματιστής μπορεί κάθε φορά ανάλογα με τι στοιχεία χρειάζεται το κύκλωμα του, να συντάσσει συναρτήσεις και να προσθέτει νέα στοιχεία, π.χ. πηνία. Όλο αυτά όμως θα γίνουν περισσότερο κατανοητά μελετώντας τους κώδικες σχεδιασμού Η συνάρτηση σχεδιασμού ευθείας Drawline Η συνάρτηση σχεδίασης ευθείας, είναι η σημαντικότερη από όλες, διότι πολλά από τα στοιχεία του κυκλώματος αποτελούνται από επιμέρους ευθύγραμμα τμήματα. Για να κατανοήσουμε την συνάρτηση Drawline πρέπει πρώτα να αναφερθούμε στο σύστημα συντεταγμένων της Visual Basic. Το σύστημα συντεταγμένων υπακούει στο παρακάτω σχήμα. Βλέποντας το, συμπεραίνουμε ότι ένα σημείο Α με συντεταγμένες ΑΧ και ΑΥ που θα έχει μετακινηθεί κατά Χ=0 και Υ+, θα δημιουργήσει μια ευθεία με κατεύθυνση προς τα κάτω, όπου το δεύτερο σημείο της θα έχει συντεταγμένες ΑΧ κατά τον άξονα Χ και ΑΥ συν την μετακίνηση κατά Υ, κατά άξονα Υ. Αντίστοιχα αν ένα σημείο μετακινηθεί κατά Χ=0 και Υ- θα δημιουργήσει μια ευθεία με κατεύθυνση προς τα κάτω. Με την ίδια αρχή κατά Χ+ και Υ=0 μια ευθεία προς τα δεξιά, Χ- και Υ=0 μια ευθεία αριστερά κτλ. Κάτι επίσης που πρέπει να σημειωθεί είναι ότι η Visual Basic θεωρεί σαν σημείο με συντεταγμένες 0,0 την πάνω αριστερή γωνία της εκάστοτε φόρμας σχεδίασης. Επίσης κάθε σχεδιαστικό τμήμα, ευθείες, κύκλοι και άλλα πολλαπλασιάζονται στο τέλος που καλείται η εξ ορισμού σχεδιαστική συνάρτηση της VB(στην περίπτωση 81

82 μας η obj.line) με τις Xdef και Ydef που είναι στην ουσία η κλίμακα του κυκλώματος που επιθυμούμε και θα κρατάει το aspect 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 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 = μεταβλητές τύπου integer στις οποίες αποθηκεύονται οι συντεταγμένες του αρχικού σημείου της ευθείας. sx,sy = μεταβλητές τύπου single στις οποίες αποθηκεύονται οι σχετικές συντεταγμένες από το αρχικό σημείο, δηλαδή πόσο έχει μετατοπιστεί το αρχικό σημείο κατά Χ και Υ. Αυτές οι παράμετροι θα καθορίζουν κάθε φορά και την κατεύθυνση της ευθείας. obj = αντικείμενο μέσα στο οποίο θέλουμε να σχεδιάσουμε την ευθεία μας. Κλήση συνάρτησης: Call Drawline(1, 2, 5, 25, 30, 0, Picture1) Με αυτήν την κλήση θα σχηματιστεί μια ευθεία όπου το 1 ο σημείο θα έχει συντεταγμένες 5,25 και το 2 ο θα έχει μετατοπιστεί κατά Χ=30 και Υ=0 (σχετικές 82

83 συντεταγμένες), άρα το νέο σημείο θα έχει συντεταγμένες 20,15 (απόλυτες συντεταγμένες). Η ευθεία δηλαδή θα έχει κατεύθυνση προς τα δεξιά Η συνάρτηση σχεδιασμού στοιχείου οργάνου, DrawIV Η συνάρτηση αυτή είναι υπεύθυνη για τον σχεδιασμό των οργάνων μέτρησης, αμπερομέτρων, βολτομέτρων και ότι επιθυμούμε εμείς. Private Sub DrawIV(insbool As Boolean, insnum%, insname$, sx!, sy!, d$) Dim PointIV As point_axis Tfont = 3 font height 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 83

84 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 όταν το κύκλωμα θέλουμε να εκτυπωθεί (τα όργανα θέλουμε να μην σχεδιάζονται). insum(instrument number) = μεταβλητή τύπου integer που κρατάει το νούμερο του textbox στο οποίο θα εμφανίζεται κάθε φορά η μετρούμενη τιμή. insname(instrument name) = μεταβλητή τύπου char που κρατάει το όνομα του textbox, άρα είναι η τιμή που χαρακτηρίζει τι τύπου όργανο είναι, π.χ. Α (αμπερόμετρο), V (βολτόμετρο), Ω (ωμόμετρο) ή ότι άλλο εμείς επιθυμούμε. sx, xy = μεταβλητές τύπου Single τύπου κρατάνε την τιμή των σχετικών συντεταγμένων του πάνω αριστερά σημείου του τετραγώνου του textbox, σε σχέση με κάποιο άλλο σημείο που μας ενδιαφέρει. Δηλαδή, κρατάνε μετατόπιση από το αρχικό σημείο. d = μεταβλητή τύπου char που παίρνει τιμή hor ή ver ανάλογα με το αν το textbox σχεδιάζεται πάνω σε κατακόρυφο(ver) ευθύγραμμο τμήμα ή σε οριζόντιο(hor). Κλήση συνάρτησης: Call DrawIV(True, 1, A, PointAx(1).x+7, PointAx(1).y, hor ) Από την κλήση αυτή παρατηρούμε ότι θα σχεδιαστεί ένα textbox το οποίο θα είναι visible, θα έχει αριθμό 1, θα αντιστοιχεί το γράμμα Α, άρα είναι αμπερόμετρο, το πάνω αριστερά σημείο έχει συντεταγμένες ίδιες στον άξονα Υ με το PointAx(1).y και από το PointAx(1).x έχει μετατοπιστεί δεξιά(άρα είναι σε οριζόντιο ευθύγραμμο τμήμα πάνω) κατά 7 μονάδες. Το hor επιβεβαιώνει την παραπάνω διαπίστωση. 84

85 Επειδή για τον σχεδιασμό του 3φ κυκλομετατροπέα γέφυρας τόσο των 6 όσο και των 12 παλμών υπήρχε η ανάγκη για δημιουργία μεγαλύτερων οργάνων από τα ήδη υπάρχοντα, παρουσιάζονται παρακάτω οι ρουτίνες που τροποποιήθηκαν ώστε να μπορούν να εφαρμόζουν κατάλληλα στο κύκλωμα. Για τα βολτόμετρα : Private Sub DrawIV2(insbool As Boolean, insnum%, insname$, sx!, sy!, d$) Draw an instrument to show a variable value insbool for bold/normal (True/False) insnum is the number of Textbox used insname$ is the instrument unit of measurement (A, V, rpm, Nm) sx, sy instrument starting point x,y distances d$ is instrument connection lines (hor, ver) Dim PointIV As point_axis Tfont = 3.5 font height 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 / 1.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 define Textbox properties Texts(insnum).Visible = insbool Texts(insnum).Top = Ttop * Ydef 85

86 Texts(insnum).Left = Tleft * Xdef Texts(insnum).Height = Theight * Ydef Texts(insnum).Width = Twidth * Xdef Texts(insnum).FontSize = Tfont * Ydef define Textbox label properties 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 Για τα αμπερόμετρα : Private Sub DrawIV3(insbool As Boolean, insnum%, insname$, sx!, sy!, d$) Draw an instrument to show a variable value insbool for bold/normal (True/False) insnum is the number of Textbox used insname$ is the instrument unit of measurement (A, V, rpm, Nm) sx, sy instrument starting point x,y distances d$ is instrument connection lines (hor, ver) Dim PointIV As point_axis Tfont = 3.5 font height 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 - 4 Lleft = PointIV.x + Twidth 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 86

87 define Textbox properties 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 define Textbox label properties 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 Labels(insnum).Width = 12 End Sub Η συνάρτηση σχεδιασμού στοιχείου αντίστασης, DrawResistance Από το όνομα και μόνο καταλαβαίνουμε ότι είναι η συνάρτηση που θα σχεδιάζει την αντίσταση. Αυτή σχεδιάστηκε από επιμέρους ευθύγραμμα τμήματα με μια γωνία μεταξύ τους γύρω στις 10 μοίρες. Για να καταφέρουμε να δώσουμε στην αντίσταση αυτήν την μορφή, χρειάστηκε να πειραματιστούμε αρκετά με διάφορες τιμές στις μετατοπίσεις των ευθύγραμμων τμημάτων, μέχρι να βρούμε τις επιθυμητές τιμές. Κώδικας συνάρτησης: 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) 87

88 PointAx(pointbeg + 1).x = PointAx(pointbeg).x + 11 PointAx(pointbeg + 1).y = PointAx(pointbeg).y 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 Sub Επεξήγηση παραμέτρων συνάρτησης: pointbeg = μεταβλητή τύπου Integer που κρατάει τον αριθμό του πρώτου σημείου που ξεκινάει ο σχεδιασμός της. Δηλαδή, αν η αντίσταση πρέπει να σχεδιαστεί από το 5 ο σημείο του κυκλώματος τότε αυτή η παράμετρος θα έχει κρατήσει την τιμή 5. Οι συντεταγμένες αυτού του σημείου, αφού όλα τα σημεία του κυκλώματος είναι κρατημένα σε πίνακα συντεταγμένων Χ, Υ, όπως πρέπει ήδη να έχετε καταλάβει, θα είναι PointAx(5).x και PointAx(5).y. Direction = μεταβλητή τύπου char που όπως καταλαβαίνει κανείς από το όνομα της δείχνει αν σχεδιάζεται η αντίσταση κάθετα(ver) ή οριζόντια(hor). obj = το αντικείμενο πάνω στο οποίο θα σχεδιαστεί το στοιχείο. Κλήση συνάρτησης: 88

89 Call DrawResistance(4, ver, obj) Θα σχεδιάσει μια αντίσταση που θα ξεκινάει από το 4 ο σημείο του κυκλώματος θα βρίσκεται οριζόντια και θα σχεδιαστεί σε εκείνο το αντικείμενο που θα ορίσει η συνάρτηση σχεδίασης κυκλώματος Η συνάρτηση σχεδιασμού στοιχείου πηνίου, DrawCoil Αυτή η συνάρτηση είναι υπεύθυνη για την σχεδίαση ενός πηνίου. Ισχύουν οι σχεδιαστικοί κανόνες που έχουμε ήδη αναφέρει και μέχρι να έχουν γίνει απόλυτα κατανοητή. Κώδικας συνάρτησης: Sub DrawCoil(pointbeg%, d$, obj As Object) Select Case d Case "hor" PointAx(pointbeg).x = PointAx(pointbeg).x 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 89

90 Επεξήγηση παραμέτρων συνάρτησης: pointbeg = ακέραιος αριθμός που κρατάει τον αριθμό του σημείου, από το οποίο θα αρχίσει η σχεδίαση του στοιχείου. d = μεταβλητή τύπου char που παίρνει τιμή hor ή ver ανάλογα με το αν το στοιχείο σχεδιάζεται κατακόρυφα(ver) ή σε οριζόντια(hor). obj = αντικείμενο μέσα στο οποίο θα σχεδιαστεί το πηνίο Κλήση συνάρτησης: Call DrawCoil(5, hor, obj) Η κλήση αυτή θα σχεδιάσει ένα πηνίο έχοντας σαν συντεταγμένες τις συντεταγμένες του σημείου 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) obj.line ((PointAx(pointbeg).x + 5.5) * Xdef, (PointAx(pointbeg).y - 4) * Ydef)- ((PointAx(pointbeg).x + 5.5) * Xdef, (PointAx(pointbeg).y - 7) * Ydef) 90

91 Else con = False 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 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) 91

92 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 PointAx(pointbeg + 1).x = PointAx(pointbeg).x PointAx(pointbeg + 1).y = PointAx(pointbeg).y Case "v" 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 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 ανάλογα με το αν θέλουμε μια δίοδο με έλεγχο ή χωρίς. 92

93 obj = αντικείμενο μέσα στο οποίο θα σχεδιαστεί το στοιχείο. Κλήση συνάρτησης: Call DrawDiode(6, >, obj) Με την κλήση αυτή θα σχεδιαστεί μια δίοδος χωρίς έλεγχο, από το 6 σημείο του κυκλώματος έχοντας σαν αρχικές συντεταγμένες τις δικές του, με την κατεύθυνση της καθόδου προς τα δεξιά, πάνω στο αντικείμενο που επιθυμούμε Η συνάρτηση σχεδιασμού στοιχείου πηγής εναλλασομένου, DrawACC Η συνάρτηση αυτή είναι υπεύθυνη για τον σχεδιασμό της πηγής εναλλασόμενου ρεύματος. Sub drawacc(pointbeg%, obj As Object) Dim radius!(1 To 2), center(1 To 3) As point_axis, 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 + radius(1) center(1).y = PointAc.y PointAx(pointbeg + 1).x = PointAc.x radius(1) PointAx(pointbeg + 1).y = PointAc.y 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 Επεξήγηση παραμέτρων συνάρτησης 93

94 Pointbeg = ακέραιος αριθμός που κρατάει τον αριθμό του σημείου, από το οποίο θα ξεκινήσει η σχεδίαση της πηγής. Obj = αντικείμενο μέσα στο οποίο θα σχεδιαστεί η πηγή. Κλήση της συνάρτησης Call drawacc(5, obj) Με τον τρόπο αυτό θα σχεδιαστεί μια πηγή εναλλασομένου με αρχικό σημείο το σημείο 5. Κατά την διάρκεια της σχεδίασης προέκυψε η ανάγκη για μορφοποίηση της συνάρτησης drawacc έτσι ώστε τα όργανα να ταιριάζουν στα παρόντα δεδομένα της σχεδίασης. Ο κώδικας για την δημιουργία της καινούριας συνάρτησης drawacc, της οποίας το όνομα τροποποιήθηκε ως drawacc1 παρατίθεται παρακάτω : Sub drawacc1(pointbeg%, obj As Object) Draw AC supply symbol on an horizontal line Dim radius!(1 To 3), center(1 To 4) As point_axis, PointAc As point_axis PointAc.x = PointAx(Pointbeg).x 4 PointAc.y = PointAx(Pointbeg).y radius(1) = 7 radius(2) = radius(1) / 5 center(1).x = PointAc.x + radius(1) center(1).y = PointAc.y PointAx(Pointbeg + 1).x = PointAc.x radius(1) PointAx(Pointbeg + 1).y = PointAc.y 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 94

95 6.11. Συναρτήσεις σχεδιασμού κυκλωμάτων Εισαγωγή Στην ενότητα αυτή θα δούμε της συναρτήσεις που είναι υπεύθυνες για τον σχεδιασμό ολόκληρου του κυκλώματος, που με την σειρά τους καλούν τις συναρτήσεις σχεδιασμού στοιχείων. Οι συναρτήσεις αυτές επίσης θα καθορίσουν αν θα εμφανίζονται ή όχι τα όργανα μετρήσεων, ποιες θα είναι οι θέσεις που θα έχουν τα στοιχεία μέσα στο κύκλωμα, θα είναι υπεύθυνες για τον χρωματισμό των διόδων στην περίπτωση που άγουν και στον απoxρωματισμό τους, όταν δεν άγουν. Ο σχεδιασμός γενικά ενός κυκλώματος, στην περίπτωση μας, υπακούει στο εξής μοντέλο. Επειδή το μεγαλύτερο μέρος των κυκλωμάτων αποτελούνται από κομμάτια κυκλωμάτων που επαναχρησιμοποιούνται, για να μην σχεδιάζουμε αυτά τα τμήματα κάθε φορά από την αρχή, «σπάμε» το κύκλωμα σε κομμάτια αυτά είναι το κομμάτι τροφοδοσίας, το κομμάτι του δευτερεύοντος και το κομμάτι του κυκλομετατροπέα. Με αυτόν τον τρόπο μας δίνεται η ευκαιρία να δουλέψουμε με μικρότερα κομμάτια κώδικα αντι ενός ενιαίου κώδικα όπου θα ήταν γενικότερα δυσχρηστος. Το πρωτο κομμάτι της πηγης σχεδιάζεται με αρχικά σημεία που ορίζουμε εμείς, τα τελικά του σημεία αποθηκεύονται σε μεταβλητές έτσι ώστε να μπορέσουν να επαναχρησιμοποιηθούν. Το δεύτερο κομμάτι του δευτερεύοντος ξεκινάει την σχεδίαση του με βάση τα τελικά σημεία του πρώτου κομματιού της πηγής δηλαδη, επίσης στο τέλος αποθηκεύονται τα τελικά σημεία του δευτερεύοντος μέσα στην δική του συνάρτηση. Και τέλος το τρίτο κομμάτι του κυκλομετατροπέα ξεκινάει την σχεδίαση του με βάση τα τελικά σημεία του δευτερεύοντος. Ο τρόπος με τον οποίο δηλώνουμε κάθε φορά αυτά τα σημεία είναι ο παρακάτω: ConPoint(1).x = 35 επάνω σημείο συντεταγμένη χ. ConPoint(1).y = 50 επάνω σημείο συντεταγμένη y. ConPoint(2).x = ConPoint(1).x κάτω σημείο συντεταγμένη χ. ConPoint(2).y = 80 κάτω σημείο συντεταγμένη y. Με άλλα λόγια ο εκάστοτε προγραμματιστής είναι ελεύθερος να χρησιμοποιήσει με όποιο τρόπο θέλει αυτές τις πολυχρηστικές συναρτήσεις και να τις χρησιμοποιήσει γι τον σχεδιασμό δικών του κυκλωμάτων, έχοντας σαν γνώση μόνο τα συνδετικά σημεία των επιμέρους μερών. Επίσης, αν το κύκλωμα που επιθυμεί να σχεδιάσει δεν έχει τμήμα από συναρτήσεις που ήδη υπάρχουν μπορεί να προσθέσει τις δικές του συναρτήσεις κυκλωμάτων, χρησιμοποιώντας τα δικά του συνδετικά σημεία. Ας δούμε αναλυτικά λοιπόν αυτές τις συναρτήσεις. 95

96 Συνάρτηση σχεδιασμού κυκλώματος 3-φ Κυκλομετατροπέα Γέφυρας 6Παλμών. Οι συναρτήσεις αυτές είναι υπεύθυνες για τον σχεδιασμό του κυκλώματος 3-φ κυκλομετατροπέα γέφυρας 6παλμών. Προέλευση: Χρησιμοποιείται: Φόρμα SimCircuitForm στη DrawCircuit της SimCircuitForm Κώδικας συνάρτησης: Πρώτο σχεδιαστικό κομμάτι πηγής Sub Draw6P1CY3CON(obj As Object, tbox As Boolean) ReDim PointAx(1 To 21) ReDim ConPoint(1 To 3) PointAx(1).x = 5 PointAx(1).y = 120 Call Drawline(1, 2, PointAx(1).x, PointAx(1).y, 5, 0, obj) Call drawac1(2, 5, "hor", obj) 5 Call Drawline(3, 4, PointAx(3).x, PointAx(3).y, 34, 0, obj) Call DrawCoil(4, "hor", obj) 7.6 Call Drawline(5, 6, PointAx(5).x, PointAx(5).y, 5.4, 0, obj) Call Drawline(6, 12, PointAx(6).x, PointAx(6).y, 0, 50, obj) 1st start vertical line Call Drawline(1, 7, PointAx(1).x, PointAx(1).y, 0, 50, obj) 1st end vertical line Call Drawline(7, 8, PointAx(7).x, PointAx(7).y, 5, 0, obj) Call drawac1(8, 5, "hor", obj) Call Drawline(9, 10, PointAx(9).x, PointAx(9).y, 34, 0, obj) Call DrawCoil(10, "hor", obj) Call Drawline(11, 12, PointAx(11).x, PointAx(11).y, 5.4, 0, obj) Call Drawline(7, 13, PointAx(7).x, PointAx(7).y, 0, 50, obj) 2nd start vertical line Call Drawline(12, 18, PointAx(12).x, PointAx(12).y, 0, 50, obj) 2nd end vertical line 96

97 Call Drawline(13, 14, PointAx(13).x, PointAx(13).y, 5, 0, obj) Call drawac1(14, 5, "hor", obj) Call Drawline(15, 16, PointAx(15).x, PointAx(15).y, 34, 0, obj) Call DrawCoil(16, "hor", obj) Call Drawline(17, 18, PointAx(17).x, PointAx(17).y, 5.4, 0, obj) Voltmeter points PointAx(19).x = PointAx(3).x + 5 PointAx(19).y = PointAx(3).y Call Drawline(19, 20, PointAx(19).x, PointAx(19).y, 0, 50, obj) Call Drawline(20, 21, PointAx(20).x, PointAx(20).y, 0, 50, obj) If tbox = True Then Call DrawIV3(True, 1, "A", PointAx(3).x + 15, PointAx(3).y - 1, "hor") Call DrawIV2(True, 2, "V", PointAx(19).x, PointAx(19).y + 20, "ver") Call DrawIV2(True, 3, "V", PointAx(20).x, PointAx(20).y + 20, "ver") Call DrawIV3(True, 4, "A", PointAx(9).x + 15, PointAx(9).y - 1, "hor") Call DrawIV3(True, 5, "A", PointAx(15).x + 15, PointAx(15).y - 1, "hor") Connection Points ConPoint(1).x = PointAx(6).x + 10 ConPoint(1).y = PointAx(6).y ConPoint(2).x = PointAx(12).x + 10 ConPoint(2).y = PointAx(12).y ConPoint(3).x = PointAx(18).x + 10 ConPoint(3).y = PointAx(18).y End Sub Δεύτερο σχεδιαστικό κομμάτι 6παλμικού 3φ κυκλομετατροπέα Δευτερεύον φορτίο και γέφυρες. Public Sub Draw6pCy3Converter(obj As Object, tbox As Boolean) 97

98 ReDim PointAx(1 To 400) PointAx(1).x = ConPoint(1).x PointAx(1).y = ConPoint(1).y - 50 Y Secondary 1st Y sec phase Call Drawline(1, 2, PointAx(1).x, PointAx(1).y, 5, 0, obj) Call DrawCoil(2, "hor", obj) Call Drawline(3, 4, PointAx(3).x, PointAx(3).y, 27.4, 0, obj) Call Drawline(1, 5, PointAx(1).x, PointAx(1).y, 0, 25, obj) Call Drawline(5, 6, PointAx(5).x, PointAx(5).y, 5, 0, obj) Call DrawCoil(6, "hor", obj) Call Drawline(7, 8, PointAx(7).x, PointAx(7).y, 47.4, 0, obj) Call Drawline(5, 9, PointAx(5).x, PointAx(5).y, 0, 25, obj) Call Drawline(9, 10, PointAx(9).x, PointAx(9).y, 5, 0, obj) Call DrawCoil(10, "hor", obj) Call Drawline(11, 12, PointAx(11).x, PointAx(11).y, 67.4, 0, obj) Call DrawIV3("True", 6, "A", PointAx(3).x + 6, PointAx(3).y - 1, "hor") Call DrawIV3("True", 7, "A", PointAx(7).x + 6, PointAx(7).y - 1, "hor") Call DrawIV3("True", 8, "A", PointAx(11).x + 6, PointAx(11).y - 1, "hor") 2nd Y sec phase PointAx(13).x = PointAx(9).x PointAx(13).y = PointAx(9).y + 25 Call Drawline(13, 14, PointAx(13).x, PointAx(13).y, 5, 0, obj) Call DrawCoil(14, "hor", obj) Call Drawline(15, 16, PointAx(15).x, PointAx(15).y, 157.4, 0, obj) Call Drawline(13, 17, PointAx(13).x, PointAx(13).y, 0, 25, obj) Call Drawline(17, 18, PointAx(17).x, PointAx(17).y, 5, 0, obj) Call DrawCoil(18, "hor", obj) Call Drawline(19, 20, PointAx(19).x, PointAx(19).y, 177.4, 0, obj) Call Drawline(17, 21, PointAx(17).x, PointAx(17).y, 0, 25, obj) 98

99 Call Drawline(21, 22, PointAx(21).x, PointAx(21).y, 5, 0, obj) Call DrawCoil(22, "hor", obj) Call Drawline(23, 24, PointAx(23).x, PointAx(23).y, 197.4, 0, obj) Call DrawIV3("True", 9, "A", PointAx(15).x + 6, PointAx(15).y - 1, "hor") Call DrawIV3("True", 10, "A", PointAx(19).x + 6, PointAx(19).y - 1, "hor") Call DrawIV3("True", 11, "A", PointAx(23).x + 6, PointAx(23).y - 1, "hor") 3rd Y sec phase PointAx(25).x = PointAx(21).x PointAx(25).y = PointAx(21).y + 25 Call Drawline(25, 26, PointAx(25).x, PointAx(25).y, 5, 0, obj) Call DrawCoil(26, "hor", obj) Call Drawline(27, 28, PointAx(27).x, PointAx(27).y, 287.4, 0, obj) Call Drawline(25, 29, PointAx(25).x, PointAx(25).y, 0, 25, obj) Call Drawline(29, 30, PointAx(29).x, PointAx(29).y, 5, 0, obj) Call DrawCoil(30, "hor", obj) Call Drawline(31, 32, PointAx(31).x, PointAx(31).y, 307.4, 0, obj) Call Drawline(29, 33, PointAx(29).x, PointAx(29).y, 0, 25, obj) Call Drawline(33, 34, PointAx(33).x, PointAx(33).y, 5, 0, obj) Call DrawCoil(34, "hor", obj) Call Drawline(35, 36, PointAx(35).x, PointAx(35).y, 327.4, 0, obj) Call DrawIV3("True", 12, "A", PointAx(27).x + 6, PointAx(27).y - 1, "hor") Call DrawIV3("True", 13, "A", PointAx(31).x + 6, PointAx(31).y - 1, "hor") Call DrawIV3("True", 14, "A", PointAx(35).x + 6, PointAx(35).y - 1, "hor") 1st phase Y Pos Bridge PointAx(92).x = PointAx(4).x PointAx(92).y = PointAx(4).y - 50 Call Drawline(92, 93, PointAx(92).x, PointAx(92).y, 0, 13.5, obj) 99

100 Call DrawDiode(93, "^", True, obj) If ValveState%(1, 1, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(93).x * Xdef, (PointAx(93).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(94, 4, PointAx(94).x, PointAx(94).y, 0, 30, obj) Call DrawIV3("True", 24, "A", PointAx(94).x - 5, PointAx(94).y + 10, "hor") Call Drawline(4, 95, PointAx(4).x, PointAx(4).y, 0, 213.5, obj) Call DrawDiode(95, "^", True, obj) If ValveState%(1, 1, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(94).x * Xdef, (PointAx(94).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(96, 97, PointAx(96).x, PointAx(96).y, 0, 30, obj) Call DrawIV3("True", 25, "A", PointAx(96).x - 5, PointAx(96).y + 10, "hor") PointAx(98).x = PointAx(92).x + 20 PointAx(98).y = PointAx(92).y Call Drawline(98, 99, PointAx(98).x, PointAx(98).y, 0, 13.5, obj) Call DrawDiode(99, "^", True, obj) If ValveState%(1, 1, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(99).x * Xdef, (PointAx(99).y + 3) * Ydef, obj.forecolor, 0 100

101 Call Drawline(100, 8, PointAx(100).x, PointAx(100).y, 0, 55, obj) Call DrawIV3("True", 26, "A", PointAx(100).x - 5, PointAx(100).y + 10, "hor") Call Drawline(8, 101, PointAx(8).x, PointAx(8).y, 0, 188.5, obj) Call DrawDiode(101, "^", True, obj) If ValveState%(1, 1, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(101).x * Xdef, (PointAx(101).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(102, 103, PointAx(102).x, PointAx(102).y, 0, 30, obj) Call DrawIV3("True", 27, "A", PointAx(102).x - 5, PointAx(102).y + 10, "hor") PointAx(104).x = PointAx(98).x + 20 PointAx(104).y = PointAx(98).y Call Drawline(104, 105, PointAx(104).x, PointAx(104).y, 0, 13.5, obj) Call DrawDiode(105, "^", True, obj) If ValveState%(1, 1, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(105).x * Xdef, (PointAx(105).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(106, 12, PointAx(106).x, PointAx(106).y, 0, 80, obj) Call DrawIV3("True", 28, "A", PointAx(106).x - 5, PointAx(106).y + 10, "hor") Call Drawline(12, 107, PointAx(12).x, PointAx(12).y, 0, 163.5, obj) Call DrawDiode(107, "^", True, obj) If ValveState%(1, 1, 2, 3) = 1 And bool Then 101

102 ExtFloodFill obj.hdc, PointAx(107).x * Xdef, (PointAx(107).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(108, 109, PointAx(108).x, PointAx(108).y, 0, 30, obj) Call DrawIV3("True", 29, "A", PointAx(108).x - 5, PointAx(108).y + 10, "hor") 1st phase Y Neg Bridge PointAx(111).x = PointAx(92).x + 60 PointAx(111).y = PointAx(92).y Call Drawline(111, 112, PointAx(111).x, PointAx(111).y, 0, 13.5, obj) Call DrawDiode(112, "v", True, obj) If ValveState%(1, 2, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(112).x * Xdef, (PointAx(112).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(113, 114, PointAx(113).x, PointAx(113).y, 0, 30, obj) Call DrawIV3("True", 30, "A", PointAx(113).x - 5, PointAx(113).y + 10, "hor") Call Drawline(114, 115, PointAx(114).x, PointAx(114).y, 0, 213.5, obj) Call DrawDiode(115, "v", True, obj) If ValveState%(1, 2, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(115).x * Xdef, (PointAx(115).y + 3) * Ydef, obj.forecolor, 0 102

103 Call Drawline(116, 117, PointAx(116).x, PointAx(116).y, 0, 30, obj) Call DrawIV3("True", 31, "A", PointAx(116).x - 5, PointAx(116).y + 10, "hor") PointAx(118).x = PointAx(111).x + 20 PointAx(118).y = PointAx(111).y Call Drawline(118, 119, PointAx(118).x, PointAx(118).y, 0, 13.5, obj) Call DrawDiode(119, "v", True, obj) If ValveState%(1, 2, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(119).x * Xdef, (PointAx(119).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(120, 121, PointAx(120).x, PointAx(120).y, 0, 55, obj) Call DrawIV3("True", 32, "A", PointAx(120).x - 5, PointAx(120).y + 10, "hor") Call Drawline(121, 122, PointAx(121).x, PointAx(121).y, 0, 188.5, obj) Call DrawDiode(122, "v", True, obj) If ValveState%(1, 2, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(122).x * Xdef, (PointAx(122).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(123, 124, PointAx(123).x, PointAx(123).y, 0, 30, obj) Call DrawIV3("True", 33, "A", PointAx(123).x - 5, PointAx(123).y + 10, "hor") PointAx(125).x = PointAx(118).x + 20 PointAx(125).y = PointAx(118).y 103

104 Call Drawline(125, 126, PointAx(125).x, PointAx(125).y, 0, 13.5, obj) Call DrawDiode(126, "v", True, obj) If ValveState%(1, 2, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(126).x * Xdef, (PointAx(126).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(127, 128, PointAx(127).x, PointAx(127).y, 0, 80, obj) Call DrawIV3("True", 34, "A", PointAx(127).x - 5, PointAx(127).y + 10, "hor") Call Drawline(128, 129, PointAx(128).x, PointAx(128).y, 0, 163.5, obj) Call DrawDiode(129, "v", True, obj) If ValveState%(1, 2, 2, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(129).x * Xdef, (PointAx(129).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(130, 131, PointAx(130).x, PointAx(130).y, 0, 30, obj) Call DrawIV3("True", 35, "A", PointAx(130).x - 5, PointAx(130).y + 10, "hor") bridge connection lines Call Drawline(92, 125, PointAx(92).x, PointAx(92).y, 100, 0, obj) Call Drawline(97, 131, PointAx(97).x, PointAx(97).y, 100, 0, obj) supply connection lines Call Drawline(4, 114, PointAx(4).x, PointAx(4).y, 60, 0, obj) Call Drawline(8, 121, PointAx(8).x, PointAx(8).y, 60, 0, obj) Call Drawline(12, 128, PointAx(12).x, PointAx(12).y, 60, 0, obj) intergroup midpoints PointAx(110).x = PointAx(104).x

105 PointAx(110).y = PointAx(104).y PointAx(132).x = PointAx(109).x + 10 PointAx(132).y = PointAx(109).y vertical midpoint connection lines Call Drawline(110, 133, PointAx(110).x, PointAx(110).y, 0, -10, obj) Call Drawline(132, 135, PointAx(132).x, PointAx(132).y, 0, 20, obj) output phase circuit Call Drawline(135, 179, PointAx(135).x, PointAx(135).y, 10, 0, obj) Call DrawCoil(179, "hor", obj) Call Drawline(180, 181, PointAx(180).x, PointAx(180).y, 8.6, 0, obj) Call DrawResistance(181, "hor", obj) Call Drawline(182, 183, PointAx(182).x, PointAx(182).y, 28, 0, obj) phase midpoint connection lines Call Drawline(133, 134, PointAx(133).x, PointAx(133).y, 65, 0, obj) Call Drawline(134, 183, PointAx(134).x, PointAx(134).y, 0, 329.5, obj) Connection points obj.circle (PointAx(4).x * Xdef, PointAx(4).y * Ydef), 1.25 * Ydef obj.circle (PointAx(8).x * Xdef, PointAx(8).y * Ydef), 1.25 * Ydef obj.circle (PointAx(12).x * Xdef, PointAx(12).y * Ydef), 1.25 * Ydef obj.circle (PointAx(114).x * Xdef, PointAx(114).y * Ydef), 1.25 * Ydef obj.circle (PointAx(121).x * Xdef, PointAx(121).y * Ydef), 1.25 * Ydef obj.circle (PointAx(128).x * Xdef, PointAx(128).y * Ydef), 1.25 * Ydef 2nd Phase 2nd Y Pos Bridge PointAx(185).x = PointAx(92).x PointAx(185).y = PointAx(92).y Call Drawline(185, 186, PointAx(185).x, PointAx(185).y, 0, 13.5, obj) Call DrawDiode(186, "^", True, obj) If ValveState%(2, 1, 1, 1) = 1 And bool Then 105

106 ExtFloodFill obj.hdc, PointAx(186).x * Xdef, (PointAx(186).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(187, 16, PointAx(187).x, PointAx(187).y, 0, 105, obj) Call DrawIV3("True", 48, "A", PointAx(187).x - 5, PointAx(187).y + 10, "hor") Call Drawline(16, 188, PointAx(16).x, PointAx(16).y, 0, 138.5, obj) Call DrawDiode(188, "^", True, obj) If ValveState%(2, 1, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(188).x * Xdef, (PointAx(188).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(189, 190, PointAx(189).x, PointAx(189).y, 0, 30, obj) Call DrawIV3("True", 49, "A", PointAx(189).x - 5, PointAx(189).y + 10, "hor") PointAx(191).x = PointAx(185).x + 20 PointAx(191).y = PointAx(185).y Call Drawline(191, 192, PointAx(191).x, PointAx(191).y, 0, 13.5, obj) Call DrawDiode(192, "^", True, obj) If ValveState%(2, 1, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(192).x * Xdef, (PointAx(192).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(193, 20, PointAx(193).x, PointAx(193).y, 0, 130, obj) Call DrawIV3("True", 50, "A", PointAx(193).x - 5, PointAx(193).y + 10, "hor") 106

107 Call Drawline(20, 194, PointAx(20).x, PointAx(20).y, 0, 113.5, obj) Call DrawDiode(194, "^", True, obj) If ValveState%(2, 1, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(194).x * Xdef, (PointAx(194).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(195, 196, PointAx(195).x, PointAx(195).y, 0, 30, obj) Call DrawIV3("True", 51, "A", PointAx(195).x - 5, PointAx(195).y + 10, "hor") PointAx(197).x = PointAx(191).x + 20 PointAx(197).y = PointAx(191).y Call Drawline(197, 198, PointAx(197).x, PointAx(197).y, 0, 13.5, obj) Call DrawDiode(198, "^", True, obj) If ValveState%(2, 1, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(197).x * Xdef, (PointAx(197).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(199, 24, PointAx(199).x, PointAx(199).y, 0, 155, obj) Call DrawIV3("True", 52, "A", PointAx(199).x - 5, PointAx(199).y + 10, "hor") Call Drawline(24, 200, PointAx(24).x, PointAx(24).y, 0, 88.5, obj) Call DrawDiode(200, "^", True, obj) If ValveState%(2, 1, 2, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(200).x * Xdef, (PointAx(200).y + 3) * Ydef, obj.forecolor, 0 107

108 Call Drawline(201, 202, PointAx(201).x, PointAx(201).y, 0, 30, obj) Call DrawIV3("True", 53, "A", PointAx(201).x - 5, PointAx(201).y + 10, "hor") 2nd phase Y Neg Bridge PointAx(204).x = PointAx(197).x + 20 PointAx(204).y = PointAx(197).y Call Drawline(204, 205, PointAx(204).x, PointAx(204).y, 0, 13.5, obj) Call DrawDiode(205, "v", True, obj) If ValveState%(2, 2, 4, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(205).x * Xdef, (PointAx(205).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(206, 207, PointAx(206).x, PointAx(206).y, 0, 105, obj) Call DrawIV3("True", 54, "A", PointAx(206).x - 5, PointAx(206).y + 10, "hor") Call Drawline(207, 208, PointAx(207).x, PointAx(207).y, 0, 138.5, obj) Call DrawDiode(208, "v", True, obj) If ValveState%(2, 2, 3, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(208).x * Xdef, (PointAx(208).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(209, 210, PointAx(209).x, PointAx(209).y, 0, 30, obj) Call DrawIV3("True", 55, "A", PointAx(209).x - 5, PointAx(209).y + 10, "hor") 108

109 PointAx(211).x = PointAx(204).x + 20 PointAx(211).y = PointAx(204).y Call Drawline(211, 212, PointAx(211).x, PointAx(211).y, 0, 13.5, obj) Call DrawDiode(212, "v", True, obj) If ValveState%(2, 2, 4, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(212).x * Xdef, (PointAx(212).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(213, 214, PointAx(213).x, PointAx(213).y, 0, 130, obj) Call DrawIV3("True", 56, "A", PointAx(213).x - 5, PointAx(213).y + 10, "hor") Call Drawline(214, 215, PointAx(214).x, PointAx(214).y, 0, 113.5, obj) Call DrawDiode(215, "v", True, obj) If ValveState%(2, 2, 3, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(215).x * Xdef, (PointAx(215).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(216, 217, PointAx(216).x, PointAx(216).y, 0, 30, obj) Call DrawIV3("True", 57, "A", PointAx(216).x - 5, PointAx(216).y + 10, "hor") PointAx(218).x = PointAx(211).x + 20 PointAx(218).y = PointAx(211).y Call Drawline(218, 219, PointAx(218).x, PointAx(218).y, 0, 13.5, obj) Call DrawDiode(219, "v", True, obj) If ValveState%(2, 2, 4, 3) = 1 And bool Then 109

110 ExtFloodFill obj.hdc, PointAx(219).x * Xdef, (PointAx(219).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(220, 221, PointAx(220).x, PointAx(220).y, 0, 155, obj) Call DrawIV3("True", 58, "A", PointAx(220).x - 5, PointAx(220).y + 10, "hor") Call Drawline(221, 222, PointAx(221).x, PointAx(221).y, 0, 88.5, obj) Call DrawDiode(222, "v", True, obj) If ValveState%(2, 2, 3, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(222).x * Xdef, (PointAx(222).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(223, 224, PointAx(223).x, PointAx(223).y, 0, 30, obj) Call DrawIV3("True", 59, "A", PointAx(223).x - 5, PointAx(223).y + 10, "hor") bridge connection lines Call Drawline(185, 218, PointAx(185).x, PointAx(185).y, 100, 0, obj) Call Drawline(190, 224, PointAx(190).x, PointAx(224).y, 100, 0, obj) supply connection lines Call Drawline(16, 207, PointAx(16).x, PointAx(16).y, 60, 0, obj) Call Drawline(20, 214, PointAx(20).x, PointAx(20).y, 60, 0, obj) Call Drawline(24, 221, PointAx(24).x, PointAx(24).y, 60, 0, obj) intergroup midpoints PointAx(203).x = PointAx(197).x + 10 PointAx(203).y = PointAx(197).y PointAx(225).x = PointAx(202).x + 10 PointAx(225).y = PointAx(202).y vertical midpoint connection lines 110

111 Call Drawline(203, 226, PointAx(203).x, PointAx(203).y, 0, -10, obj) Call Drawline(225, 272, PointAx(225).x, PointAx(225).y, 0, 20, obj) output phase circuit Call Drawline(272, 273, PointAx(272).x, PointAx(272).y, 10, 0, obj) Call DrawCoil(273, "hor", obj) Call Drawline(274, 275, PointAx(274).x, PointAx(274).y, 8.6, 0, obj) Call DrawResistance(275, "hor", obj) Call Drawline(276, 277, PointAx(276).x, PointAx(276).y, 28, 0, obj) phase midpoint connection lines Call Drawline(226, 227, PointAx(226).x, PointAx(226).y, 65, 0, obj) Call Drawline(227, 277, PointAx(227).x, PointAx(227).y, 0, 329.5, obj) Connection points obj.circle (PointAx(16).x * Xdef, PointAx(16).y * Ydef), 1.25 * Ydef obj.circle (PointAx(20).x * Xdef, PointAx(20).y * Ydef), 1.25 * Ydef obj.circle (PointAx(24).x * Xdef, PointAx(24).y * Ydef), 1.25 * Ydef obj.circle (PointAx(207).x * Xdef, PointAx(207).y * Ydef), 1.25 * Ydef obj.circle (PointAx(214).x * Xdef, PointAx(214).y * Ydef), 1.25 * Ydef obj.circle (PointAx(221).x * Xdef, PointAx(221).y * Ydef), 1.25 * Ydef 3rd phase 3nd Y Pos Bridge PointAx(279).x = PointAx(185).x PointAx(279).y = PointAx(185).y Call Drawline(279, 280, PointAx(279).x, PointAx(279).y, 0, 13.5, obj) Call DrawDiode(280, "^", True, obj) If ValveState%(3, 1, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(280).x * Xdef, (PointAx(280).y + 3) * Ydef, obj.forecolor, 0 111

112 Call Drawline(281, 28, PointAx(281).x, PointAx(281).y, 0, 180, obj) Call DrawIV3("True", 72, "A", PointAx(281).x - 5, PointAx(281).y + 10, "hor") Call Drawline(28, 282, PointAx(28).x, PointAx(28).y, 0, 63.5, obj) Call DrawDiode(282, "^", True, obj) If ValveState%(3, 1, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(282).x * Xdef, (PointAx(282).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(283, 284, PointAx(283).x, PointAx(283).y, 0, 30, obj) Call DrawIV3("True", 73, "A", PointAx(283).x - 5, PointAx(283).y + 10, "hor") PointAx(285).x = PointAx(279).x + 20 PointAx(285).y = PointAx(279).y Call Drawline(285, 286, PointAx(285).x, PointAx(285).y, 0, 13.5, obj) Call DrawDiode(286, "^", True, obj) If ValveState%(3, 1, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(286).x * Xdef, (PointAx(286).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(287, 32, PointAx(287).x, PointAx(287).y, 0, 205, obj) Call DrawIV3("True", 74, "A", PointAx(287).x - 5, PointAx(287).y + 10, "hor") Call Drawline(32, 288, PointAx(32).x, PointAx(32).y, 0, 38.5, obj) Call DrawDiode(288, "^", True, obj) If ValveState%(3, 1, 2, 2) = 1 And bool Then 112

113 ExtFloodFill obj.hdc, PointAx(288).x * Xdef, (PointAx(288).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(289, 290, PointAx(289).x, PointAx(289).y, 0, 30, obj) Call DrawIV3("True", 75, "A", PointAx(289).x - 5, PointAx(289).y + 10, "hor") PointAx(291).x = PointAx(285).x + 20 PointAx(291).y = PointAx(285).y Call Drawline(291, 292, PointAx(291).x, PointAx(291).y, 0, 13.5, obj) Call DrawDiode(292, "^", True, obj) If ValveState%(3, 1, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(292).x * Xdef, (PointAx(292).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(293, 36, PointAx(293).x, PointAx(293).y, 0, 230, obj) Call DrawIV3("True", 76, "A", PointAx(293).x - 5, PointAx(293).y + 10, "hor") Call Drawline(36, 294, PointAx(36).x, PointAx(36).y, 0, 13.5, obj) Call DrawDiode(294, "^", True, obj) If ValveState%(3, 1, 2, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(294).x * Xdef, (PointAx(294).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(295, 296, PointAx(295).x, PointAx(295).y, 0, 30, obj) 113

114 Call DrawIV3("True", 77, "A", PointAx(295).x - 5, PointAx(295).y + 10, "hor") 3nd phase Y Neg Bridge PointAx(298).x = PointAx(291).x + 20 PointAx(298).y = PointAx(291).y Call Drawline(298, 299, PointAx(298).x, PointAx(298).y, 0, 13.5, obj) Call DrawDiode(299, "v", True, obj) If ValveState%(3, 2, 4, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(299).x * Xdef, (PointAx(299).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(300, 301, PointAx(300).x, PointAx(300).y, 0, 180, obj) Call DrawIV3("True", 78, "A", PointAx(300).x - 5, PointAx(300).y + 10, "hor") Call Drawline(301, 302, PointAx(301).x, PointAx(301).y, 0, 63.5, obj) Call DrawDiode(302, "v", True, obj) If ValveState%(3, 2, 3, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(302).x * Xdef, (PointAx(302).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(303, 304, PointAx(303).x, PointAx(303).y, 0, 30, obj) Call DrawIV3("True", 79, "A", PointAx(303).x - 5, PointAx(303).y + 10, "hor") PointAx(305).x = PointAx(298).x + 20 PointAx(305).y = PointAx(298).y 114

115 Call Drawline(305, 306, PointAx(305).x, PointAx(305).y, 0, 13.5, obj) Call DrawDiode(306, "v", True, obj) If ValveState%(3, 2, 4, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(306).x * Xdef, (PointAx(306).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(307, 308, PointAx(307).x, PointAx(307).y, 0, 205, obj) Call DrawIV3("True", 80, "A", PointAx(307).x - 5, PointAx(307).y + 10, "hor") Call Drawline(308, 309, PointAx(308).x, PointAx(308).y, 0, 38.5, obj) Call DrawDiode(309, "v", True, obj) If ValveState%(3, 2, 3, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(309).x * Xdef, (PointAx(309).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(310, 311, PointAx(310).x, PointAx(310).y, 0, 30, obj) Call DrawIV3("True", 81, "A", PointAx(310).x - 5, PointAx(310).y + 10, "hor") PointAx(312).x = PointAx(305).x + 20 PointAx(312).y = PointAx(305).y Call Drawline(312, 313, PointAx(312).x, PointAx(312).y, 0, 13.5, obj) Call DrawDiode(313, "v", True, obj) If ValveState%(3, 2, 4, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(313).x * Xdef, (PointAx(313).y + 3) * Ydef, obj.forecolor, 0 115

116 Call Drawline(314, 315, PointAx(314).x, PointAx(314).y, 0, 230, obj) Call DrawIV3("True", 82, "A", PointAx(314).x - 5, PointAx(314).y + 10, "hor") Call Drawline(315, 316, PointAx(315).x, PointAx(315).y, 0, 13.5, obj) Call DrawDiode(316, "v", True, obj) If ValveState%(3, 2, 3, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(316).x * Xdef, (PointAx(316).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(317, 318, PointAx(317).x, PointAx(317).y, 0, 30, obj) Call DrawIV3("True", 83, "A", PointAx(317).x - 5, PointAx(317).y + 10, "hor") bridge connection lines Call Drawline(279, 312, PointAx(279).x, PointAx(279).y, 100, 0, obj) Call Drawline(284, 318, PointAx(284).x, PointAx(284).y, 100, 0, obj) supply connection lines Call Drawline(28, 301, PointAx(28).x, PointAx(28).y, 60, 0, obj) Call Drawline(32, 308, PointAx(32).x, PointAx(32).y, 60, 0, obj) Call Drawline(36, 315, PointAx(36).x, PointAx(36).y, 60, 0, obj) intergroup midpoints PointAx(297).x = PointAx(291).x + 10 PointAx(297).y = PointAx(291).y PointAx(319).x = PointAx(296).x + 10 PointAx(319).y = PointAx(296).y vertical midpoint connection lines Call Drawline(297, 320, PointAx(297).x, PointAx(297).y, 0, -10, obj) Call Drawline(319, 366, PointAx(319).x, PointAx(319).y, 0, 20, obj) output phase circuit 116

117 Call Drawline(366, 367, PointAx(366).x, PointAx(366).y, 10, 0, obj) Call DrawCoil(367, "hor", obj) Call Drawline(368, 369, PointAx(368).x, PointAx(368).y, 8.6, 0, obj) Call DrawResistance(369, "hor", obj) Call Drawline(370, 371, PointAx(370).x, PointAx(370).y, 28, 0, obj) phase midpoint connection lines Call Drawline(320, 321, PointAx(320).x, PointAx(320).y, 65, 0, obj) Call Drawline(321, 371, PointAx(321).x, PointAx(321).y, 0, 329.5, obj) Connection points obj.circle (PointAx(28).x * Xdef, PointAx(28).y * Ydef), 1.25 * Ydef obj.circle (PointAx(32).x * Xdef, PointAx(32).y * Ydef), 1.25 * Ydef obj.circle (PointAx(36).x * Xdef, PointAx(36).y * Ydef), 1.25 * Ydef obj.circle (PointAx(301).x * Xdef, PointAx(301).y * Ydef), 1.25 * Ydef obj.circle (PointAx(308).x * Xdef, PointAx(308).y * Ydef), 1.25 * Ydef obj.circle (PointAx(315).x * Xdef, PointAx(315).y * Ydef), 1.25 * Ydef Call DrawIV3(True, 96, "A", PointAx(182).x + 10, PointAx(182).y - 2, "hor") Call DrawIV3(True, 97, "A", PointAx(276).x + 10, PointAx(276).y - 2, "hor") Call DrawIV3(True, 98, "A", PointAx(370).x + 10, PointAx(370).y - 2, "hor") End Sub σχεδιαστικό κομμάτι θυρίστορ Public Sub Draw6pCy3ConSwitches(obj As Object, tbox As Boolean) ReDim PointAx(93 To 316) 1st phase Y pos 1st column PointAx(93).x = ConPoint(1).x + 40 PointAx(93).y = ConPoint(1).y

118 Call DrawDiode(93, "^", True, obj) If ValveState%(1, 1, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(93).x * Xdef, (PointAx(93).y + 3) * Ydef, obj.forecolor, 0 PointAx(95).x = PointAx(93).x PointAx(95).y = PointAx(93).y Call DrawDiode(95, "^", True, obj) If ValveState%(1, 1, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(95).x * Xdef, (PointAx(95).y + 3) * Ydef, obj.forecolor, 0 2nd column PointAx(99).x = PointAx(93).x + 20 PointAx(99).y = PointAx(93).y Call DrawDiode(99, "^", True, obj) If ValveState%(1, 1, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(99).x * Xdef, (PointAx(99).y + 3) * Ydef, obj.forecolor, 0 PointAx(101).x = PointAx(95).x + 20 PointAx(101).y = PointAx(95).y 118

119 Call DrawDiode(101, "^", True, obj) If ValveState%(1, 1, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(101).x * Xdef, (PointAx(101).y + 3) * Ydef, obj.forecolor, 0 3rd column PointAx(105).x = PointAx(99).x + 20 PointAx(105).y = PointAx(99).y Call DrawDiode(105, "^", True, obj) If ValveState%(1, 1, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(105).x * Xdef, (PointAx(105).y + 3) * Ydef, obj.forecolor, 0 PointAx(107).x = PointAx(101).x + 20 PointAx(107).y = PointAx(101).y Call DrawDiode(107, "^", True, obj) If ValveState%(1, 1, 2, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(107).x * Xdef, (PointAx(107).y + 3) * Ydef, obj.forecolor, 0 1st phase Y neg 1st column PointAx(112).x = PointAx(105).x + 20 PointAx(112).y = PointAx(105).y 119

120 Call DrawDiode(112, "v", True, obj) If ValveState%(1, 2, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(112).x * Xdef, (PointAx(112).y + 3) * Ydef, obj.forecolor, 0 PointAx(115).x = PointAx(107).x + 20 PointAx(115).y = PointAx(107).y Call DrawDiode(115, "v", True, obj) If ValveState%(1, 2, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(115).x * Xdef, (PointAx(115).y + 3) * Ydef, obj.forecolor, 0 2nd column PointAx(119).x = PointAx(112).x + 20 PointAx(119).y = PointAx(112).y Call DrawDiode(119, "v", True, obj) If ValveState%(1, 2, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(119).x * Xdef, (PointAx(119).y + 3) * Ydef, obj.forecolor, 0 PointAx(122).x = PointAx(115).x + 20 PointAx(122).y = PointAx(115).y 120

121 Call DrawDiode(122, "v", True, obj) If ValveState%(1, 2, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(122).x * Xdef, (PointAx(122).y + 3) * Ydef, obj.forecolor, 0 3rd column PointAx(126).x = PointAx(119).x + 20 PointAx(126).y = PointAx(119).y Call DrawDiode(126, "v", True, obj) If ValveState%(1, 2, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(126).x * Xdef, (PointAx(126).y + 3) * Ydef, obj.forecolor, 0 PointAx(129).x = PointAx(122).x + 20 PointAx(129).y = PointAx(122).y Call DrawDiode(129, "v", True, obj) If ValveState%(1, 2, 2, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(129).x * Xdef, (PointAx(129).y + 3) * Ydef, obj.forecolor, 0 2nd phase Y pos 1st column 121

122 PointAx(186).x = PointAx(126).x + 30 PointAx(186).y = PointAx(126).y Call DrawDiode(186, "^", True, obj) If ValveState%(2, 1, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(186).x * Xdef, (PointAx(186).y + 3) * Ydef, obj.forecolor, 0 PointAx(188).x = PointAx(129).x + 30 PointAx(188).y = PointAx(129).y Call DrawDiode(188, "^", True, obj) If ValveState%(2, 1, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(188).x * Xdef, (PointAx(188).y + 3) * Ydef, obj.forecolor, 0 2nd column PointAx(192).x = PointAx(186).x + 20 PointAx(192).y = PointAx(186).y Call DrawDiode(192, "^", True, obj) If ValveState%(2, 1, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(192).x * Xdef, (PointAx(192).y + 3) * Ydef, obj.forecolor, 0 122

123 PointAx(194).x = PointAx(188).x + 20 PointAx(194).y = PointAx(188).y Call DrawDiode(194, "^", True, obj) If ValveState%(2, 1, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(194).x * Xdef, (PointAx(194).y + 3) * Ydef, obj.forecolor, 0 3rd column PointAx(198).x = PointAx(192).x + 20 PointAx(198).y = PointAx(192).y Call DrawDiode(198, "^", True, obj) If ValveState%(2, 1, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(198).x * Xdef, (PointAx(198).y + 3) * Ydef, obj.forecolor, 0 PointAx(200).x = PointAx(194).x + 20 PointAx(200).y = PointAx(194).y Call DrawDiode(200, "^", True, obj) If ValveState%(2, 1, 2, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(200).x * Xdef, (PointAx(200).y + 3) * Ydef, obj.forecolor, 0 2nd phase Y neg 123

124 1st column PointAx(205).x = PointAx(198).x + 20 PointAx(205).y = PointAx(198).y Call DrawDiode(205, "v", True, obj) If ValveState%(2, 2, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(205).x * Xdef, (PointAx(205).y + 3) * Ydef, obj.forecolor, 0 PointAx(208).x = PointAx(200).x + 20 PointAx(208).y = PointAx(200).y Call DrawDiode(208, "v", True, obj) If ValveState%(2, 2, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(208).x * Xdef, (PointAx(208).y + 3) * Ydef, obj.forecolor, 0 2nd column PointAx(212).x = PointAx(205).x + 20 PointAx(212).y = PointAx(205).y Call DrawDiode(212, "v", True, obj) If ValveState%(2, 2, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(212).x * Xdef, (PointAx(212).y + 3) * Ydef, obj.forecolor, 0 124

125 PointAx(215).x = PointAx(208).x + 20 PointAx(215).y = PointAx(208).y Call DrawDiode(215, "v", True, obj) If ValveState%(2, 2, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(215).x * Xdef, (PointAx(215).y + 3) * Ydef, obj.forecolor, 0 3rd column PointAx(219).x = PointAx(212).x + 20 PointAx(219).y = PointAx(212).y Call DrawDiode(219, "v", True, obj) If ValveState%(2, 2, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(219).x * Xdef, (PointAx(219).y + 3) * Ydef, obj.forecolor, 0 PointAx(222).x = PointAx(215).x + 20 PointAx(222).y = PointAx(215).y Call DrawDiode(222, "v", True, obj) If ValveState%(2, 2, 2, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(222).x * Xdef, (PointAx(222).y + 3) * Ydef, obj.forecolor, 0 125

126 3rd phase Y pos 1st column PointAx(280).x = PointAx(219).x + 30 PointAx(280).y = PointAx(219).y Call DrawDiode(280, "^", True, obj) If ValveState%(3, 1, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(280).x * Xdef, (PointAx(280).y + 3) * Ydef, obj.forecolor, 0 PointAx(282).x = PointAx(222).x + 30 PointAx(282).y = PointAx(222).y Call DrawDiode(282, "^", True, obj) If ValveState%(3, 1, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(282).x * Xdef, (PointAx(282).y + 3) * Ydef, obj.forecolor, 0 2nd column PointAx(286).x = PointAx(280).x + 20 PointAx(286).y = PointAx(280).y Call DrawDiode(286, "^", True, obj) If ValveState%(3, 1, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(286).x * Xdef, (PointAx(286).y + 3) * Ydef, obj.forecolor, 0 126

127 PointAx(288).x = PointAx(282).x + 20 PointAx(288).y = PointAx(282).y Call DrawDiode(288, "^", True, obj) If ValveState%(3, 1, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(288).x * Xdef, (PointAx(288).y + 3) * Ydef, obj.forecolor, 0 3rd column PointAx(292).x = PointAx(286).x + 20 PointAx(292).y = PointAx(286).y Call DrawDiode(292, "^", True, obj) If ValveState%(3, 1, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(292).x * Xdef, (PointAx(292).y + 3) * Ydef, obj.forecolor, 0 PointAx(294).x = PointAx(288).x + 20 PointAx(294).y = PointAx(288).y Call DrawDiode(294, "^", True, obj) If ValveState%(3, 1, 2, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(294).x * Xdef, (PointAx(294).y + 3) * Ydef, obj.forecolor, 0 127

128 3rd phase Y neg 1st column PointAx(299).x = PointAx(292).x + 20 PointAx(299).y = PointAx(292).y Call DrawDiode(299, "v", True, obj) If ValveState%(3, 2, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(299).x * Xdef, (PointAx(299).y + 3) * Ydef, obj.forecolor, 0 PointAx(302).x = PointAx(294).x + 20 PointAx(302).y = PointAx(294).y Call DrawDiode(302, "v", True, obj) If ValveState%(3, 2, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(302).x * Xdef, (PointAx(302).y + 3) * Ydef, obj.forecolor, 0 2nd column PointAx(306).x = PointAx(299).x + 20 PointAx(306).y = PointAx(299).y Call DrawDiode(306, "v", True, obj) If ValveState%(3, 2, 1, 2) = 1 And bool Then 128

129 ExtFloodFill obj.hdc, PointAx(306).x * Xdef, (PointAx(306).y + 3) * Ydef, obj.forecolor, 0 PointAx(309).x = PointAx(302).x + 20 PointAx(309).y = PointAx(302).y Call DrawDiode(309, "v", True, obj) If ValveState%(3, 2, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(309).x * Xdef, (PointAx(309).y + 3) * Ydef, obj.forecolor, 0 3rd column PointAx(313).x = PointAx(306).x + 20 PointAx(313).y = PointAx(306).y Call DrawDiode(313, "v", True, obj) If ValveState%(3, 2, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(313).x * Xdef, (PointAx(313).y + 3) * Ydef, obj.forecolor, 0 PointAx(315).x = PointAx(309).x + 20 PointAx(315).y = PointAx(309).y Call DrawDiode(315, "v", True, obj) If ValveState%(3, 2, 2, 3) = 1 And bool Then 129

130 ExtFloodFill obj.hdc, PointAx(315).x * Xdef, (PointAx(315).y + 3) * Ydef, obj.forecolor, 0 End Sub Επεξήγηση παραμέτρων συνάρτησης: obj = το όνομα του αντικειμένο μέσα στο οποίο σχεδιάζεται tbox = μεταβλητή τύπου Boolean που παίρνει τιμή ανάλογα με το αν θέλουμε να εμφανίζονται τα όργανα μέτρησης ή όχι, όπως συμβαίνει στην περίπτωση εκτύπωσης του κυκλώματος. Αποτέλεσμα συνάρτησης: Το αποτέλεσμα των συνάρτησεων στην πλήρη τους μορφή, φαίνονται στην εικόνα Εικόνα 6.35.: Αποτέλεσμα συνάρτησεων Draw6PCY3CON, Draw6pCy3converter, Draw6pCy3conSwitches. 130

131 Η συνάρτησεις σχεδιασμού κυκλώματος 3-φ Kυκλομετατροπέα γέφυρας 12παλμών. Οι συναρτήσεις αυτές είναι υπεύθυνες για τον σχεδιασμό του κυκλώματος 3-φ κυκλομετατροπέα γέφυρας 12παλμών. Κώδικας συνάρτησης: Πρώτο σχεδιαστικό κομμάτι 3-φ 12παλμικού κυκλομετατροπέα γέφυρας Πηγή Sub Draw12P1CY3CON(obj As Object, tbox As Boolean) ReDim PointAx(1 To 21) ReDim ConPoint(1 To 3) PointAx(1).x = 5 PointAx(1).y = 270 Call Drawline(1, 2, PointAx(1).x, PointAx(1).y, 5, 0, obj) Call drawac1(2, 5, "hor", obj) 5 Call Drawline(3, 4, PointAx(3).x, PointAx(3).y, 34, 0, obj) Call DrawCoil(4, "hor", obj) 7.6 Call Drawline(5, 6, PointAx(5).x, PointAx(5).y, 5.4, 0, obj) Call Drawline(6, 12, PointAx(6).x, PointAx(6).y, 0, 50, obj) 1st start vertical line Call Drawline(1, 7, PointAx(1).x, PointAx(1).y, 0, 50, obj) 1st end vertical line Call Drawline(7, 8, PointAx(7).x, PointAx(7).y, 5, 0, obj) Call drawac1(8, 5, "hor", obj) Call Drawline(9, 10, PointAx(9).x, PointAx(9).y, 34, 0, obj) Call DrawCoil(10, "hor", obj) Call Drawline(11, 12, PointAx(11).x, PointAx(11).y, 5.4, 0, obj) Call Drawline(7, 13, PointAx(7).x, PointAx(7).y, 0, 50, obj) 2nd start vertical line Call Drawline(12, 18, PointAx(12).x, PointAx(12).y, 0, 50, obj) 2nd end vertical line 131

132 Call Drawline(13, 14, PointAx(13).x, PointAx(13).y, 5, 0, obj) Call drawac1(14, 5, "hor", obj) Call Drawline(15, 16, PointAx(15).x, PointAx(15).y, 34, 0, obj) Call DrawCoil(16, "hor", obj) Call Drawline(17, 18, PointAx(17).x, PointAx(17).y, 5.4, 0, obj) Voltmeter points PointAx(19).x = PointAx(3).x + 5 PointAx(19).y = PointAx(3).y Call Drawline(19, 20, PointAx(19).x, PointAx(19).y, 0, 50, obj) Call Drawline(20, 21, PointAx(20).x, PointAx(20).y, 0, 50, obj) If tbox = True Then Call DrawIV3(True, 1, "A", PointAx(3).x + 15, PointAx(3).y - 5, "hor") Call DrawIV2(True, 2, "V", PointAx(19).x, PointAx(19).y + 20, "ver") Call DrawIV2(True, 3, "V", PointAx(20).x, PointAx(20).y + 20, "ver") Call DrawIV3(True, 4, "A", PointAx(9).x + 15, PointAx(9).y - 5, "hor") Call DrawIV3(True, 5, "A", PointAx(15).x + 15, PointAx(15).y - 5, "hor") Connection Points ConPoint(1).x = PointAx(6).x + 10 ConPoint(1).y = PointAx(6).y ConPoint(2).x = PointAx(12).x + 10 ConPoint(2).y = PointAx(12).y ConPoint(3).x = PointAx(18).x + 10 ConPoint(3).y = PointAx(18).y End Sub

133 Δεύτερο σχεδιαστικό κομμάτι 3-φ 12παλμικού κυκλομετατροπέα γέφυρας δευτερεύον Public Sub Draw12pCy3Converter(obj As Object, tbox As Boolean) ReDim PointAx(1 To 400) PointAx(1).x = ConPoint(1).x PointAx(1).y = ConPoint(1).y Y Secondary 1st Y sec phase Call Drawline(1, 2, PointAx(1).x, PointAx(1).y, 5, 0, obj) Call DrawCoil(2, "hor", obj) Call Drawline(3, 4, PointAx(3).x, PointAx(3).y, 27.4, 0, obj) Call Drawline(1, 5, PointAx(1).x, PointAx(1).y, 0, 25, obj) Call Drawline(5, 6, PointAx(5).x, PointAx(5).y, 5, 0, obj) Call DrawCoil(6, "hor", obj) Call Drawline(7, 8, PointAx(7).x, PointAx(7).y, 47.4, 0, obj) Call Drawline(5, 9, PointAx(5).x, PointAx(5).y, 0, 25, obj) Call Drawline(9, 10, PointAx(9).x, PointAx(9).y, 5, 0, obj) Call DrawCoil(10, "hor", obj) Call Drawline(11, 12, PointAx(11).x, PointAx(11).y, 67.4, 0, obj) Call DrawIV3("True", 6, "A", PointAx(3).x + 6, PointAx(3).y - 4, "hor") Call DrawIV3("True", 7, "A", PointAx(7).x + 6, PointAx(7).y - 4, "hor") Call DrawIV3("True", 8, "A", PointAx(11).x + 6, PointAx(11).y - 4, "hor") 2nd Y sec phase PointAx(13).x = PointAx(9).x PointAx(13).y = PointAx(9).y + 25 Call Drawline(13, 14, PointAx(13).x, PointAx(13).y, 5, 0, obj) Call DrawCoil(14, "hor", obj) Call Drawline(15, 16, PointAx(15).x, PointAx(15).y, 157.4, 0, obj) Call Drawline(13, 17, PointAx(13).x, PointAx(13).y, 0, 25, obj) Call Drawline(17, 18, PointAx(17).x, PointAx(17).y, 5, 0, obj) Call DrawCoil(18, "hor", obj) Call Drawline(19, 20, PointAx(19).x, PointAx(19).y, 177.4, 0, obj) 133

134 Call Drawline(17, 21, PointAx(17).x, PointAx(17).y, 0, 25, obj) Call Drawline(21, 22, PointAx(21).x, PointAx(21).y, 5, 0, obj) Call DrawCoil(22, "hor", obj) Call Drawline(23, 24, PointAx(23).x, PointAx(23).y, 197.4, 0, obj) Call DrawIV3("True", 9, "A", PointAx(15).x + 6, PointAx(15).y - 4, "hor") Call DrawIV3("True", 10, "A", PointAx(19).x + 6, PointAx(19).y - 4, "hor") Call DrawIV3("True", 11, "A", PointAx(23).x + 6, PointAx(23).y - 4, "hor") 3rd Y sec phase D Secondary PointAx(25).x = PointAx(21).x PointAx(25).y = PointAx(21).y + 25 Call Drawline(25, 26, PointAx(25).x, PointAx(25).y, 5, 0, obj) Call DrawCoil(26, "hor", obj) Call Drawline(27, 28, PointAx(27).x, PointAx(27).y, 287.4, 0, obj) Call Drawline(25, 29, PointAx(25).x, PointAx(25).y, 0, 25, obj) Call Drawline(29, 30, PointAx(29).x, PointAx(29).y, 5, 0, obj) Call DrawCoil(30, "hor", obj) Call Drawline(31, 32, PointAx(31).x, PointAx(31).y, 307.4, 0, obj) Call Drawline(29, 33, PointAx(29).x, PointAx(29).y, 0, 25, obj) Call Drawline(33, 34, PointAx(33).x, PointAx(33).y, 5, 0, obj) Call DrawCoil(34, "hor", obj) Call Drawline(35, 36, PointAx(35).x, PointAx(35).y, 327.4, 0, obj) Call DrawIV3("True", 12, "A", PointAx(27).x + 6, PointAx(27).y - 4, "hor") Call DrawIV3("True", 13, "A", PointAx(31).x + 6, PointAx(31).y - 4, "hor") Call DrawIV3("True", 14, "A", PointAx(35).x + 6, PointAx(35).y - 4, "hor") 1st D sec phase PointAx(37).x = PointAx(33).x PointAx(37).y = PointAx(33).y Call Drawline(37, 38, PointAx(37).x, PointAx(37).y, 5, 0, obj) Call DrawCoil(38, "hor", obj) Call Drawline(39, 40, PointAx(39).x, PointAx(39).y, 2.4, 0, obj)

135 Call Drawline(40, 41, PointAx(40).x, PointAx(40).y, 25, 0, obj) 5 Call Drawline(40, 42, PointAx(40).x, PointAx(40).y, 0, -12.5, obj) Call Drawline(42, 43, PointAx(42).x, PointAx(42).y, -20, 0, obj) -40 Call Drawline(37, 44, PointAx(37).x, PointAx(37).y, 0, 12.5, obj) Call Drawline(44, 45, PointAx(44).x, PointAx(44).y, 15, 0, obj) 35 Call Drawline(45, 49, PointAx(45).x, PointAx(45).y, 0, 12.5, obj) PointAx(46).x = PointAx(37).x PointAx(46).y = PointAx(37).y + 25 Call Drawline(46, 47, PointAx(46).x, PointAx(46).y, 5, 0, obj) Call DrawCoil(47, "hor", obj) Call Drawline(48, 49, PointAx(48).x, PointAx(48).y, 2.4, 0, obj) 22.4 Call Drawline(49, 144, PointAx(49).x, PointAx(49).y, 45, 0, obj) 25 Call Drawline(46, 50, PointAx(46).x, PointAx(46).y, 0, 12.5, obj) Call Drawline(50, 51, PointAx(50).x, PointAx(50).y, 15, 0, obj) 35 Call Drawline(51, 55, PointAx(51).x, PointAx(51).y, 0, 12.5, obj) Call Drawline(43, 52, PointAx(43).x, PointAx(43).y, 0, 62.5, obj) Call Drawline(52, 53, PointAx(52).x, PointAx(52).y, 10, 0, obj) Call DrawCoil(53, "hor", obj) Call Drawline(54, 55, PointAx(54).x, PointAx(54).y, 2.4, 0, obj) 22.4 Call Drawline(55, 152, PointAx(55).x, PointAx(55).y, 65, 0, obj) 45 Call DrawIV3("True", 15, "A", PointAx(39).x + 6, PointAx(39).y - 4, "hor") Call DrawIV3("True", 16, "A", PointAx(48).x + 6, PointAx(48).y - 4, "hor") Call DrawIV3("True", 17, "A", PointAx(54).x + 6, PointAx(54).y - 4, "hor") 2nd D sec phase PointAx(56).x = PointAx(50).x PointAx(56).y = PointAx(50).y Call Drawline(56, 57, PointAx(56).x, PointAx(56).y, 5, 0, obj) Call DrawCoil(57, "hor", obj) Call Drawline(58, 59, PointAx(58).x, PointAx(58).y, 2.4, 0, obj) 22.4 Call Drawline(59, 232, PointAx(59).x, PointAx(59).y, 155, 0, obj) 135 Call Drawline(59, 60, PointAx(59).x, PointAx(59).y, 0, -12.5, obj) Call Drawline(60, 61, PointAx(60).x, PointAx(60).y, -20, 0, obj)

136 Call Drawline(56, 62, PointAx(56).x, PointAx(56).y, 0, 12.5, obj) Call Drawline(62, 63, PointAx(62).x, PointAx(62).y, 15, 0, obj) 35 Call Drawline(63, 67, PointAx(63).x, PointAx(63).y, 0, 12.5, obj) PointAx(64).x = PointAx(56).x PointAx(64).y = PointAx(56).y + 25 Call Drawline(64, 65, PointAx(64).x, PointAx(64).y, 5, 0, obj) Call DrawCoil(65, "hor", obj) Call Drawline(66, 67, PointAx(66).x, PointAx(66).y, 2.4, 0, obj) 22.4 Call Drawline(67, 239, PointAx(67).x, PointAx(67).y, 175, 0, obj) 155 Call Drawline(64, 68, PointAx(64).x, PointAx(64).y, 0, 12.5, obj) Call Drawline(68, 69, PointAx(68).x, PointAx(68).y, 15, 0, obj) 35 Call Drawline(69, 73, PointAx(69).x, PointAx(69).y, 0, 12.5, obj) Call Drawline(61, 70, PointAx(61).x, PointAx(61).y, 0, 62.5, obj) Call Drawline(70, 71, PointAx(70).x, PointAx(70).y, 10, 0, obj) Call DrawCoil(71, "hor", obj) Call Drawline(72, 73, PointAx(72).x, PointAx(72).y, 2.4, 0, obj) 22.4 Call Drawline(73, 246, PointAx(73).x, PointAx(73).y, 195, 0, obj) 175 Call DrawIV3("True", 18, "A", PointAx(58).x + 6, PointAx(58).y - 4, "hor") Call DrawIV3("True", 19, "A", PointAx(66).x + 6, PointAx(66).y - 4, "hor") Call DrawIV3("True", 20, "A", PointAx(72).x + 6, PointAx(72).y - 4, "hor") 3rd D sec phase PointAx(74).x = PointAx(68).x PointAx(74).y = PointAx(68).y Call Drawline(74, 75, PointAx(74).x, PointAx(74).y, 5, 0, obj) Call DrawCoil(75, "hor", obj) Call Drawline(76, 77, PointAx(76).x, PointAx(76).y, 2.4, 0, obj) 22.4 Call Drawline(77, 326, PointAx(77).x, PointAx(77).y, 305, 0, obj) 285 Call Drawline(77, 78, PointAx(77).x, PointAx(77).y, 0, -12.5, obj) Call Drawline(78, 79, PointAx(78).x, PointAx(78).y, -20, 0, obj) -40 Call Drawline(74, 80, PointAx(74).x, PointAx(74).y, 0, 12.5, obj) Call Drawline(80, 81, PointAx(80).x, PointAx(80).y, 15, 0, obj) 35 Call Drawline(81, 85, PointAx(81).x, PointAx(81).y, 0, 12.5, obj) 136

137 PointAx(82).x = PointAx(74).x PointAx(82).y = PointAx(74).y + 25 Call Drawline(82, 83, PointAx(82).x, PointAx(82).y, 5, 0, obj) Call DrawCoil(83, "hor", obj) Call Drawline(84, 85, PointAx(84).x, PointAx(84).y, 2.4, 0, obj) 22.4 Call Drawline(85, 333, PointAx(85).x, PointAx(85).y, 325, 0, obj) 305 Call Drawline(82, 86, PointAx(82).x, PointAx(82).y, 0, 12.5, obj) Call Drawline(86, 87, PointAx(86).x, PointAx(86).y, 15, 0, obj) 35 Call Drawline(87, 91, PointAx(87).x, PointAx(87).y, 0, 12.5, obj) Call Drawline(79, 88, PointAx(79).x, PointAx(79).y, 0, 62.5, obj) Call Drawline(88, 89, PointAx(88).x, PointAx(88).y, 10, 0, obj) Call DrawCoil(89, "hor", obj) Call Drawline(90, 91, PointAx(90).x, PointAx(90).y, 2.4, 0, obj) 22.4 Call Drawline(91, 340, PointAx(91).x, PointAx(91).y, 345, 0, obj) 325 Call DrawIV3("True", 21, "A", PointAx(76).x + 6, PointAx(76).y - 4, "hor") Call DrawIV3("True", 22, "A", PointAx(84).x + 6, PointAx(84).y - 4, "hor") Call DrawIV3("True", 23, "A", PointAx(90).x + 6, PointAx(90).y - 4, "hor") 1st phase Y Pos Bridge PointAx(92).x = PointAx(4).x PointAx(92).y = PointAx(4).y - 50 Call Drawline(92, 93, PointAx(92).x, PointAx(92).y, 0, 13.5, obj) Call DrawDiode(93, "^", True, obj) If ValveState%(1, 1, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(93).x * Xdef, (PointAx(93).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(94, 4, PointAx(94).x, PointAx(94).y, 0, 30, obj) 137

138 Call DrawIV3("True", 24, "A", PointAx(94).x - 5, PointAx(94).y + 10, "hor") Call Drawline(4, 95, PointAx(4).x, PointAx(4).y, 0, 213.5, obj) Call DrawDiode(95, "^", True, obj) If ValveState%(1, 1, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(94).x * Xdef, (PointAx(94).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(96, 97, PointAx(96).x, PointAx(96).y, 0, 30, obj) Call DrawIV3("True", 25, "A", PointAx(96).x - 5, PointAx(96).y + 10, "hor") PointAx(98).x = PointAx(92).x + 20 PointAx(98).y = PointAx(92).y Call Drawline(98, 99, PointAx(98).x, PointAx(98).y, 0, 13.5, obj) Call DrawDiode(99, "^", True, obj) If ValveState%(1, 1, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(99).x * Xdef, (PointAx(99).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(100, 8, PointAx(100).x, PointAx(100).y, 0, 55, obj) Call DrawIV3("True", 26, "A", PointAx(100).x - 5, PointAx(100).y + 10, "hor") Call Drawline(8, 101, PointAx(8).x, PointAx(8).y, 0, 188.5, obj) Call DrawDiode(101, "^", True, obj) If ValveState%(1, 1, 2, 2) = 1 And bool Then 138

139 ExtFloodFill obj.hdc, PointAx(101).x * Xdef, (PointAx(101).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(102, 103, PointAx(102).x, PointAx(102).y, 0, 30, obj) Call DrawIV3("True", 27, "A", PointAx(102).x - 5, PointAx(102).y + 10, "hor") PointAx(104).x = PointAx(98).x + 20 PointAx(104).y = PointAx(98).y Call Drawline(104, 105, PointAx(104).x, PointAx(104).y, 0, 13.5, obj) Call DrawDiode(105, "^", True, obj) If ValveState%(1, 1, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(105).x * Xdef, (PointAx(105).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(106, 12, PointAx(106).x, PointAx(106).y, 0, 80, obj) Call DrawIV3("True", 28, "A", PointAx(106).x - 5, PointAx(106).y + 10, "hor") Call Drawline(12, 107, PointAx(12).x, PointAx(12).y, 0, 163.5, obj) Call DrawDiode(107, "^", True, obj) If ValveState%(1, 1, 2, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(107).x * Xdef, (PointAx(107).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(108, 109, PointAx(108).x, PointAx(108).y, 0, 30, obj) Call DrawIV3("True", 29, "A", PointAx(108).x - 5, PointAx(108).y + 10, "hor") 139

140 1st phase D Pos Bridge PointAx(136).x = PointAx(41).x PointAx(136).y = PointAx(41).y - 50 Call Drawline(136, 137, PointAx(136).x, PointAx(136).y, 0, 13.5, obj) Call DrawDiode(137, "^", True, obj) If ValveState%(1, 1, 3, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(137).x * Xdef, (PointAx(137).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(138, 41, PointAx(138).x, PointAx(138).y, 0, 30, obj) Call DrawIV3("True", 36, "A", PointAx(138).x - 5, PointAx(138).y + 10, "hor") Call Drawline(41, 139, PointAx(41).x, PointAx(41).y, 0, 213.5, obj) Call DrawDiode(139, "^", True, obj) If ValveState%(1, 1, 4, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(139).x * Xdef, (PointAx(139).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(140, 141, PointAx(140).x, PointAx(140).y, 0, 30, obj) Call DrawIV3("True", 37, "A", PointAx(140).x - 5, PointAx(140).y + 10, "hor") PointAx(142).x = PointAx(136).x + 20 PointAx(142).y = PointAx(136).y Call Drawline(142, 143, PointAx(142).x, PointAx(142).y, 0, 13.5, obj) 140

141 Call DrawDiode(143, "^", True, obj) If ValveState%(1, 1, 3, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(143).x * Xdef, (PointAx(143).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(144, 145, PointAx(144).x, PointAx(144).y, 0, 55, obj) Call DrawIV3("True", 38, "A", PointAx(144).x - 5, PointAx(144).y + 10, "hor") Call Drawline(145, 146, PointAx(145).x, PointAx(145).y, 0, 188.5, obj) Call DrawDiode(146, "^", True, obj) If ValveState%(1, 1, 4, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(146).x * Xdef, (PointAx(146).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(147, 148, PointAx(147).x, PointAx(147).y, 0, 30, obj) Call DrawIV3("True", 39, "A", PointAx(147).x - 5, PointAx(147).y + 10, "hor") PointAx(149).x = PointAx(142).x + 20 PointAx(149).y = PointAx(142).y Call Drawline(149, 150, PointAx(149).x, PointAx(149).y, 0, 13.5, obj) Call DrawDiode(150, "^", True, obj) If ValveState%(1, 1, 3, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(150).x * Xdef, (PointAx(150).y + 3) * Ydef, obj.forecolor, 0 141

142 Call Drawline(151, 152, PointAx(151).x, PointAx(151).y, 0, 80, obj) Call DrawIV3("True", 40, "A", PointAx(151).x - 5, PointAx(151).y + 10, "hor") Call Drawline(152, 153, PointAx(152).x, PointAx(152).y, 0, 163.5, obj) Call DrawDiode(153, "^", True, obj) If ValveState%(1, 1, 4, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(153).x * Xdef, (PointAx(153).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(154, 155, PointAx(154).x, PointAx(154).y, 0, 30, obj) Call DrawIV3("True", 41, "A", PointAx(154).x - 5, PointAx(154).y + 10, "hor") 1st phase Y Neg Bridge PointAx(111).x = PointAx(92).x + 60 PointAx(111).y = PointAx(92).y Call Drawline(111, 112, PointAx(111).x, PointAx(111).y, 0, 13.5, obj) Call DrawDiode(112, "v", True, obj) If ValveState%(1, 2, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(112).x * Xdef, (PointAx(112).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(113, 114, PointAx(113).x, PointAx(113).y, 0, 30, obj) Call DrawIV3("True", 30, "A", PointAx(113).x - 5, PointAx(113).y + 10, "hor") 142

143 Call Drawline(114, 115, PointAx(114).x, PointAx(114).y, 0, 213.5, obj) Call DrawDiode(115, "v", True, obj) If ValveState%(1, 2, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(115).x * Xdef, (PointAx(115).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(116, 117, PointAx(116).x, PointAx(116).y, 0, 30, obj) Call DrawIV3("True", 31, "A", PointAx(116).x - 5, PointAx(116).y + 10, "hor") PointAx(118).x = PointAx(111).x + 20 PointAx(118).y = PointAx(111).y Call Drawline(118, 119, PointAx(118).x, PointAx(118).y, 0, 13.5, obj) Call DrawDiode(119, "v", True, obj) If ValveState%(1, 2, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(119).x * Xdef, (PointAx(119).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(120, 121, PointAx(120).x, PointAx(120).y, 0, 55, obj) Call DrawIV3("True", 32, "A", PointAx(120).x - 5, PointAx(120).y + 10, "hor") Call Drawline(121, 122, PointAx(121).x, PointAx(121).y, 0, 188.5, obj) Call DrawDiode(122, "v", True, obj) If ValveState%(1, 2, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(122).x * Xdef, (PointAx(122).y + 3) * Ydef, obj.forecolor, 0 143

144 Call Drawline(123, 124, PointAx(123).x, PointAx(123).y, 0, 30, obj) Call DrawIV3("True", 33, "A", PointAx(123).x - 5, PointAx(123).y + 10, "hor") PointAx(125).x = PointAx(118).x + 20 PointAx(125).y = PointAx(118).y Call Drawline(125, 126, PointAx(125).x, PointAx(125).y, 0, 13.5, obj) Call DrawDiode(126, "v", True, obj) If ValveState%(1, 2, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(126).x * Xdef, (PointAx(126).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(127, 128, PointAx(127).x, PointAx(127).y, 0, 80, obj) Call DrawIV3("True", 34, "A", PointAx(127).x - 5, PointAx(127).y + 10, "hor") Call Drawline(128, 129, PointAx(128).x, PointAx(128).y, 0, 163.5, obj) Call DrawDiode(129, "v", True, obj) If ValveState%(1, 2, 2, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(129).x * Xdef, (PointAx(129).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(130, 131, PointAx(130).x, PointAx(130).y, 0, 30, obj) Call DrawIV3("True", 35, "A", PointAx(130).x - 5, PointAx(130).y + 10, "hor") 1st phase D Neg Bridge 144

145 PointAx(156).x = PointAx(136).x + 60 PointAx(156).y = PointAx(136).y Call Drawline(156, 157, PointAx(156).x, PointAx(156).y, 0, 13.5, obj) Call DrawDiode(157, "v", True, obj) If ValveState%(1, 2, 3, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(157).x * Xdef, (PointAx(157).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(158, 159, PointAx(158).x, PointAx(158).y, 0, 30, obj) Call DrawIV3("True", 42, "A", PointAx(158).x - 5, PointAx(158).y + 10, "hor") Call Drawline(159, 160, PointAx(159).x, PointAx(159).y, 0, 213.5, obj) Call DrawDiode(160, "v", True, obj) If ValveState%(1, 2, 4, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(160).x * Xdef, (PointAx(160).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(161, 162, PointAx(161).x, PointAx(161).y, 0, 30, obj) Call DrawIV3("True", 43, "A", PointAx(161).x - 5, PointAx(161).y + 10, "hor") PointAx(163).x = PointAx(156).x + 20 PointAx(163).y = PointAx(156).y Call Drawline(163, 164, PointAx(163).x, PointAx(163).y, 0, 13.5, obj) Call DrawDiode(164, "v", True, obj) If ValveState%(1, 2, 3, 2) = 1 And bool Then 145

146 ExtFloodFill obj.hdc, PointAx(164).x * Xdef, (PointAx(164).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(165, 166, PointAx(165).x, PointAx(165).y, 0, 55, obj) Call DrawIV3("True", 44, "A", PointAx(165).x - 5, PointAx(165).y + 10, "hor") Call Drawline(166, 167, PointAx(166).x, PointAx(166).y, 0, 188.5, obj) Call DrawDiode(167, "v", True, obj) If ValveState%(1, 2, 4, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(167).x * Xdef, (PointAx(167).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(168, 169, PointAx(168).x, PointAx(168).y, 0, 30, obj) Call DrawIV3("True", 45, "A", PointAx(168).x - 5, PointAx(168).y + 10, "hor") PointAx(170).x = PointAx(163).x + 20 PointAx(170).y = PointAx(163).y Call Drawline(170, 171, PointAx(170).x, PointAx(170).y, 0, 13.5, obj) Call DrawDiode(171, "v", True, obj) If ValveState%(1, 2, 3, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(171).x * Xdef, (PointAx(171).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(172, 173, PointAx(172).x, PointAx(172).y, 0, 80, obj) Call DrawIV3("True", 46, "A", PointAx(172).x - 5, PointAx(172).y + 10, "hor") 146

147 Call Drawline(173, 174, PointAx(173).x, PointAx(173).y, 0, 163.5, obj) Call DrawDiode(174, "v", True, obj) If ValveState%(1, 2, 4, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(174).x * Xdef, (PointAx(174).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(175, 176, PointAx(175).x, PointAx(175).y, 0, 30, obj) Call DrawIV3("True", 47, "A", PointAx(175).x - 5, PointAx(175).y + 10, "hor") bridge connection lines Call Drawline(92, 125, PointAx(92).x, PointAx(92).y, 100, 0, obj) Call Drawline(97, 131, PointAx(97).x, PointAx(97).y, 100, 0, obj) Call Drawline(136, 170, PointAx(136).x, PointAx(136).y, 100, 0, obj) Call Drawline(141, 176, PointAx(141).x, PointAx(141).y, 100, 0, obj) supply connection lines Call Drawline(4, 114, PointAx(4).x, PointAx(4).y, 60, 0, obj) Call Drawline(8, 121, PointAx(8).x, PointAx(8).y, 60, 0, obj) Call Drawline(12, 128, PointAx(12).x, PointAx(12).y, 60, 0, obj) Call Drawline(41, 159, PointAx(41).x, PointAx(41).y, 60, 0, obj) Call Drawline(145, 166, PointAx(145).x, PointAx(145).y, 60, 0, obj) Call Drawline(152, 173, PointAx(152).x, PointAx(152).y, 60, 0, obj) intergroup midpoints PointAx(110).x = PointAx(104).x + 10 PointAx(110).y = PointAx(104).y PointAx(132).x = PointAx(109).x + 10 PointAx(132).y = PointAx(109).y PointAx(135).x = PointAx(149).x + 10 PointAx(135).y = PointAx(149).y PointAx(177).x = PointAx(155).x

148 PointAx(177).y = PointAx(155).y vertical midpoint connection lines Call Drawline(110, 133, PointAx(110).x, PointAx(110).y, 0, -10, obj) Call Drawline(132, 135, PointAx(132).x, PointAx(132).y, 0, 20, obj) Call Drawline(177, 178, PointAx(177).x, PointAx(177).y, 0, 20, obj) output phase circuit Call Drawline(178, 179, PointAx(178).x, PointAx(178).y, 10, 0, obj) Call DrawCoil(179, "hor", obj) Call Drawline(180, 181, PointAx(180).x, PointAx(180).y, 8.6, 0, obj) Call DrawResistance(181, "hor", obj) Call Drawline(182, 183, PointAx(182).x, PointAx(182).y, 28, 0, obj) phase midpoint connection lines Call Drawline(133, 134, PointAx(133).x, PointAx(133).y, 65, 0, obj) Call Drawline(134, 183, PointAx(134).x, PointAx(134).y, 0, 650, obj) Connection points obj.circle (PointAx(4).x * Xdef, PointAx(4).y * Ydef), 1.55 * Ydef obj.circle (PointAx(8).x * Xdef, PointAx(8).y * Ydef), 1.55 * Ydef obj.circle (PointAx(12).x * Xdef, PointAx(12).y * Ydef), 1.55 * Ydef obj.circle (PointAx(114).x * Xdef, PointAx(114).y * Ydef), 1.55 * Ydef obj.circle (PointAx(121).x * Xdef, PointAx(121).y * Ydef), 1.55 * Ydef obj.circle (PointAx(128).x * Xdef, PointAx(128).y * Ydef), 1.55 * Ydef obj.circle (PointAx(41).x * Xdef, PointAx(41).y * Ydef), 1.55 * Ydef obj.circle (PointAx(145).x * Xdef, PointAx(145).y * Ydef), 1.55 * Ydef obj.circle (PointAx(152).x * Xdef, PointAx(152).y * Ydef), 1.55 * Ydef obj.circle (PointAx(159).x * Xdef, PointAx(159).y * Ydef), 1.55 * Ydef obj.circle (PointAx(166).x * Xdef, PointAx(166).y * Ydef), 1.55 * Ydef obj.circle (PointAx(173).x * Xdef, PointAx(173).y * Ydef), 1.55 * Ydef 2nd Phase 2nd Y Pos Bridge PointAx(185).x = PointAx(92).x PointAx(185).y = PointAx(92).y 148

149 Call Drawline(185, 186, PointAx(185).x, PointAx(185).y, 0, 13.5, obj) Call DrawDiode(186, "^", True, obj) If ValveState%(2, 1, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(186).x * Xdef, (PointAx(186).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(187, 16, PointAx(187).x, PointAx(187).y, 0, 105, obj) Call DrawIV3("True", 48, "A", PointAx(187).x - 5, PointAx(187).y + 10, "hor") Call Drawline(16, 188, PointAx(16).x, PointAx(16).y, 0, 138.5, obj) Call DrawDiode(188, "^", True, obj) If ValveState%(2, 1, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(188).x * Xdef, (PointAx(188).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(189, 190, PointAx(189).x, PointAx(189).y, 0, 30, obj) Call DrawIV3("True", 49, "A", PointAx(189).x - 5, PointAx(189).y + 10, "hor") PointAx(191).x = PointAx(185).x + 20 PointAx(191).y = PointAx(185).y Call Drawline(191, 192, PointAx(191).x, PointAx(191).y, 0, 13.5, obj) Call DrawDiode(192, "^", True, obj) If ValveState%(2, 1, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(192).x * Xdef, (PointAx(192).y + 3) * Ydef, obj.forecolor, 0 149

150 Call Drawline(193, 20, PointAx(193).x, PointAx(193).y, 0, 130, obj) Call DrawIV3("True", 50, "A", PointAx(193).x - 5, PointAx(193).y + 10, "hor") Call Drawline(20, 194, PointAx(20).x, PointAx(20).y, 0, 113.5, obj) Call DrawDiode(194, "^", True, obj) If ValveState%(2, 1, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(194).x * Xdef, (PointAx(194).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(195, 196, PointAx(195).x, PointAx(195).y, 0, 30, obj) Call DrawIV3("True", 51, "A", PointAx(195).x - 5, PointAx(195).y + 10, "hor") PointAx(197).x = PointAx(191).x + 20 PointAx(197).y = PointAx(191).y Call Drawline(197, 198, PointAx(197).x, PointAx(197).y, 0, 13.5, obj) Call DrawDiode(198, "^", True, obj) If ValveState%(2, 1, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(197).x * Xdef, (PointAx(197).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(199, 24, PointAx(199).x, PointAx(199).y, 0, 155, obj) Call DrawIV3("True", 52, "A", PointAx(199).x - 5, PointAx(199).y + 10, "hor") Call Drawline(24, 200, PointAx(24).x, PointAx(24).y, 0, 88.5, obj) 150

151 Call DrawDiode(200, "^", True, obj) If ValveState%(2, 1, 2, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(200).x * Xdef, (PointAx(200).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(201, 202, PointAx(201).x, PointAx(201).y, 0, 30, obj) Call DrawIV3("True", 53, "A", PointAx(201).x - 5, PointAx(201).y + 10, "hor") 2nd phase D Pos Bridge PointAx(229).x = PointAx(136).x PointAx(229).y = PointAx(136).y Call Drawline(229, 230, PointAx(229).x, PointAx(229).y, 0, 13.5, obj) Call DrawDiode(230, "^", True, obj) If ValveState%(2, 1, 3, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(230).x * Xdef, (PointAx(230).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(231, 232, PointAx(231).x, PointAx(231).y, 0, 105, obj) Call DrawIV3("True", 60, "A", PointAx(231).x - 5, PointAx(231).y + 10, "hor") Call Drawline(232, 233, PointAx(232).x, PointAx(232).y, 0, 138.5, obj) Call DrawDiode(233, "^", True, obj) If ValveState%(2, 1, 4, 1) = 1 And bool Then 151

152 ExtFloodFill obj.hdc, PointAx(233).x * Xdef, (PointAx(233).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(234, 235, PointAx(234).x, PointAx(234).y, 0, 30, obj) Call DrawIV3("True", 61, "A", PointAx(234).x - 5, PointAx(234).y + 10, "hor") PointAx(236).x = PointAx(229).x + 20 PointAx(236).y = PointAx(229).y Call Drawline(236, 237, PointAx(236).x, PointAx(236).y, 0, 13.5, obj) Call DrawDiode(237, "^", True, obj) If ValveState%(2, 1, 3, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(237).x * Xdef, (PointAx(237).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(238, 239, PointAx(238).x, PointAx(238).y, 0, 130, obj) Call DrawIV3("True", 62, "A", PointAx(238).x - 5, PointAx(238).y + 10, "hor") Call Drawline(239, 240, PointAx(239).x, PointAx(239).y, 0, 113.5, obj) Call DrawDiode(240, "^", True, obj) If ValveState%(2, 1, 4, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(240).x * Xdef, (PointAx(240).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(241, 242, PointAx(241).x, PointAx(241).y, 0, 30, obj) Call DrawIV3("True", 63, "A", PointAx(241).x - 5, PointAx(241).y + 10, "hor") 152

153 PointAx(243).x = PointAx(236).x + 20 PointAx(243).y = PointAx(236).y Call Drawline(243, 244, PointAx(243).x, PointAx(243).y, 0, 13.5, obj) Call DrawDiode(244, "^", True, obj) If ValveState%(2, 1, 3, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(244).x * Xdef, (PointAx(244).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(245, 246, PointAx(245).x, PointAx(245).y, 0, 155, obj) Call DrawIV3("True", 64, "A", PointAx(245).x - 5, PointAx(245).y + 10, "hor") Call Drawline(246, 247, PointAx(246).x, PointAx(246).y, 0, 88.5, obj) Call DrawDiode(247, "^", True, obj) If ValveState%(2, 1, 4, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(247).x * Xdef, (PointAx(247).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(248, 249, PointAx(248).x, PointAx(248).y, 0, 30, obj) Call DrawIV3("True", 65, "A", PointAx(248).x - 5, PointAx(248).y + 10, "hor") 2nd phase Y Neg Bridge PointAx(204).x = PointAx(197).x + 20 PointAx(204).y = PointAx(197).y Call Drawline(204, 205, PointAx(204).x, PointAx(204).y, 0, 13.5, obj) Call DrawDiode(205, "v", True, obj) 153

154 If ValveState%(2, 2, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(205).x * Xdef, (PointAx(205).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(206, 207, PointAx(206).x, PointAx(206).y, 0, 105, obj) Call DrawIV3("True", 54, "A", PointAx(206).x - 5, PointAx(206).y + 10, "hor") Call Drawline(207, 208, PointAx(207).x, PointAx(207).y, 0, 138.5, obj) Call DrawDiode(208, "v", True, obj) If ValveState%(2, 2, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(208).x * Xdef, (PointAx(208).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(209, 210, PointAx(209).x, PointAx(209).y, 0, 30, obj) Call DrawIV3("True", 55, "A", PointAx(209).x - 5, PointAx(209).y + 10, "hor") PointAx(211).x = PointAx(204).x + 20 PointAx(211).y = PointAx(204).y Call Drawline(211, 212, PointAx(211).x, PointAx(211).y, 0, 13.5, obj) Call DrawDiode(212, "v", True, obj) If ValveState%(2, 2, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(212).x * Xdef, (PointAx(212).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(213, 214, PointAx(213).x, PointAx(213).y, 0, 130, obj) 154

155 Call DrawIV3("True", 56, "A", PointAx(213).x - 5, PointAx(213).y + 10, "hor") Call Drawline(214, 215, PointAx(214).x, PointAx(214).y, 0, 113.5, obj) Call DrawDiode(215, "v", True, obj) If ValveState%(2, 2, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(215).x * Xdef, (PointAx(215).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(216, 217, PointAx(216).x, PointAx(216).y, 0, 30, obj) Call DrawIV3("True", 57, "A", PointAx(216).x - 5, PointAx(216).y + 10, "hor") PointAx(218).x = PointAx(211).x + 20 PointAx(218).y = PointAx(211).y Call Drawline(218, 219, PointAx(218).x, PointAx(218).y, 0, 13.5, obj) Call DrawDiode(219, "v", True, obj) If ValveState%(2, 2, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(219).x * Xdef, (PointAx(219).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(220, 221, PointAx(220).x, PointAx(220).y, 0, 155, obj) Call DrawIV3("True", 58, "A", PointAx(220).x - 5, PointAx(220).y + 10, "hor") Call Drawline(221, 222, PointAx(221).x, PointAx(221).y, 0, 88.5, obj) Call DrawDiode(222, "v", True, obj) If ValveState%(2, 2, 2, 3) = 1 And bool Then 155

156 ExtFloodFill obj.hdc, PointAx(222).x * Xdef, (PointAx(222).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(223, 224, PointAx(223).x, PointAx(223).y, 0, 30, obj) Call DrawIV3("True", 59, "A", PointAx(223).x - 5, PointAx(223).y + 10, "hor") 2nd phase D Neg Bridge PointAx(250).x = PointAx(229).x + 60 PointAx(250).y = PointAx(229).y Call Drawline(250, 251, PointAx(250).x, PointAx(250).y, 0, 13.5, obj) Call DrawDiode(251, "v", True, obj) If ValveState%(2, 2, 3, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(251).x * Xdef, (PointAx(251).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(252, 253, PointAx(252).x, PointAx(252).y, 0, 105, obj) Call DrawIV3("True", 66, "A", PointAx(252).x - 5, PointAx(252).y + 10, "hor") Call Drawline(253, 254, PointAx(253).x, PointAx(253).y, 0, 138.5, obj) Call DrawDiode(254, "v", True, obj) If ValveState%(2, 2, 4, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(254).x * Xdef, (PointAx(254).y + 3) * Ydef, obj.forecolor, 0 156

157 Call Drawline(255, 256, PointAx(255).x, PointAx(255).y, 0, 30, obj) Call DrawIV3("True", 67, "A", PointAx(255).x - 5, PointAx(255).y + 10, "hor") PointAx(257).x = PointAx(250).x + 20 PointAx(257).y = PointAx(250).y Call Drawline(257, 258, PointAx(257).x, PointAx(257).y, 0, 13.5, obj) Call DrawDiode(258, "v", True, obj) If ValveState%(2, 2, 3, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(258).x * Xdef, (PointAx(258).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(259, 260, PointAx(259).x, PointAx(259).y, 0, 130, obj) Call DrawIV3("True", 68, "A", PointAx(259).x - 5, PointAx(259).y + 10, "hor") Call Drawline(260, 261, PointAx(260).x, PointAx(260).y, 0, 113.5, obj) Call DrawDiode(261, "v", True, obj) If ValveState%(2, 2, 4, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(261).x * Xdef, (PointAx(261).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(262, 263, PointAx(262).x, PointAx(262).y, 0, 30, obj) Call DrawIV3("True", 69, "A", PointAx(262).x - 5, PointAx(262).y + 10, "hor") PointAx(264).x = PointAx(257).x + 20 PointAx(264).y = PointAx(257).y Call Drawline(264, 265, PointAx(264).x, PointAx(264).y, 0, 13.5, obj) 157

158 Call DrawDiode(265, "v", True, obj) If ValveState%(2, 2, 3, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(265).x * Xdef, (PointAx(265).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(266, 267, PointAx(266).x, PointAx(266).y, 0, 155, obj) Call DrawIV3("True", 70, "A", PointAx(266).x - 5, PointAx(266).y + 10, "hor") Call Drawline(267, 268, PointAx(267).x, PointAx(267).y, 0, 88.5, obj) Call DrawDiode(268, "v", True, obj) If ValveState%(2, 2, 4, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(268).x * Xdef, (PointAx(268).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(269, 270, PointAx(269).x, PointAx(269).y, 0, 30, obj) Call DrawIV3("True", 71, "A", PointAx(269).x - 5, PointAx(269).y + 10, "hor") bridge connection lines Call Drawline(185, 218, PointAx(185).x, PointAx(185).y, 100, 0, obj) Call Drawline(190, 224, PointAx(190).x, PointAx(224).y, 100, 0, obj) Call Drawline(229, 264, PointAx(229).x, PointAx(229).y, 100, 0, obj) Call Drawline(235, 270, PointAx(235).x, PointAx(235).y, 100, 0, obj) supply connection lines Call Drawline(16, 207, PointAx(16).x, PointAx(16).y, 60, 0, obj) Call Drawline(20, 214, PointAx(20).x, PointAx(20).y, 60, 0, obj) Call Drawline(24, 221, PointAx(24).x, PointAx(24).y, 60, 0, obj) Call Drawline(232, 253, PointAx(232).x, PointAx(232).y, 60, 0, obj) 158

159 Call Drawline(239, 260, PointAx(239).x, PointAx(239).y, 60, 0, obj) Call Drawline(246, 267, PointAx(246).x, PointAx(246).y, 60, 0, obj) intergroup midpoints PointAx(203).x = PointAx(197).x + 10 PointAx(203).y = PointAx(197).y PointAx(225).x = PointAx(202).x + 10 PointAx(225).y = PointAx(202).y PointAx(228).x = PointAx(243).x + 10 PointAx(228).y = PointAx(243).y PointAx(271).x = PointAx(249).x + 10 PointAx(271).y = PointAx(249).y vertical midpoint connection lines Call Drawline(203, 226, PointAx(203).x, PointAx(203).y, 0, -10, obj) Call Drawline(225, 228, PointAx(225).x, PointAx(225).y, 0, 20, obj) Call Drawline(271, 272, PointAx(271).x, PointAx(271).y, 0, 20, obj) output phase circuit Call Drawline(272, 273, PointAx(272).x, PointAx(272).y, 10, 0, obj) Call DrawCoil(273, "hor", obj) Call Drawline(274, 275, PointAx(274).x, PointAx(274).y, 8.6, 0, obj) Call DrawResistance(275, "hor", obj) Call Drawline(276, 277, PointAx(276).x, PointAx(276).y, 28, 0, obj) phase midpoint connection lines Call Drawline(226, 227, PointAx(226).x, PointAx(226).y, 65, 0, obj) Call Drawline(227, 277, PointAx(227).x, PointAx(227).y, 0, 650, obj) Connection points obj.circle (PointAx(16).x * Xdef, PointAx(16).y * Ydef), 1.55 * Ydef obj.circle (PointAx(20).x * Xdef, PointAx(20).y * Ydef), 1.55 * Ydef obj.circle (PointAx(24).x * Xdef, PointAx(24).y * Ydef), 1.55 * Ydef obj.circle (PointAx(207).x * Xdef, PointAx(207).y * Ydef), 1.55 * Ydef obj.circle (PointAx(214).x * Xdef, PointAx(214).y * Ydef), 1.55 * Ydef obj.circle (PointAx(221).x * Xdef, PointAx(221).y * Ydef), 1.55 * Ydef obj.circle (PointAx(232).x * Xdef, PointAx(232).y * Ydef), 1.55 * Ydef obj.circle (PointAx(239).x * Xdef, PointAx(239).y * Ydef), 1.55 * Ydef 159

160 obj.circle (PointAx(246).x * Xdef, PointAx(246).y * Ydef), 1.55 * Ydef obj.circle (PointAx(253).x * Xdef, PointAx(253).y * Ydef), 1.55 * Ydef obj.circle (PointAx(260).x * Xdef, PointAx(260).y * Ydef), 1.55 * Ydef obj.circle (PointAx(267).x * Xdef, PointAx(267).y * Ydef), 1.55 * Ydef 3rd phase 3nd Y Pos Bridge PointAx(279).x = PointAx(185).x PointAx(279).y = PointAx(185).y Call Drawline(279, 280, PointAx(279).x, PointAx(279).y, 0, 13.5, obj) Call DrawDiode(280, "^", True, obj) If ValveState%(3, 1, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(280).x * Xdef, (PointAx(280).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(281, 28, PointAx(281).x, PointAx(281).y, 0, 180, obj) Call DrawIV3("True", 72, "A", PointAx(281).x - 5, PointAx(281).y + 10, "hor") Call Drawline(28, 282, PointAx(28).x, PointAx(28).y, 0, 63.5, obj) Call DrawDiode(282, "^", True, obj) If ValveState%(3, 1, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(282).x * Xdef, (PointAx(282).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(283, 284, PointAx(283).x, PointAx(283).y, 0, 30, obj) 160

161 Call DrawIV3("True", 73, "A", PointAx(283).x - 5, PointAx(283).y + 10, "hor") PointAx(285).x = PointAx(279).x + 20 PointAx(285).y = PointAx(279).y Call Drawline(285, 286, PointAx(285).x, PointAx(285).y, 0, 13.5, obj) Call DrawDiode(286, "^", True, obj) If ValveState%(3, 1, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(286).x * Xdef, (PointAx(286).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(287, 32, PointAx(287).x, PointAx(287).y, 0, 205, obj) Call DrawIV3("True", 74, "A", PointAx(287).x - 5, PointAx(287).y + 10, "hor") Call Drawline(32, 288, PointAx(32).x, PointAx(32).y, 0, 38.5, obj) Call DrawDiode(288, "^", True, obj) If ValveState%(3, 1, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(288).x * Xdef, (PointAx(288).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(289, 290, PointAx(289).x, PointAx(289).y, 0, 30, obj) Call DrawIV3("True", 75, "A", PointAx(289).x - 5, PointAx(289).y + 10, "hor") PointAx(291).x = PointAx(285).x + 20 PointAx(291).y = PointAx(285).y Call Drawline(291, 292, PointAx(291).x, PointAx(291).y, 0, 13.5, obj) Call DrawDiode(292, "^", True, obj) If ValveState%(3, 1, 1, 3) = 1 And bool Then 161

162 ExtFloodFill obj.hdc, PointAx(292).x * Xdef, (PointAx(292).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(293, 36, PointAx(293).x, PointAx(293).y, 0, 230, obj) Call DrawIV3("True", 76, "A", PointAx(293).x - 5, PointAx(293).y + 10, "hor") Call Drawline(36, 294, PointAx(36).x, PointAx(36).y, 0, 13.5, obj) Call DrawDiode(294, "^", True, obj) If ValveState%(3, 1, 2, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(294).x * Xdef, (PointAx(294).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(295, 296, PointAx(295).x, PointAx(295).y, 0, 30, obj) Call DrawIV3("True", 77, "A", PointAx(295).x - 5, PointAx(295).y + 10, "hor") 3nd phase D Pos Bridge PointAx(323).x = PointAx(229).x PointAx(323).y = PointAx(229).y Call Drawline(323, 324, PointAx(323).x, PointAx(323).y, 0, 13.5, obj) Call DrawDiode(324, "^", True, obj) If ValveState%(3, 1, 3, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(324).x * Xdef, (PointAx(324).y + 3) * Ydef, obj.forecolor, 0 162

163 Call Drawline(325, 326, PointAx(325).x, PointAx(325).y, 0, 180, obj) Call DrawIV3("True", 84, "A", PointAx(325).x - 5, PointAx(325).y + 10, "hor") Call Drawline(326, 327, PointAx(326).x, PointAx(326).y, 0, 63.5, obj) Call DrawDiode(327, "^", True, obj) If ValveState%(3, 1, 4, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(327).x * Xdef, (PointAx(327).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(328, 329, PointAx(328).x, PointAx(328).y, 0, 30, obj) Call DrawIV3("True", 85, "A", PointAx(328).x - 5, PointAx(328).y + 10, "hor") PointAx(330).x = PointAx(323).x + 20 PointAx(330).y = PointAx(323).y Call Drawline(330, 331, PointAx(330).x, PointAx(330).y, 0, 13.5, obj) Call DrawDiode(331, "^", True, obj) If ValveState%(3, 1, 3, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(331).x * Xdef, (PointAx(331).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(332, 333, PointAx(332).x, PointAx(332).y, 0, 205, obj) Call DrawIV3("True", 86, "A", PointAx(332).x - 5, PointAx(332).y + 10, "hor") Call Drawline(333, 334, PointAx(333).x, PointAx(333).y, 0, 38.5, obj) Call DrawDiode(334, "^", True, obj) 163

164 If ValveState%(3, 1, 4, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(334).x * Xdef, (PointAx(334).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(335, 336, PointAx(335).x, PointAx(335).y, 0, 30, obj) Call DrawIV3("True", 87, "A", PointAx(335).x - 5, PointAx(335).y + 10, "hor") PointAx(337).x = PointAx(330).x + 20 PointAx(337).y = PointAx(330).y Call Drawline(337, 338, PointAx(337).x, PointAx(337).y, 0, 13.5, obj) Call DrawDiode(338, "^", True, obj) If ValveState%(3, 1, 3, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(338).x * Xdef, (PointAx(338).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(339, 340, PointAx(339).x, PointAx(339).y, 0, 230, obj) Call DrawIV3("True", 88, "A", PointAx(339).x - 5, PointAx(339).y + 10, "hor") Call Drawline(340, 341, PointAx(340).x, PointAx(340).y, 0, 13.5, obj) Call DrawDiode(341, "^", True, obj) If ValveState%(3, 1, 4, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(341).x * Xdef, (PointAx(341).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(342, 343, PointAx(342).x, PointAx(342).y, 0, 30, obj) 164

165 Call DrawIV3("True", 89, "A", PointAx(342).x - 5, PointAx(342).y + 10, "hor") 3nd phase Y Neg Bridge PointAx(298).x = PointAx(291).x + 20 PointAx(298).y = PointAx(291).y Call Drawline(298, 299, PointAx(298).x, PointAx(298).y, 0, 13.5, obj) Call DrawDiode(299, "v", True, obj) If ValveState%(3, 2, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(299).x * Xdef, (PointAx(299).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(300, 301, PointAx(300).x, PointAx(300).y, 0, 180, obj) Call DrawIV3("True", 78, "A", PointAx(300).x - 5, PointAx(300).y + 10, "hor") Call Drawline(301, 302, PointAx(301).x, PointAx(301).y, 0, 63.5, obj) Call DrawDiode(302, "v", True, obj) If ValveState%(3, 2, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(302).x * Xdef, (PointAx(302).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(303, 304, PointAx(303).x, PointAx(303).y, 0, 30, obj) Call DrawIV3("True", 79, "A", PointAx(303).x - 5, PointAx(303).y + 10, "hor") PointAx(305).x = PointAx(298).x

166 PointAx(305).y = PointAx(298).y Call Drawline(305, 306, PointAx(305).x, PointAx(305).y, 0, 13.5, obj) Call DrawDiode(306, "v", True, obj) If ValveState%(3, 2, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(306).x * Xdef, (PointAx(306).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(307, 308, PointAx(307).x, PointAx(307).y, 0, 205, obj) Call DrawIV3("True", 80, "A", PointAx(307).x - 5, PointAx(307).y + 10, "hor") Call Drawline(308, 309, PointAx(308).x, PointAx(308).y, 0, 38.5, obj) Call DrawDiode(309, "v", True, obj) If ValveState%(3, 2, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(309).x * Xdef, (PointAx(309).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(310, 311, PointAx(310).x, PointAx(310).y, 0, 30, obj) Call DrawIV3("True", 81, "A", PointAx(310).x - 5, PointAx(310).y + 10, "hor") PointAx(312).x = PointAx(305).x + 20 PointAx(312).y = PointAx(305).y Call Drawline(312, 313, PointAx(312).x, PointAx(312).y, 0, 13.5, obj) Call DrawDiode(313, "v", True, obj) If ValveState%(3, 2, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(313).x * Xdef, (PointAx(313).y + 3) * Ydef, obj.forecolor, 0 166

167 Call Drawline(314, 315, PointAx(314).x, PointAx(314).y, 0, 230, obj) Call DrawIV3("True", 82, "A", PointAx(314).x - 5, PointAx(314).y + 10, "hor") Call Drawline(315, 316, PointAx(315).x, PointAx(315).y, 0, 13.5, obj) Call DrawDiode(316, "v", True, obj) If ValveState%(3, 2, 2, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(316).x * Xdef, (PointAx(316).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(317, 318, PointAx(317).x, PointAx(317).y, 0, 30, obj) Call DrawIV3("True", 83, "A", PointAx(317).x - 5, PointAx(317).y + 10, "hor") 3nd phase D Neg Bridge PointAx(344).x = PointAx(337).x + 20 PointAx(344).y = PointAx(337).y Call Drawline(344, 345, PointAx(344).x, PointAx(344).y, 0, 13.5, obj) Call DrawDiode(345, "v", True, obj) If ValveState%(3, 2, 3, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(345).x * Xdef, (PointAx(345).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(346, 347, PointAx(346).x, PointAx(346).y, 0, 180, obj) 167

168 Call DrawIV3("True", 90, "A", PointAx(346).x - 5, PointAx(346).y + 10, "hor") Call Drawline(347, 348, PointAx(347).x, PointAx(347).y, 0, 63.5, obj) Call DrawDiode(348, "v", True, obj) If ValveState%(3, 2, 4, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(348).x * Xdef, (PointAx(348).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(349, 350, PointAx(349).x, PointAx(349).y, 0, 30, obj) Call DrawIV3("True", 91, "A", PointAx(349).x - 5, PointAx(349).y + 10, "hor") PointAx(351).x = PointAx(344).x + 20 PointAx(351).y = PointAx(344).y Call Drawline(351, 352, PointAx(351).x, PointAx(351).y, 0, 13.5, obj) Call DrawDiode(352, "v", True, obj) If ValveState%(3, 2, 3, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(352).x * Xdef, (PointAx(352).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(353, 354, PointAx(353).x, PointAx(353).y, 0, 205, obj) Call DrawIV3("True", 92, "A", PointAx(353).x - 5, PointAx(353).y + 10, "hor") Call Drawline(354, 355, PointAx(354).x, PointAx(354).y, 0, 38.5, obj) Call DrawDiode(355, "v", True, obj) If ValveState%(3, 2, 4, 2) = 1 And bool Then 168

169 ExtFloodFill obj.hdc, PointAx(355).x * Xdef, (PointAx(355).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(356, 357, PointAx(356).x, PointAx(356).y, 0, 30, obj) Call DrawIV3("True", 93, "A", PointAx(356).x - 5, PointAx(356).y + 10, "hor") PointAx(358).x = PointAx(351).x + 20 PointAx(358).y = PointAx(351).y Call Drawline(358, 359, PointAx(358).x, PointAx(358).y, 0, 13.5, obj) Call DrawDiode(359, "v", True, obj) If ValveState%(3, 2, 3, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(359).x * Xdef, (PointAx(359).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(360, 361, PointAx(360).x, PointAx(360).y, 0, 230, obj) Call DrawIV3("True", 94, "A", PointAx(360).x - 5, PointAx(360).y + 10, "hor") Call Drawline(361, 362, PointAx(361).x, PointAx(361).y, 0, 13.5, obj) Call DrawDiode(362, "v", True, obj) If ValveState%(3, 2, 4, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(362).x * Xdef, (PointAx(362).y + 3) * Ydef, obj.forecolor, 0 Call Drawline(363, 364, PointAx(363).x, PointAx(363).y, 0, 30, obj) Call DrawIV3("True", 95, "A", PointAx(363).x - 5, PointAx(363).y + 10, "hor") 169

170 bridge connection lines Call Drawline(279, 312, PointAx(279).x, PointAx(279).y, 100, 0, obj) Call Drawline(284, 318, PointAx(284).x, PointAx(284).y, 100, 0, obj) Call Drawline(323, 358, PointAx(323).x, PointAx(323).y, 100, 0, obj) Call Drawline(329, 364, PointAx(329).x, PointAx(329).y, 100, 0, obj) supply connection lines Call Drawline(28, 301, PointAx(28).x, PointAx(28).y, 60, 0, obj) Call Drawline(32, 308, PointAx(32).x, PointAx(32).y, 60, 0, obj) Call Drawline(36, 315, PointAx(36).x, PointAx(36).y, 60, 0, obj) Call Drawline(326, 347, PointAx(326).x, PointAx(326).y, 60, 0, obj) Call Drawline(333, 354, PointAx(333).x, PointAx(333).y, 60, 0, obj) Call Drawline(340, 361, PointAx(340).x, PointAx(340).y, 60, 0, obj) intergroup midpoints PointAx(297).x = PointAx(291).x + 10 PointAx(297).y = PointAx(291).y PointAx(319).x = PointAx(296).x + 10 PointAx(319).y = PointAx(296).y PointAx(322).x = PointAx(337).x + 10 PointAx(322).y = PointAx(337).y PointAx(365).x = PointAx(343).x + 10 PointAx(365).y = PointAx(343).y vertical midpoint connection lines Call Drawline(297, 320, PointAx(297).x, PointAx(297).y, 0, -10, obj) Call Drawline(319, 322, PointAx(319).x, PointAx(319).y, 0, 20, obj) Call Drawline(365, 366, PointAx(365).x, PointAx(365).y, 0, 20, obj) output phase circuit Call Drawline(366, 367, PointAx(366).x, PointAx(366).y, 10, 0, obj) Call DrawCoil(367, "hor", obj) Call Drawline(368, 369, PointAx(368).x, PointAx(368).y, 8.6, 0, obj) Call DrawResistance(369, "hor", obj) Call Drawline(370, 371, PointAx(370).x, PointAx(370).y, 28, 0, obj) phase midpoint connection lines Call Drawline(320, 321, PointAx(320).x, PointAx(320).y, 65, 0, obj) 170

171 Call Drawline(321, 371, PointAx(321).x, PointAx(321).y, 0, 650, obj) Connection points obj.circle (PointAx(28).x * Xdef, PointAx(28).y * Ydef), 1.55 * Ydef obj.circle (PointAx(32).x * Xdef, PointAx(32).y * Ydef), 1.55 * Ydef obj.circle (PointAx(36).x * Xdef, PointAx(36).y * Ydef), 1.55 * Ydef obj.circle (PointAx(301).x * Xdef, PointAx(301).y * Ydef), 1.55 * Ydef obj.circle (PointAx(308).x * Xdef, PointAx(308).y * Ydef), 1.55 * Ydef obj.circle (PointAx(315).x * Xdef, PointAx(315).y * Ydef), 1.55 * Ydef obj.circle (PointAx(326).x * Xdef, PointAx(326).y * Ydef), 1.55 * Ydef obj.circle (PointAx(333).x * Xdef, PointAx(333).y * Ydef), 1.55 * Ydef obj.circle (PointAx(340).x * Xdef, PointAx(340).y * Ydef), 1.55 * Ydef obj.circle (PointAx(347).x * Xdef, PointAx(347).y * Ydef), 1.55 * Ydef obj.circle (PointAx(354).x * Xdef, PointAx(354).y * Ydef), 1.55 * Ydef obj.circle (PointAx(361).x * Xdef, PointAx(361).y * Ydef), 1.55 * Ydef Call DrawIV3(True, 96, "A", PointAx(182).x + 10, PointAx(182).y - 5, "hor") Call DrawIV3(True, 97, "A", PointAx(276).x + 10, PointAx(276).y - 5, "hor") Call DrawIV3(True, 98, "A", PointAx(370).x + 10, PointAx(370).y - 5, "hor") End Sub ============================================================= ============================================= Σχεδιαστικό κομμάτι θυρίστορ 3-φ κυκλολμετατροπέα γέφυρας 12 παλμών Public Sub Draw12pCy3ConSwitches(obj As Object, tbox As Boolean) ReDim PointAx(1 To 400) PointAx(1).x = ConPoint(1).x PointAx(1).y = ConPoint(1).y st phase Y pos 1st column PointAx(93).x = ConPoint(1).x + 40 PointAx(93).y = ConPoint(1).y

172 Call DrawDiode(93, "^", True, obj) If ValveState%(1, 1, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(93).x * Xdef, (PointAx(93).y + 3) * Ydef, obj.forecolor, 0 PointAx(95).x = PointAx(93).x PointAx(95).y = PointAx(93).y Call DrawDiode(95, "^", True, obj) If ValveState%(1, 1, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(95).x * Xdef, (PointAx(95).y + 3) * Ydef, obj.forecolor, 0 2nd column PointAx(99).x = PointAx(93).x + 20 PointAx(99).y = PointAx(93).y Call DrawDiode(99, "^", True, obj) If ValveState%(1, 1, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(99).x * Xdef, (PointAx(99).y + 3) * Ydef, obj.forecolor, 0 PointAx(101).x = PointAx(95).x + 20 PointAx(101).y = PointAx(95).y 172

173 Call DrawDiode(101, "^", True, obj) If ValveState%(1, 1, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(101).x * Xdef, (PointAx(101).y + 3) * Ydef, obj.forecolor, 0 3rd column PointAx(105).x = PointAx(99).x + 20 PointAx(105).y = PointAx(99).y Call DrawDiode(105, "^", True, obj) If ValveState%(1, 1, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(105).x * Xdef, (PointAx(105).y + 3) * Ydef, obj.forecolor, 0 PointAx(107).x = PointAx(101).x + 20 PointAx(107).y = PointAx(101).y Call DrawDiode(107, "^", True, obj) If ValveState%(1, 1, 2, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(107).x * Xdef, (PointAx(107).y + 3) * Ydef, obj.forecolor, 0 1st phase Y neg 1st column PointAx(112).x = PointAx(105).x

174 PointAx(112).y = PointAx(105).y Call DrawDiode(112, "v", True, obj) If ValveState%(1, 2, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(112).x * Xdef, (PointAx(112).y + 3) * Ydef, obj.forecolor, 0 PointAx(115).x = PointAx(107).x + 20 PointAx(115).y = PointAx(107).y Call DrawDiode(115, "v", True, obj) If ValveState%(1, 2, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(115).x * Xdef, (PointAx(115).y + 3) * Ydef, obj.forecolor, 0 2nd column PointAx(119).x = PointAx(112).x + 20 PointAx(119).y = PointAx(112).y Call DrawDiode(119, "v", True, obj) If ValveState%(1, 2, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(119).x * Xdef, (PointAx(119).y + 3) * Ydef, obj.forecolor, 0 PointAx(122).x = PointAx(115).x

175 PointAx(122).y = PointAx(115).y Call DrawDiode(122, "v", True, obj) If ValveState%(1, 2, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(122).x * Xdef, (PointAx(122).y + 3) * Ydef, obj.forecolor, 0 3rd column PointAx(126).x = PointAx(119).x + 20 PointAx(126).y = PointAx(119).y Call DrawDiode(126, "v", True, obj) If ValveState%(1, 2, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(126).x * Xdef, (PointAx(126).y + 3) * Ydef, obj.forecolor, 0 PointAx(129).x = PointAx(122).x + 20 PointAx(129).y = PointAx(122).y Call DrawDiode(129, "v", True, obj) If ValveState%(1, 2, 2, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(129).x * Xdef, (PointAx(129).y + 3) * Ydef, obj.forecolor, 0 1st Phase D pos 1st column 175

176 PointAx(137).x = PointAx(95).x PointAx(137).y = PointAx(95).y + 70 Call DrawDiode(137, "^", True, obj) If ValveState%(1, 1, 3, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(137).x * Xdef, (PointAx(137).y + 3) * Ydef, obj.forecolor, 0 PointAx(139).x = PointAx(137).x PointAx(139).y = PointAx(137).y Call DrawDiode(139, "^", True, obj) If ValveState%(1, 1, 4, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(139).x * Xdef, (PointAx(139).y + 3) * Ydef, obj.forecolor, 0 2nd column PointAx(143).x = PointAx(137).x + 20 PointAx(143).y = PointAx(137).y Call DrawDiode(143, "^", True, obj) If ValveState%(1, 1, 3, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(143).x * Xdef, (PointAx(143).y + 3) * Ydef, obj.forecolor, 0 176

177 PointAx(146).x = PointAx(139).x + 20 PointAx(146).y = PointAx(139).y Call DrawDiode(146, "^", True, obj) If ValveState%(1, 1, 4, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(146).x * Xdef, (PointAx(146).y + 3) * Ydef, obj.forecolor, 0 3rd column PointAx(150).x = PointAx(143).x + 20 PointAx(150).y = PointAx(143).y Call DrawDiode(150, "^", True, obj) If ValveState%(1, 1, 3, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(150).x * Xdef, (PointAx(150).y + 3) * Ydef, obj.forecolor, 0 PointAx(153).x = PointAx(146).x + 20 PointAx(153).y = PointAx(146).y Call DrawDiode(153, "^", True, obj) If ValveState%(1, 1, 4, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(153).x * Xdef, (PointAx(153).y + 3) * Ydef, obj.forecolor, 0 1st phase D neg 177

178 1st column PointAx(157).x = PointAx(150).x + 20 PointAx(157).y = PointAx(150).y Call DrawDiode(157, "v", True, obj) If ValveState%(1, 2, 3, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(112).x * Xdef, (PointAx(112).y + 3) * Ydef, obj.forecolor, 0 PointAx(160).x = PointAx(153).x + 20 PointAx(160).y = PointAx(153).y Call DrawDiode(160, "v", True, obj) If ValveState%(1, 2, 4, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(160).x * Xdef, (PointAx(160).y + 3) * Ydef, obj.forecolor, 0 2nd column PointAx(164).x = PointAx(157).x + 20 PointAx(164).y = PointAx(157).y Call DrawDiode(164, "v", True, obj) If ValveState%(1, 2, 3, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(164).x * Xdef, (PointAx(164).y + 3) * Ydef, obj.forecolor, 0 178

179 PointAx(167).x = PointAx(160).x + 20 PointAx(167).y = PointAx(160).y Call DrawDiode(167, "v", True, obj) If ValveState%(1, 2, 4, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(167).x * Xdef, (PointAx(167).y + 3) * Ydef, obj.forecolor, 0 3rd column PointAx(171).x = PointAx(164).x + 20 PointAx(171).y = PointAx(164).y Call DrawDiode(171, "v", True, obj) If ValveState%(1, 2, 3, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(171).x * Xdef, (PointAx(171).y + 3) * Ydef, obj.forecolor, 0 PointAx(174).x = PointAx(167).x + 20 PointAx(174).y = PointAx(167).y Call DrawDiode(174, "v", True, obj) If ValveState%(1, 2, 4, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(174).x * Xdef, (PointAx(174).y + 3) * Ydef, obj.forecolor, 0 179

180 2nd phase Y pos 1st column PointAx(186).x = PointAx(126).x + 30 PointAx(186).y = PointAx(126).y Call DrawDiode(186, "^", True, obj) If ValveState%(2, 1, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(186).x * Xdef, (PointAx(186).y + 3) * Ydef, obj.forecolor, 0 PointAx(188).x = PointAx(129).x + 30 PointAx(188).y = PointAx(129).y Call DrawDiode(188, "^", True, obj) If ValveState%(2, 1, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(188).x * Xdef, (PointAx(188).y + 3) * Ydef, obj.forecolor, 0 2nd column PointAx(192).x = PointAx(186).x + 20 PointAx(192).y = PointAx(186).y Call DrawDiode(192, "^", True, obj) If ValveState%(2, 1, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(192).x * Xdef, (PointAx(192).y + 3) * Ydef, obj.forecolor, 0 180

181 PointAx(194).x = PointAx(188).x + 20 PointAx(194).y = PointAx(188).y Call DrawDiode(194, "^", True, obj) If ValveState%(2, 1, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(194).x * Xdef, (PointAx(194).y + 3) * Ydef, obj.forecolor, 0 3rd column PointAx(198).x = PointAx(192).x + 20 PointAx(198).y = PointAx(192).y Call DrawDiode(198, "^", True, obj) If ValveState%(2, 1, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(198).x * Xdef, (PointAx(198).y + 3) * Ydef, obj.forecolor, 0 PointAx(200).x = PointAx(194).x + 20 PointAx(200).y = PointAx(194).y Call DrawDiode(200, "^", True, obj) If ValveState%(2, 1, 2, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(200).x * Xdef, (PointAx(200).y + 3) * Ydef, obj.forecolor, 0 181

182 2nd phase Y neg 1st column PointAx(205).x = PointAx(198).x + 20 PointAx(205).y = PointAx(198).y Call DrawDiode(205, "v", True, obj) If ValveState%(2, 2, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(205).x * Xdef, (PointAx(205).y + 3) * Ydef, obj.forecolor, 0 PointAx(208).x = PointAx(200).x + 20 PointAx(208).y = PointAx(200).y Call DrawDiode(208, "v", True, obj) If ValveState%(2, 2, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(208).x * Xdef, (PointAx(208).y + 3) * Ydef, obj.forecolor, 0 2nd column PointAx(212).x = PointAx(205).x + 20 PointAx(212).y = PointAx(205).y Call DrawDiode(212, "v", True, obj) If ValveState%(2, 2, 1, 2) = 1 And bool Then 182

183 ExtFloodFill obj.hdc, PointAx(212).x * Xdef, (PointAx(212).y + 3) * Ydef, obj.forecolor, 0 PointAx(215).x = PointAx(208).x + 20 PointAx(215).y = PointAx(208).y Call DrawDiode(215, "v", True, obj) If ValveState%(2, 2, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(215).x * Xdef, (PointAx(215).y + 3) * Ydef, obj.forecolor, 0 3rd column PointAx(219).x = PointAx(212).x + 20 PointAx(219).y = PointAx(212).y Call DrawDiode(219, "v", True, obj) If ValveState%(2, 2, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(219).x * Xdef, (PointAx(219).y + 3) * Ydef, obj.forecolor, 0 PointAx(222).x = PointAx(215).x + 20 PointAx(222).y = PointAx(215).y Call DrawDiode(222, "v", True, obj) If ValveState%(2, 2, 2, 3) = 1 And bool Then 183

184 ExtFloodFill obj.hdc, PointAx(222).x * Xdef, (PointAx(222).y + 3) * Ydef, obj.forecolor, 0 2nd Phase D pos 1st column PointAx(230).x = PointAx(171).x + 30 PointAx(230).y = PointAx(171).y Call DrawDiode(230, "^", True, obj) If ValveState%(2, 1, 3, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(230).x * Xdef, (PointAx(230).y + 3) * Ydef, obj.forecolor, 0 PointAx(233).x = PointAx(174).x + 30 PointAx(233).y = PointAx(174).y Call DrawDiode(233, "^", True, obj) If ValveState%(2, 1, 4, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(233).x * Xdef, (PointAx(233).y + 3) * Ydef, obj.forecolor, 0 2nd column PointAx(237).x = PointAx(230).x + 20 PointAx(237).y = PointAx(230).y Call DrawDiode(237, "^", True, obj) If ValveState%(2, 1, 3, 2) = 1 And bool Then 184

185 ExtFloodFill obj.hdc, PointAx(237).x * Xdef, (PointAx(237).y + 3) * Ydef, obj.forecolor, 0 PointAx(240).x = PointAx(233).x + 20 PointAx(240).y = PointAx(233).y Call DrawDiode(240, "^", True, obj) If ValveState%(2, 1, 4, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(240).x * Xdef, (PointAx(240).y + 3) * Ydef, obj.forecolor, 0 3rd column PointAx(244).x = PointAx(237).x + 20 PointAx(244).y = PointAx(237).y Call DrawDiode(244, "^", True, obj) If ValveState%(2, 1, 3, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(244).x * Xdef, (PointAx(244).y + 3) * Ydef, obj.forecolor, 0 PointAx(247).x = PointAx(240).x + 20 PointAx(247).y = PointAx(240).y Call DrawDiode(247, "^", True, obj) If ValveState%(2, 1, 4, 3) = 1 And bool Then 185

186 ExtFloodFill obj.hdc, PointAx(247).x * Xdef, (PointAx(247).y + 3) * Ydef, obj.forecolor, 0 2nd phase D neg 1st column PointAx(251).x = PointAx(244).x + 20 PointAx(251).y = PointAx(244).y Call DrawDiode(251, "v", True, obj) If ValveState%(2, 2, 3, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(251).x * Xdef, (PointAx(251).y + 3) * Ydef, obj.forecolor, 0 PointAx(254).x = PointAx(247).x + 20 PointAx(254).y = PointAx(247).y Call DrawDiode(254, "v", True, obj) If ValveState%(2, 2, 4, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(254).x * Xdef, (PointAx(254).y + 3) * Ydef, obj.forecolor, 0 2nd column PointAx(258).x = PointAx(251).x + 20 PointAx(258).y = PointAx(251).y Call DrawDiode(258, "v", True, obj) If ValveState%(2, 2, 3, 2) = 1 And bool Then 186

187 ExtFloodFill obj.hdc, PointAx(258).x * Xdef, (PointAx(258).y + 3) * Ydef, obj.forecolor, 0 PointAx(261).x = PointAx(254).x + 20 PointAx(261).y = PointAx(254).y Call DrawDiode(261, "v", True, obj) If ValveState%(2, 2, 4, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(261).x * Xdef, (PointAx(261).y + 3) * Ydef, obj.forecolor, 0 3rd column PointAx(265).x = PointAx(258).x + 20 PointAx(265).y = PointAx(258).y Call DrawDiode(265, "v", True, obj) If ValveState%(2, 2, 3, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(265).x * Xdef, (PointAx(265).y + 3) * Ydef, obj.forecolor, 0 PointAx(268).x = PointAx(261).x + 20 PointAx(268).y = PointAx(261).y Call DrawDiode(268, "v", True, obj) If ValveState%(2, 2, 4, 3) = 1 And bool Then 187

188 ExtFloodFill obj.hdc, PointAx(268).x * Xdef, (PointAx(268).y + 3) * Ydef, obj.forecolor, 0 3rd phase Y pos 1st column PointAx(280).x = PointAx(219).x + 30 PointAx(280).y = PointAx(219).y Call DrawDiode(280, "^", True, obj) If ValveState%(3, 1, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(280).x * Xdef, (PointAx(280).y + 3) * Ydef, obj.forecolor, 0 PointAx(282).x = PointAx(222).x + 30 PointAx(282).y = PointAx(222).y Call DrawDiode(282, "^", True, obj) If ValveState%(3, 1, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(282).x * Xdef, (PointAx(282).y + 3) * Ydef, obj.forecolor, 0 2nd column PointAx(286).x = PointAx(280).x + 20 PointAx(286).y = PointAx(280).y 188

189 Call DrawDiode(286, "^", True, obj) If ValveState%(3, 1, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(286).x * Xdef, (PointAx(286).y + 3) * Ydef, obj.forecolor, 0 PointAx(288).x = PointAx(282).x + 20 PointAx(288).y = PointAx(282).y Call DrawDiode(288, "^", True, obj) If ValveState%(3, 1, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(288).x * Xdef, (PointAx(288).y + 3) * Ydef, obj.forecolor, 0 3rd column PointAx(292).x = PointAx(286).x + 20 PointAx(292).y = PointAx(286).y Call DrawDiode(292, "^", True, obj) If ValveState%(3, 1, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(292).x * Xdef, (PointAx(292).y + 3) * Ydef, obj.forecolor, 0 PointAx(294).x = PointAx(288).x + 20 PointAx(294).y = PointAx(288).y 189

190 Call DrawDiode(294, "^", True, obj) If ValveState%(3, 1, 2, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(294).x * Xdef, (PointAx(294).y + 3) * Ydef, obj.forecolor, 0 3rd phase Y neg 1st column PointAx(299).x = PointAx(292).x + 20 PointAx(299).y = PointAx(292).y Call DrawDiode(299, "v", True, obj) If ValveState%(3, 2, 1, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(299).x * Xdef, (PointAx(299).y + 3) * Ydef, obj.forecolor, 0 PointAx(302).x = PointAx(294).x + 20 PointAx(302).y = PointAx(294).y Call DrawDiode(302, "v", True, obj) If ValveState%(3, 2, 2, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(302).x * Xdef, (PointAx(302).y + 3) * Ydef, obj.forecolor, 0 2nd column PointAx(306).x = PointAx(299).x + 20 PointAx(306).y = PointAx(299).y 190

191 Call DrawDiode(306, "v", True, obj) If ValveState%(3, 2, 1, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(306).x * Xdef, (PointAx(306).y + 3) * Ydef, obj.forecolor, 0 PointAx(309).x = PointAx(302).x + 20 PointAx(309).y = PointAx(302).y Call DrawDiode(309, "v", True, obj) If ValveState%(3, 2, 2, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(309).x * Xdef, (PointAx(309).y + 3) * Ydef, obj.forecolor, 0 3rd column PointAx(313).x = PointAx(306).x + 20 PointAx(313).y = PointAx(306).y Call DrawDiode(313, "v", True, obj) If ValveState%(3, 2, 1, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(313).x * Xdef, (PointAx(313).y + 3) * Ydef, obj.forecolor, 0 PointAx(315).x = PointAx(309).x

192 PointAx(315).y = PointAx(309).y Call DrawDiode(315, "v", True, obj) If ValveState%(3, 2, 2, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(315).x * Xdef, (PointAx(315).y + 3) * Ydef, obj.forecolor, 0 3rd Phase D pos 1st column PointAx(324).x = PointAx(265).x + 30 PointAx(324).y = PointAx(265).y Call DrawDiode(324, "^", True, obj) If ValveState%(3, 1, 3, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(324).x * Xdef, (PointAx(324).y + 3) * Ydef, obj.forecolor, 0 PointAx(327).x = PointAx(268).x + 30 PointAx(327).y = PointAx(268).y Call DrawDiode(327, "^", True, obj) If ValveState%(3, 1, 4, 1) = 1 And bool Then 192

193 ExtFloodFill obj.hdc, PointAx(327).x * Xdef, (PointAx(327).y + 3) * Ydef, obj.forecolor, 0 2nd column PointAx(331).x = PointAx(324).x + 20 PointAx(331).y = PointAx(324).y Call DrawDiode(331, "^", True, obj) If ValveState%(3, 1, 3, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(331).x * Xdef, (PointAx(331).y + 3) * Ydef, obj.forecolor, 0 PointAx(334).x = PointAx(327).x + 20 PointAx(334).y = PointAx(327).y Call DrawDiode(334, "^", True, obj) If ValveState%(3, 1, 4, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(334).x * Xdef, (PointAx(334).y + 3) * Ydef, obj.forecolor, 0 3rd column PointAx(338).x = PointAx(331).x + 20 PointAx(338).y = PointAx(331).y Call DrawDiode(338, "^", True, obj) 193

194 If ValveState%(3, 1, 3, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(338).x * Xdef, (PointAx(338).y + 3) * Ydef, obj.forecolor, 0 PointAx(341).x = PointAx(334).x + 20 PointAx(341).y = PointAx(334).y Call DrawDiode(341, "^", True, obj) If ValveState%(3, 1, 4, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(341).x * Xdef, (PointAx(341).y + 3) * Ydef, obj.forecolor, 0 3rd phase D neg 1st column PointAx(345).x = PointAx(338).x + 20 PointAx(345).y = PointAx(338).y Call DrawDiode(345, "v", True, obj) If ValveState%(3, 2, 3, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(345).x * Xdef, (PointAx(345).y + 3) * Ydef, obj.forecolor, 0 PointAx(348).x = PointAx(341).x + 20 PointAx(348).y = PointAx(341).y 194

195 Call DrawDiode(348, "v", True, obj) If ValveState%(3, 2, 4, 1) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(348).x * Xdef, (PointAx(348).y + 3) * Ydef, obj.forecolor, 0 2nd column PointAx(352).x = PointAx(345).x + 20 PointAx(352).y = PointAx(345).y Call DrawDiode(352, "v", True, obj) If ValveState%(3, 2, 3, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(352).x * Xdef, (PointAx(352).y + 3) * Ydef, obj.forecolor, 0 PointAx(355).x = PointAx(348).x + 20 PointAx(355).y = PointAx(348).y Call DrawDiode(355, "v", True, obj) If ValveState%(3, 2, 4, 2) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(355).x * Xdef, (PointAx(355).y + 3) * Ydef, obj.forecolor, 0 3rd column PointAx(359).x = PointAx(352).x + 20 PointAx(359).y = PointAx(352).y 195

196 Call DrawDiode(359, "v", True, obj) If ValveState%(3, 2, 3, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(359).x * Xdef, (PointAx(359).y + 3) * Ydef, obj.forecolor, 0 PointAx(362).x = PointAx(355).x + 20 PointAx(362).y = PointAx(355).y Call DrawDiode(362, "v", True, obj) If ValveState%(3, 2, 4, 3) = 1 And bool Then ExtFloodFill obj.hdc, PointAx(362).x * Xdef, (PointAx(362).y + 3) * Ydef, obj.forecolor, 0 End Sub Επεξήση παραμέτρων συνάρτησης: obj = το όνομα του αντικειμένο μέσα στο οποίο σχεδιάζεται. tbox = μεταβλητή τύπου Boolean που παίρνει τιμή ανάλογα με το αν θέλουμε να εμφανίζονται τα όργανα μέτρησης ή όχι, όπως συμβαίνει στην περίπτωση εκτύπωσης του κυκλώματος. Αποτέλεσμα συνάρτησης: Το αποτέλεσμα των συναρτήσεων στην πλήρη τους μορφή φαίνονται στην εικόνα

197 Εικόνα 6.36.: Αποτέλεσμα συναρτήσεων Draw12P1CY3CON, Draw12pCy3converter, Draw12pCy3conSwitches Συναρτήσεις Προσομοίωσης Εισαγωγή Η διαδικασία προσομοίωσης ξεκινά όταν πατηθεί το κουμπί «Έναρξη» που βρίσκται στο κέντρο περίπου της εναλλακτικής φόρμας προσομοίωσης. Με το πάτημα του κουμπιού γίνεται τελικά η εκτέλεση του παρακάτω κώδικα: Private Sub StartBtn_Click() Ξεκίνησε την εξομοίωση Call SimulationForm.StartButton_Click End Sub Όπως βλέπουμε γίνεται ακριβώς ότι θα γινόταν αν πατούσαμε την έναρξη στην προσομοίωση συστήματος στην φόρμα με τις κυματομορφές και από κει και πέρα απλά μεταφέρονται οι τιμές των υπολογισμών στα όργανα μας και η εμφάνιση των κυματομορφών όταν πατιούνται τα αντίστοιχα κουμπιά από την μπάρα. Στην ενότητα αυτή θα αναφερθούμε πιο πολύ στις συναρτήσεις που χρειάστηκαν να παραμετροποιηθούν προκειμένου να έχουμε την σωστή εμφάνιση αποτελεσμάτων, τόσο στα πλαίσια των κυματομορφών, όσο και στα textboxes των όργανων μέτρησης. 197

198 Η συνάρτηση LoadValues Η LoadValues καλείται κάθε φορά που υπολογίζονται νέες τιμές στη φόρμα SimulationForm. Η LoadValues ανάλογα με την επιλογή του χρήστη για τις τιμές των οργάνων θα εμφανίζει και τις αντίστοιχες τιμές στα όργανα μέτρησης. Εκτός αυτού καλεί τη συνάρτηση Plot για όλες τις φόρμες της κυματομορφής και τις συναρτήσεις CalcRms1 και CalcAver1 για τον μετατροπέα συχνότητας. H συνάρτηση Plot θα δούμε τι ακριβώς κάνει στην επόμενη ενότητα. Για την περίπτωση μας προστέθηκε το Case CY3CON. Προέλευση: Χρησιμοποιείται: Φόρμα SimCircuitForm στη Form_PlotGraphics της φόρμας SimulationForm Το κάθε σύστημα υπολογίζει διαφορετικές τιμές σε σχέση με άλλο οπότε θα χρειάζεται να μεταβιβάζονται διαφορετικές τιμές. Περίπου στο τέλος της συνάρτησης που βρίσκονται τρία διαδοχικά Case το έχουμε βάλει σαν σύμβολο όπου δηλώνει ότι θα τοποθετηθεί ο κώδικας για τα υπόλοιπα συστήματα προσομοίωσης. Κώδικας συνάρτησης: Public Sub LoadValuesCY3CON() Dim Iel%, Iph%, Ipn%, Ibr% Call CalcValuesCY3CON Select Case CycPulseNumber% Case 6 For Iph% = 1 To 3 For Ipn% = 1 To 2 For Ibr% = 1 To 2 For Iel% = 1 To 3 If ValveState%(Iph%, Ipn%, Ibr%, Iel%) = 1 And diode3(iph%, Ipn%, Ibr%, Iel%) = False Then diode3(iph%, Ipn%, Ibr%, Iel%) = True Call Draw6pCy3ConSwitches(Picture1, True) Call Picture1_Paint Then ElseIf ValveState%(Iph%, Ipn%, Ibr%, Iel%) = 0 And diode3(iph%, Ipn%, Ibr%, Iel%) = True diode3(iph%, Ipn%, Ibr%, Iel%) = False 198

199 Call Draw6pCy3ConSwitches(Picture1, True) Call Picture1_Paint Next Iel% Next Ibr% Next Ipn% Next Iph% Case 12 For Iph% = 1 To 3 For Ipn% = 1 To 2 For Ibr% = 1 To 4 For Iel% = 1 To 3 If ValveState%(Iph%, Ipn%, Ibr%, Iel%) = 1 And diode3(iph%, Ipn%, Ibr%, Iel%) = False Then diode3(iph%, Ipn%, Ibr%, Iel%) = True Call Draw12pCy3ConSwitches(Picture1, True) ElseIf ValveState%(Iph%, Ipn%, Ibr%, Iel%) = 0 And diode3(iph%, Ipn%, Ibr%, Iel%) = True Then diode3(iph%, Ipn%, Ibr%, Iel%) = False Call Draw12pCy3ConSwitches(Picture1, True) Next Iel% Next Ibr% Next Ipn% Next Iph% End Select Select Case choice$ Case "Inst" Prim Transf Texts(1).Text = SupplyCurrent(1) Texts(2).Text = SupplyVoltage(1, 1) - SupplyVoltage(1, 2) Texts(3).Text = SupplyVoltage(1, 2) - SupplyVoltage(1, 3) Texts(4).Text = SupplyCurrent(2) Texts(5).Text = SupplyCurrent(3) 199

200 Y Sec Tranf Texts(6).Text = InpPhaseCurrent(1, 1) Texts(7).Text = InpPhaseCurrent(1, 2) Texts(8).Text = InpPhaseCurrent(1, 3) Texts(9).Text = InpPhaseCurrent(2, 1) Texts(10).Text = InpPhaseCurrent(2, 2) Texts(11).Text = InpPhaseCurrent(2, 3) Texts(12).Text = InpPhaseCurrent(3, 1) Texts(13).Text = InpPhaseCurrent(3, 2) Texts(14).Text = InpPhaseCurrent(3, 3) D sec Transf (12 pulse) Texts(15).Text = InpPhaseCurrent(1, 4) Texts(16).Text = InpPhaseCurrent(1, 5) Texts(17).Text = InpPhaseCurrent(1, 6) Texts(18).Text = InpPhaseCurrent(2, 4) Texts(19).Text = InpPhaseCurrent(2, 5) Texts(20).Text = InpPhaseCurrent(2, 6) Texts(21).Text = InpPhaseCurrent(3, 4) Texts(22).Text = InpPhaseCurrent(3, 5) Texts(23).Text = InpPhaseCurrent(3, 6) Phase 1 Y Pos Texts(24).Text = ValveCurrent(1, 1, 1, 1) Texts(25).Text = ValveCurrent(1, 1, 2, 1) Texts(26).Text = ValveCurrent(1, 1, 1, 2) Texts(27).Text = ValveCurrent(1, 1, 2, 2) Texts(28).Text = ValveCurrent(1, 1, 1, 3) Texts(29).Text = ValveCurrent(1, 1, 2, 3) Phase 1 Y Neg Texts(30).Text = ValveCurrent(1, 2, 1, 1) Texts(31).Text = ValveCurrent(1, 2, 2, 1) Texts(32).Text = ValveCurrent(1, 2, 1, 2) Texts(33).Text = ValveCurrent(1, 2, 2, 2) Texts(34).Text = ValveCurrent(1, 2, 2, 3) 200

201 Texts(35).Text = ValveCurrent(1, 2, 2, 3) Phase 1 D Pos (12 pulse) Texts(36).Text = ValveCurrent(1, 1, 3, 1) Texts(37).Text = ValveCurrent(1, 1, 4, 1) Texts(38).Text = ValveCurrent(1, 1, 3, 2) Texts(39).Text = ValveCurrent(1, 1, 4, 2) Texts(40).Text = ValveCurrent(1, 1, 3, 3) Texts(41).Text = ValveCurrent(1, 1, 4, 3) Phase 1 D Neg (12 pulse) Texts(42).Text = ValveCurrent(1, 2, 3, 1) Texts(43).Text = ValveCurrent(1, 2, 4, 1) Texts(44).Text = ValveCurrent(1, 2, 3, 2) Texts(45).Text = ValveCurrent(1, 2, 4, 2) Texts(46).Text = ValveCurrent(1, 2, 3, 3) Texts(47).Text = ValveCurrent(1, 2, 4, 3) Phase 2 Y Pos Texts(48).Text = ValveCurrent(2, 1, 1, 1) Texts(49).Text = ValveCurrent(2, 1, 2, 1) Texts(50).Text = ValveCurrent(2, 1, 1, 2) Texts(51).Text = ValveCurrent(2, 1, 2, 2) Texts(52).Text = ValveCurrent(2, 1, 1, 3) Texts(53).Text = ValveCurrent(2, 1, 2, 3) Phase 2 Y Neg Texts(54).Text = ValveCurrent(2, 2, 1, 1) Texts(55).Text = ValveCurrent(2, 2, 2, 1) Texts(56).Text = ValveCurrent(2, 2, 1, 2) Texts(57).Text = ValveCurrent(2, 2, 2, 2) Texts(58).Text = ValveCurrent(2, 2, 1, 3) Texts(59).Text = ValveCurrent(2, 2, 2, 3) Phase 2 D Pos (12 pulse) Texts(60).Text = ValveCurrent(2, 1, 3, 1) Texts(61).Text = ValveCurrent(2, 1, 4, 1) Texts(62).Text = ValveCurrent(2, 1, 3, 2) 201

202 Texts(63).Text = ValveCurrent(2, 1, 4, 2) Texts(64).Text = ValveCurrent(2, 1, 3, 3) Texts(65).Text = ValveCurrent(2, 1, 4, 3) Phase 2 D Neg (12 pulse) Texts(66).Text = ValveCurrent(2, 2, 3, 1) Texts(67).Text = ValveCurrent(2, 2, 4, 1) Texts(68).Text = ValveCurrent(2, 2, 3, 2) Texts(69).Text = ValveCurrent(2, 2, 4, 2) Texts(70).Text = ValveCurrent(2, 2, 3, 3) Texts(71).Text = ValveCurrent(2, 2, 4, 3) Phase 3 Y Pos Texts(72).Text = ValveCurrent(3, 1, 1, 1) Texts(73).Text = ValveCurrent(3, 1, 2, 1) Texts(74).Text = ValveCurrent(3, 1, 1, 2) Texts(75).Text = ValveCurrent(3, 1, 2, 2) Texts(76).Text = ValveCurrent(3, 1, 1, 3) Texts(77).Text = ValveCurrent(3, 1, 2, 3) Phase 3 Y Neg Texts(78).Text = ValveCurrent(3, 2, 1, 1) Texts(79).Text = ValveCurrent(3, 2, 2, 1) Texts(80).Text = ValveCurrent(3, 2, 1, 2) Texts(81).Text = ValveCurrent(3, 2, 2, 2) Texts(82).Text = ValveCurrent(3, 2, 1, 3) Texts(83).Text = ValveCurrent(3, 2, 2, 3) Phase 3 D Pos (12 pulse) Texts(84).Text = ValveCurrent(3, 1, 3, 1) Texts(85).Text = ValveCurrent(3, 1, 4, 1) Texts(86).Text = ValveCurrent(3, 1, 3, 2) Texts(87).Text = ValveCurrent(3, 1, 4, 2) Texts(88).Text = ValveCurrent(3, 1, 3, 3) Texts(89).Text = ValveCurrent(3, 1, 4, 3) Phase 3 D Neg (12 pulse) Texts(90).Text = ValveCurrent(3, 2, 3, 1) 202

203 Texts(91).Text = ValveCurrent(3, 2, 4, 1) Texts(92).Text = ValveCurrent(3, 2, 3, 2) Texts(93).Text = ValveCurrent(3, 2, 4, 2) Texts(94).Text = ValveCurrent(3, 2, 3, 3) Texts(95).Text = ValveCurrent(3, 2, 4, 3) Output Currents Texts(96).Text = CLPhaseCurrent(1) Texts(97).Text = CLPhaseCurrent(2) Texts(98).Text = CLPhaseCurrent(3) Case "Rms" Texts(1).Text = SupplyVoltRms Vdc - tash eisodou Texts(2).Text = InvSupCurrentRms Idc - reuma eisodou Texts(3).Text = InvValCurrent1Rms(1) tranzistor (1,1)-Iiv Texts(4).Text = InvValCurrent1Rms(4) tranzistor (1,2)-Iiv Texts(5).Text = InvDioCurrent1Rms(1) diode (1,1)- Iid Texts(6).Text = InvDioCurrent1Rms(4) diode (1,2)- Iid Texts(7).Text = InvValCurrent1Rms(3) tranzistor (2,1) Iiv Texts(8).Text = InvValCurrent1Rms(2) tranzistor(2,2) Iiv Texts(9).Text = InvDioCurrent1Rms(3) diode (2,1) Iid Texts(10).Text = InvDioCurrent1Rms(2) diode (2,2) Iid Texts(11).Text = InvPhaseVoltRms Vio - tash eksodou Texts(12).Text = InvPhaseCurrentRms(1) Iio1 - reuma eksodou1 Case "Aver" Texts(1).Text = SupplyVoltAve Texts(2).Text = InvSupCurrentAve Texts(3).Text = InvValCurrent1Ave(1) Texts(4).Text = InvValCurrent1Ave(4) Texts(5).Text = InvDioCurrent1Ave(1) Texts(6).Text = InvDioCurrent1Ave(4) Texts(7).Text = InvValCurrent1Ave(3) Texts(8).Text = InvValCurrent1Ave(2) Vdc - tash eisodou Idc - reuma eisodou tranzistor (1,1)-Iiv tranzistor (1,2)-Iiv diode (1,1)- Iid diode (1,2)- Iid tranzistor (2,1) Iiv tranzistor(2,2) Iiv 203

204 Texts(9).Text = InvDioCurrent1Ave(3) diode (2,1) Iid Texts(10).Text = InvDioCurrent1Ave(2) diode (2,2) Iid Texts(11).Text = InvPhaseVoltAve Vio - tash eksodou Texts(12).Text = InvPhaseCurrentAve(1) Iio1 - reuma eksodou1 End Select For K = 1 To 6 frms(k).plot Next K End Sub Η συνάρτηση Plot Η συνάρτηση Plot, ασχολείται με τη σχεδίαση των φορμών κυματομορφής. Η Plot καλείται κάθε φορά που υπολογίζονται νέες τιμές στη φόρμα SimulationForm. Η κλήση της γίνεται μετά τη μεταβίβαση των προς επιλογή τιμών στα όργανα μέτρησης (μέσα στη LoadValues)και τοποθετεί τις τιμές αυτές στις κυματομορφές. Οι τιμές αυτές αποθηκεύονται μέσα σε ένα πίνακα ο οποίος έχει μέγεθος όσα είναι τα βήματα μιας περιόδου. Ο λόγος που επιλέξαμε να τις μεταβιβάζουμε και όχι απλά να κάναμε τη σχεδίαση σύμφωνα με τις τιμές και μετά το τέλος της περιόδου να σβήναμε την κυματομορφή, είναι για να είναι πιο εμφανής οποιαδήποτε αλλαγή στο σύστημα. Μετά το τέλος μιας περιόδου οι νέες τιμές αποθηκεύονται μια μια στις παλιές. Πρόέλευση: Χρησιμοποιείται: Φόρμα WaveForm στη LoadValues της SimCircuitForm Το κάθε σύστημα υπολογίζει διαφορετικές τιμές σε σχέση με άλλο οπότε θα χρειάζεται να σχεδιάζουμε διαφορετικές φόρμες κυματομορφής. Περίπου στο τέλος της συνάρτησης που βρίσκονται τρία διαδοχικά Case το έχουμε βάσει σαν σύμβολο όπου δηλώνει ότι θα τοποθετηθεί ο κώδικας για τα υπόλοιπα συστήματα προσομοίωσης. Εδώ θα καταλάβουμε και ποιος ήταν ο ρόλος της ταύτοτητας που φορτώναμε στη συνάρτηση LoadWaveForms. Για την περίπτωση μας προσθέσαμε το Case CY3CON. 204

205 Κώδικας συνάρτησης: Public Sub Plot() Eπιλέξτε τις τιμές των μεταβλητών ανάλογα με το πρόγραμμα Select Case ProgName Case "CY3CON" Select Case id$ Case "Ii" table(k) = SupplyCurrent(1) Case "Vi" table(k) = SupplyVoltage(1, 1) Case "Vv" table(k) = ValveVoltage(1, 1, 1, 1) Case "Iv" table(k) = ValveCurrent(1, 1, 1, 1) Case "Vo" table(k) = CLPhaseVoltage(1) Case "Io" table(k) = CLPhaseCurrent(1) End Select Αύξησε τη θέση του πίνακα κατά 1 και το i κατά βήμα. K = K + 1 i = i + TimeStep Picture1.Cls Call Picture1_Paint Dim m% Kάνε την σχεδίαση εως ότου βρείς την 1 η κενή θέση στον πίνακα ή ως το τέλος του πίνακα. 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 205

206 K = 1 End Sub Η συνάρτηση Toolbar1_ButtonClick Η συνάρτηση Toolbar1_ButtonClick( ) εκτελείται κάθε φορά που ο χρήστης κάνει κλικ σε κάποιο από τα κουμπιά της μπάρας κουμπιών, είτε αυτό αντιστοιχεί σε κάποια παραγόμενη μεταβλητή είτε σε μια από τις τρεις επιλογές τιμών(inst, Rms, Aver). Κάνοντας κλικ σε κουμπί που αντιστοιχεί σε παραγόμενη μεταβλητή εμφανίζεται η φόρμα κυματομορφής που της αντιστοιχεί. Κάνοντας κλικ σε κάποια από τις επιλογές τιμών καταχωρεί την επιλογή και μεταβιβάζει τις τιμές στα όργανα μέτρησης. Το όρισμα της συνάρτησης Button έχει σχέση με τα χαρακτηριστικά του κουμπιού του οποίου πατήθηκε. Παραδείγματος χάριν, για να ελέγξουμε πιο κουμπί πατήθηκε μπορούμε να το κάνουμε είτε ελέγχοντας το δείκτη του κουμπιού(που λέει πιο κουμπί στη σεριά πατήθηκε) είτε τη λεζάντα (Caption) του. Εδώ χρησιμοποιείται η πρώτη συνθήκη για να απόφύγουμε πολλούς ελέγχους. Εμείς προσθέσαμε το Case CY3CON. Προέλευση: Χρησιμοποιείται: Φόρμα SimCircuitForm στη SimCircuitForm Περίπου στο τέλος της συνάρτησης που βρίσκονται τρία διαδοχικά Case το έχουμε βάσει σαν σύμβολο όπου δηλώνει ότι θα τοποθετηθεί ο κώδικας για τα υπόλοιπα συστήματα προσομοίωσης. Κώδικας συνάρτησης: 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 Φέρε αυτές σε πρώτο φόντο. 206

207 Next f ανάλογα με το πρόγραμμα που προσομοιώνεται εμφανίζεται η φόρμα του αντίστοιχου κουμπιού που πατήθηκε. Select Case ProgName$ Select Case CycPulseNumber% Case 6, 12 Select Case Button.Index Case 1 To 6 If bool Then frms(button.index).show Case 8 choice = Toolbar1.Buttons(8).Caption Toolbar1.Buttons(8).MixedState = True Toolbar1.Buttons(9).MixedState = False Toolbar1.Buttons(10).MixedState = False Case 9 choice = Toolbar1.Buttons(9).Caption Toolbar1.Buttons(9).MixedState = True Toolbar1.Buttons(8).MixedState = False Toolbar1.Buttons(10).MixedState = False Case 10 choice = Toolbar1.Buttons(10).Caption Toolbar1.Buttons(10).MixedState = True Toolbar1.Buttons(8).MixedState = False Toolbar1.Buttons(9).MixedState = False End Select Η συνάρτηση Form_Load() Η συνάρτηση Form_Load(), χρησιμοποιείται από την LoadWaveForms κατά την σχεδίαση των κυματομορφών έτσι ώστε να οριστούν στις κλίμακες τα όρια των 207

208 τιμών μέγιστο και ελάχιστο. Αυτές οι τιμές φορτώνονται μόνο την πρώτη φορά που θα κληθούν οι κυματομορφές και όχι κάθε φορά που επιλέγουμε να δούμε την κυματομορφή από τα κουμπιά επιλογών. Πρόέλευση: Φόρμα WaveForm Χρησιμοποιείται: στη LoadWaveForms της SimCircuitForm Περίπου στο τέλος της συνάρτησης που βρίσκονται δύο διαδοχικά Case το έχουμε βάλει σαν σύμβολο όπου δηλώνει ότι θα τοποθετηθεί ο κώδικας για τα υπόλοιπα συστήματα προσομοίωσης. Για την περίπτωση μας προσθέσαμε το Case CY3CON. Κώδικας συνάρτησης: Private Sub Form_Load() Δώσε σαν λεζάντα της φόρμας της ταυτότητας της. π.χ Is Me.Caption = id Ανάλογα ποια γλώσσα έχει επιλεγεί, δώσε το Εκτύπωση σαν λεζάντα του κουμπιού όπως αυτό μεταφράζεται στη γλώσσα που επιλέχθηκε. PrintBtn.Caption = Matrix(Mlanguage).System(12) Έλεγξε τη γλώσσα επιλογής. Select Case Mlanguage Αν είναι Ελληικά. Case 1 BackBtn.Caption = "&Επιστροφή" Αν είναι Αγγλικά. Case 2 BackBtn.Caption = "&Return" Αν είναι Ισπανικά. Case 3 BackBtn.Caption = "Vo&lver" End Select Όρισε τις ελάχιστες και τις μέγιστες τιμές για την σχεδίαση των κυματομορφών ανάλογα με το σύστημα. τα όρια των μεταβλητών επιλέγονται από τα μέγιτσα και τα ελάχιστα των μεταβλητών που φαίνονται στην SystemVariablesValues. Έλεγξε την ταυτότητα της τρέχουσας Case "CY3CON" PeriodTime = PeriodTime1 NumPeriodPoints% = NumPeriodPoints1% Select Case id$ 208

209 Case "Vi", "Vo", "Vv" For i% = 1 To PlotVarNum% Select Case LabVar$(i%) Case "Vi", "Vo", "Vv" min = PlotVarMinim(PlotIndex%(i%)) max = PlotVarMaxim(PlotIndex%(i%)) GoTo Fin Case Else min = 0 max = 100 End Select Next i% Case "Ii", "Io", "Iv" For i% = 1 To PlotVarNum% Select Case LabVar$(i%) Case "Ii", "Io", "Iv" min = PlotVarMinim(PlotIndex%(i%)) max = PlotVarMaxim(PlotIndex%(i%)) GoTo Fin Case Else min = 0 max = 50 End Select Next i% End Select Η διαδικασία Εκτύπωσης Η διαδικασία εκτύπωσης φαίνεται στον παρακάτω κώδικα: 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 209

210 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 έτσι ώστε να εμφανιστούν τα όργανα μετρήσεων στην οθόνη. 210

211 ΚΕΦΑΛΑΙΟ 7 ΟΔΗΓΟΣ ΓΙΑ ΤΟ ΠΕΡΙΒΑΛΛΟΝ ΤΗΣ VISUAL BASIC 7.1. Οδηγίες κατά την εκκίνηση Περιβάλλον της Visual Basic Με την εκκίνηση της VB θα εµφανιστεί αµέσως ένας οδηγός επιλογής του τύπου του προγράµµατος ή στοιχείου που επιθυµούµε να δηµιουργήσουµε. Στην παραπάνω εικόνα φαίνονται οι επιλογές µας. Θα ασχοληθούµε µόνο µε το «Standard EXE», δηλαδή µε τη δηµιουργία ενός ολοκληρωµένου προγράµµατος και όχι µε την δηµιουργία κάποιου συστατικού. Όπως βλέπουµε, υπάρχουν τρεις βασικές επιλογές: 1. New: Επιλέγουµε τον τύπο του προγράµµατος που θα δηµιουργήσουµε «από το µηδέν». 2. Existing: Ψάχνουµε στον δίσκο να εντοπίσουµε και να ανοίξουµε ένα ήδη δηµιουργηµένο και αποθηκευµένο πρόγραµµα (πρόσφατο/recent, ή παλαιότερο). 3. Recent: Μας προτείνει µια λίστα που περιέχει τα προσφάτως ανοιγµένα προγράµµατα. Μας απαλλάσσει από τον κόπο να ψάχνουµε διαρκώς ένα project το οποίο επεξεργαζόµαστε συχνά. Σηµείωση 1. Συστατικό είναι κάποιο τµήµα ενός project, (module/class module, 211

212 εργαλείο [ActiveX], βιβλιοθήκη [dll] κτλ). 2. Από εδώ και πέρα, όταν αναφερόµαστε σε κάποιο πρόγραµµα που δηµιουργούµε, θα αναφέρουµε τον όρο project που περιλαµβάνει, τόσο το ζητούµενο, όσο και τη λύση, το αποτέλεσµα, τα συστατικά κτλ. Μόλις επιλέξουμε «Standard EXE» εισερχόμαστε στο κυρίως περιβάλλον της Visual Basic. Ας τις δούµε αναλυτικά: Toolbox (γραμμή εργαλείων) Όπως παρατηρούµε, το περιβάλλον είναι διαιρεµένο σε υποπεριοχές. Κάθε µια απ αυτές, έχει έναν συγκεκριµένο ρόλο στην υποβοήθηση του προγραµµατιστή για τη σύνταξη ενός ολοκληρωµένου project. Βρίσκεται στα αριστερά της κεντρικής οθόνης.περιλαµβάνει τα «στοιχεία ελέγχου» πάνω στα οποία βασίζεται το «χτίσιµο» ενός project. 212

213 Τα αντικείµενα αυτά καθοδηγούν τον χρήστη στη σύνταξη ενός λογισµικού. Σε αυτά οφείλεται ο όρος «αντικειµενοστραφής προγραµµατισµός». Η γραµµή εργαλείων περιλαµβάνει τα βασικά στοιχεία ελέγχου. Ωστόσο, ο χρήστης µπορεί εύκολα να προσθέσει επιπλέον όσα προαιρετικά εργαλεία επιθυµεί. Θα δείξουµε πώς γίνεται αυτό παρακάτω. Τα στοιχεία ελέγχου, εκτός από τις ιδιότητες, έχουν συµβάντα (events) και µεθόδους (methods). Properties Window (Παράθυρο ιδιοτήτων) Όλα τα στοιχεία ελέγχου έχουν ιδιότητες. Αυτές είναι παράµετροι που σχετίζονται µε την εµφάνιση ενός αντικειµένου (χρώµα, γραµµατοσειρά, τίτλος κτλ), µε τη θέση του αντικειµένου σε µια φόρµα (απόσταση από το αριστερό και το πάνω άκρο της φόρµας), µε το αν είναι προσβάσιµα από το χρήστη, αν είναι ορατά, µε τον τύπο εµφάνισής τους και πολλά άλλα. Σηµείωση 1. Φόρµα (Form) είναι εκείνο το αντικείµενο πάνω στο οποίο «χτίζουµε» το project µας, το «χαρτί» πάνω στο οποίο θα σχεδιάσουµε τη µορφή του προγράµµατός µας. Πρόκειται για την κεντρική µονάδα εργασίας την οποία διαµορφώνουµε οπτικά µε τα αντικείµενα που προσθέτουµε επάνω της. Χωρίς τη φόρµα δεν εννοείται αντικειµενοστραφής προγραµµατισµός. Πρόγραµµα (µε τη στενή έννοια του όρου) χωρίς φόρµα δεν υφίσταται. Μόνο τα ειδικά (καθαρά υπολογιστικά) συστατικά (π.χ. DLL) δεν απαιτούν τη χρήση µιας φόρµας. 2. Συµβάντα ονοµάζονται όλες εκείνες οι ενέργειες οι οποίες γίνονται από τον χρήστη κατά τη χρήση του προγράµµατος. Για παράδειγµα, συµβάν για ένα κουµπί (button) το οποίο προσθέσαµε σε µια φόρµα, είναι το «κλικ» του ποντικιού, το «δεξί κλικ», το πέρασµα του ποντικιού από πάνω κτλ. Είναι λοιπόν ενέργειες του χρήστη στις οποίες εµείς προσθέτουµε κάποιες λειτουργίες. 213

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

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

216 Άνοιγµα πρόσφατων project Έξοδος από τη VB EditUndo / Redo τελευταίας λειτουργίας Αποκοπή Αντιγραφή Επικόλληση Διαγραφή Επιλογή όλων Εύρεση Εύρεση επόμενου Αντικατάσταση View Κώδικα Αντικείµενο Εµφάνιση του Immediate Window Εµφάνιση του Project Explorer Εµφάνιση του Properties Window Εµφάνιση του ToolBox Εµφάνιση επιλεγµένων ToolBars Project 216

217 Προσθήκη φόρµας Προσθήκη Module Προσθήκη Class Module Αφαίρεση φόρµας Αναφορές Στοιχεία ελέγχου Ιδιότητες του Project µας Σηµείωση Αναφορές(References): Μας επιτρέπει να συνδέσουµε το project που δηµιουργούµε µε µια εξωτερική βιβλιοθήκη ή κάποιο άλλο λογισµικό. Στοιχεία ελέγχου (Components): Πέρα από τα στοιχεία ελέγχου που υπάρχουν στο ToolBox όταν ανοίγουµε την VB, υπάρχουν πάρα πολλά ακόµα τα οποία, είτε έχει φτιάξει η Microsoft, είτε τρίτοι κατασκευαστές. Κάποια από αυτά θα µας είναι απαραίτητα στην πορεία όπου και θα αναλύσουµε τον τρόπο εισαγωγής τους. 217

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

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

220 Help Περιεχόµενα Εύρεση µε βάση τον όρο Εύρεση Η Microsoft στο διαδίκτυο 7.2. Δήλωση μεταβλητών Μεταβλητές Μεταβλητές ονοµάζονται εκείνες οι παράµετροι τις οποίες χρησιµοποιούµε για να αποθηκεύσουµε κάποια τιµή. Υπάρχουν εξ ορισµού διάφοροι τύποι µεταβλητών οι οποίοι χρησιµοποιούνται ανάλογα µε τον τύπο των δεδοµένων των οποίων επιθυµούµε να «αποθηκεύσουµε» την τιµή. Τι σηµαίνουν όµως τα παραπάνω, και γιατί έχουµε τύπους µεταβλητών; Η απάντηση είναι απλή. Πρώτον διότι µπορούµε εύκολα να κατηγοριοποιήσουµε τα δεδοµένα µας και δεύτερον για οικονοµία µνήµης, άρα και για την αύξηση της ταχύτητας επεξεργασίας. Η σύνταξη των µεταβλητών είναι πολύ απλή υπόθεση. Φανταστείτε την 220

221 εξής µαθηµατική πράξη: 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 to 255 Boolean 2 bytes True or False Integer 2 bytes -32,768 to 32,767 Long (long integer) Single (single-precision floating-point) Double (double-precision floating-point) 4 bytes -2,147,483,648 to 2,147,483,647 4 bytes E38 to E-45 for negative values; E-45 to E38 for positive values 8 bytes E308 to E-324 for negative values; E-324 to E308 for positive values Currency 8 bytes -922,337,203,685, to 221

222 (scaled integer) 922,337,203,685, Decimal 14 bytes +/- 79,228,162,514,264,337,593,543,950,335 with no decimal point; +/ with 28 places to the right of the decimal; smallest non-zero number is +/ Date 8 bytes January 1, 100 to December 31, 9999 Object 4 bytes Any Object reference String (variable-length) 10 bytes + string length 0 to approximately 2 billion String (fixed-length) Variant (with numbers) Length of string 1 to approximately 65, bytes Any numeric value up to the range of a Double Variant (with characters) User-defined (using Type) 22 bytes + string length Number required by elements Same range as for variable-length String The range of each element is the same as the range of its data type. Πώς όµως δηλώνουµε σε κάποια µεταβλητή τον τύπο τον οποίο θα ακολουθήσει; Η δήλωση κάθε µεταβλητής γίνεται µε µια κωδική (δεσµευµένη από την Visual Basic) έκφραση. Ο τρόπος δήλωσης διαφέρει ανάλογα µε το αν επιθυµούµε τη χρήση της τιµής κάποιας µεταβλητής «δηµόσια» στο πρόγραµµά µας, ή µόνο «τοπικά». Στην πραγµατικότητα υπάρχουν περισσότεροι τρόποι δήλωσης µεταβλητών από τις δύο βασικές που θα αναλύσουµε στην συνέχεια. Τοπική δήλωση: Dim Σύνταξη: Dim MyVariable As Τύπος Παραδείγµατα: Dim MyName As Variant 222

223 Dim MyCounter As Integer Dim Ok_Pressed As Boolean Dim X3 As Double, Y3 As Double, X4 As Double, 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 Δηµόσια δήλωση: Public Σύνταξη: Public MyVariable As Τύπος Παρατήρηση: Η Public χρησιµοποιείται µόνο στο τµήµα Declarations του κώδικα (δηλώσεις). Δεν πρέπει δηλαδή να βρίσκεται µέσα σε κάποια υπορουτίνα. Η τιµή της µεταβλητής που δηλώνεται κατά αυτόν τον τρόπο κρατάει την τιµή της αναλλοίωτη σε όλο το πρόγραµµα, και εξαρτάται µόνο από την φόρµα που τη φέρει. Αν χρησιµοποιηθεί από οποιαδήποτε υπορουτίνα ή συνάρτηση του προγράµµατος θα επιστρέψει την πραγµατική τιµή που της δόθηκε. Γιατί όµως µια public µεταβλητή εξαρτάται από τη φόρµα που τη φέρει; Η µεταβλητή που δηλώνεται ως Public µπορεί πρακτικά να χρησιµοποιηθεί από οποιαδήποτε φόρµα του προγράµµατος. Απλά για να χρησιµοποιηθεί από µια δεύτερη φόρµα δεν αρκεί το όνοµά της, αλλά όπως είδαµε και µε τις ιδιότητες, θα πρέπει να κληθεί µε τον παρακάτω τρόπο (Έστω από τη Form2, ενώ η µεταβλητή ανήκει στην Form1) : Print Form1.MyName Για την ακρίβεια, όταν µια µεταβλητή δηλωθεί ως Public, τότε αυτοµάτως δηλώνεται η ύπαρξή της και στην αναδιπλούµενη λίστα ιδιοτήτων της φόρµας (η 223

224 οποία όπως είδαµε καλείται µε το όνοµα της φόρµας και έπειτα πατώντας την τελεία). Ας δούµε στη συνέχεια κάποιες προτάσεις δηλώσεων, συνοδευόµενες πλέον µε σύνταξη εκχώρησης τιµής σε κάθε µεταβλητή. Θα θεωρήσουµε ότι οι µεταβλητές δηλώνονται ως τοπικές στο συµβάν κλικ ενός κουµπιού: Private Sub Command1_Click( ) Dim MyName As Variant Dim MyCounter As Integer Dim Pressed As Boolean Dim X3 As Double, Y3 As Double, X4 As Double, 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 θα καταλάβαινε (εσφαλµένα) ότι η λέξη George δεν είναι τίποτα άλλο από µια µεταβλητή. Η MyCounter, επειδή είναι δηλωµένη ως Integer aν έπαιρνε την τιµή «George» προφανώς θα προκαλούσε διακοπή της εκτέλεσης του προγράµµατος λόγω λάθους (µε ένα ενοχλητικό µήνυµα σφάλµατος!). Γιατί; Διότι περιµένει ακέραια τιµή ως όρισµα, και µάλιστα από το πεδίο τιµών που προαναφέραµε. Αν ωστόσο της δίναµε την τιµή δεν θα επέστρεφε λάθος. Απλά θα στρογγυλοπιούσε τον αριθμό στον πλησιέστερο ακέραιο (στο 13). Η µεταβλητή Pressed, λόγω του ότι γνωρίζει επακριβώς τις τιµές που περιµένει (True ή False), µας καθοδηγεί έτσι ώστε να µην κάνουµε λάθος. Γράφοντας δηλαδή Pressed, πατώντας το «=» µας εµφανίζει δίπλα µια λίστα µε τις επιλογές True και False µόνο, για να επιλέξουµε. Λάθη θα προέκυπταν και στις µεταβλητές που είναι δηλωµένες ως πραγµατικές 224

225 (απλής ή διπλής ακρίβειας) δηλαδή είτε Single είτε Double, εάν επιχειρούσαµε να καταχωρίσουµε σε αυτές κάτι πέρα από µια αριθµητική τιµή (που ανήκει στα προαναφερθέντα διαστήµατα). Στις µεταβλητές Χ4 και Υ4 δεν δίνουµε απευθείας τιµές. Απλά συντάσσουµε µια µαθηµατική παράσταση η οποία περιέχει µεταβλητές και αριθµούς σε οποιονδήποτε συνδυασµό, και την «αφήνουµε» να µας υπολογίσει το αποτέλεσµα Πίνακες Μεταβλητών Σε κάποιες διαδικασίες, χρειαζόµαστε ένα πλήθος µεταβλητών οι οποίες θα δέχονται ως όρισµα ιδίου τύπου δεδοµένα. Σε κάποιες άλλες περιπτώσεις, µας είναι άγνωστο το πλήθος των µεταβλητών που θα απαιτηθούν. Υποθέστε ότι έχουµε κάποιο αρχείο το οποίο περιέχει συντεταγµένες, και θέλουµε να το διαβάσουµε και να καταχωρίσουµε κάθε τιµή από αυτό το αρχείο σε µια ξεχωριστή µεταβλητή. Όταν ο χρήστης «τρέχει» το πρόγραµµα, δεν γνωρίζει πόσο µεγάλο είναι το αρχείο που ανοίγει (πόσες γραµµές / records περιέχει), αλλά τον ενδιαφέρει να διαβάσει όλα τα δεδοµένα. Προφανώς δεν θα µπορούσαµε να γράψουµε δηλώσεις για κάθε µεταβλητή (µπορεί να χρειαζόταν εκατοµµύρια τέτοιες δηλώσεις!!!). Σε αυτές τις περιπτώσεις η λύση δίνεται µε τη χρήση πινάκων µεταβλητών. Μοναδική εξαίρεση αποτελεί το γεγονός ότι η δήλωση πίνακα ως Public είναι εφικτή µόνο µέσα σε ένα Module. Παράδειγµα δήλωσης πίνακα µε 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 Πώς όµως χρησιµοποιούµε αυτά τα στοιχεία; Πώς γίνεται η σύνταξη αυτού του είδους των µεταβλητών; Όπως και στις απλές µεταβλητές, µε µόνη διαφορά ότι θα πρέπει να «δείχνουμε» 225

226 τη μεταβλητή στην οποία αναφερόμαστε. Παράδειγµα: 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) Εσωτερικές συναρτήσεις Η βιβλιοθήκη της Visual Basic περιλαµβάνει ένα µεγάλο φάσµα συναρτήσεων για την διευκόλυνση του προγραµµατιστή. Το γεγονός αυτό πλέον το θεωρούµε αυτονόητο αφού και τα κοµπιουτεράκια τσέπης παρέχουν έναν ικανό αριθµό συναρτήσεων. Οι εσωτερικές συναρτήσεις (intrinsic functions) που µας παρέχονται στη VB δεν αφορούν µόνο σε κλασικούς µαθηµατικούς υπολογισµούς, αλλά µας προσφέρουν µεγάλη ευχέρεια στον χειρισµό και την αποτελεσµατική διαχείριση δεδοµένων παντός τύπου. Χωρίζονται γενικά στις παρακάτω κατηγορίες: 226

227 α) Μαθηµατικές συναρτήσεις: Σε αυτή την κατηγορία ανήκουν συναρτήσεις όπως η Sin (ηµίτονο), Cos(συνηµίτονο), Αbs (απόλυτη τιµή) κτλ. Ας τις δούµε αναλυτικότερα: Συνάρτηση Επεξήγηση Όρισμα Αποτέλεσμα Sin(a) Ημίτονο του α Το α σε ακτίνια Πραγματικός Cos(a) Συνημίτονο του Το α σε ακτίνια Πραγματικός α Tan(a) Εφαπτομένη Το α σε ακτίνια Πραγματικός του α Atn(a) Τόξο Πραγματικός Πραγματικός εφαπτομένης του α αριθμός>0 Log(a) Λογάριθμος του α Πραγματικός αριθμό>=0 Sqr(a) Τετραγωνική Πραγματικός Πραγματικός ρίζα του α αριθμός Abs(a) Απόλυτη τιμή Πραγματικός Πραγματικός του α αριθμός Int(a) Ακέραιος του α Πραγματικός Ακέραιος αριθμός Rnd*a Τυχαίος αριθμός από ο έως α Πραγματικός Sgn(a) Exp(a) Επιστρέφει το πρόσημο του α Επιστρέφει την τιμή ea Πραγματικός αριθμός Αν α>0 επιστρέφει 1 Αν α=0 επιστρέφει 0 Αν α<0 επιστρέφει -1 Πραγματικός β) Συναρτήσεις κειµένου: Εδώ θα συναντήσουµε συναρτήσεις οι οποίες χρησιµοποιούνται για τη διαµόρφωση του περιεχοµένου µιας µεταβλητής, η οποία πλέον δεν «κρατάει» αριθµητική τιµή, αλλά κείµενο κτλ. Τέτοιου τύπου είναι οι µεταβλητές που δηλώνονται ως String ή ως Variant. Συνάρτηση Επεξήγηση Όρισμα Αποτέλεσ 227

228 Len(aString) Mid(aString,iStart P,iEndP) Left(aString,iLeng th) Right(aString,iLen ght) Trim(aString) Επιστρέφει το μήκος της μεταβλητής astring σε Χαρακτήρες Επιστρέφει τμήμα της μεταβλητής astring από τη θέση istartp έως τη θέση iendp Επιστρέφει τμήμα της μεταβλητής astring από την αρχή της έως το μήκος (σε χαραρκτήρες) που θα ορίσουμε. Επιστρέφει τμήμα της μεταβλητής astring από το τέλος της έως το μήκος(σε χαρακτήρες) που θα ορίσουμε προς την αρχή. Διαγράφει τα κενά διαστήματα που προηγούνται ή έπονται του κειμένου. Οποιαδήποτε μεταβλητή που της έχει εκχωρηθεί αλφαριθμητικ ή τιμή(κείμενο). Οποιαδήποτε μεταβλητή που της έχει εκχωρηθεί αλφαριθμητικ ή τιμή(κείμενο), αρχική και τελική θέση ωε ακέραιοι Οποιαδήποτε μεταβλητή που της έχει εκχωρηθεί αλφαριθμητικ ή τιμή (κείμενο), διάστημα(μήκ ος) Οποιαδήποτε μεταβλητή που της έχει εκχωρηθεί αλφαριθμητικ ή τιμή(κείμενο), διάστημα(μήκ ος) Οποιαδήποτε μεταβλητή που της έχει εκχωρηθεί αλφαριθμητικ ή τιμή μα Ακέραιος Variant ή String Variant ή String Variant ή String 228

229 Ltrim(aString) Rtrim(aString) Διαγράφει τα κενά διαστήματα που προηγούνται του κειμένου. Διαγράφει τα κενά διαστήματα που έπονται του κειμένου. (κείμενο). Οποιαδήποτε μεταβλητή που της έχει εκχωρηθεί αλφαριθμητικ ή τιμή(κείμενο). Οποιαδήποτε μεταβλητή που της έχει εκχωρηθεί αλφαριθμητικ ή τιμή(κείμενο). γ) Συναρτήσεις Ηµεροµηνίας και Ώρας: Οι συναρτήσεις αυτές είναι κάπως εξειδικευµένες, αλλά θα τις δούµε κάπως συνοπτικά για να πάρουµε µια ιδέα για τη χρήση τους. Συνάρτηση Επεξήγηση Όρισμα Αποτέλεσμα Now «Επιστρέφει» Κανένα την τρέχουσα ημερομηνία και ώρα. Date «Επιστρέφει» Κανένα την τρέχουσμα ημερομηνία. Time «Επιστρέφει» Κανένα την τρέχουσα ώρα. Year(aDate) «Επιστρέφει» Ημερομηνία Ακέραιος το έτος της ημερομηνίας που δίνουμε. Month(aDate) «Επιστρέφει» το μήνα της ημερομηνίας που δίνουμς Ημερομηνία Ακέραιος 229

230 Day(aDate) Hour(aTime) Minute(aTime) Second(aTime) «Επιστρέφει» την ημέρα της ημερομηνίας που δίνουμε. «Επιστρέφει» τις ώρες της ώρας «Επιστρέφει» τα λεπτά της ώρας που δίνουμε. «Επιστρρέφει» τα δευτερόλεπτα της ώρας που δίνουμε. Ημερομηνία Ώρα Ώρα Ώρα Ακέραιος Ακέραιος Ακέραιος Ακέραιος δ) Συναρτήσεις εισόδου, εξόδου και παρουσίασης: Οι συναρτήσεις αυτές επιτρέπουν την εύκολη εισαγωγή και παρουσίαση των δεδοµένων και των αποτελεσµάτων. Συνάρτηση MsgBox (πλαίσιο εκτύπωσης ή πλαίσιο εξόδου) Σύνταξη: MsgBox(prompt[, buttons][, title][, helpfile, context]) Prompt : Το σύνολο των τιµών (αριθµητικών ή / και αλφαριθµητικών που θέλουµε να εκτυπώσουµε. Buttons As VbMsgBoxStyle = vbokonly : Διαλέγουµε τα πλήκτρα τα οποία θα εµφανιστούν πάνω στο MsgBox καθώς και το οπτικό στυλ. Title : O τίτλος που θα αναγράφεται πάνω στην µπλε µπάρα του MsgBox. HelpFile : Στην περίπτωση που χρησιµοποιήσουµε κάποιο εξωτερικό αρχείο θα δηλώσουµε εδώ το όνοµά του. Context : Τα αρχεία βοηθείας της Visual Basic παίρνουν ένα όρισµα αναφορά (για να γνωρίζουν ποιο τµήµα θα καλέσουν). Εδώ γράφεται το συγκεκριµένο όρισµα. 230

231 Επιλέγω ως στυλ και πλήκτρα τα vbinformation + vbokcancel Παράδειγμα: myname="κώστας" MsgBox "Το όνομα μου είναι " & myname, vbinformation+vbokcancel, "Γνωριμία" και ως τίτλο επέλεξα να γράφει «Γνωριμία». Εκτελώντας το πρόγραμμα εμφανίζεται το παρακάτω αποτέλεσμα: Μπορείτε να παρατηρήσετε την αντιστοιχία µεταξύ κώδικα και αποτελέσµατος. Παρέλειψα να χρησιµοποιήσω το HelpFile και κατά συνέπεια το Context διότι δεν έχω δηµιουργήσει κάποιο αρχείο βοηθείας που να περιλαµβάνει οδηγίες για το συγκεκριµένο πρόγραµµα. Στα παραπάνω ορίσµατα της συνάρτησης µόνο το Prompt είναι υποχρεωτικό όρισµα. Τα υπόλοιπα είναι προαιρετικά και χρησιµοποιούνται για την καλύτερη εµφάνιση και λειτουργία της φόρµας µηνύµατος (Active Interface). Συνάρτηση InputBox (πλαίσιο εισόδου) Σύνταξη: Answer=InputBox(prompt[, title][, default][, xpos][, ypos][, helpfile, context]) Όπως παρατηρούµε ΒΑΣΙΚΟ στοιχείο σύνταξης της InputBox είναι η ύπαρξη µιας µεταβλητής η οποία θα πάρει την τιµή που θα πληκτρολογήσουµε στο InputBox. Ονοµάσαµε αυτή την µεταβλητή Answer. Prompt : Το µήνυµα το οποίο θα εκτυπωθεί πάνω στη φόρµα του InputBox και το οποίο θα περιγράφει το δεδοµένο που ζητάµε. Title : O τίτλος που θα αναγράφεται πάνω στην µπλε µπάρα του InputBox. Default : Μια προκαθορισµένη τιµή που προτείνουµε εµείς (τρέχουσα τιµή). XPos : Η οριζόντια συντεταγµένη της οθόνης όπου θα εµφανιστεί το InputBox. YPos : Η κάθετη συντεταγµένη της οθόνης όπου θα εµφανιστεί το InputBox. HelpFile : Στην περίπτωση που χρησιµοποιήσουµε κάποιο εξωτερικό αρχείο θα 231

232 δηλώσουµε εδώ το όνοµά του. Context : Τα αρχεία βοηθείας της Visual Basic παίρνουν ένα όρισµα αναφορά (για να γνωρίζουν ποιο τµήµα θα καλέσουν). Εδώ γράφεται το συγκεκριµένο όρισµα Παράδειγμα: Answer = InputBox("Τύπωσε την τιμή του Χ", "Εισαγωγή δεδομένων", " ") Επιλέξαμε ως μήνυμα το «Τύπωσε την τιμή του Χ», ως Τίτλο «Εισαγωγή δεδομένων», ως προκαθορισμένη τιμή το « ». Παραλείψαμε τα XPos, YPos και όπως παραπάνω τα HelpFile και Context. Λόγω έλλειψης των XPos, YPos το πλαίσιο εισόδου θα εμφανιστεί κεντραρισμένο στην οθόνη. Η τιμή που θα πληκτρολογήσουμε θα καταχωρηθεί στην μεταβλητή Answer. Απαραίτητα ορίσματα της συνάρτησης InputBox είναι μόνο το Prompt. Συνάρτηση Format Σύνταξη: Format(expression[, format[, firstdayofweek[, firstweekofyear]]]) ή απλούστερα: Format(Μεταβλητή ή παράσταση, τύπος ) Π.χ. Format(MyNumber, 0,000 ) H Format παρουσιάζει µε συγκεκριµένο τρόπο µια µεταβλητή, είτε έχει αριθµητική τιµή, είτε κείµενο είτε ηµεροµηνία. Στην ανάλυσή µας θα χρησιµοποιήσουµε την Format για παρουσίαση αριθµητικών δεδοµένων, µέσα από κάποια παραδείγµατα. Private Sub Command1_Click() 232

233 Dim dnum1 As Double, dnum2 As Double dnum1 = dnum2 = Debug.Print Format(dNum1, "0.000") Debug.Print Format(dNum1, " ") Debug.Print Format(dNum1, "-0.0") Debug.Print Format(dNum1, " ") Debug.Print Format(dNum2, "0.00%") Debug.Print Format(dNum2*dNum1/(dNum2+dNum1),".000%") End Sub Το αποτέλεσμα είναι το εξής: Εντολές και Τελεστές Σύγκρισης Θα αναλύσουμε δύο διαφορετικούς τρόπους σύγκρισης, ή αλλιώς δύο διαφορετικά set εντολών. If Then Else () Σύνταξη: If Συνθήκη Then Αυτό Else Άλλο Παράδειγμα: MyNum1=12 : MyNum2=23 If MyNum1>MyNum2 Then MsgBox "Ο πρώτος είναι μεγαλύτερος" Else MsgBox "Ο δεύτερος είναι μεγαλύτερος ή ίσος!" Η παραπάνω σύνταξη των εντολών If Then Else αποτελεί την πιο απλή αλλά παράλληλα και την πλέον «αδύναμη μορφή». Στην πραγματικότητα οι εντολές αυτές 233

234 μπορούν να χρησιμοποιηθούν ποικιλοτρόπως και με χειρισμό περισσότερων συνθηκών. Πριν προχωρήσουμε όμως, ας δούμε τους τελεστές σύγκρισης. Τελεστής Επεξήγηση = Ίσο με > Μεγαλύτερο από < Μικρότερο από >= Μεγαλύτερο ή ίσο από =< Μικρότερο ή ίσο από < > Διαφορά από Στον παραπάνω πίνακα αναφερόμαστε στη σύγκριση του πρώτου ορίσματος σε σχέση με το δεύτερο (δηλαδή τη σύγκριση του ορίσματος που βρίσκεται αριστερά του τελεστή, σε σχέση με το όρισμα που βρίσκεται στα δεξιά). Σημείωση: Όρισμα(argument): η τιμή που απαιτείται από μια συνάρτηση, εντολή, υπορουτίνα κ.ά. προκειμένου να γίνει κάποιος υπολογισμός, π.χ. Cos(3.14), η τιμή 3.14 είναι το όρισμα της εσωτερικής συνάρτησης «συνημίτονο». MsgBox "Ο πρώτος είναι μεγαλύτερος!", όπου το κείμενο που περιέχεται στα εισαγωγικά αποτελεί το όρισμα για τη συνάρτηση MsgBox και το οποίο θα εκτυπωθεί στην οθόνη ως αποτέλεσμα της εκτέλεσης της εντολής. Υπάρχουν κάποιες σχέσεις οι οποίες μας επιτρέπουν να εξετάσουμε μια πιο πολύπλοκη συνθήκη. Ας υποθέσουμε ότι θέλουμε στο παραπάνω παράδειγμα να ελέγξουμε αν ο πρώτος αριθμός είναι μικρότερος ή μεγαλύτερος του δεύτερου και παράλληλα, αν ο πρώτος αριθμό είναι μικρότερος ή μεγαλύτερος του 10. Για να το πετύχουμε, θα πρέπει πιθανόν να χρησιμοποιήσουμε κάποια συνδετική λογική σχέση: Σχέση And Not Or Xor Επεξήγηση Να ισχύει η πρώτη και η δεύτερη (κτλ) συνθήκη Να μην ισχύει η συνθήκη Να ισχύει είτε η πρώτη είτε η δεύτερη (κτλ) συνθήκη Να ισχύει ή η πρώτη ή η δεύτερη (κτλ) αλλά μόνο η μία 234

235 Πολλές φορές θέλουμε να συγκρίνουμε την τιμή μιας αριθμητικής ή αλφαριθμητικής παράστασης με πολλές διαφορετικές τιμές και ανάλογα με την τιμή με την οποία είναι ίση να εκτελέσουμε και μια αντίστοιχη ομάδα εντολών. Η λειτουργία αυτή μπορεί να κωδικοποιηθεί όπως είδαμε με δομή If... Then... Εlse If. Όμως η VB διαθέτει άλλη μια δομή πολλαπλής επιλογής, τη δομή Select Case, με τη βοήθεια της οποίας οι κωδικοποιήσεις, στην ειδική αυτή περίπτωση, γίνονται πιο ευανάγνωστες. Η γενική μορφή της δομής είναι: Η δομή πολλαπλής επιλογής Select Case Select Case παράσταση Case τιμή1, τιμή2 Εντολές Case Else τιμή1, τιμή2 Εντολές End Select Στην αρχή υπολογίζεται η τιμή της παράστασης και στη συνέχεια συγκρίνεται με κάθε τιμή της λίστας τιμών που ακολουθεί την πρώτη Case. Αν η τιμή της παράστασης βρεθεί ίση με μια από αυτές τις τιμές εκτελείται η πρώτη ομάδα εντολών και οι υπόλοιπες ομάδες αγνοούνται. Αν η τιμή της παράστασης δε βρεθεί ίση με κάποια από αυτές τις τιμές αγνοείται η πρώτη ομάδα εντολών και γίνεται έλεγχος με τις τιμές της δεύτερης Case κ.ο.κ.αν καμιά από τις τιμές των Case δεν είναι ίση με την τιμή της παράστασης εκτελούνται οι εντολές της ομάδας Case Εlse. Η ύπαρξη της Case Εlse μέσα στη δομή δεν είναι υποχρεωτική Βρόγχοι (Επαναληπτικές Διαδικασίες) Βρόγχοι στη Visual Basic ονομάζονται οι επαναληπτικές διαδικασίες που δημιουργούμε με σκοπό την εκτέλεση κάποιων τμημάτων κώδικα περισσότερες από μία φορές. Όλες οι επαναληπτικές διαδικασίες χαρακτηρίζονται από κάποια συνθήκη επανάληψης. Έτσι, υπάρχουν οι σταθερές επαναληπτικές διαδικασίες και οι μεταβλητές. Στη συνέχεια θα αναλύσουμε τους παραπάνω βρόγχους, ξεκινώντας από αυτόν που χρησιμοποιεί προκαθορισμένο κύκλο επαναλήψεων. For [Step] Next Χρησιμοπιείται για σταθερό κύκλο επαναλήψεων. Σύνταξη: For μεταβλητή=αρχή To τέλος [Step βήμα] 235

236 Κώδικας προς εκτέλεση Next μεταβλητή Θα συνεχίσουμε με τους βρόγχους μεταβλητής επαναληπτικότητας (επανάληψη βάση δυναμικής συνθήκης). Ουσιαστικά πρόκειται για ένα βρόγχο αλλά με παραλλαγές. Ας δούμε πρώτα την απλούστερη και πιο διαδεδομένη του μορφή. While Wend Χρησιμοποιείται για μεταβλητό κύκλο επαναλήψεων. Σύνταξη: While συνθήκη Κώδικας προς εκτέλεση Wend Εκτελεί ένα μεταβλητό κύκλο επαναλήψεων ανάλογα με τη συνθήκη. Do While / Until Loop Χρησιμοποιείται για μεταβλητό κύκλο επαναλήψεων. Σύνταξη: Do While συνθήκη Κώδικας προς εκτέλεση [Exit Do] Loop Do Until συνθήκη Κώδιακας προς εκτέλεση [Exit Do] Loop Σε αυτή την περίπτωση το μόνο που αλλάζει ο τρόπος σύνταξης (Do Loop). Σαν αποτέλεσμα και τρόπο λειτουργίας είναι ακριβώς το ίδιο με το απλό While Wend. Έχει προστεθεί όμως δυνατότητα Exit Do για βίαιο τερματισμό του βρόγχου (κάτι αντίστοιχο με το Exit For). Στη σύνταξη του βρόγχου με αντικατάσταση του While με το Until, ο βρόγχος εκτελείται μέχρι να ικανοποιεί η συνθήκη. Παράδειγμα κώδικα με χρήση Do Until Loop: Private Sub Command1_Click( ) q =

237 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 Unitl συνθήκη Η συνθήκη πλέον ελέγχεται στο τέλος του βρόγχου και όχι στην αρχή. Αυτό το χαρακτηριστικό δίνει μεγάλη ευελιξία στην χρήση των Do Loop βρόγχων, αφού επιτρέπει τον κώδικα εντός του βρόγχου να εκτελεστεί τουλάχιστον μια φορά, και έπειτα να γίνει ο έλεγχος κατά πόσον ικανοποιείται η συνθήκη. Υποθέστε ότι σας ζητείται κάποιος κωδικός ασφαλείας για να εισέλθετε σε ένα σύστημα. Με τον τρόπο αυτό, σας δίνεται η ευκαιρία να εισάγεται έναν κωδικό και εάν δεν είναι σωστός να σας ξαναζητηθεί. Private Sub Command1_Click( ) Do MyAnswer = InputBox("Τύπωσε τον κωδικό εισόδου", "Έλεγχος ασφαλείας") Loop Until MyAnswer = "LetMeIn!" MsgBox "Καλώς ήρθατε!" End Sub Private Sub Command1_Click( ) 237

238 Do MyAnswer = InputBox("Τύπωσε τον κωδικό εισόδου", "Έλεγχος ασφαλείας") Loop While MyAnswer <> "LetMeIn!" MsgBox "Καλώς ήρθατε!" End Sub Τα παραπάνω προγράμματα κάνουν ακριβώς την ίδια δουλειά Γραφικά Στους υπολογιστές οι εικόνες, τα εικονίδια, τα σχήματα, τα σχέδια και τα διαγράμματα χαρακτηρίζονται με τον όρο γραφικά (graphics). Τα γραφικά αποτελούν απαραίτητο στοιχείο κάθε σύγχρονης εφαρμογής, ανεξάρτητα από το αν η εικόνα αποτελεί ή όχι το θεματικό της αντικείμενο. Από τη φύση του ο άνθρωπος μπορεί να αντλήσει πολύ πιο γρήγορα και εύκολα τις πληροφορίες που απεικονίζονται με γραφικό τρόπο, από ότι τις πληροφορίες που περιέχονται σε ένα κείμενο ή σε έναν πίνακα αριθμών. Η VB διαθέτει δύο διαφορετικούς τρόπους για τη δημιουργία γραφικών. Στον έναν τρόπο χρησιμοποιούνται τα εργαλεία γραφικών της παλέτας εργαλείων ενώ στον άλλο χρησιμοποιούνται οι μέθοδοι γραφικών της γλώσσας προγραμματισμού. Το ποιος από τους δύο τρόπους θα χρησιμοποιηθεί, εξαρτάται από το τι ακριβώς θέλουμε να πετύχουμε. Κάποια απλά γραφικά (γραμμές, ορθογώνια, κύκλους, ελλείψεις κλπ) μπορούμε να τα "ζωγραφίσουμε" εξαρχής πάνω σε μια φόρμα κατά τη δημιουργία της διεπαφής, χρησιμοποιώντας τα εργαλεία γραφικών. Έτσι, χωρίς να γράψουμε καθόλου κώδικα βλέπουμε το τελικό οπτικό αποτέλεσμα. Κάποια άλλα γραφικά, τα οποία είναι πιο σύνθετα και μπορούν να περιγραφούν μόνον από αλγορίθμους ή για τα οποία υπάρχει η απαίτηση να εμφανιστούν κατά τη διάρκεια εκτέλεσης του προγράμματος ως εφέ, επιβάλλεται να δημιουργηθούν από μεθόδους γραφικών, που καλούνται μέσα από κώδικα προγράμματος. Γραφικά μπορούμε να δημιουργήσουμε μέσα σε μια φόρμα ή μέσα σε ένα πλαίσιο εικόνας χρησιμοποιώντας τα εργαλεία ή/και τις μεθόδους γραφικών. Επίσης, μπορούμε να εκτυπώσουμε γραφικά στον εκτυπωτή, αξιοποιώντας τις μεθόδους γραφικών που υποστηρίζει το ειδικό αντικείμενο Printer. 238

239 Εργαλεία Γραφικών Όπως έχουμε ήδη δει στο μάθημα 4, τα εργαλεία γραφικών του περιβάλλοντος εργασίας της VB είναι: το εργαλείο "γραμμή" (line), το εργαλείο "γεωμετρικό σχήμα" (shape), το εργαλείο "εικόνα" (image) και το εργαλείο "πλαίσιο εικόνας" (picture box). Με το εργαλείο "γραμμή" σχεδιάζουμε ευθύγραμμα αρχής και τέλους τμήματα. Χαρακτηριστικές οπτικές ιδιότητες των ευθύγραμμων τμημάτων είναι οι: XI, Υ1 και Χ2, Υ2: Οι συντεταγμένες του αρχής (x1,y1) και οι συντεταγμένες του τερματισμού (x2,y2). σημείου σημείου 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 συνδυάζουν τα χρώματα με διάφορους τρόπους και επιτρέπουν τη δημιουργία οπτικών εφέ. Με το εργαλείο "γεωμετρικό σχήμα", 239

ΤΕΙ ΚΑΒΑΛΑΣ 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 Εισαγωγή Σκοπός αυτής της παρουσίασης είναι η συνοπτική περιγραφή τριών διαφορετικών μεθόδων ελέγχου κινητήρων Σ.Ρ.

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

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

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

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

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

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

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

μετασχηματιστή. ΤΜΗΜΑ: ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΤΕ ΘΕΜΑ: Περιγράψτε τον τρόπο λειτουργίας ενός μονοφασικού

μετασχηματιστή. ΤΜΗΜΑ: ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΤΕ ΘΕΜΑ: Περιγράψτε τον τρόπο λειτουργίας ενός μονοφασικού ΤΜΗΜΑ: ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΤΕ ΘΕΜΑ: Περιγράψτε τον τρόπο λειτουργίας ενός μονοφασικού μετασχηματιστή. ΕΠΙΒΛΕΠΩΝ ΚΑΘΗΓΗΤΗΣ: κ. Δημήτριος Καλπακτσόγλου ΕΡΓΑΣΙΑ ΤΗΣ: Αικατερίνης-Χρυσοβαλάντης Γιουσμά Α.Ε.Μ:

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

Τµήµα Βιοµηχανικής Πληροφορικής Σηµειώσεις Ηλεκτρονικών Ισχύος Παράρτηµα

Τµήµα Βιοµηχανικής Πληροφορικής Σηµειώσεις Ηλεκτρονικών Ισχύος Παράρτηµα ΠΑΡΑΡΤΗΜΑ Ηµιτονοειδές Ρεύµα και Τάση Τριφασικά Εναλλασσόµενα ρεύµατα Ισχύς και Ενέργεια Ενεργός τιµή περιοδικών µη ηµιτονικών κυµατοµορφών 1. Ηµιτονοειδές Ρεύµα και Τάση Οταν οι νόµοι του Kirchoff εφαρµόζονται

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

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

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

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

Εφαρμογή 9.2 Μετατροπή Ασύμμετρης Τριφασικής Κατανάλωσης σε Συμμετρική, με Ανακατανομή των Φορτίων

Εφαρμογή 9.2 Μετατροπή Ασύμμετρης Τριφασικής Κατανάλωσης σε Συμμετρική, με Ανακατανομή των Φορτίων Εφαρμογή 9.2 Μετατροπή Ασύμμετρης Τριφασικής Κατανάλωσης σε Συμμετρική, με Ανακατανομή των Φορτίων Περίληψη Ασύμμετρη Τριφασική Κατανάλωση σε σύνδεση Αστέρα με ουδέτερο αγωγό. Μετατροπή της ασύμμετρης

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

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

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

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

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

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

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

ΚΕΦΑΛΑΙΟ 8 Ο : ΤΡΙΦΑΣΙΚΑ ΔΙΚΤΥΑ

ΚΕΦΑΛΑΙΟ 8 Ο : ΤΡΙΦΑΣΙΚΑ ΔΙΚΤΥΑ ΚΕΦΑΛΑΙΟ 8 Ο : ΤΡΙΦΑΣΙΚΑ ΔΙΚΤΥΑ 1 Τα τριφασικά δίκτυα χρησιμοποιούνται στην παραγωγή και μεταφορά ηλεκτρικής ενέργειας για τους εξής λόγους: 1. Οικονομία στο αγώγιμο υλικό (25% λιγότερος χαλκός). 2. Η

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

Κινητήρας παράλληλης διέγερσης

Κινητήρας παράλληλης διέγερσης Κινητήρας παράλληλης διέγερσης Ισοδύναμο κύκλωμα V = E + I T V = I I T = I F L R F I F R Η διέγερση τοποθετείται παράλληλα με το κύκλωμα οπλισμού Χαρακτηριστική φορτίου Έλεγχος ταχύτητας Μεταβολή τάσης

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

Ανάλυση Ηλεκτρικών Κυκλωμάτων

Ανάλυση Ηλεκτρικών Κυκλωμάτων Ανάλυση Ηλεκτρικών Κυκλωμάτων Κεφάλαιο 13: Ισχύς σε κυκλώματα ημιτονοειδούς διέγερσης Οι διαφάνειες ακολουθούν το βιβλίο του Κων/νου Παπαδόπουλου «Ανάλυση Ηλεκτρικών Κυκλωμάτων» ISBN: 9789609371100 κωδ.

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

2. ΓΕΝΝΗΤΡΙΕΣ ΕΝΑΛΛΑΣΣΟΜΕΝΟΥ ΡΕΥΜΑΤΟΣ

2. ΓΕΝΝΗΤΡΙΕΣ ΕΝΑΛΛΑΣΣΟΜΕΝΟΥ ΡΕΥΜΑΤΟΣ 28 2. ΓΕΝΝΗΤΡΙΕΣ ΕΝΑΛΛΑΣΣΟΜΕΝΟΥ ΡΕΥΜΑΤΟΣ Οι γεννήτριες εναλλασσόµενου ρεύµατος είναι δύο ειδών Α) οι σύγχρονες γεννήτριες ή εναλλακτήρες και Β) οι ασύγχρονες γεννήτριες Οι σύγχρονες γεννήτριες παράγουν

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

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

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

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

Περιεχόμενα. Πρόλογος...13

Περιεχόμενα. Πρόλογος...13 Περιεχόμενα Πρόλογος...3 Κεφάλαιο : Στοιχεία ηλεκτρικών κυκλωμάτων...5. Βασικά ηλεκτρικά μεγέθη...5.. Ηλεκτρικό φορτίο...5.. Ηλεκτρικό ρεύμα...5..3 Τάση...6..4 Ενέργεια...6..5 Ισχύς...6..6 Σύνοψη...7.

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

3.1 Η δίοδος στο κύκλωμα. Στατική και δυναμική χαρακτηριστική

3.1 Η δίοδος στο κύκλωμα. Στατική και δυναμική χαρακτηριστική 1 3. Κυκλώματα διόδων 3.1 Η δίοδος στο κύκλωμα. Στατική και δυναμική χαρακτηριστική Στην πράξη η δίοδος προσεγγίζεται με τμηματική γραμμικοποίηση, όπως στο σχήμα 3-1, όπου η δυναμική αντίσταση της διόδου

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

Περιεχόμενα. Πρόλογος...13

Περιεχόμενα. Πρόλογος...13 Περιεχόμενα Πρόλογος...3 Κεφάλαιο : Στοιχεία ηλεκτρικών κυκλωμάτων...5. Βασικά ηλεκτρικά μεγέθη...5.. Ηλεκτρικό φορτίο...5.. Ηλεκτρικό ρεύμα...5..3 Τάση...6..4 Ενέργεια...6..5 Ισχύς...6..6 Σύνοψη...7.

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

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

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

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

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

ΜΟΝΟΦΑΣΙΚΟΣ ΑΣΥΓΧΡΟΝΟΣ (ΕΠΑΓΩΓΙΚΟΣ) ΚΙΝΗΤΗΡΑΣ ΜΕΘΟΔΟΙ ΕΚΚΙΝΗΣΗΣ ΜΟΝΟΦΑΣΙΚΟΣ ΑΣΥΓΧΡΟΝΟΣ (ΕΠΑΓΩΓΙΚΟΣ) ΚΙΝΗΤΗΡΑΣ ΜΕΘΟΔΟΙ ΕΚΚΙΝΗΣΗΣ 24/12/2017 ΣΟΦΙΑ ΔΟΛΜΑ ΜΕΘΟΔΟΙ ΕΚΚΙΝΗΣΗΣ ΜΟΝΟΦΑΣΙΚΟΥ ΑΣΥΓΧΡΟΝΟΥ (ΕΠΑΓΩΓΙΚΟΥ) ΚΙΝΗΤΗΡΑ Ένας επαγωγικός ή ασύγχρονος κινητήρας είναι στην ουσία

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

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

ΑΣΚΗΣΕΙΣ ΗΛΕΚΤΡΙΚΩΝ ΜΗΧΑΝΩΝ ΙΙ ΑΣΚΗΣΕΙΣ ΗΛΕΚΤΡΙΚΩΝ ΜΗΧΑΝΩΝ ΙΙ ΣΥΓΧΡΟΝΕΣ ΜΗΧΑΝΕΣ Ε.Ρ. 1. Μια σύγχρονη γεννήτρια με ονομαστικά στοιχεία: 2300V, 1000kV, 60Hz, διπολική με συντελεστής ισχύος 0,8 επαγωγικό και σύνδεση σε αστέρα έχει σύγχρονη

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

ΜΕΤΑΤΡΟΠΕΙΣ ΣΥΝΕΧΟΥΣ ΡΕΥΜΑΤΟΣ

ΜΕΤΑΤΡΟΠΕΙΣ ΣΥΝΕΧΟΥΣ ΡΕΥΜΑΤΟΣ ΜΑΘ.. 12 ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΜΕΤΑΤΡΟΠΕΙΣ ΣΥΝΕΧΟΥΣ ΡΕΥΜΑΤΟΣ 1. ΓΕΝΙΚΑ Οι μετατροπείς συνεχούς ρεύματος επιτελούν τη μετατροπή μιας τάσης συνεχούς μορφής, σε συνεχή τάση με ρυθμιζόμενο σταθερό πλάτος ή και πολικότητα.

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

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΤΜΗΜΑ ΜΗΧΑΝΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΒΙΟΜΗΧΑΝΙΑΣ MM505 ΗΛΕΚΤΡΙΚΕΣ ΜΗΧΑΝΕΣ ΒΙΟΜΗΧΑΝΙΚΟΙ ΑΥΤΟΜΑΤΙΣΜΟΙ Εργαστήριο ο - Θεωρητικό Μέρος Βασικές ηλεκτρικές μετρήσεις σε συνεχές και εναλλασσόμενο

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

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ ΗΛΕΚΤΡΙΚΩΝ ΚΥΚΛΩΜΑΤΩΝ & ΣΥΣΤΗΜΑΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ & ΤΕΧΝΟΛΟΓΙΑΣ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΣΥΣΤΗΜΑΤΩΝ & ΑΥΤΟΜΑΤΟΥ ΕΛΕΓΧΟΥ ΕΡΓΑΣΤΗΡΙΟ ΗΛΕΚΤΡΙΚΩΝ ΚΥΚΛΩΜΑΤΩΝ & ΣΥΣΤΗΜΑΤΩΝ Διδάσκων : Δημήτρης Τσιπιανίτης Γεώργιος Μανδέλλος

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

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

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

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

() { ( ) ( )} ( ) () ( )

() { ( ) ( )} ( ) () ( ) Ηλεκτρική Ισχύς σε Μονοφασικά και Τριφασικά Συστήματα. Μονοφασικά Συστήματα Έστω ότι σε ένα μονοφασικό καταναλωτή η τάση και το ρεύμα περιγράφονται από τις παρακάτω δύο χρονικές συναρτήσεις: ( t cos( ω

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

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

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

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

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

ΥΠΟΥΡΓΕΙΟ ΠΑΙ ΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙ ΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2014 ΥΠΟΥΡΓΕΙΟ ΠΑΙ ΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙ ΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 014 ΤΕΧΝΟΛΟΓΙΑ (ΙΙ) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΘΕΩΡΗΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ ΜΑΘΗΜΑ : Εφαρμοσμένη Ηλεκτρολογία

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

Ηλεκτρονικά Ισχύος II

Ηλεκτρονικά Ισχύος II Ηλεκτρονικά Ισχύος II Ενότητα 2: Μετατροπείς Συνεχούς Τάσης σε Εναλλασσόμενη Τάση (DC-AC Converters ή Inverters) Δρ.-Μηχ. Εμμανουήλ Τατάκης, Καθηγητής Πολυτεχνική Σχολή Τμ. Ηλεκτρολόγων Μηχανικών και Τεχνολογίας

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

ΤΕΛΟΣ 1ΗΣ ΑΠΟ 4 ΣΕΛΙ ΕΣ

ΤΕΛΟΣ 1ΗΣ ΑΠΟ 4 ΣΕΛΙ ΕΣ ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ ΠΑΝΕΛΛΑ ΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ ΚΑΙ HMEΡΗΣΙΩΝ ΚΑΙ ΕΣΠΕΡΙΝΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑ Α A ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙ ΙΚΟΤΗΤΑΣ ΟΜΑ Α Β ) ΕΥΤΕΡΑ 6

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

και συνδέει τον αριθμό των σπειρών του πρωτεύοντος και του

και συνδέει τον αριθμό των σπειρών του πρωτεύοντος και του Μετασχηματιστής με μεσαία λήψη Ένας μετασχηματιστής αποτελείται από δύο πηνία που έχουν τυλιχτεί επάνω στον ίδιο πυρήνα. Στο ένα πηνίο εφαρμόζεται μία εναλλασσόμενη τάση. Η τάση αυτή, δημιουργεί ένα μεταβαλλόμενο

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

ΑΣΚΗΣΗ 5 η ΑΣΥΓΧΡΟΝΟΣ ΤΡΙΦΑΣΙΚΟΣ ΚΙΝΗΤΗΡΑΣ. 1. Η μελέτη της δομής και της αρχής λειτουργίας ενός ασύγχρονου τριφασικού κινητήρα.

ΑΣΚΗΣΗ 5 η ΑΣΥΓΧΡΟΝΟΣ ΤΡΙΦΑΣΙΚΟΣ ΚΙΝΗΤΗΡΑΣ. 1. Η μελέτη της δομής και της αρχής λειτουργίας ενός ασύγχρονου τριφασικού κινητήρα. Σκοπός της άσκησης: ΑΣΚΗΣΗ 5 η ΑΣΥΓΧΡΟΝΟΣ ΤΡΙΦΑΣΙΚΟΣ ΚΙΝΗΤΗΡΑΣ Σκοπός της εργαστηριακής άσκησης είναι: 1. Η μελέτη της δομής και της αρχής λειτουργίας ενός ασύγχρονου τριφασικού κινητήρα. 1. Γενικά Οι

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

Τμήμα Ηλεκτρολόγων Μηχανικών ΑΥΤΟΝΟΜΗ ΛΕΙΤΟΥΡΓΙΑ ΣΥΓΧΡΟΝΗΣ ΓΕΝΗΤΡΙΑΣ

Τμήμα Ηλεκτρολόγων Μηχανικών ΑΥΤΟΝΟΜΗ ΛΕΙΤΟΥΡΓΙΑ ΣΥΓΧΡΟΝΗΣ ΓΕΝΗΤΡΙΑΣ ΑΥΤΟΝΟΜΗ ΛΕΙΤΟΥΡΓΙΑ ΣΥΓΧΡΟΝΗΣ ΓΕΝΗΤΡΙΑΣ Οι βασικοί παράγοντες που επηρεάζουν τη συμπεριφορά μιας ΣΓ όταν αυτή λειτουργεί με κάποιο φορτίο είναι αφενός ο συντελεστής ισχύος του φορτίου και αφετέρου το αν

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

Ηλεκτροκινητήρας Εναλλασσόμενου Ρεύματος τύπου κλωβού. Άσκηση 9. Ηλεκτροκινητήρας εναλλασσόμενου ρεύματος τύπου κλωβού

Ηλεκτροκινητήρας Εναλλασσόμενου Ρεύματος τύπου κλωβού. Άσκηση 9. Ηλεκτροκινητήρας εναλλασσόμενου ρεύματος τύπου κλωβού ANTIKEIMENO: Άσκηση 9 Ηλεκτροκινητήρας εναλλασσόμενου ρεύματος τύπου κλωβού ΣΤΟΧΟΙ ΑΥΤΟΥ ΤΟΥ ΠΕΙΡΑΜΑΤΟΣ: Κατανόηση της λειτουργίας του ηλεκτροκινητήρα εναλλασσόμενου ρεύματος τύπου κλωβού Υπολογισμός μηχανικών

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

Άσκηση 10 Στοιχεία ηλεκτρονικής τεχνολογίας

Άσκηση 10 Στοιχεία ηλεκτρονικής τεχνολογίας Άσκηση 10 Στοιχεία ηλεκτρονικής τεχνολογίας ΔΙΟΔΟΣ Οι περισσότερες ηλεκτρονικές συσκευές όπως οι τηλεοράσεις, τα στερεοφωνικά συγκροτήματα και οι υπολογιστές χρειάζονται τάση dc για να λειτουργήσουν σωστά.

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

Ηλεκτρονικά Ισχύος II

Ηλεκτρονικά Ισχύος II Ηλεκτρονικά Ισχύος II Ενότητα 2: Μετατροπείς Συνεχούς Τάσης σε Εναλλασσόμενη Τάση (DC-AC Converters ή Inverters) Δρ.-Μηχ. Εμμανουήλ Τατάκης, Καθηγητής Πολυτεχνική Σχολή Τμ. Ηλεκτρολόγων Μηχανικών και Τεχνολογίας

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

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

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

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

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

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

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

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

ΤΡΙΦΑΣΙΚΟΙ ΚΙΝΗΤΗΡΕΣ Ε.Ρ ΣΥΓΧΡΟΝΟΙ ΚΙΝΗΤΗΡΕΣ ΗΛΕΚΤΡΙΚΗ ΠΡΟΩΣΗ 1 ΤΡΙΦΑΣΙΚΟΙ ΚΙΝΗΤΗΡΕΣ Ε.Ρ Έχουμε δύο είδη τριφασικών κινητήρων Ε.Ρ., τους σύγχρονους και τους ασύγχρονους. Ο στάτης των δύο αυτών ειδών είναι όμοιος με αυτόν των σύγχρονων γεννητριών. Έχει τριφασικό τύλιγμα,

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

Τμήμα Ηλεκτρολόγων Μηχανικών ΜΕΤΑΒΑΤΙΚΑ ΦΑΙΝΟΜΕΝΑ ΚΑΤΆ ΤΗ ΛΕΙΤΟΥΡΓΙΑ ΣΓ

Τμήμα Ηλεκτρολόγων Μηχανικών ΜΕΤΑΒΑΤΙΚΑ ΦΑΙΝΟΜΕΝΑ ΚΑΤΆ ΤΗ ΛΕΙΤΟΥΡΓΙΑ ΣΓ Όταν κατά τη λειτουργία μιας ΣΓ η ροπή στον άξονα της ή το φορτίο της μεταβληθούν απότομα, η λειτουργία της παρουσιάζει κάποιο μεταβατικό φαινόμενο για κάποια χρονική διάρκεια μέχρι να επανέλθει στη στάσιμη

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

ΟΝΟΜ/ΝΥΜΟ: ΜΠΑΛΑΜΠΑΝΗ ΓΕΩΡΓΙΑ ΑΜ:6105 ΜΑΘΗΜΑ: ΗΛΕΚΤΡΙΚΕΣ ΜΗΧΑΝΕΣ ΕΡΓΑΣΙΑ ΤΙΤΛΟΣ: ΤΡΟΠΟΣ ΛΕΙΤΟΥΡΓΙΑΣ ΜΙΑΣ ΣΥΓΧΡΟΝΗΣ ΓΕΝΗΤΡΙΑΣ

ΟΝΟΜ/ΝΥΜΟ: ΜΠΑΛΑΜΠΑΝΗ ΓΕΩΡΓΙΑ ΑΜ:6105 ΜΑΘΗΜΑ: ΗΛΕΚΤΡΙΚΕΣ ΜΗΧΑΝΕΣ ΕΡΓΑΣΙΑ ΤΙΤΛΟΣ: ΤΡΟΠΟΣ ΛΕΙΤΟΥΡΓΙΑΣ ΜΙΑΣ ΣΥΓΧΡΟΝΗΣ ΓΕΝΗΤΡΙΑΣ ΟΝΟΜ/ΝΥΜΟ: ΜΠΑΛΑΜΠΑΝΗ ΓΕΩΡΓΙΑ ΑΜ:6105 ΜΑΘΗΜΑ: ΗΛΕΚΤΡΙΚΕΣ ΜΗΧΑΝΕΣ ΕΡΓΑΣΙΑ ΤΙΤΛΟΣ: ΤΡΟΠΟΣ ΛΕΙΤΟΥΡΓΙΑΣ ΜΙΑΣ ΣΥΓΧΡΟΝΗΣ ΓΕΝΗΤΡΙΑΣ 1 Η γεννήτρια ή ηλεκτρογεννήτρια είναι μηχανή που βασίζεται στους νόμους της

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

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

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

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

Ηλεκτρικές Μηχανές Βιομηχανικοί Αυτοματισμοί. Ημιανορθωτής. Πλήρης ανορθωτής

Ηλεκτρικές Μηχανές Βιομηχανικοί Αυτοματισμοί. Ημιανορθωτής. Πλήρης ανορθωτής Ημιανορθωτής 1 Πλήρης ανορθωτής 2 1 Πλήρης τριφασικός ανορθωτής 3 Φίλτρα στη έξοδο του Ανορθωτή Η έξοδος των ανορθωτών μπορεί να εξομαλυνθεί ακόμα περισσότερο με τη χρήση φίλτρων διέλευσης χαμηλών συχνοτήτων

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

ΤΡΙΦΑΣΙΚΑ ΣΥΣΤΗΜΑΤΑ ΤΡΙΦΑΣΙΚΑ ΣΥΣΤΗΜΑΤΑ

ΤΡΙΦΑΣΙΚΑ ΣΥΣΤΗΜΑΤΑ ΤΡΙΦΑΣΙΚΑ ΣΥΣΤΗΜΑΤΑ Φορτίο 3. Σημείο έγχυσης ισχύος Φορτίο 1. 600 kva cosφ=0.8 επαγωγικό 10+j35 Ω/φάση Φορτίο 2. 1100 kva cosφ=0.9 χωρητικό P = 600 kw cosφ=0.85 επαγωγικό Φορτίο 4 P=750 kw Q=150 kvar Μονογραμμικό κύκλωμα

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

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

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

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

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

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

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

Το εξεταστικό δοκίµιο µαζί µε το τυπολόγιο αποτελείται από εννιά (9) σελίδες. Τα µέρη του εξεταστικού δοκιµίου είναι τρία (Α, Β και Γ ).

Το εξεταστικό δοκίµιο µαζί µε το τυπολόγιο αποτελείται από εννιά (9) σελίδες. Τα µέρη του εξεταστικού δοκιµίου είναι τρία (Α, Β και Γ ). ΥΠΟΥΡΓΕΙΟ ΠΑΙ ΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙ ΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2012 ΤΕΧΝΟΛΟΓΙΑ (ΙI) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΠΡΑΚΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ ΜΑΘΗΜΑ : ΕΦΑΡΜΟΣΜΕΝΗ ΗΛΕΚΤΡΟΛΟΓΙΑ

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

Σημειώσεις Ηλεκτρολογείου ΣΤ εξαμήνου

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

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

Οδηγία: Να γράψετε στο τετράδιό σας τον αριθμό καθεμιάς από τις παρακάτω ερωτήσεις Α1-Α4 και δίπλα το γράμμα που αντιστοιχεί στη σωστή απάντηση.

Οδηγία: Να γράψετε στο τετράδιό σας τον αριθμό καθεμιάς από τις παρακάτω ερωτήσεις Α1-Α4 και δίπλα το γράμμα που αντιστοιχεί στη σωστή απάντηση. ΔΙΑΓΩΝΙΣΜΑ ΕΚΠ. ΕΤΟΥΣ 03-04 ΜΑΘΗΜΑ / ΤΑΞΗ : ΦΥΣΙΚΗ ΚΑΤΕΥΘΥΝΣΗΣ Γ ΛΥΚΕΙΟΥ ΣΕΙΡΑ: Α ΗΜΕΡΟΜΗΝΙΑ: 0/0/03 ΘΕΜΑ Α Οδηγία: Να γράψετε στο τετράδιό σας τον αριθμό καθεμιάς από τις παρακάτω ερωτήσεις Α-Α4 και δίπλα

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

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

ΓΚΙΟΚΑΣ ΠΑΝΑΓΙΩΤΗΣ. ΘΕΜΑ: Περιγράψτε τον τρόπο λειτουργίας μιας ηλεκτρικής γεννήτριας Σ.Ρ. με διέγερση σειράς. ΓΚΙΟΚΑΣ ΠΑΝΑΓΙΩΤΗΣ ΑΜ:6749 ΘΕΜΑ: Περιγράψτε τον τρόπο λειτουργίας μιας ηλεκτρικής γεννήτριας Σ.Ρ. με διέγερση σειράς. ΣΚΟΠΟΣ: Για να λειτουργήσει μια γεννήτρια, πρέπει να πληρούνται οι παρακάτω βασικές

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

Στον άπειρο ζυγό και μέσω μιας γραμμής μεταφοράς ισχύος συνδέεται κάποια βιομηχανία

Στον άπειρο ζυγό και μέσω μιας γραμμής μεταφοράς ισχύος συνδέεται κάποια βιομηχανία ΣΥΓΧΡΟΝΟΙ ΚΙΝΗΤΗΡΕΣ Στον άπειρο ζυγό και μέσω μιας γραμμής μεταφοράς ισχύος συνδέεται κάποια βιομηχανία Οι 2 από τους 3 κινητήρες αυτής της βιομηχανίας είναι επαγωγικοί και διαθέτουν επαγωγικούς συντελεστές

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

ΑΣΚΗΣΗ 3 η ΠΑΡΑΛΛΗΛΗ ΛΕΙΤΟΥΡΓΙΑ ΣΥΓΧΡΟΝΗΣ ΤΡΙΦΑΣΙΚΗΣ ΓΕΝΝΗΤΡΙΑΣ ΜΕ ΤΡΙΦΑΣΙΚΟ ΣΥΣΤΗΜΑ ΙΣΧΥΟΣ

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

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

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

ΑΣΚΗΣΗ 6 η ΓΕΝΝΗΤΡΙΑ ΣΥΝΕΧΟΥΣ ΡΕΥΜΑΤΟΣ ΠΑΡΑΛΛΗΛΗΣ ΔΙΕΓΕΡΣΗΣ ΜΕΛΕΤΗ ΧΑΡΑΚΤΗΡΙΣΤΙΚΩΝ ΛΕΙΤΟΥΡΓΙΑΣ ΑΣΚΗΣΗ 6 η ΓΕΝΝΗΤΡΙΑ ΣΥΝΕΧΟΥΣ ΡΕΥΜΑΤΟΣ ΠΑΡΑΛΛΗΛΗΣ ΔΙΕΓΕΡΣΗΣ ΜΕΛΕΤΗ ΧΑΡΑΚΤΗΡΙΣΤΙΚΩΝ ΛΕΙΤΟΥΡΓΙΑΣ Σκοπός της Άσκησης: Σκοπός της εργαστηριακής άσκησης είναι α), η κατανόηση της λειτουργίας της γεννήτριας

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

6 Εισαγωγή στα Συστήματα Ηλεκτρικής Ενέργειας

6 Εισαγωγή στα Συστήματα Ηλεκτρικής Ενέργειας Πρόλογος Σ το βιβλίο αυτό περιλαμβάνεται η ύλη του μαθήματος «Εισαγωγή στα Συστήματα Ηλεκτρικής Ενέργειας» που διδάσκεται στους φοιτητές του Γ έτους σπουδών του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας

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

ΘΕΜΑ: Πρόταση προσωρινού ΑΠΣ στο μάθημα «Εργαστήριο Ηλεκτροτεχνίας και Ηλ. Μηχανών»

ΘΕΜΑ: Πρόταση προσωρινού ΑΠΣ στο μάθημα «Εργαστήριο Ηλεκτροτεχνίας και Ηλ. Μηχανών» ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΕΡΕΥΝΑΣ KAI ΘΡΗΣΚΕΥΜΑΤΩΝ ΠΕΡΙΦΕΡΕΙΑΚΗ ΔΙΕΥΘΥΝΣΗ Α /ΘΜΙΑΣ ΚΑΙ Β /ΘΜΙΑΣ ΕΚΠΑΙΔΕΥΣΗΣ ΑΤΤΙΚΗΣ ΓΡΑΦΕΙΟ ΣΧΟΛΙΚΩΝ ΣΥΜΒΟΥΛΩΝ ΔΕΥΤΕΡΟΒΑΘΜΙΑΣ ΕΚΠΑΙΔΕΥΣΗΣ Γ ΑΘΗΝΑΣ ΧΑΡΙΣ ΟΡΦΑΝΟΣ

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

Ηλεκτρονικά Ισχύος II

Ηλεκτρονικά Ισχύος II Ηλεκτρονικά Ισχύος II Ενότητα 2: Μετατροπείς Συνεχούς Τάσης σε Εναλλασσόμενη Τάση (DC-AC Converers ή Inverers) Δρ.-Μηχ. Εμμανουήλ Τατάκης, Καθηγητής Πολυτεχνική Σχολή Τμ. Ηλεκτρολόγων Μηχανικών και Τεχνολογίας

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

2. Όλες οι απαντήσεις να δοθούν στο εξεταστικό δοκίμιο το οποίο θα επιστραφεί.

2. Όλες οι απαντήσεις να δοθούν στο εξεταστικό δοκίμιο το οποίο θα επιστραφεί. ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015 ΤΕΧΝΟΛΟΓΙΑ (ΙΙ) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΘΕΩΡΗΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ ΜΑΘΗΜΑ : Εφαρμοσμένη Ηλεκτρολογία

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

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

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2009 ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 009 ΤΕΧΝΟΛΟΓΙΑ (ΙΙ) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΠΡΑΚΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ ΜΑΘΗΜΑ : Εφαρμοσμένη Ηλεκτρολογία

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

ΑΣΚΗΣΗ 1 ΛΥΣΗ ΑΣΚΗΣΗ 2. Για το παρακάτω σύστημα πατώντας (κλείνοντας) το διακόπτη SW 1 τι θα προκύψει;

ΑΣΚΗΣΗ 1 ΛΥΣΗ ΑΣΚΗΣΗ 2. Για το παρακάτω σύστημα πατώντας (κλείνοντας) το διακόπτη SW 1 τι θα προκύψει; ΑΣΚΗΣΗ Για το παρακάτω σύστημα πατώντας (κλείνοντας) το διακόπτη SW τι θα προκύψει; Όταν ο διακόπτης SW κλείσει προσωρινά τότε ενεργοποιείται ο ηλεκτρονόμος Μ με αποτέλεσμα να κλείσουν οι ανοιχτές επαφές

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

C (3) (4) R 3 R 4 (2)

C (3) (4) R 3 R 4 (2) Πανεπιστήμιο Θεσσαλίας Βόλος, 29/03/2016 Τμήμα: Μηχανολόγων Μηχανικών Συντελεστής Βαρύτητας: 40%/ Χρόνος Εξέτασης: 3 Ώρες Γραπτή Ενδιάμεση Εξέταση στο Μάθημα: «ΜΜ604, Ηλεκτροτεχνία Ηλεκτρικές Μηχανές»

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

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

ΗΛΕΚΤΡΟΝΙΚΑ ΙΣΧΥΟΣ ΗΜΥ 444 ΗΛΕΚΤΡΟΝΙΚΑ ΙΣΧΥΟΣ ΗΜΥ 444 DC ΔΙΑΚΟΠΤΙΚA ΤΡΟΦΟΔΟΤΙΚΑ, ΜΕΤΑΤΡΟΠΕΙΣ ΜΕ ΗΛΕΚΤΡΙΚΗ ΑΠΟΜΟΝΩΣΗ Δρ Ανδρέας Σταύρου ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ

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

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ: 5 η

ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ: 5 η ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ: 5 η Τίτλος Άσκησης: ΠΑΡΑΛΛΗΛΙΣΜΟΣ ΜΕΤΑΣΧΗΜΑΤΙΣΤΩΝ «Πολικότητα και Παραλληλισμός Μονοφασικών μετασχηματιστών» «Συνδεσμολογίες Τριφασικών μετασχηματιστών και Παραλληλισμός» Σκοπός Η

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

6 ΤΡΙΦΑΣΙΚΑ ΣΥΣΤΗΜΑΤΑ

6 ΤΡΙΦΑΣΙΚΑ ΣΥΣΤΗΜΑΤΑ 6 ΤΡΙΦΑΣΙΚΑ ΣΥΣΤΗΜΑΤΑ Η ηλεκτρική ισχύς παράγεται, µεταφέρεται και διανέµεται σχεδόν αποκλειστικά µε τριφασικά συστήµατα ρευµάτων και τάσεων. Μόνον οικιακοί και άλλοι µικρής ισχύος καταναλωτές είναι µονοφασικοί.

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

Άσκηση 10 ANTIKEIMENO: ΣΤΟΧΟΙ ΑΥΤΟΥ ΤΟΥ ΠΕΙΡΑΜΑΤΟΣ: ΕΞΟΠΛΙΣΜΟΣ ΠΟΥ ΘΑ ΧΡΕΙΑΣΤΟΥΜΕ: Σύγχρονη τριφασική γεννήτρια. Η Σύγχρονη τριφασική γεννήτρια.

Άσκηση 10 ANTIKEIMENO: ΣΤΟΧΟΙ ΑΥΤΟΥ ΤΟΥ ΠΕΙΡΑΜΑΤΟΣ: ΕΞΟΠΛΙΣΜΟΣ ΠΟΥ ΘΑ ΧΡΕΙΑΣΤΟΥΜΕ: Σύγχρονη τριφασική γεννήτρια. Η Σύγχρονη τριφασική γεννήτρια. Άσκηση 10 ANTIKEIMENO: Η Σύγχρονη τριφασική γεννήτρια. ΣΤΟΧΟΙ ΑΥΤΟΥ ΤΟΥ ΠΕΙΡΑΜΑΤΟΣ: Κατανόηση των βασικών αρχών λειτουργίας της σύγχρονης τριφασικής γεννήτριας. ΕΞΟΠΛΙΣΜΟΣ ΠΟΥ ΘΑ ΧΡΕΙΑΣΤΟΥΜΕ: Τροφοδοτικό

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

ΤΕΛΟΣ 1ΗΣ ΑΠΟ 4 ΣΕΛΙ ΕΣ

ΤΕΛΟΣ 1ΗΣ ΑΠΟ 4 ΣΕΛΙ ΕΣ ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΠΑΝΕΛΛΑ ΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ ΚΑΙ HMEΡΗΣΙΩΝ ΚΑΙ ΕΣΠΕΡΙΝΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑ Α A ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙ ΙΚΟΤΗΤΑΣ ΟΜΑ Α

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

Οι μηχανές ΕΡ είναι γεννήτριες που μετατρέπουν τη μηχανική ισχύ σε ηλεκτρική και κινητήρες που μετατρέπουν την ηλεκτρική σε μηχανική

Οι μηχανές ΕΡ είναι γεννήτριες που μετατρέπουν τη μηχανική ισχύ σε ηλεκτρική και κινητήρες που μετατρέπουν την ηλεκτρική σε μηχανική Οι μηχανές ΕΡ είναι γεννήτριες που μετατρέπουν τη μηχανική ισχύ σε ηλεκτρική και κινητήρες που μετατρέπουν την ηλεκτρική σε μηχανική Υπάρχουν 2 βασικές κατηγορίες μηχανών ΕΡ: οι σύγχρονες και οι επαγωγικές

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

Διαστασιολόγηση ουδετέρου αγωγού σε εγκαταστάσεις με αρμονικές

Διαστασιολόγηση ουδετέρου αγωγού σε εγκαταστάσεις με αρμονικές Διαστασιολόγηση ουδετέρου αγωγού σε εγκαταστάσεις με αρμονικές Όπως είναι γνωστό, η παρουσία μη γραμμικών φορτίων σε ένα ηλεκτρικό κύκλωμα δημιουργεί αρμονικές συνιστώσες ρεύματος στα καλώδια τροφοδοσίας.

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

N 1 :N 2. i i 1 v 1 L 1 - L 2 -

N 1 :N 2. i i 1 v 1 L 1 - L 2 - ΕΝΟΤΗΤΑ V ΙΣΧΥΣ - ΤΡΙΦΑΣΙΚΑ ΣΥΣΤΗΜΑΤΑ 34 Μετασχηµατιστής Ο µετασχηµατιστής είναι µια διάταξη που αποτελείται από δύο πηνία τυλιγµένα σε έναν κοινό πυρήνα από σιδηροµαγνητικό υλικό. Το πηνίο εισόδου λέγεται

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

ΚΕΦΑΛΑΙΟ 3 Ο : ΙΣΧΥΣ ΚΥΚΛΩΜΑΤΩΝ ΣΤΟ ΕΝΑΛΛΑΣΣΟΜΕΝΟ ΡΕΥΜΑ

ΚΕΦΑΛΑΙΟ 3 Ο : ΙΣΧΥΣ ΚΥΚΛΩΜΑΤΩΝ ΣΤΟ ΕΝΑΛΛΑΣΣΟΜΕΝΟ ΡΕΥΜΑ ΚΕΦΑΛΑΙΟ 3 Ο : ΙΣΧΥΣ ΚΥΚΛΩΜΑΤΩΝ ΣΤΟ ΕΝΑΛΛΑΣΣΟΜΕΝΟ ΡΕΥΜΑ 1 Ως ισχύς ορίζεται ο ρυθμός παροχής ή κατανάλωσης ενέργειας. Η ηλεκτρική ισχύς ορίζεται ως το γινόμενο της τάσης επί το ρεύμα: p u i Ιδανικό πηνίο

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

Δοκιμαστικό μοτίβο ευρείας οθόνης (16:9)

Δοκιμαστικό μοτίβο ευρείας οθόνης (16:9) Δοκιμαστικό μοτίβο ευρείας οθόνης (16:9) Δοκιμή αναλογιών εικόνας (Πρέπει να εμφανίζεται κυκλικό) 4x3 16x9 Α.Τ.Ε.Ι. ΠΕΙΡΑΙΑ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ Τ.Ε. Πτυχιακή εργασία

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

2. Όλες οι απαντήσεις να δοθούν στο εξεταστικό δοκίμιο το οποίο θα επιστραφεί.

2. Όλες οι απαντήσεις να δοθούν στο εξεταστικό δοκίμιο το οποίο θα επιστραφεί. ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015 ΤΕΧΝΟΛΟΓΙΑ (ΙΙ) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΠΡΑΚΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ ΜΑΘΗΜΑ : Εφαρμοσμένη Ηλεκτρολογία

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

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

ΕΧΕΙ ΤΑΞΙΝΟΜΗΘΕΙ ΑΝΑ ΕΝΟΤΗΤΑ ΚΑΙ ΑΝΑ ΤΥΠΟ ΓΙΑ ΔΙΕΥΚΟΛΥΝΣΗ ΤΗΣ ΜΕΛΕΤΗΣ ΣΑΣ ΚΑΛΗ ΕΠΙΤΥΧΙΑ ΣΤΗ ΠΡΟΣΠΑΘΕΙΑ ΣΑΣ ΚΙ 2014 ΤΟ ΥΛΙΚΟ ΕΧΕΙ ΑΝΤΛΗΘΕΙ ΑΠΟ ΤΑ ΨΗΦΙΑΚΑ ΕΚΠΑΙΔΕΥΤΙΚΑ ΒΟΗΘΗΜΑΤΑ ΤΟΥ ΥΠΟΥΡΓΕΙΟΥ ΠΑΙΔΕΙΑΣ http://wwwstudy4examsgr/ ΕΧΕΙ ΤΑΞΙΝΟΜΗΘΕΙ ΑΝΑ ΕΝΟΤΗΤΑ ΚΑΙ ΑΝΑ ΤΥΠΟ ΓΙΑ ΔΙΕΥΚΟΛΥΝΣΗ ΤΗΣ ΜΕΛΕΤΗΣ ΣΑΣ ΚΑΛΗ ΕΠΙΤΥΧΙΑ ΣΤΗ

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

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΚΥΚΛΩΜΑΤΩΝ

ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΚΥΚΛΩΜΑΤΩΝ ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΚΥΚΛΩΜΑΤΩΝ Ηλεκτρικό κύκλωμα ονομάζεται μια διάταξη που αποτελείται από ένα σύνολο ηλεκτρικών στοιχείων στα οποία κυκλοφορεί ηλεκτρικό ρεύμα. Τα βασικά ηλεκτρικά στοιχεία είναι οι γεννήτριες,

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

ΑΠΟΛΥΤΗΡΙΕΣ ΕΞΕΤΑΣΕΙΣ Γ ΤΑΞΗΣ ΕΝΙΑΙΟΥ ΛΥΚΕΙΟΥ ΣΑΒΒΑΤΟ 24 ΙΟΥΝΙΟΥ 2000

ΑΠΟΛΥΤΗΡΙΕΣ ΕΞΕΤΑΣΕΙΣ Γ ΤΑΞΗΣ ΕΝΙΑΙΟΥ ΛΥΚΕΙΟΥ ΣΑΒΒΑΤΟ 24 ΙΟΥΝΙΟΥ 2000 ΑΡΧΗ 1 ΗΣ ΣΕΛΙΔΑΣ ΑΠΟΛΥΤΗΡΙΕΣ ΕΞΕΤΑΣΕΙΣ Γ ΤΑΞΗΣ ΕΝΙΑΙΟΥ ΛΥΚΕΙΟΥ ΣΑΒΒΑΤΟ 24 ΙΟΥΝΙΟΥ 2000 ΕΞΕΤΑΖΟΜΕΝΟ ΜΑΘΗΜΑ ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ (ΚΥΚΛΟΥ ΤΕΧΝΟΛΟΓΙΑΣ ΚΑΙ ΠΑΡΑΓΩΓΗΣ): ΗΛΕΚΤΡΟΛΟΓΙΑ ΣΥΝΟΛΟ ΣΕΛΙΔΩΝ : ΕΞΙ

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

ΕΠΑΓΩΓΙΚΗ ΤΡΙΦΑΣΙΚΗ ΓΕΝΝΗΤΡΙΑ

ΕΠΑΓΩΓΙΚΗ ΤΡΙΦΑΣΙΚΗ ΓΕΝΝΗΤΡΙΑ ΕΠΑΓΩΓΙΚΗ ΤΡΙΦΑΣΙΚΗ ΓΕΝΝΗΤΡΙΑ ΘΕΜΑ ΕΡΓΑΣΙΑΣ: Περιγράψτε τον τρόπο λειτουργίας μιας επαγωγικής γεννήτριας. ΟΝΟΜΑ : Μιμίκος Ευστράτιος. Α.Ε.Μ. : 6798 ΣΚΟΠΟΣ : O σκοπός της εργασίας είναι η περιγραφή του

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

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

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

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

5. Τροφοδοτικά - Ι.Σ. ΧΑΛΚΙΑ ΗΣ διαφάνεια 1. Ανορθωµένη τάση Εξοµαλυµένη τάση Σταθεροποιηµένη τάση. Σχηµατικό διάγραµµα τροφοδοτικού

5. Τροφοδοτικά - Ι.Σ. ΧΑΛΚΙΑ ΗΣ διαφάνεια 1. Ανορθωµένη τάση Εξοµαλυµένη τάση Σταθεροποιηµένη τάση. Σχηµατικό διάγραµµα τροφοδοτικού 5. Τροφοδοτικά - Ι.Σ. ΧΑΛΚΙΑ ΗΣ διαφάνεια 1 5. ΤΡΟΦΟ ΟΤΙΚΑ 220 V, 50 Hz. 0 V Μετασχηµατιστής Ανορθωµένη τάση Εξοµαλυµένη τάση Σταθεροποιηµένη τάση 0 V 0 V Ανορθωτής Σχηµατικό διάγραµµα τροφοδοτικού Φίλτρο

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

2. Όλες οι απαντήσεις να δοθούν στο εξεταστικό δοκίμιο το οποίο θα επιστραφεί.

2. Όλες οι απαντήσεις να δοθούν στο εξεταστικό δοκίμιο το οποίο θα επιστραφεί. ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2014 ΤΕΧΝΟΛΟΓΙΑ (ΙΙ) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΠΡΑΚΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ ΜΑΘΗΜΑ : Εφαρμοσμένη Ηλεκτρολογία

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

2012 : (307) : , 29 2012 : 11.00 13.30

2012  : (307) : , 29 2012 : 11.00 13.30 ΥΠΟΥΡΓΕΙΟ ΠΑΙ ΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙ ΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2012 ΤΕΧΝΟΛΟΓΙΑ (ΙΙ) ΤΕΧΝΙΚΩΝ ΣΧΟΛΩΝ ΠΡΑΚΤΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ ΜΑΘΗΜΑ : Εφαρµοσµένη Ηλεκτρολογία

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

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

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

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

Γεννήτρια συνεχούς ρεύματος παράλληλης. διέγερσης

Γεννήτρια συνεχούς ρεύματος παράλληλης. διέγερσης ΑΣΚΗΣΗ 6 Γεννήτρια συνεχούς ρεύματος παράλληλης διέγερσης 1 Α. Θεωρητικές επεξηγήσεις: Στις γεννήτριες παράλληλης διέγερσης το τύλιγμα διέγερσης συνδέεται παράλληλα με το κύκλωμα του δρομέα, όπως φαίνεται

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

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

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

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

Τμήμα Μηχανικών Ενεργειακής Τεχνολογίας ΤΕ

Τμήμα Μηχανικών Ενεργειακής Τεχνολογίας ΤΕ 6.6.5. Γενική Επίλυση Αλληλένδετου Τριφασικού Συστήματος Συνδεσμολογίας Αστέρα - Τριγώνου Η γενική επίλυση του τριφασικού συστήματος θα βασιστεί στο κύκλωμα του τριφασικού κυκλώματος του σχήματος 6.7,

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

Τριφασικός μετασχηματιστής ισχύος σε λειτουργία. χωρίς φορτίο

Τριφασικός μετασχηματιστής ισχύος σε λειτουργία. χωρίς φορτίο ΑΣΚΗΣΗ 3 Τριφασικός μετασχηματιστής ισχύος σε λειτουργία χωρίς φορτίο 1 Α. Θεωρητικές επεξηγήσεις: Υπάρχει η δυνατότητα να χρησιμοποιήσουμε τρεις μονοφασικούς Μ/Σ για να κάνουμε ένα τριφασικό αν τοποθετήσουμε

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

Ηλεκτρονικά Ισχύος II

Ηλεκτρονικά Ισχύος II Ηλεκτρονικά Ισχύος II Ενότητα 1: (DCDC Converters) Δρ.Μηχ. Εμμανουήλ Τατάκης, Καθηγητής Πολυτεχνική Σχολή Τμ. Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών Σκοποί ενότητας Παρουσίαση και επεξήγηση

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

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ Ι ΡΥΜΑ ΠΑΤΡΑΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ 24/01/2012 ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΙΑΣ

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΑΙ ΕΥΤΙΚΟ Ι ΡΥΜΑ ΠΑΤΡΑΣ ΣΧΟΛΗ ΤΕΧΝΟΛΟΓΙΚΩΝ ΕΦΑΡΜΟΓΩΝ 24/01/2012 ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΙΑΣ ΘΕΜΑ 1 ο (1.5 μονάδες) (α) Να προσδιορίσετε την διακριτική ικανότητα (resolution) ενός ψηφιακού βτομέτρου με ενδείκτη (display) τριών ψηφίων και μέγιστη ένδειξη 99.9 olts. (0.5 μ.) (β) Στα ακόλουθα σχήματα

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

Απαντήσεις των Θεμάτων Ενδιάμεσης Αξιολόγησης στο Μάθημα «Ηλεκτροτεχνία Ηλεκτρικές Μηχανές» Ημερομηνία: 29/04/2014. i S (ωt)

Απαντήσεις των Θεμάτων Ενδιάμεσης Αξιολόγησης στο Μάθημα «Ηλεκτροτεχνία Ηλεκτρικές Μηχανές» Ημερομηνία: 29/04/2014. i S (ωt) Θέμα 1 ο Απαντήσεις των Θεμάτων Ενδιάμεσης Αξιολόγησης στο Μάθημα «Ηλεκτροτεχνία Ηλεκτρικές Μηχανές» Ημερομηνία: 29/04/2014 Για το κύκλωμα ΕΡ του διπλανού σχήματος δίνονται τα εξής: v ( ωt 2 230 sin (

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

ΤΕΧΝΟΛΟΓΙΑ ΜΕΤΡΗΣΕΩΝ. 3 η ενότητα ΡΥΘΜΙΣΗ ΣΗΜΑΤΩΝ ΚΑΙ ΠΡΟΣΑΡΜΟΓΗ ΜΕ ΤΕΧΝΙΚΕΣ ΠΑΘΗΤΙΚΩΝ ΚΥΚΛΩΜΑΤΩΝ. ρ. Λάμπρος Μπισδούνης.

ΤΕΧΝΟΛΟΓΙΑ ΜΕΤΡΗΣΕΩΝ. 3 η ενότητα ΡΥΘΜΙΣΗ ΣΗΜΑΤΩΝ ΚΑΙ ΠΡΟΣΑΡΜΟΓΗ ΜΕ ΤΕΧΝΙΚΕΣ ΠΑΘΗΤΙΚΩΝ ΚΥΚΛΩΜΑΤΩΝ. ρ. Λάμπρος Μπισδούνης. ΤΕΧΝΟΛΟΓΙΑ ΜΕΤΡΗΣΕΩΝ ρ. Λάμπρος Μπισδούνης Καθηγητής η ενότητα ΡΥΘΜΙΣΗ ΣΗΜΑΤΩΝ ΚΑΙ ΠΡΟΣΑΡΜΟΓΗ ΜΕ ΤΕΧΝΙΚΕΣ ΠΑΘΗΤΙΚΩΝ ΚΥΚΛΩΜΑΤΩΝ T... ΥΤΙΚΗΣ ΕΛΛΑ ΑΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ Τ.Ε. Περιεχόμενα ης ενότητας

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

Ποιότητα Ηλεκτρικής Ενέργειας. Φίλτρα Αρµονικών Ρεύµατος

Ποιότητα Ηλεκτρικής Ενέργειας. Φίλτρα Αρµονικών Ρεύµατος Ποιότητα Ηλεκτρικής Ενέργειας Φίλτρα Αρµονικών Ρεύµατος Γενικά Προβλήµατα που δηµιουργούν οι αρµονικές Μείωση του cosφ Αυξηµένες απώλειες στα καλώδια Συντονισµός-Καταστροφή πυκνωτών και µετασχηµατιστών

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

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

ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ ΑΡΧΗ 1ΗΣ ΣΕΛΙ ΑΣ ΝΕΟ ΚΑΙ ΠΑΛΑΙΟ ΣΥΣΤΗΜΑ ΕΠΑΝΑΛΗΠΤΙΚΕΣ ΠΑΝΕΛΛΑ ΙΚΕΣ ΕΞΕΤΑΣΕΙΣ ΗΜΕΡΗΣΙΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ ΚΑΙ HMEΡΗΣΙΩΝ ΚΑΙ ΕΣΠΕΡΙΝΩΝ ΕΠΑΓΓΕΛΜΑΤΙΚΩΝ ΛΥΚΕΙΩΝ (ΟΜΑ Α A ΚΑΙ ΜΑΘΗΜΑΤΩΝ ΕΙ ΙΚΟΤΗΤΑΣ ΟΜΑ Α

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

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

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

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

ΤΕΧΝΟΛΟΓΙΑ ΜΕΤΡΗΣΕΩΝ. 3 η ενότητα ΡΥΘΜΙΣΗ ΣΗΜΑΤΩΝ ΚΑΙ ΠΡΟΣΑΡΜΟΓΗ ΜΕ ΤΕΧΝΙΚΕΣ ΠΑΘΗΤΙΚΩΝ ΚΥΚΛΩΜΑΤΩΝ. ρ. Λάμπρος Μπισδούνης.

ΤΕΧΝΟΛΟΓΙΑ ΜΕΤΡΗΣΕΩΝ. 3 η ενότητα ΡΥΘΜΙΣΗ ΣΗΜΑΤΩΝ ΚΑΙ ΠΡΟΣΑΡΜΟΓΗ ΜΕ ΤΕΧΝΙΚΕΣ ΠΑΘΗΤΙΚΩΝ ΚΥΚΛΩΜΑΤΩΝ. ρ. Λάμπρος Μπισδούνης. ΤΕΧΝΟΛΟΓΙΑ ΜΕΤΡΗΣΕΩΝ ρ. Λάμπρος Μπισδούνης Καθηγητής 3 η ενότητα ΡΥΘΜΙΣΗ ΣΗΜΑΤΩΝ ΚΑΙ ΠΡΟΣΑΡΜΟΓΗ ΜΕ ΤΕΧΝΙΚΕΣ ΠΑΘΗΤΙΚΩΝ ΚΥΚΛΩΜΑΤΩΝ T.E.I. ΥΤΙΚΗΣ ΕΛΛΑ ΑΣ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ Τ.Ε. Περιεχόμενα 3 ης

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

ΕΡΓΑΣΤΗΡΙΟ ΗΛΕΚΤΡΟΝΙΚΗΣ

ΕΡΓΑΣΤΗΡΙΟ ΗΛΕΚΤΡΟΝΙΚΗΣ ΕΡΓΑΣΤΗΡΙΟ ΗΛΕΚΤΡΟΝΙΚΗΣ ΔΙΟΔΟΣ (Μάθημα 4 ο 5 ο 6 ο 7 ο ) 1/12 4 o εργαστήριο Ιδανική δίοδος n Συμβολισμός της διόδου n 2/12 4 o εργαστήριο Στατική χαρακτηριστική διόδου Άνοδος (+) Κάθοδος () Αν στην ιδανική

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

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

ΗΛΕΚΤΡΟΝΙΚΑ ΙΣΧΥΟΣ ΗΜΥ 444 ΗΛΕΚΤΡΟΝΙΚΑ ΙΣΧΥΟΣ ΗΜΥ 444 ΑΝΟΡΘΩΤΕΣ ΤΑΣΗΣ ΑΡΜΟΝΙΚΕΣ ΗΛΕΚΤΡΙΚΗΣ ΙΣΧΥΟΣ Δρ Ανδρέας Σταύρου ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τα Θέματα Μονοφασική

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

Γεννήτρια συνεχούς ρεύματος ξένης διέγερσης

Γεννήτρια συνεχούς ρεύματος ξένης διέγερσης ΑΣΚΗΣΗ 5 Γεννήτρια συνεχούς ρεύματος ξένης διέγερσης 1 Α. Θεωρητικές επεξηγήσεις: Μια ηλεκτρική μηχανή συνεχούς ρεύματος παράγει τάση συνεχούς μορφής όταν χρησιμοποιείται ως γεννήτρια, ενώ ένας κινητήρας

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

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

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

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

ΤΡΙΦΑΣΙΚΑ ΚΥΚΛΩΜΑΤΑ ΕΝΑΛΛΑΣΣΟΜΕΝΟΥ ΡΕΥΜΑΤΟΣ

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

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

ΑΣΚΗΣΗ 1 η ΜΕΤΑΣΧΗΜΑΤΙΣΤΕΣ ΙΣΧΥΟΣ ΕΙΣΑΓΩΓΗ. Στόχοι της εργαστηριακής άσκησης είναι η εξοικείωση των σπουδαστών με την:

ΑΣΚΗΣΗ 1 η ΜΕΤΑΣΧΗΜΑΤΙΣΤΕΣ ΙΣΧΥΟΣ ΕΙΣΑΓΩΓΗ. Στόχοι της εργαστηριακής άσκησης είναι η εξοικείωση των σπουδαστών με την: Σκοπός της Άσκησης: ΑΣΚΗΣΗ η ΜΕΤΑΣΧΗΜΑΤΙΣΤΕΣ ΙΣΧΥΟΣ ΕΙΣΑΓΩΓΗ Στόχοι της εργαστηριακής άσκησης είναι η εξοικείωση των σπουδαστών με την: α. Κατασκευή μετασχηματιστών. β. Αρχή λειτουργίας μετασχηματιστών.

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

ΠΕΡΙΕΧΟΜΕΝΑ. Δομή-Απαιτήσεις Πτυχιακής 1.1 Απαιτήσεις Πτυχιακής Δομή Πτυχιακής. 8

ΠΕΡΙΕΧΟΜΕΝΑ. Δομή-Απαιτήσεις Πτυχιακής 1.1 Απαιτήσεις Πτυχιακής Δομή Πτυχιακής. 8 ΚΕΦΑΛΑΙΟ 1 ο ΠΕΡΙΕΧΟΜΕΝΑ Δομή-Απαιτήσεις Πτυχιακής 1.1 Απαιτήσεις Πτυχιακής.. 8 1.2 Δομή Πτυχιακής. 8 ΚΕΦΑΛΑΙΟ 2 ο Τριφασικοί Ασύγχρονοι-Επαγωγικοί Κινητήρες 2.1 Εισαγωγή. 10 2.2 Αρχή Λειτουργίας. 10 2.3

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