• Nenhum resultado encontrado

YAxisL% = 170 * VdAdaptor!: AxesNum% = 1 NumSegsY% = 8: SubTicksY% = 4 StepX% = NumSegsX%

StepY% = NumSegsY%

YOrigin% = 220 * VdAdaptor!

END SELECT

' ---σχεδίασε τον 1o άξονα DontCalc% = 0

CheckAxis% = 1 IF Axis1% > 1 THEN

CALL PlotAxisProccesing(CheckAxis%, AxisNumList%(), VarNumList%0)

DontCalc% = 1 ELSE CountSelVar = DoFirst1%

CALL ProccessVarValues END IF

AxesNum% = 1 YYOrigin% = YOrigin% * 1 StepYl = INT(YlntervalTime / StepY%) StepXI = INT(XlntervalTime% / StepX%) CALL DrawAxis

CALL ColorAdaptor(9, 0) FOR Done% = 1 T O Axis1%

IF Done% = 1 THEN CountSelVar = DoFirst1%

ELSEIF Done% = 2 THEN CountSelVar = DoSecond1%

ELSE CountSelVar = DoThird1%

END IF

CALL ProccessVarValues CALL PlotTimeValues AxesNum% = 1 + Done%

N EXT Done%

■ ____av είναι ένας άξονας πήγαινε στο τέλος IF AxisToPlot% = 1 THEN

G O TO moveon END IF

• ---σχεδίασε τον 2o άξονα

DontCalc% = Ο CheckAxis% = 2 IF Axis2% > 1 THEN

CALL PlotAxisProccesing(CheckAxis%, AxisNumList%(), VarNumList%0)

DontCalc% = 1 ELSE CountSelVar = DoFirst2%

CALL ProccessVarValues END IF

AxesNum% = 2 YYOrigin% = YOrigin% * 2 StepYl = INT(YlntervalTime / StepY%) StepXI = INT(XlntervalTime% / StepX%) CALL DrawAxis

CALL ColorAdaptor(9, 0) FOR Done% = 1 T O Axis2%

IF Done% = 1 THEN CountSelVar = DoFirst2%

ELSEIF Done% = 2 THEN CountSelVar = DoSecond2%

ELSE CountSelVar = DoThird2%

END IF

CALL ProccessVarValues CALL PlotTimeValues AxesNum% = 2 + Done%

N EXT Done%

' ---av είναι δύο άξονες πήγαινε στο τέλος IF AxisToPlot% = 2 THEN

G O TO moveon END IF

' ---σχεδίασε τον 3o άξονα DontCalc% = 0

CheckAxis% = 3 IF Axis3% > 1 THEN

CALL PlotAxisProccesing(CheckAxis%, AxisNumList%().

VarNumList%0) DontCalc% = 1

ELSE CountSelVar = DoFirst3%

CALL ProccessVarValues END IF

AxesNum% = 3 YYOrigin% = YOrigin% * 3 StepYl = INT(YlntervalTime / StepY%) StepXI = INT(XlntervalTime% / StepX%) CALL DrawAxis

CALL ColorAdaptor(9, 0) FOR Done% = 1 T O Axis3%

IF Done% = 1 THEN

Κ ΕΦ Α Λ Α ΙΟ 4

CountSelVar = DoFirst3%

ELSEIF Done% = 2 THEN CkJuntSelVar = DoSecond3%

ELSE CountSelVar = DoThird3%

END IF

CALL ProccessVarValues CALL PlotTimeValues AxesNum% = 3 + Done%

N EXT Done%

' ---av είναι τρεις άξονες πήγαινε στο τέλος IF AxisToPlot% = 3 THEN

G O TO moveon END IF

■ ---σχεδίασε τον 4o άξονα DontCalc% = 0

CheckAxis% = 4 IF Axis4% > 1 THEN

CALL PlotAxisProccesing(CheckAxis%, AxisNumList%(), VarNumList%0)

DontCalc% = 1 ELSE CountSelVar = DoFirst4%

CALL ProccessVarValues END IF

AxesNum% = 4 YYOrigin% = YOrigin% * 4 StepYl = INT(YlntervalTime / StepY%) StepXI = INT(XlntervalTime% / StepX%) CALL DrawAxis

CALL ColorAdaptor(9, 0) FOR Done% = 1 T O Axis4%

IF Done% = 1 THEN CountSelVar = DoFirst4%

ELSEIF Done% = 2 THEN CountSelVar = DoSecond4%

ELSE CountSelVar = DoThird4%

END IF

CALL ProccessVarValues CALL PlotTimeValues AxesNum% = 4 - Done%

NEXT Done%

moveon:

' ---επιλογή εκτύπωσης της οθόνης στον εκτυπωτή LO CATE NLines% -1, 1: PRINT TeiKavMesS;

CALL LinePrint(RepText$(8) + "(y/n)?") IF RNai THEN

CALL PrintScreen ELSE

Κ Ε Φ Α Λ Α ΙΟ 4

CALL LinePrint(ContMes$) END IF

SLEEP

---ξεκίνησε καινούργια διαδικασία επιλογής CALL ColorAdaptor(15, 0)

G O TO start

’ ---παγίδευση λάθους TVPrLocErrHd:

SCREEN ScrType%, 0, VisPage%, VisPage%

CALL LinePrint(ErrText$(10))

ErrorConst% = ERR: WhereS = "TimeValProcessing"

CALL ErrorMessage(ErrorConst%): PRINT WhereS; : STOP

4.2.2 ΡΟΥΤΙΝΑ VariablePlotCQntfQl

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

Η μεταβλητή που μετράει τα όμοια μεγέθη σε ένα άξονα (CountSam e%), οι μεταβλητές οι οποίες μετράνε τα μεγέθη που θα ανασχεδιαστούν σε κάθε άξονα (Axls1%, Axis2%, Axis3%, A xis 4 % ), η μεταβλητή στην οποία αποθηκεύεται ο αριθμός του ελεύθερου άξονα (F re e% ) και ο δείκτης BackorPlot%.

Αυξάνονται κατά μία μονάδα οι μεταβλητές NurnSelVar% και SelCol και ελέγχω αν έγινε επιλογή του ίδιου μεγέθους για δεύτερη φορά.

Δηλαδή αν κάποια τιμή του πίνακα VarNum Llst%0 είναι ίδια με την τιμή της μεταβλητής VarldentNurn%.

Αν έχει γίνει επιλογή ίδιου μεγέθους, τότε εμφανίζεται μήνυμα ακύρωστις της επιλογής (RepText$(18)) και στη συνέχεια μειώνονται κατά μία μονάδα οι μεταβλητές NurnSelVar% και SelCol.

Ακόμη ο δείκτης BackorPlot% γίνεται ίσος με τη μονάδα (επανάληψη διαδικασίας επιλογής μεγεθών), ενώ προηγουμένως όμως γίνεται μια μικρή καθυστέρηση.

Τέλος βγαίνουμε από την ρουτίνα. Στη μεταβλητή Delay αποθηκεύεται ο χρόνος της καθυστέρηστις που θα γίνει στην ρουτίνα TimeValProccesing.

Ελέγχω αν έγινε επιλογή εξόδου, από την διαδικασία επιλογής μεγεθών. Συγκρίνω τις μεταβλητές VarldentNurn% και VarNum. Αν είναι

Κ Ε Φ Α Λ Α ΙΟ 4

ίσες τότε, μειώνεται κατά μία μονάδα η μεταβλητή N um SelVar% (η επιλογή εξόδου δεν αποθηκεύεται), ο δείκτης BackorPlot% παίρνει την τιμή μηδέν ( έξοδος από την διαδικασία επιλογής μεγεθών) και βγαίνουμε απ' τη ρουτίνα.

Αν οι επιλογές είναι τώρα 13 (χωρίς την επιλογή εξόδου), τότε εμφανίζετε μήνυμα ακύρωσης της επιλογής. Γίνετε μία μικρή καθυστέρηση και βγαίνουμε από την ρουτίνα αλλά και από την διαδικασία επιλογής μεγεθών (BackorPlot% =1).

