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:

Ein einfaches Fahrpult hat mindestens

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