die Prozedur SENDEN
Zugegeben, in einem Programm ist
jede Prozedur ein 'Umweg' , aber dieser Umweg lohnt sich:
Stellt Euch vor, wir steuern 10
Magnetartikel und 1 Fahrpult. Dann kommen wir locker auf 50
Prozeduren, welche alle das Interface aufrufen.
Beweis ?
Um eine einzige Weiche zu schalten rufen wir 4x das Interface auf:
- MouseDown (33)
um nach links zu schalten
- MouseUp (32)
um den Schaltstrom linke Taste zu beenden
- MouseDown (34)
um nach rechts zu schalten
- MouseUp (32)
um den Schaltstrom rechte Taste zu beenden
Ein einfaches Fahrpult hat
mindestens
- eine Taste zum Steigern bzw.
Zurücknehmen der Geschwindigkeit
- eine STOP-Taste
- 5 Tasten oder Checkboxen um
die Funktionen ein- und ausschalten zu können
- Wahlmöglichkeit für die
Lokomotiven
Dazu kommen Nothalt-Taste,
Abfragen der Rückmelde-Module usw. usw.
Und nun stellt Euch vor, Ihr wollt
oder müßt eine Änderung in die Senderoutinen einbauen. Ich sage Euch, das ist eine
mehrere Abende füllende Aufgabe.
Ganz abgesehen davon, das man sowieso nicht alle Routinen
erwischt und uns deshalb noch Wochen später das Programm abstürzt,
weil man wieder mal über so eine ' vergessene' Tretmine
gestolpert ist.
Wenn aber alle Tasten eine separate Prozedur aufrufen, genügt
es, die Änderung 1x in dieser Prozedur vorzunehmen.
Da die gesamte Kommunikation mit
dem Interface über diese Prozedur läuft, bietet sie sich auch
dazu an,
diese Kommunikation bei Bedarf mittels Trace
zu protokollieren.
(Aus eigener Erfahrung kann ich Euch sagen, das ein solches
Protokoll bei der Fehlersuche hervorragende Dienste leistet.)
Form |
Private Sub Form_Load()
RS232.PortOpen = True
' ---
Logdatei vorbereiten
LogDatei = App.Path & "\Kommunikationsprotokoll.txt"
LogNr = FreeFile
' ---
Logdatei öffnen
Open Logdatei For Output As LogNr
Call Trace("Protokoll gestartet ...")
End Sub
_____________________________________________________
Private
Sub Form_Unload(Cancel As Integer)
RS232.PortOpen = False
' ---
Logdatei wieder schließen
Call
Trace("Protokoll beendet ...")
Close LogNr
End Sub
|
(Allgemein) |
Option Explicit Dim LogDatei as
string
Dim #LogNr as Integer
________________________________________________________________
Public Sub
Senden(ByVal Befehl As String, ByVal Adresse As String)
Dim B As Integer
Dim A As Integer
Dim Dummy as Variant
Dim strBeschreibung As String
B = Val(Befehl)
A = Val(Adresse)
'
--------------------------------------------------------------
Zeichen senden
RS232.Output = Chr(B) & Chr(A)
'
--------------------------------------------------------------
Zeichen senden Ende
'
--------------------------------------------------------------
Logbuch schreiben
' ---übertragenen Befehl analysieren
Select Case B
Case 0
strBeschreibung = "STOP" &
" (Funktion aus)"
Case 1 To 14
strBeschreibung = "Fahrstufe "
& Trim(Str(B));& " (Funktion aus)"
Case 15
strBeschreibung = "Fahrtrichtungswechsel
(Funktion aus"
Case 16
strBeschreibung = "STOP" &
" (Funktion ein)"
Case 17 To 30
strBeschreibung = "Fahrstufe "
& Trim(Str(B - 16)) & " (Funktion ein)"
Case 31
strBeschreibung = "Fahrtrichtungswechsel
(Funktion ein)"
Case 32
strBeschreibung = "Magnetartikel
abgeschaltet"
Case 33, 34
strBeschreibung = "Magnetartikel
geschaltet"
Case 64
strBeschreibung = "F1 = 0 | F2 = 0 | F3
= 0 | F4 = 0"
Case 65
strBeschreibung = "F1 = 1 | F2 = 0 | F3
= 0 | F4 = 0"
Case 66
strBeschreibung = "F1 = 0 | F2 = 1 | F3
= 0 | F4 = 0"
Case 67
strBeschreibung = "F1 = 1 | F2 = 1 | F3
= 0 | F4 = 0"
Case 68
strBeschreibung = "F1 = 0 | F2 = 0 | F3
= 1 | F4 = 0"
Case 69
strBeschreibung = "F1 = 1 | F2 = 0 | F3
= 1 | F4 = 0"
Case 70
strBeschreibung = "F1 = 0 | F2 = 1 | F3
= 1 | F4 = 0"
Case 71
strBeschreibung = "F1 = 1 | F2 = 1 | F3
= 1 | F4 = 0"
Case 72
strBeschreibung = "F0 = 0 | F2 = 0 | F3
= 0 | F4 = 1"
Case 73
strBeschreibung = "F1 = 1 | F2 = 0 | F3
= 0 | F4 = 1"
Case 74
strBeschreibung = "F1 = 0 | F2 = 1 | F3
= 0 | F4 = 1"
Case 75
strBeschreibung = "F1 = 1 | F2 = 1 | F3
= 0 | F4 = 1"
Case 76
strBeschreibung = "F0 = 0 | F2 = 0 | F3
= 1 | F4 = 1"
Case 77
strBeschreibung = "F1 = 1 | F2 = 0 | F3
= 1 | F4 = 1"
Case 78
strBeschreibung = "F1 = 0 | F2 = 1 | F3
= 1 | F4 = 1"
Case 79
strBeschreibung = "F1 = 1 | F2 = 1 | F3
= 1 | F4 = 1"
Case 96
strBeschreibung = "System freigegeben"
Case 97
strBeschreibung = "NOTHALT ausgelöst"
End Select
' ---
Daten in Logbuch eintragen
Call Trace(strBeschreibung)
'
--------------------------------------------------------------
Logbuch schreiben Ende
End Sub
|