Προηγουμένως μειώνεται κατά μία μονάδα η μεταβλητή Num SelVar%, ενώ αποθηκεύεται στη μεταβλητή Delay ο χρόνος καθυστέρησης που γίνεται στην ρουτίνα TimeValProccesing.

Εφόσον τελειώσουν όλοι οι παραπάνω έλεγχοι, τότε αποθηκεύονται, το μεν επιλεγμένο μέγεθος στο πίνακα SelVarList$0, στη θέση με αριθμό τη τιμή της μεταβλητής NumSelVar%, ο δε κωδικός αριθμός του, στον πίνακα VarNumList%0. στην ίδια θέση.

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

Αποθηκεύω στη μεταβλητή VarLabel$ το μέγεθος (από τον πίνακα SelVarList$0). καθώς και το αριθμό των χαρακτήρων του, στη μεταβλητή LabelLength%. Επειτα βρίσκω τη πρώτη λέξη του μεγέθους με την εξής διαδικασία.

Παίρνω τη μεταβλητή Label1$ (μηδενισμένη) και την συγκρίνω με το πρώτο χαρακτήρα του μεγέθους. Αν δεν είναι ίδια, αποθηκεύω τον χαρακτήρα στη παραπάνω μεταβλητή.

Στη συνέχεια παίρνω τους δύο πρώτους χαρακτήρες και τους συγκρίνω πάλι με την LabellS. Αν δεν είναι πάλι ίδια, τότε αποθηκεύω τους χαρακτήρες πάλι σ’ αυτή. Παίρνω τους τρείς πρώτους χαρακτήρες κτλ..

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

Ετσι απομονώνω την πρώτη λέξη, η οποία αποθηκεύεται στην μεταβλητή Label1$.

Ελέγχω, στη συνέχεια, τι μέγεθος είναι (ρεύμα, τάση κτλ.). Συγκρίνω τη μεταβλητή LabellS με την μεταβλητή DataVarsS. Στην μεταβλητή αυτή αποθηκεύονται τιμές, με την χρήση της εντολής READ, η οποία τις διαβάζει από γραμμές DATA (στο κυρίως πρόγραμμα).

Η εντολή UCASES μετατρέπει τους χαρακτήρες των μεταβλητών LabellS και DataVarsS. σε κεφαλαίους (δεν ισχύει για ελληνικούς χαρακτήρες).

Κ ΕΦ Α Λ Α ΙΟ 4

Αν δεν βρεθεί το μέγεθος, τότε αποθηκεύουμε την δεύτερη λέξη (με τον ίδιο τρόπο) στην μεταβλητή Label1$ και την συγκρίνουμε κι αυτή.

Αν δεν βρεθεί το μέγεθος, τότε αποθηκεύουμε στην LabeHS το επιλεγμένο μέγεθος (VarLabelS) ( οθόνη 4.4).

Ιετατροπέα Σ«χυότητας-ήαύ){χρο«οο Κιυ ήΜΑΣΧΕΟΙήΣΗ ΚΑΜΠΥήΒΝ ΕΞΟΜΟΙϋΣΗΣ - ΜεταΡΛητές >jio

ΙΤάαη ειο AuopS]

Ιάο*ι εζοδ Αυορ9 Τάση εζοδ

ftuTiOT

Τάοη Ελεχχ ήντιοτ i

Tpmxx τάοη ftuTtOT | Ρεύμα ειο Αυορθ Ρεύμα εζοδ ήαορ3 Ρεύμα εζοδ ήντιοτ Γυνια Euauo Auop9 Τάοη ειο Κιυητήρα

- Επιλε)$μέυες (ΙεταβΛητ-ές - Ρεύμα αχάτη Kiu

ΤΕΙ ΚαβάΛας, Τμήμα Ηλεχτ

Label1$ RTR]MS(MID$(VarLabei$))

= I! LabdlS RTRIM$(MID$(VaK.abelJ))

Τριγ Tpi'fO) Τριγω Τρί\ων

Tpivcov Τρ,,ο,ν « DataVarai ταοη = DataVa/ai ΕΓΕμένως το μέτεβος cwQi ΤΑΣΗ ->· nivaxoc AxisVafUstJC)

Οθόνη 4.4 Δίνεται παράδειγμα για τον τρόπο με τον οποίο βρίσκω το είδος του μεγέθους που επιλέχθηκε να σχεδιαστεί.

Η εντολή RESTORE επιτρέπει να ξαναδιαβαστούν τα δεδομένα των γραμμών DATA, από την αρχή. Στην συνέχεια, αποθηκεύονται οι αριθμοί των μεγεθών που θα σχεδιασθούν σε κάθε άξονα στις αντίστοιχες μεταβλητές, Axis1% για τον 1ο άξονα, Axis2% για τον 2ο, A xis3% για τον 3ο και Axis4% για τον 4ο.

Ο ελεύθερος άξονας (Free% ) αποθηκεύεται στην μεταβλητή FreeAxis%. Ελέγχεται αν επιλέγχηκε άλλο όμοιο μέγεθος προηγουμένως. Ο έλεγχος γίνεται στις τιμές του πίνακα AxisVarList$(), τις οποίες συγκρίνουμε με την μεταβλητή LabellS.

Αν βρεθεί όμοιο μέγεθος τότε ανιχνεύεται σε ποιό άξονα θα σχεδιαστεί (FreeAxis%) και πόσα άλλα μεγέθη σχεδιάζονται επίσης σ' αυτόν (CountSame%). Αν είναι λιγότερα από τρία, τότε αποθηκεύονται, στο πίνακα AxisVarListSQ. το μέγεθος (LabellS) και στο πίνακα AxisNum List%0. ο αριθμός του άξονα (FreeAxis%) (οθόνη 4.5).

Στη συνέχεια εμφανίζετε το μέγεθος (πίνακας PIotVarNameSQ) στη στήλη με τα επιλεγμένα μεγέθη, μαζί με τον αριθμό του άξονα (πίνακας AxisNumList%0). στον οποίο σχεδιάζεται (μετά την ετικέτα okboss), έγχρωμος (κλήση της ρουτίνας ColorAdaptor).

Στην περίπτωση, όμως, που σχεδιάζονται, στο συγκεκριμένο άξονα, τρία μεγέθη (CountSame%=3), τότε ελέγχεται αν υπάρχει άλλος ελεύθερος άξονας ( μετά την ετικέτα FindATP). Ο παραπάνω έλεγχος γίνεται και όταν δεν υπάρχει ελεύθερος άξονας (FreeAxis% =0).

ΚΕΦ Α Λ Α ΙΟ 4

Οθ όνη 4.5 Δίνονται παραδείγματα αποθήκευσης στοιχείων επιλεγμένου μεγέθους σε πίνακες για την σχεδίασή του.

Αν δεν υπάρχει, τότε εμφανίζεται μήνυμα ακύρωσης της επιλογής του μεγέθους (RepTetx$(19)) και μειώνονται κατά μία μονάδα οι μεταβλητές NumSelVar% και SelCol. Τέλος βγαίνουμε από την ρουτίνα αφού γίνει μία μικρή καθυστέρηση.

Στην αντίθετη περίπτωση (αν υπάρχει ελεύθερος άξονας), αποθηκεύονται στο πίνακα AxisVarList$0. το μέγεθος (Label1$) και στο πίνακα AxiNum List% 0. ο αριθμός του άξονα, στον οποίο θα σχεδιαστεί το επιλεγμένο μέγεθος (Free%).

Στην συνέχεια δίνεται το πρόγραμμα της ρουτίνας.

I Π Ρ Ο ΓΡ Α Μ Μ Α Ρ Ο Υ ΤΙΝ Α Σ V ariableplotContTol

SUB VariablePlotControl

--- επιλογή και έλεγχος των μεταβλητών για ανασχεδίαση μεταβλητές εισόδου :CountSel%, NumSelVar%,

