Trace / LogDatei

Selbst wenn man es kaum glauben mag, auch in der EDV kommen schon mal Fehler vor ;-)))
Und ein Mittel, solche Fehler zu finden bzw. zu lokalisieren ist der Trace.

Unter Fachleuten spricht man dann von Trace fahren, Trace aufsetzen oder auch Trace ziehen.
Gemeint ist damit die Beobachtung und Protokollierung von Daten an bestimmten Hardware- oder Softwarepunkten.
Meistens wird ein Trace auf eine Schnittstelle oder Hardware-Interface gerichtet sein, da sich an solchen Punkten
Daten relativ leicht protokollieren lassen. Aber auch Bus-Systeme wie Daten- oder Adress-Bus lassen sich via Trace überwachen.

Aber nicht nur bei der Suche nach Fehlern kann uns ein Trace nützlich sein. Ich habe mehr als 90% meines Programms
geschrieben ohne mit der Anlage gewesen verbunden zu sein. Im Trace konnte ich immer genau sehen, welche
Daten an das Interface gesendet wurden.
Das hat auch den Vorteil, daß bei falscher Programmierung z.B. eine Lok nicht unvermutet losrennt und nur noch durch einen schnellen Griff nach der Nothalt-Taste zum Stehen zu bringen ist.

Eine Überwachung der o.e. Schnittstellen kann durch

erreicht werden.  

Variante 1 kommt wohl nur für die wenigsten in Frage, da sich die Preise solcher Meßgeräte im 4- und 5-stelligen Euro-Bereich bewegen.
Variante 2 wird uns von Windows vermasselt: sobald ein Programm die Com-Schnittstelle belegt hat, wird jeder Versuch
eines anderen Programms diese Schnittstelle zu benutzen, abgewiesen.
Bleibt uns folglich nur die 3. Möglichkeit.

Wir brauchen in unserem Programm einen Bereich, der sich um die Protokollierung der Daten kümmert.
Und da bietet sich wieder der Weg über eine Prozedur an.

(Allgemein)
Public Sub Trace(ByVal strText As String)
Static Zeitpunkt As Variant

' --- Datum und Uhrzeit vorbereiten
Zeitpunkt = Format(Date, "DD.MM.YY") & Space(2) & Format(Time, "hh:mm:ss") & Space(3)

' --- Daten in Logdatei schreiben
Print #LogNr, Zeitpunkt & strText

End Sub

Zuvor müssen wir natürlich die Datei öffnen:

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

' --- 1. Eintrag in die Logdatei vornehmen
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

Hierbei ist zu beachten:
der Befehl: Open Logdatei For Output ... erzeugt eine neue Datei. Das heißt, die alten Daten werden gelöscht.
Wer das nicht will, verwende den Befehl
Open Logdatei For Append ... .
Dann werden alle weiteren Daten an die vorhandenen angehängt.

>Beispiel (Ausschnitt aus einem meiner Traces)

Uhrzeit   Adr. Befehl
12:42:17   050   000   STOP (Funktion aus)
12:42:19   050   015   Fahrtrichtungswechsel (Funktion aus) 
12:42:19   050   003   Fahrstufe 3 (Funktion aus)
12:42:25   050   000   STOP (Funktion aus)
12:42:28   050   002   Fahrstufe 2 (Funktion aus)
12:42:30   050   000   STOP (Funktion aus)
12:42:54   010   033   Magnetartikel geschaltet
12:42:54   006   033   Magnetartikel geschaltet
12:42:54   007   034   Magnetartikel geschaltet
12:42:55   013   033   Magnetartikel geschaltet
12:42:55   014   034   Magnetartikel geschaltet
12:42:55   032   021   Fahrstufe 5 (Funktion ein)
12:43:22   060   020   Fahrstufe 4 (Funktion ein)
12:44:22   060   016   STOP (Funktion ein)