Line 91 Lossless Trace

Comprehensive CAN monitor for Windows® and its add-ins: Plotter, CANdb Import, Instruments Panel, and J1939
Post Reply
Moritz_turbos
Posts: 10
Joined: Mon 11. Nov 2013, 16:12

Line 91 Lossless Trace

Post by Moritz_turbos » Thu 30. Jan 2014, 11:50

Hallo liebe Gemeinde,

falls mein Problem durch simple Änderungen zu lösen ist bitte ich um entschuldigung, da ich ein Neuling in Sachen Makros bin.

Ich habe mich an dem Sample_Makro Lossless_Trace bedient und möchte mit diesem nun einen Dauerlauftest in mehrer Trace-Dateien speichern.

Ich habe nichts verändert bis auf: Name, Speicherort, Verbindung und CAN-Frames pro Datei.
Wenn ich das Programm ausführe kommt folgende Fehlermeldung: Line 91: Objekt erforderlich: 'New Tracer'.
Fehlermeldung_lossless trace.PNG
Fehlermeldung_lossless trace.PNG (120.71 KiB) Viewed 5687 times
Wenn man dann "Ja" klickt um die Datei zu bearbeiten springt der Cursor zu einer bestimmten Stelle:
bearbeiten_lossless trace.PNG
bearbeiten_lossless trace.PNG (52.63 KiB) Viewed 5687 times
.
Ich hoffe ihr könnt mir helfen.

Gruß Moritz

M.Maidhof
Support
Support
Posts: 1753
Joined: Wed 22. Sep 2010, 14:00

Re: Line 91 Lossless Trace

Post by M.Maidhof » Thu 30. Jan 2014, 19:02

Hallo,

es waere sinnvoll wenn Sie das veraenderte Macro hier mal posten wuerden (oder an unsere support email Adresse senden), vielleicht hat sich ja doch beim Editieren ein Fehler eingeschlichen.

Mit freundlichen Gruessen

Michael Maidhof

Moritz_turbos
Posts: 10
Joined: Mon 11. Nov 2013, 16:12

Re: Line 91 Lossless Trace

Post by Moritz_turbos » Fri 31. Jan 2014, 07:38

'------------------------------------------------------------------------------
'FILE DESCRIPTION: Dauerlauf
'------------------------------------------------------------------------------
Sub Dauerschalttest()
'DESCRIPTION: Traces messages without losses and stores the data in multiple trace files
'Date: 30.01.2014

' Modify as required
const DefaultDestDir = "C:\Test"
const DefaultConnection = "Messdaten_1@pcan_pci"
const MessagesPerTracer = 1000

' Explicit Variable declarations
Dim CurrentTracer, NextTracer, NewTracer
Dim doc, wnd
Dim TracerNumber, NewTop
Dim IsRunning
Dim DestDir, Connection

' Prompt for the destination directory
DestDir = InputBox("Destination Directory:", "LosslessTrace", DefaultDestDir)
If DestDir = "" Then Exit Sub

' Make sure the selected directory exists
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(DestDir) Then
MsgBox "The selected directory does not exist!",,"LosslessTrace"
Exit Sub
End If

Set NextTracer = Nothing
IsRunning = True
TracerNumber = 0
NewTop = 250

If ActiveProject Is Nothing Then
' Create and configure a new project
NewProject "LoslessTrace", ""
' Prompt for connection
Connection = InputBox("Select Connection:", "LosslessTrace", DefaultConnection)
Dim conn
Set conn = Connections.Add(Connection)
conn.IsEnabled = True
If Not conn.IsEnabled Then
MsgBox "Error while enabling the connection!",,"LosslessTrace"
Exit Sub
End If
End If

Set doc = Documents.Add(peDocumentKindTrace)
Set wnd = doc.ActiveWindow
wnd.Left = 0
wnd.Top = 0
wnd.Height = 250
wnd.Width = 500

Set CurrentTracer = wnd.Object.Tracer
CurrentTracer.BufferType = peTraceBufferTypeLinear
CurrentTracer.BufferSize = MessagesPerTracer
CurrentTracer.Start

Do While IsRunning

' Tracer records data until the filling level reaches 95%
Do While IsRunning And (CurrentTracer.FillingLevel < 95)

' Prepare next tracer at a filling level of 90%
If (NextTracer Is Nothing) And (CurrentTracer.FillingLevel > 90) Then
Set doc = Documents.Add(peDocumentKindTrace)
Set wnd = doc.ActiveWindow
' Arrange new tracer window
wnd.Left = 0
wnd.Top = NewTop
wnd.Height = 250
wnd.Width = 500
if (NewTop = 0) Then
NewTop = 250
Else
NewTop = 0
End If
Set NextTracer = wnd.Object.Tracer
NextTracer.BufferType = peTraceBufferTypeLinear
NextTracer.BufferSize = MessagesPerTracer
End If
Wait 50
IsRunning = CurrentTracer.TraceState = peTraceStarted
Loop
If IsRunning Then
NextTracer.Start
CurrentTracer.Stop
End If

' Save data of current tracer
If CurrentTracer.FillingLevel > 0 Then
TracerNumber = TracerNumber + 1
CurrentTracer.Document.Save DestDir & "\Trace" & TracerNumber & ".trc"
' Wait until data is saved
Do While CurrentTracer.TraceState = peTraceSaving
Wait 10
Loop
Wait 100
End If
' Close old tracer window
CurrentTracer.Document.Close peSaveChangesNo

Set CurrentTracer = NextTracer
Set NextTracer = Nothing
Loop

End Sub

K.Wolf
Software Development
Software Development
Posts: 141
Joined: Wed 22. Sep 2010, 15:37

Re: Line 91 Lossless Trace

Post by K.Wolf » Fri 31. Jan 2014, 11:45

Hallo,

das Problem ist hierbei die verkleinerte Puffergröße. Da nur nur 1000 Nachrichten gespeichert werden, beginnt das Makro frühestens bei einem Füllstand von 900 den nächsten Tracer vorzubereiten. Bei 950 wäre dann der Zeitpunkt erreicht, diesen nächsten Tracer zu starten und den alten zu stoppen. Je nachdem, wie schnell die Nachrichten reinkommen, ist hier wohl nicht genug Zeit vorhanden, den nächsten Tracer vorzubereiten, also bis zum Füllstand 950 ist das nicht abgeschlossen. Dann ist die Variable NextTracer nicht initialisiert, wenn dessen Methode Start aufgerufen wird und es kommt zu dem beschriebenen Fehler.

Das Lossless-Trace Makro wurde in PCAN-Explorer v5.3.2 im April 2013 komplett überholt. Ich empfehle, die neue Version zu verwenden, da diese wesentlich besser funktioniert, gerade wenn über einen längeren Zeitraum aufgezeichnet wird und sehr viele Traces entstehen. Das neue Makro legt nicht ständig neue Fenster an und schließt die alten, sondern verwendet immer nur 2 Tracer im Wechsel und schließt keines. Dadurch wurde die Hauptschleife des Makros auch viel einfacher und übersichtlicher. Außerdem kann der beschriebene Fehler auch bei kleineren Puffergrößen nicht mehr auftreten.

Moritz_turbos
Posts: 10
Joined: Mon 11. Nov 2013, 16:12

Re: Line 91 Lossless Trace

Post by Moritz_turbos » Fri 31. Jan 2014, 13:06

Hallo,

vielen Dank für die Hilfe und die verständliche, ausführliche Erklärung.

Gruß Moritz

Post Reply