VarldentNum%, VarNum RepTextSO, SelCol AxisNum%, DataVarS

SHARED CountSel%, NumSelVar%, VarldentNum%, PlotVarNameSQ SHARED RepTextSO. SelCol, VarNum, AxisNum%, DataVarS

' μεταβλητές εξόδου :BackorPlot% - (1) για επιστροφή στην αρχή

• - (0) για έξοδο από το loop

Κ ΕΦ Α Λ Α ΙΟ 4

Delay - για την χρονοκαθυστέρηση SelVarListSO, VarNumList%()

I AxisNumList%(), AxisVarList$()

SHARED BackorPlot%, Delay, AxisNumList%(), AxisVarList$() SHARED SelVarListSO, VarNumList%()

ON LOCAL ERROR GOTO VPCrLocErrHd

CountSame% = 0

Axis1% = 0: Axis2% = 0; Axis3% = 0: Axis4% = 0 Free% = 0: BackorPlot% = 2

NumSelVar% = NumSelVar% + 1 SelCol = SelCol + 1

' --- ελεχγος επιλογής ίδιου μεγέθους FOR CountSel% = 1 T O NumSelVar%

IF VarldentNum% = VarNumList%(CountSel%) THEN LOC A TE 18, 10; PRINT SPC(60);

LO C A TE 18, 15: PRINT RepTextS(18) NumSelVar% = NumSelVar% -1 SelCol = SelCol -1 FOR g% = 1 T O 1000

FOR h% = 1 TO 400 NEXT NEXT

LOC A TE 18, 10; PRINT SPC(60);

BackorPlot% = 1 EXIT SUB END IF N EXT CountSel%

Delay = 100

' ---έλεγχος για επιλογή εξόδου IF VarldentNum% = VarNum THEN

BackorPlot% = 0 NumSelVar% = NumSelVar% -1 EXIT SUB

END IF

' ---έλεγχος για επιλογή πάνω από 12μεγέθη IF NumSelVar% = 13 THEN

LOC A TE 18, 15 PRINT RepTextS(19)

LO C A TE SelCol, 55: PRINT SPC(25);

FOR g% = 1 T O 1000 FOR h% = 1 T O 400 NEXT NEXT

LO C A TE 18, 10: PRINT SPC(60);

Delay = 300 BackorPlot% = 1

Κ Ε Φ Α Λ Α ΙΟ 4

NumSelVar% = NumSelVar% -1 EXIT SUB

END IF

' ---αποθήκευση επιλογής

SelVarList$(NumSelVar%) = PtotVarName$(VarldenlNum%) VarNumList%(NumSelVar%) = VarldentNum%

---διαδικασία τοποθέτησης μεγέθους σε κατάλληλο άξονα VarLabelS = SelVarList$(NumSelVar%) + " ”

LabelLength% = LEN(VarLabelS) Iabel1$ = WordPos% = 1

■ ---βρες τι μέγεθος επιλέχθηκε FOR j% = WordPos% T O LabelLength%

' ---απομόνωσε τις λέξεις

IF labehS = RTRIMS(MID$(VarLabelS, WordPos%, j% - WordPos% + 1)) TH EN

FOR DataVars% = 1 TO 10 READ DataVarS

IF UCASE$(label1$) = UCASES(DataVarS) THEN G O TO ContProce

END IF NEXT DataVars%

RESTORE labellS = ""

WordPos% = j% + 1 END IF

labellS = MID$(VarLabelS, WordPos%, j% - WordPos% + 1) N EXT j%

■ ---A v δεν το βρήκες υποθήκευσε το μέγεθος labellS = VarLabelS

ContProce:

R ESTORE

' ---βρές αριθμό μεγεθών ανά άξονα FOR CountDif% = 1 T O NumSelVar%

IF AxisNumList%(CountDif%) = 1 THEN Axis1% = Axis1% + 1

ELSEIF AxisNumList%(CountDif%) = 2 THEN Axis2% = Axis2% + 1

ELSEIF AxisNumList%(CountDif%) = 3 THEN Axis3% = Axis3% + 1

ELSEIF AxisNumList%(CountDif%) = 4 THEN Axis4% = Axis4% + 1

END IF N EXT CountDif%

• ---βρες ελεύθερο άξονα IF Axis1% = 0 THEN

Free% = 1

ΚΕΦ ΑΛΑΙΟ 4

ELSEIF Axis2% = 0 THEN Free% = 2 ELSEIF Axis3% = 0 THEN

Free% = 3 ELSEIF Axis4% = 0 THEN

Free% = 4 END IF FreeAxis% = Free%

' ---τοποθέτησε το μέγεθος σε άξονα FOR Already% = 1 T O NumSelVar%

IF Iabel1$ = AxisVarList$(Already%) THEN Ck)untSanne% = 0

FOR Same% = 1 T O NumSelVar%

IF labeHS = AxisVarListS(Same%) THEN CountSame% = CountSame% + 1 FreeAxis% = AxisNumList%(Same%) END IF

NEXT Same%

IF CountSame% = 3 THEN GOTO FindATP END IF END IF NEXT Already%

IF FreeAxis% = 0 THEN GOTO FindATP END IF

' ---αποθήκευσε πληροφορίες μεγέθους AxisNumList%(NumSelVar%) = FreeAxis%

AxisVarList$(NumSelVar%) = labellS GO TO okboss

FindATP:

' ---μήνυμα ακύρωσης επιλογής

IF Axis1% <> 0 AND Axis2% < > 0 AND Axis3% < > 0 AND Axis4% < > 0 THEN

LOCATE 18, 10: PRINT SPC(60);

LOCATE 18, 15: PRINT RepTextS(19) NumSelVar% = NumSelVar% -1 SelCol = SelCol -1 FOR g% = 1 T O 1000

FOR h% = 1 T O 400 NEXT h%

NEXT g%

LOCATE 18, 10: PRINT SPC(60);

EXIT SUB END IF

' ---αποθήκευσε πληροφορίες μεγέθους AxisNumList%(NumSelVar%) = Free%

AxisVarList$(NumSelVar%) = labellS okboss:

ΚΕΦ ΑΛΑΙΟ 4

LOCATE SelCol, 51

IF VarldentNum% = VarNum THEN BackorPlot% = 0

EXIT SUB END IF

' ---εμψάνησε την επιλογή στην οθόνη tabelaS = " No" + STR$(AxisNumList%(NumSelVar%)) PRINT PlotVarName$(VarldentNum%);

CALL ColorAdaptor(2, 0): PRINT tabelaS: CALL ColorAdaptor(15, 0) EXIT SUB

' ---παγίδευση λάθους VPCrLocErrHd:

SCREEN ScrType%, 0, VisPage%, VisPage%

CALL LinePrint(ErrText$(10))

ErrorConst% = ERR: WhereS = "VariablePlotControl"

CALL ErrorMessage(ErrorConst%): PRINT WhereS; : STOP END SUB

4.2.3 ΡΟΥΤΙΝΑ ProccessVarValues

H ρουτίνα ProccessVarValues χρησιμοποιείται για να κάνει την επεξεργασία των τιμών ενός μεγέθους. Αρχικά ελέγχεται αν ο αριθμός των μεγεθών που επιλέχθηκαν (CountSelVar) είναι παραπάνω από 12. Αν είναι μηδενίζουμε την μεταβλητή και βγαίνουμε από την ρουτίνα.

Από τον πίνακα VarNurπList%0. φορτώνουμε τον κωδικό αριθμό του επιλεγμένου μεγέθους στη μεταβλητή NumSelectVar%. Με τιμή της μεταβλητής αυτής ανοίγουμε το αρχείο δεδομένων του μεγέθους (FileNameS) και αποθηκεύουμε τις τιμές στον πίνακα A rrayValuesQ -

Στη συνέχεια έχουμε δύο επιλογές, ανάλογα με την τιμή του δείκτη DontCalc%. Αν η τιμή του είναι μηδέν (0), τότε καλείται η ρουτίνα MaxMinYTimeValues, η οποία υπολογίζει την μέγιστη και ελάχιστη τιμή του μεγέθους (MaxValueYTirne και MinValueYTime αντίστοιχα).

