ich muss ein Zykluszeit-Problem bei einem Can-Teilnehmer untersuchen und möchte mir dazu die Zykluszeit einiger Can-Nachrichten grafisch Darstellen. Die in der Standardübersicht dargestellte Zykluszeit flackert zu schnell, um genug zu erkennen.
Der nachfolgende Quellcode soll die Zykluszeit in ein Signal überführen, welches dann geplotet werden kann.
Code: Select all
Option Explicit
'------------------------------------------------------------------------------
'FILE DESCRIPTION: Keine Beschreibung angegeben.
'------------------------------------------------------------------------------
Sub Timeing_of_Msg()
'baseded on Sub WaitForID100() from Sample.pem
' To view the output messages of this macro, open the Output Window and
' select the "Macro" tab
Dim UseConn, conn
' Find the first enabled connection in the project that uses the CAN protocol
Set UseConn = Nothing
For Each conn In Connections
If conn.IsEnabled And conn.Protocol = peProtocolCAN Then
Set UseConn = conn
Exit For
End If
Next
If UseConn Is Nothing Then
MsgBox "Project does not contain any enabled CAN connections"
Exit Sub
End If
' Create a new client and connect it to the same Net that the
' found connection uses
Dim MyClient, PcanConn
'Set MyClient = CreateObject("PCAN3.PCANClient")
Set MyClient = CreateObject("PCAN3.PCANClient")
MyClient.Device = UseConn.Device
MyClient.Name = "Macro"
Set PcanConn = MyClient.Connections.Add(UseConn.CommunicationObject.NetName)
If Not PcanConn.IsConnected Then
MsgBox "Cannot connect to net " & PcanConn.NetName
Exit Sub
End If
Dim MsgID
MsgID = InputBox("Please enter MSG ID Format: &H192", "", "&H192")
PcanConn.RegisterMsg MsgID, MsgID, False, False
Dim Timestamp
Dim Timestamp_old
Dim Timestamp_delta
Timestamp_old = 0
Dim DeltaTime
Set DeltaTime = Signals("DeltaTime")
If DeltaTime Is Nothing Then
' Signal not found, create and initialize new one
Set DeltaTime = Signals.Add("DeltaTime")
DeltaTime.DataType = peDataTypeFloat
End If
Dim Timeout
Dim RcvMsg
Set RcvMsg = MyClient.Messages.Add
Do
Timeout = 1000
Do While Not RcvMsg.Read And Timeout > 0
' Wait for an incoming message
Wait 1
Timeout = Timeout - 1
Loop
If Timeout > 0 Then
If RcvMsg.LastError = pcanErrorOk Then
Timestamp = RcvMsg.Timestamp
if Timestamp_old > 0 then
Timestamp_delta = Timestamp - Timestamp_old
Else
Timestamp_delta = 0
End If
Timestamp_old = Timestamp
'PrintToOutputWindow "recived on: " & Timestamp
PrintToOutputWindow "delta between msg: " & Timestamp_delta
DeltaTime.Value = Timestamp_delta
'PrintToOutputWindow "-----"
End If
Else
PrintToOutputWindow "Timeout!"
DeltaTime.Value = 0
Timestamp_old = 0
End IF
Loop While 1
End Sub
" Die Makrodatei enthielt den folgenden Fehler und wird deaktiviert:
Line 1: Macro"
Die Meldung ist nicht sehr hilfreich und tatsächlich wird der Fehler durch Zeile 27: "Set MyClient = CreateObject("PCAN3.PCANClient")" ausgelöst. Der Code bis zu dieser Zeile ergibt keine Fehlermeldung, durch ergänzen nur dieser Zeile kommt die Meldung.
Die Codezeile kommt aus dem Beispiel WaitForID100, welches tatsächlich ebenfalls nicht funktioniert und den selben Fehler produziert.
Für mich ergeben sich nun folgende Fragen:
- Ist der Fehler für das Makro bekannt?
- Ist in meinem System vielleicht irgendwas falsch konfiguriert oder funktioniert es nicht unter Windows 10?
- Gibt es eine einfachere/andere Möglichkeit die Zykluszeit grafisch darzustellen?
Ich würde mich über Ideen/Tipps sehr freuen!
MfG
Moritz