Υπολογίζονται, επίστις, οι διαφορά μέγισττις - ελάχιστης τιμής του μεγέθους (YIntervalTime) και μέγιστη - ελάχιστη τιμή του άξονα X (XlntervalTime%). Προηγουμένως γίνεται έλεγχος στις τιμές του μεγέθους (μέγιστη, ελάχιστη και διαφορά).

Αν η διαφορά (YIntervalTime) είναι ίση με το μηδέν, τότε χρησιμοποιούμε την μέγιστη τιμή (MaxValueYTime) του μεγέθους. Αν και τότε είναι μηδέν, εμφανίζεται μήνυμα λάθους (ρουτίνα LinePrint) στο τέλος της οθόντις και βγαίνουμε από την ρουτίνα.

ΚΕΦ ΑΛΑΙΟ 4

Στην περίπτωση, όμως, που η τιμή της μεταβλητής DontCalc% είναι ένα(1), τότε παρακάμπτεται η διαδικασία των υπολογισμών μεγίστης και ελάχιστης τιμής του μεγέθους και το πρόγραμμα στέλνεται στην ετικέτα goaway.

Στην ρουτίνα αυτή οι μόνες τροποποιήσεις είναι ο έλεγχος, στην

°ΡΧή. γιο τον αριθμό των μεταβλητών, καθώς και η εντολή απόφασης παράκαμψης ή όχι με την μεταβλητή (DontCalc%).

Η ρουτίνα PlotAxisProccesing χρησιμοποιείται για να υπολογίζει την μέγιστη και ελάχιστη τιμή του άξονα. Δηλαδή, όταν πρόκειται να σχεδιασθούν παραπάνω από ένα μέγεθος σε κάποιο άξονα, τότε υπολογίζουμε την μέγιστη (MaxValueYTime) και την ελάχιστη (MinValueYTime) τιμή για κάθε μέγεθος, με την κλήση της ρουτίνας ProccessVarValues (DontCaIc%=0).

Στη συνέχεια συγκρίνουμε τις τιμές αυτές μεταξύ τους και υπολογίζουμε την μέγιστη (MaxTwoVarValue) και την ελάχιστη (MinTwoVarValue) τιμή, κοινές για όλα τα μεγέθη που θα σχεδιασθούν στον ίδιο άξονα.

Υπολογίζεται η διαφορά τους (YIntervalTime) και αποθηκεύονται, η μέν μέγιστη τιμή (MaxTwoVarValue) στην μεταβλητή MaxValueYTime, η δε ελάχιστη (MinTwoVarValue) στην MinValueYTime (οθόνη 4.6).

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

Στην αρχή, όμως, τιης ρουτίνας μηδενίζουμε τις μεταβλητές και στην συνέχεια συγκρίνουμε τις τιμές του πίνακα AxisNum List% {). Αν κάποια τιμή του είναι ίση με την τιμή της μεταβλητής CheckAxis% , τότε πραγματοποιείται η παραπάνω διαδικασία, αφού αποθηκευτεί η θέση τιης

Κ ΕΦ ΑΛΑΙΟ 4

τιμής αυτής στην μεταβλητή CountSelVar (για να δοθεί ο κωδικός αριθμός του μεγέθους στην ρουτίνα ProccessVarValues).

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

Π ΡΟ ΓΡ Α Μ Μ Α Ρ Ο Υ Τ ΙΝ Α Σ PlotA xisProccesin g

SUB PlotAxisProccesing (CheckAxis%, AxisNumList%{), VarNumList%()) ---υπολογίζει την κοινή μέγιστη και ελάχιστη τιμή για τα

μεγέθη που σχεδιάζονται σε ένα άξονα μεταβλητές εισόδου

SHARED NumSelVar%,CountSelVar,MaxValueYTime, MinValueYTime μεταβλητές εξόδου :

SHARED YIntervalTime

ON LOCAL ERROR GOTO PAPrLocErrHd ---μηδένισε τιμές

MaxTwoVarValue = 0 MinTwoVarValue = 0

---βρές μέγεθος FOR f% = 1 T O NumSelVar%

IF AxisNumList%(f%) = CheckAxis% THEN CountSelVar = f%

' ---βρές μέγιστη - ελάχιστη τιμή CALL ProccessVarValues ' ---σύγκρινέ τες

IF MaxValueYTime > MaxTwoVarValue THEN MaxTwoVarValue = MaxValueYTime END IF

IF MinValueYTime < MinTwoVarValue THEN MinTwoVarValue = MinValueYTime END IF

END IF NEXT f%

■ ---αποθήκευσε τις τιμές

YIntervalTime = MaxTwoVarValue - MinTwoVarValue

Κ Ε Φ Α Λ Α ΙΟ 4

MaxValueYTime = MaxTwoVarValue MinValueYTime = MinTwoVarValue

' ---παγίδευση λάθους PAPrLocErrHd:

SCREEN ScrType%, 0, VisPage%, VisPage%

CALL LinePrint(ErrText$(10))

ErrorConst% = ERR: Where$ = "PlotAxisProccessing"

CALL ErrorMessage(ErrorConst%): PRINT WhereS; : STOP

4.2.5 ΡΟΥΤΙΝΑ MaxMinYTimeValues

H ρουτίνα MaxMinYTimeValues χρησιμοποιείται για τον υπολογισμό της ελάχιστης (MinValueYTime) και της μεγίστης (MaxValueYTime) τιμής ενός μεγέθους.

Για να βρεθούν οι τιμές αυτές, συγκρίνονται οι τιμές του μεγέθους, οι οποίες είναι αποθηκευμένες στον πίνακα ArrayValuesQ. Στη συνέχεια μετατρέπονται σε ακέραιους, μαζί με την μέγιστη και την ελάχιστη τιμή (αναφέρθηκα εκτενέστερα στο Κεφάλαιο 3).

Στη ρουτίνα αυτή, η όλη τροποποίηση, είναι η μετατροπή των τιμών σε ακέραιους. Το πρόγραμμα με τις τροποποιήσεις της ρουτίνας έχει δοθεί σε προηγούμενο κεφάλαιο (βλέπε Κεφάλαιο 3).

Η ρουτίνα DoXAxis σχεδιάζει τον οριζόντιο άξονα X (οθόνη 4.7).

Σχεδιάζεται μία οριζόντια γραμμή με αρχή το σημείο X=XOrigin% και Y= YO rigin% . Η γραμμή εκτείνεται κατά το μήκος του άξονα (X A xisL% ) και πρός τα δεξιά.

Στη συνέχεια σχεδιάζονται τα τμήματα και τα υποτμήματα του άξονα, όταν οριστεί αυτό από τις παραμέτρους (BigTickSize και SmallTickSize αντίστοιχα). Αν δεν υπάρχουν υποτμήματα (Num SegsX%

<0), τότε σχεδιάζεται μόνο η γραμμή του άξονα.

Στην αρχή της ρουτίνας, δίνονται τα μεγέθη των τμημάτων και των υποτμημάτων. Αν ο άξονας που σχεδιάζεται δεν είναι ο τελευταίος, τότε σχεδιάζονται μόνο τα τμήματα (BigTickSize=4 και SmallTickSize=0).

Οταν, όμως, ο άξονας είναι ο τελευταίος, τότε σχεδιάζονται και τα δύο (BigTickSize =8 και SmalITickSize=3).

Κ Ε Φ Α Λ Α ΙΟ 4

Αυτό συμβαίνει, διότι μόνο στο τελευταίο από τους άξονες που σχεδιάζονται, υπαρχουν σχόλια. Στη συνέχεια δίνονται οι τροποποιήσεις της ρουτίνας.

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

ΤΡΟ Π Ο Π Ο ΙΗ Σ Ε ΙΣ Ρ Ο Υ Τ ΙΝ Α Σ DoXAxis

' ---μέγεθος τμημάτων - υποτμημάτων για ένα άξονα BigTickSize = 8

SoiallTickSize = 3

' ---βρές αν είναι ο τελευταίος άξονας ' σε δύο άξονες

IF AxisToPlot% = 2 THEN IF AxesNum% <> 2 THEN

BigTickSize = 4 SmallTickSize = 0 END IF

' σε τρείς άξονες ELSEIF AxisToPlot% = 3 THEN

IF AxesNum% <> 3 THEN BigTickSize = 4 SoiallTickSize = 0 END IF

' σε δύο άξονες ELSEIF AxisToPlot% = 4 THEN

IF AxesNum% <> 4 THEN BigTickSize = 4 SmallTickSize = 0 END IF END IF

H ρουτίνα DoYAxis σχεδιάζει τον κατακόρυφο άξονα Υ (οθόνη 4.7).

Σχεδιάζεται μία κατακόρυψη γραμμή με αρχή το σημείο X=X O rigin% και Y = YO rig ln % . Η γραμμή εκτείνεται κατά το μήκος του άξονα (Y A x is L % ) και πρός τα επάνω.

Οταν δεν υπάρχουν τμήματα να σχεδιασθούν (N um SegsY% <0), τότε σχεδιάζεται μόνο η γραμμή του άξονα. Ο αριθμός των τμημάτων και των υποτμημάτων που θα σχεδιασθούν επάνω στον άξονα, είναι σταθερός άσχετα με τον αριθμό των σχεδιαζόμενων αξόνων (BigTickSlze=8 και SmallTickSize=3).

Κ Ε Φ Α Λ Α ΙΟ 4

4L2J_PDYT1NA AnnXAxis

Η ρουτίνα AnnXAxis χρησιμοποιείται για τον σχολιασμό με ένα κείμενο τον άξονα X (οθόνη 4.7). Δίνει ετικέτες στα τμήματα και εμφανίζει έναν τίτλο για ολόκληρο τον άξονα. Οι ετικέτες μπορούν να κεντραριστούν κάτω από τα τμήματα (Mid%=1) ή ανάμεσα σ' αυτά (M id% <>0).

Ο πίνακας XTextArr$0 περιέχει τις συμβολοσειρές με τις ετικέτες που πρόκειται να τοποθετηθούν στον άξονα. Το πρώτο στοιχείο του περιέχει τον τίτλο ολόκληρου του άξονα. Τα επόμενα στοιχεία περιέχουν τις ετικέτες για τα τμήματα.

Οι ετικέτες είναι κεντραρισμένες είτε κάτω από τα τμήματα, είτε στο μεταξύ τους διάστημα (ανάλογα με την τιμή της Mid%). Η σταθερά XO ffSetl τις μετακινεί αριστερά ή δεξιά . Οι θετικές τιμές προκαλούν μετακίνηση προς τα δεξιά, ενώ οι αρνητικές προς τα αριστερά.

Η YOffSet2 αλλάζει την θέση της ετικέτας(τίτλου) ολόκληρου του άξονα, αριστερά ή δεξιά από την κεντραρισμένη θέση της.

Στην αρχή του προγράμματος προστέθηκαν κάποιες συνθήκες. Ο λόγος που με ανάγκασε να το κάνω, είναι ότι μόνο ο άξονας X του τελευταίου συστήματος αξόνων που θα σχεδιαστεί, θα σχολιάζετε με τις ανάλογες ετικέτες.

Γι' αυτό και παίρνω υπόψη την τιμή της μεταβλητής S c rT y p e % (τύπος κάρτας γραφικών),καθώς και τον αριθμό των αξόνων που θα σχεδιαστούν (AxisToPlot%).

Ετσι με τις παραπάνω τροποποιήσεις, τοποθετούνται στην σωστή θέση οι ετικέτες του άξονα. Στην συνέχεια δίνονται αυτές οι παραπάνω συνθήκες.

ΤΡΟ Π Ο Π Ο ΙΗ Σ ΕΙΣ Ρ Ο Υ ΤΙΝ Α Σ AnnXAxis

' ---αποθήκευσε σταθερές προγράμματος CON ST XOffsetl = -1

CON ST XOffset2 = -6

■ ____προσάρμοσε ανάλογα την κάρτα γραφικών SELEC T CASE ScrType%

CASE 7, 8, 9, 10, 11 Ln% = 0 CASE 12, 13

Ln% = 1 END SELECT

• ____προσάρμοσε ανάλογα τον αριθμό των αξόνων

Κ Ε Φ Α Λ Α ΙΟ 4

S ELEC T CASE AxisToPlot%

CASE 1

YText% = NLines% - 7 - Ln%

CASE 2

YText% = NLines% - 5 - Ln%

CASE 3

YText7o = NLines% - 5 - Ln%

CASE 4

YText% = NLines% - 4 - Ln%

END SELECT

4 .2 .3 _ Β Ο Υ Ή Ν Α ^ η η Υ Α χ Ϊ8

H ρουτίνα AnnYAxis χρησιμοποιείται για τον σχολιασμό με ένα κείμενο τον άξονα X (οθόνη 4.7). Δίνει ετικέτες στα τμήματα και εμφανίζει έναν τίτλο για ολόκληρο τον άξονα.

Οι ετικέτες σχεδιάζονται οριζόντια και τοποθετούνται αριστερά των τμημάτων του άξονα Υ, ενώ μπορούν να κεντραριστούν στην ίδια ευθεία με τα τμήματα (Mid%=1) ή ανάμεσα σ' αυτά (Mid%<>0).

Ο πίνακας YTextArrS περιέχει τις συμβολοσειρές με τις ετικέτες που πρόκειται να τοποθετηθούν στον άξονα. Το πρώτο στοιχείο του περιέχει τον τίτλο ολόκληρου του άξονα ενώ τα επόμενα στοιχεία περιέχουν τις ετικέτες για τα τμήματα.

Οι ετικέτες είναι κεντραρισμένες είτε στην ίδια ευθεία με τα τμήματα, είτε στο μεταξύ τους διάστημα (ανάλογα με την τιμή της M id%). Η σταθερά YOffSetl τις μετακινεί πάνω ή κάτω . Οι θετικές τιμές προκαλούν μετακίνηση προς τα κάτω, ενώ οι αρνητικές προς τα πάνω.

Η YOffSet2 αλλάζει την θέση της ετικέτας ολόκληρου του άξονα, πάνω ή κάτω από την κεντραρισμένη θέση του. Ομως δεν χρησιμοποιείται διότι η διαδικασία εμψάνησης της ετικέτας μετατέθηκε σε άλλη ρουτίνα, που αναφέρομαι στην συνέχεια.

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

Δηλαδή, η εμψάνηση του τίτλου του μεγέθους που σχεδιάζεται. Η δυνατότητα αυτή μεταφέρθηκε στη ρ>ουτίνα PlotTimeValues.

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

Η συγκεκριμένη ρουτίνα χρησιμοποιείται μόνο μία φορά για κάθε σύστημα αξόνων και επομένιος έπρεπε να βρεθεί τρόπος, για την πραγματοποίηση της προϋπόθεσης.

Η ρουτίνα PlotTimeValues ήταν η ποιό κατάλληλη, διότι χρησιμοποιείται για την σχεδίαση του κάθε μεγέθους.

Κ ΕΦ Α Λ Α ΙΟ 4

Οθόνη 4 .7 Οθόνη με παράδειγμα χρήσης των ρουτινών που καλούνται για την ανασχεδίαση.

4 .2 .1 Q Ρ Ο Υ Τ ΙΝ Α A x is T e x t

Οι ρουτίνες AnnXAxis και AnnYAxis χρειάζονται, η κάθε μία, έναν πίνακα συμβολοσειρά (XTextArr$0 και YTextArr$0 αντίστοιχα) για την αποθήκευση της σήμανσης με κείμενο των τμημάτων του άξονα. Γι' αυτό το σκοπό καλείται η ρουτίνα AxisText.

Αν η σήμανση είναι αριθμητική, η ρουτίνα παρέχει τις συμβολοσειρές που απαιτούνται για τους παραπάνω πίνακες. Σαν είσοδο χρειάζεται τις αριθμητικές τιμές σε κάθε αρχή (HighVal!) και τέλος (LowVal!) του άξονα Επίσης τον αριθμό των τμημάτων στα οποία χωρίζεται ο άξονας (Num Segs%), καθώς και τον τύπο της σήμανσης (δεκαδικός ή ακέραιος) με την μεταβλητή Num Type%.

Αν η N um Type% είναι μικρότερη από ενα (1) ή μεγαλύτερη από την μέγιστη διάσταση του πίνακα TextArr$, η διαδικασία αποθήκευσης (με την χρήση της εντολής SELECT CASE ) παρακάμπτεται.

Αν η N um Type% είναι ίση με ένα (1) τότε, παράγονται ακέραιοι τύποι σε μορφή συμβολοσειράς (χωρίς δεκαδικά ψηφία), ενώ αν είναι ίση με 2, παράγονται αριθμοί σταθερής υποδιαστολής σε μορφή συμβολοσειράς ( αριθμοί με μία υποδιαστολή και δυο δεκαδικά ψηφία).

Στην συγκεκριμένη ρουτίνα δεν έγινε καμία τροποποίηση.

Κ ΕΦ Α Λ Α ΙΟ 4

4.2.11_PQYTJNA_PlotTimeValue^

Η ρουτίνα PlotTimeValues σχεδιάζει τις τιμές ενός μεγέθους στο σύστημα αξόνων (οθόνη 4.7). Αρχικά ορίζετε η περιοχή σχεδίασης των τιμών. Δηλαδή το ύψος της περιοχής (YWindow%) και το πλάτος (XW indow% ).

Καθορίζονται επίσης, τα όρια του άξονα X (Χυρ% και X do w n% ) και του αξονα Υ (Υυρ% και Ydow n%) και η τιμή κάθε pixel για τον άξονα X (Xratio) και τον άξονα Υ (Yratio).

Εισάγωγη χρωμάτων γίνεται στη συνέχεια, με την κλήση της ρουτίνας ColorAdaptor και στην συνέχεια σχεδιάζεται ο άξονας του μηδενός, όταν υπάρχουν και αρνητικές τιμές.

Στη συνέχεια υπολογίζονται οι συντεταγμένες (σε pixels) του πρώτου σημείου, Χ ο% και Υ ο % , καθώς και του δεύτερου σημείου, Χ1%

και Υ1% . Ελέγχονται έτσι ώστε να μην είναι έξω από τα όρια των αξόνων και χαράσεται μία γραμμή μεταξύ των δύο αυτών σημείων.

Αν η συντεταγμένη ενός σημείου είναι έξω από τα όρια του άξονα, τότε αποθηκεύουμε σ' αυτήν την τιμή του όριου αυτού. Δηλαδή αν Χ θ % > Χ υ ρ % τότε Χ ο% =Χυρ% ή αν Y1% <Ydown% τότε Y1 % =Y do w n % .

Η τιμή του δεύτερου σημείου αποθηκεύεται στη θέση της τιμής του πρώτου σημείου, στον πίνακα ArrayValuesQ· Τέλος καλείται η ρουτίνα ColorAdaptor, για να σταματήσει ο χρωματισμός.

Οι τροποποίησεις έγιναν στις τιμές που καθορίζουν τα όρια των αξόνων, καθώς και στο τέλος, όπου προστέθηκε η διαδικασία εμφάνησης του τίτλου του άξονα Υ (SelectYVarS), όπως αναφέρθηκα παραπάνω.

Η ρουτίνα DrawAxis χρησιμοποιείται για την σχεδίαση και τον σχολιασμό ενός συστήματος αξόνων X και Υ. Η ρουτίνα αρχικά εμφανίζει το κατάλληλο πλαίσιο (ρουτίνα Frame) χρωματισμένο (ρουτίνα ColorAdaptor).

Η ρουτίνα AxisText καλείται και πάλι, στην περίπτωση που επιλέχθηκε σχεδίαση των ενεργών τιμών (Select$="R" ή "r"). Ετσι αποθηκεύονται στον πίνακα YTe xtA rr$ 0 οι απαραίτητες τιμές για τον σχολιασμό του άξονα Υ.

Η ίδια ρουτίνα καλείται στη πάλι συνέχεια , αυτή τη φορά για την αποθήκευση στον πίνακα TextArr$Q (και στη συνέχεια στον Y T e x tA rr$ 0 ) τις απαραίτητες συμβολοσειρές για τον σχολιασμό του άξονα Υ (για την ανασχεδίαση στιγμιαίων τιμών).

Η ρουτίνα ColorAdaptor καλείται για τον χρωματισμό του άξονα Υ, ο οποίος σχεδιάζεται με την κλήση της ρουτίνας DoYAxis. Στην συνέχεια καλείται πάλι η ρουτίνα ColorAdaptor. αυτή τη φορά για τον χρωματισμό

Κ Ε Φ Α Λ Α ΙΟ 4

™ '' σχολιασμό του άξονα Υ

Οθόνη 4.8 Δίνονται παραδείγματα σχετικά με τις παράμετρους σχεδίασης των αξόνων Στο τέλος της ρουτίνας DrawAxis καλείται η ρουτίνα ColorAdaptor για να σταματήσει τσν χρωματισμό.

Η ρουτίνα AxisText καλείται στην συνέχεια, για να αποθηκεύσει στον πίνακα TextArr$0 (και στην συνέχεια στον X TextArrSQ ) τις απαραίτητες συμβολοσειρές για τον σχολιασμό του άξονα X.

Στη συνέχεια καλείται η ρουτίνα DoXAxis για να σχεδιάσει τον άξονα X. Προηγουμένως καλείται η ρουτίνα ColorAdaptor για τον χρωματισμό του.

Η ρουτίνα AnnXAxis καλείται μετά, για τον σχολιασμό του άξονα, με την προϋπόθεση ότι είναι ο τελευταίος από τους άξονες που σχεδιάζονται (CheckAxis%=AxisToPlot%).

Στην ρουτίνα που ανάλυσα, η μόνη δίκιά μου παρέμβαση ήταν η τοποθέτηση της συνθήκης για τον σχολιασμό του άξονα X. Η συνθήκη αυτή είναι μια εντολή IF... THEN.

4 .3 Ε Π ΙΜ Ε Ρ Π Υ Σ Τ Ρ Ω Π Ο Π Ο ΙΗ Σ Ε ίΣ

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

Η πρόσθεση επιπλέον μηνυμάτων του προγράμματος της ανασχεδίασης, στα αρχεία ereptext.txt (στα αγγλικά) και greptext.txt

Κ Ε Φ Α Λ Α ΙΟ 4

(στα ελληνικά), τα οποία αποθηκεύονται στον πίνακα RepTextSO Ακόμη τροποποιήθηκε το μήνυμα επιλογής μεγέθους για την ανασχεδίαση.

Μηνύματα στα γερμανικά δεν υπάρχουν, επειδή δεν γνωρίζω την γλωσσά Χρι^ιμοποιούνται πρόχειρα τα μηνύματα στα αγγλικά (αρχείο dreptext.txt).

Στην συνέχεια δίνονται τα επιπλέον μηνύματα, καθώς και ο πίνακας στον οποίο αποθηκεύονται.

RepText$(17) Επιλεγμένες Μεταβλητές

RepText$(18) Ή μεταβλητή έχει ήδη επιλεγεί.Κάνε άλλη επιλογή..."

RepText$(19) "Η τελευταία επιλογή σου δεν γίνεται δεκτή..."

RepText$(20) Μεταβλητές για ανασχεδίαση RepText$(17) Selected Variables

RepText$(18) "The variable is already selected.Select another..."

RepTextS(19) "Your last selection isn't acceptable"

RepText$(20) "- Variables to be reploted -"

4 .3 .2 Δ Η Λ Ω Σ Ε ΙΣ ΝΕΩΝ Μ ΕΤΑ ΒΛΗ ΤΩ Ν ■ ΠΙΝΑΚΩΝ

Η δήλωση κάποιων πρόσθετων κοινών μεταβλητών και μεγεθών πινάκων, τα οποία χρησιμοποιούνται στο πρόγραμμα της ανασχεδίασης, στο βοηθητικό αρχείο Comblock.bi. Οι μεταβλητές είναι οι εξής (δττλώθηκαν COMMON):

COMMON BestMode%, AvailableS, VdAdaptor!

Καθώς και οι πίνακες : COMMON SelVarLlst$0, AxisVarList$0

VarNumList%0. AxisNum List%0.

Ακόμη δηλώθηκαν και τα μεγέθη των πινάκων (DIM):

DIM SelVarList$(10), AxisVarList$(10)

VarNumList%(10), AxisNumList%(10),

4 J i.3 _ A Y N A I O T K T A J Q R e E lA I

Τέλος, προστέθηκε η δυνατότητα της προσωρινής διακοπής της διαδικασίας επιλογής των μεγεθών για ανασχεδίαση, με την χριηση ειδικού πλήκτρου ελέγχου (W).

Με την διακοπή εμφανίζεται η οθόνη επιλογής βοήθειας και επιλέγεται η βοήθεια σε ένα από τα ένδεκα (11) διαθέσιμα θέματα για να εμφανιστεί η οθόνη βοήθειας στην οποία η κίνηση γίνεται με χρήση των βελών.

Η επιστροφή στην διαδικασία επιλογής, γίνεται με επιστροφή στην οθόνη επιλογής βοήθειας (πλήκτρο ESC) και επιλογή επιστροφής (επιλογή 0), στην διαδικασία επιλογής μεγεθών.

Κ ΕΦ Α Λ Α ΙΟ 4

-εκινώντας η διαδικασία της ανασχεδίασης (TimeValProcessing) ενεργοποιείται το πλήκτρο W με την εντολή :

ΚΕΥ(16) ΟΝ KeyPress%(16)=0

Στην συνέχεια και μέσα στο βρόγχο της επιλογής των μεγεθών, ελέγχεται αν πατήθηκε:

ΟΝ ΚΕΥ(16) GOSUB hel IF KeyPress%(16) = 1 THEN

CALL InfoScreen KeyPress%(16) = 0 GOTO start END IF

Με την ON KEY στέλνεται το πρόγραμμα στο κυρίως πρόγραμμα του MODULE όπου γίνεται η αναγνώρηση της επιλογής για βοήθεια (πίνακας K eyP re ss% 0)

hel: KeyPress%(16) = 1: RETURN

Αμέσως μετά επιστρέφει πίσω στη ρουτίνα στο σημείο που σταμάτΓίσε και καλεί την ρουτίνα InfoScreen (H E L P K E Y S .B A S ). Οταν θελήσουμε να επιστρέφουμε στην διαδικασία ττις ανασχεδίασης, εμφανίζεται η οθόνη επιλογής μεγεθών.

ρφ ΑΛΑΙΟ 5

ΤΥΠΙΚΑ

Α Π Ο ΤΕΛΕΣΜ ΑΤΑ

Κ ΕΦ Α Λ Α ΙΟ 5

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

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

Παράλληλα θα δοθούν και κάποιες οδηγίες για τον τρόπο χρήσης, καθώς και για τις δυνατότητες του προγράμματος της ανασχεδίασης (με την βοήθεια των οθονών).

Η οθόνες και τα παραδείγματα είναι από το πρόγραμμα του Τριφασικού Κινητήριου Συστήματος Μετατροπέα Συχνότητας Ασύγχρονου Κινητήρα.

5.2 ΑΝΑΣΧΕΔΙΑΣΗ ΣΤΙΓΜΙΑΙΩΝ ΤΙΜΩΝ

Το πρόγραμμα εξομοίωσττς (ΝΕΑΠΟΛΙΣ) εκτελείται μόλις γράψουμε το όνομα του προγράμματος (για το ΤΚΣΜΣ-ΑΚ είναι SYFC3MOT) ή το επιλέξουμε από κατάλληλο μενού (RUNDRIR.EXE).

Η πρώτη οθόνη του προγράμματος είναι η οθόνη τίτλου προγράμματος (οθόνη 5.1), στην αγγλική γλώσσα. Αμέσως μετά ξεκινάει η επανεπιλογή των παραμέτρων του εξομοιωμένου συστήματος, οι οποίε και το καθορίζουν.

ΤΕΧΝΟΛΟΓΙΚΟ ΕΚΠΛΙΛΕΪΤΙΚΟ ΙΰΡνίΙή (ΤΕΙ) ΚΑΒΑΛΑΣ ΤΜΗΜΑ ΐνίΕΚΤΡΟΛΟΓΙΑΣ ΚαΟη^τιίς Λρ. Γεώ ^ ιο ς I . Κι/ρον/«οτάοης

ΑΜΑΠΤϊΞΗ ΕΚΠΑΙΛΕΫΤΙΚΟΪ ΛΟΙΊΣΜΙΚΟΫ

Ν Ε A Ρ 0 L 1 S

I3 -? ΚΣ Μετατροπέη Σι/χ riTUi-AcH/iptpovou Κιυητήρα

Πιέστε πΛήκτρο .

Ο θ ό ν η 5.1 Οθόνη Τίτλου Προγράμματος

Κ ΕΦ Α Λ Α ΙΟ 5

Στην συνέχεια εμφανίζεται η οθόνη παραμέτρων του συστήματος

που έχει επιλεγει. ιη s

Ακολουθεί η διαδικασία της εξομοίακτης κατά την διάρκεια της οποίας μπορούν να χρησιμοποιηθούν τα πλήκτρα F1 - 10,W,Q. Μετά το προσωρινό τέλος της εξομοίωσης μπορεί να ακολουθήσει εκτύπωση σελίδων, αποθήκευση κατάστασης, συνέχισει της εξομοίωσης για ορισμένο νέο αριθμό περιόδων ή οριστικό τέλος της εξομοίωσης.

Μετά το οριστικό τέλος της εξομοίωσης ακολουθεί η επεξεργασία των αποτελεσμάτων που περιλαμβάνει την ανασχεδίαση των στιγμιαίων τιμών των μεγεθών για ολόκληρο το χρόνο εξομοίωσης και την αρμονική ανάλυση ορισμένων από αυτών'(οθόνη 5.2).

Επιλέγουμε την τρίτη εργασία, δηλαδή την Ανασχεδίαση Στιγμιαίων Τιμών γράφοντας "Ε" ή "e" και πατώντας Enter. Η οθόνη που εμφανίζεται δίνεται στην συνέχεια (οθόνη 5.3).

Οθόνη 5.2 Οθόνη επιλογής εργασίας

Η κίντ|ση στο μενού γίνεται πρός τα πάνω, με το πλήκτρο 8 (Ι ) και πρός τα κάτω, με το πλήκτρο 2 (i), στο αριθμητικό πληκτρολόγιο. Η επιλογή του μεγέθους γίνεται με το πλήκτρο Enter (Return).

Στη στήλη με τα επιλεγμένα μεγέθη εμφανίζονται τα μ ε γ έ ^ που πρόκειται να σχεδιασθούν και δίπλα σε καθένα από αυτά, ο αριθμός του άξονα στον οποίο θα σχεδιασθούν. Ενα παράδειγμα δίνεται στην οθονη 5.4.

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

Κ Ε Φ Α Λ Α ΙΟ 5

Η μεταβλητή έχει ήδη επιλεγεί. Κάνε άλλη επιλογή...'

Θα πρέπει τότε να επιλεγεί άλλο μέγεθος (Οθόνη 5.5). Οταν, πάλι δεν υπάρχει ελεύθερος άξονας για την σχεδίαση κάποιου μεγέθους τότε εμφανίζεται το μήνυμα :

' Η επιλογή σου δεν γίνεται δεκτή...'

Τότε θα πρέπει να επιλέξουμε είτε ένα άλλο μέγεθος είτε να συνεχίσουμε στην σχεδίαση των μεγεθών (οθόνη 5.6).

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

Πατώντας, λοιπόν, το πλήκτρο W, με το πλήκτρο NumLock απενεργοποιημένο, εμφανίζετε η οθόνη επιλογής θεμάτων βοήθειας και στη συνέχεια επιλέγουμε το είδος της βοήθειας(οθόνη 5.7)

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

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

Κ Ε Φ Α Λ Α ΙΟ 5

- Μεταβλητές Τάαη CIO Αυορ9 Ιάοη c?o6 Αυορ9 Τάση είοδ Αατιοτ Τάοη Ελε)ρ< ήντιατ TpiKwu τάοη ήντΓίατ Ρεύμα ε ιο Αυορ9 Ρεύμα εζο6 Αυορ9 Ρεύμα εζοδ ήντιοτ Γυυια Ευαυο Αυορ9 Τάοη ε ιο Κινητήρα

3 ♦ ΚΣ Μετατροπέα Σαχνότητας-ήού>{χρονοι/ Κινητήρα- ήΗΑΣΧΕύΙήΣΗ ΚΛΜΠΥΛ31 ΕΟΠΟΙΟΣΗΣ 1 ουασχεδιοοη -

Ρεύμα δρομέα Κιν Σιλ/τ Ισχύος οτάτη Ρεύμα οτάτη Κιν ΙΡοπή φορτιον Κιν]

Ροπή Κινητήρα Ταχύτητα Εξοδος

Επιλέζτε μεταβλητή Υ-άξουα

- Επιλε^ίμένες Μεταβλητές - Τάση ειο Ανορ9 Μο 1 Τάαη εξοδ ήντιατ Μο 1 Ρεύμα εξοδ ftvop9 Μο 2 Ροπή νορτιον Κιν Μο 3

ΓΕΙ Καβάλας, Τμήμα Ηλεκτρολογίας, 1993, Copyright GJK

Οθόνη 5.4 Παράδειγμα επιλογής μεγεθών

3-9 ΚΣ Μετατροπέα Σνχνότητας-ήσύκχρονον Κινητήρα=

ΑΜΘΣΧΕύΙήΣΗ ΚήΜΠΥιΊΟΜ ΕΞΟΜΟΙΟΣΗΣ - Μεταβλητές ){ΐα ανασχεδιαοη -

Τάση ε ιο Ανορ9 Ρεύμα δρομέα Κιν Τάοη εξοδ θνορ9 Συντ Ισχύος οτάτη Τάοη εξοδ θντιστ Ριχίμα οτάτη Κιν Τάοη Ελειρι ήντιοτ Ροπή φορτίου Κιν Tpi)$uv τάοη ήντιστ Ροπή Κινητήρα Ρεύμα ε ιο θνορ9 [Ταχύτητα]

Ρεύμα εξοδ Ανορ9 Εξοδος Ρεύμα εξοδ θντιοτ Γκυι'ο Εναυο Ανορ9 Τάοη ε ιο Κινητήρα

Η μεταβλητή έχει ήδη επ ιλε^εί. Κάνε άλλη επιλογή..

ΤΕΙ Καβάλας, Τμήμα Ηλεκτρολογίας, 1993, Copyright GJK

Ο θ ό ν η 5.5 Μήνυμα λάθους όταν επιλεγεί (διο μέγεθος για δεύτερη φορά

Υπάρχει δυνατότητα σχεδίασης μέχρι και 12 μεγεθών σε τέσσερις (4) άξονες (3 μεγέθη ανά άξονα), με την πρχ3ϋπόθεση ότι σε κάθε άξονα σχεδιάζονται έως και τρία όμοια μεγέθη. Δηλαδή σε ένα άξονα μπορούν να σχεδιαστούν μέχρι και τρία ρεύματα ή τρεις τάσεις κ.α. (Οθόνες 5.8 και 5.9).

Κ ΕΦ Α Λ Α ΙΟ 5

— 3 ? ΚΣ Μετατροπέα Σιτχνότητας-Αα«ί>{χρο«οα Ku/ητηρα—

ήΜΑΣΧΕύΙΡΣΗ ΚΑΜΠΥηΟΜ ΕΞΟΠΟΙΘΣΗΣ - Μεταβ/Ιητές

Τάαη εισ Αυορ9 Τάοη εζοδ Αυορθ Τάοη εζο6 ήατιατ Τάαη Ελεκχ ήατιοτ Ρεύμα εια Ααορθ Ρεύμα εζοδ Αυορ9 Ρεύμα εζοδ ήατιοτ Γυυια Ευαυσ Αι/αρ9 Τάοη εισ Κιαητήρα

αυασχεδιαση - Ρεύμα δρομέα Kiu [Σαντ Ισχύος στάτη]

Ρεύμα στάτη Κιι#

Ροπή εορτίοο Κιι/

Ροπή Κιυητήρα Εζο6ο2^°

- Επ I ?Ιε>{μένες Μεταβλητές - Ταχύτητα Μο 1 Τάση εζοδ Aim στ Ηο 2 Ρεύμα εισ Αι/ορ3 Μο 3 Ροπή ι^ορτίοι/ Kiu Ηο 4

τελευταία επιλογή σ

ΤΕΙ Καβάλας, Τμήμα Ηλεκτρολογίας, 1993, Copyright GJK

Οθόνη 5.6 Μήνυμα λάθους όταν δεν γίνεται δεκτή η επιλογή

— 3-4 ΚΣ Μετατροπέα Συχ ητας-Ασύ>{χρουου Κιυ ΑΜΑΣΧΕύΙΑΣΗ ΚΑΜΠΥΠΟΗ ΕΞΟΗΟΙΟΣΗΣ - Μεταβλητές χιι

Τάοη εισ Αυορ3 Τάση εζοδ Αυορ3 Τάοη εζοδ Αυτί στ Τάση Ελε>ρ< Αυτί στ Tpi>juu τάση Αυτιστ Ρεύμα εισ Αυορ3 Ρεύμα εζοδ Αυορ3 Ρεύμα εζοδ Αυτιστ Γυυία Ευαυσ Αυορ3 Τάοη εισ Κιυητήρα

αυαοχεδίαση - Ρεύμα δρομέα Κιυ Συυτ Ισχύος στάτη Ρεύμα στάτη Κιυ Ροπή ρορτίου Κιυ Ροπή Κιυητήρα

- Επιλειιμέυες Μεταβλητές Τάοη εισ Αυορ3 Μο 1 Τάση εζοδ Αυτιστ Ηο 1 Ρεύμα εζοδ Αυορ3 Μο 2 Ροπή νορτίου Κιυ Ηο 3

Αλλα^ίή Ορίυυ Χρόνου (ιρ'η)?

Επιλέζτε βήμα κάτυ ορίου! 1 I? 1 Επιλέζτε βήμα άυυ ορίου! 129 I? |

ΤΕΙ Καβάλας, Τμήμα Ηλεκτρολο«ίας, 1993, Copyright GJK Οθόνη 5.7 Επιλογή αλλαγής ορίων άξονα X

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

Κ Ε Φ Α Λ Α ΙΟ 5

1 Σ»η<νότητας-Αο«){χρο«οι/ Κινητήρα=-

Αριβμός βημάτνυ

Οθόνη 5.8 Σχεδίαοτη τριών όμοιων μεγεθών σε ένα άξονα

Αν δεν θελήσουμε να συνεχίσουμε, τότε χωρίς να γίνει επιλογή κανενός μεγέθους, επιλέγουμε την "έξοδο" (Οθόνη 5.10). Ετσι τελείωνει η διαδικασία της ανασχεδίασης και επιστρέφουμε στην οθόνη επιλογής εργασίας (Οθόνη 5.2).

Οθόνη 5.9 Σχεδίαση μεγεθών σε τέσσερις (4) άξονες

Documentos relacionados