Hallo,
kann man im PCAN Explorer einen Filter setzen, der eine bestimmtee ID nur durchlässt, wenn sowohl die ID als auch der Inhalt einer bestimmten Bedingung entspricht?
Z.B. möchte ich die ID 0x100 nur dann empfangen, wenn in Byte 0 der Wert größe 200 ist. Geht so etwas?
Die ID wird alle 5ms gesendet und irgendwo mittendrin tritt die Nachricht mit einem großen Wert in Byte 0 auf. Es wäre sehr mühsam die ganze Traceliste durchzusehen und genau die eine ID zu finden, die diesen großen Wert enthält.
Mfg
Filter setzen, der den Inhalt einer CAN-Nachricht auswertet
- PEAK-Support
- Sales & Support
- Posts: 1646
- Joined: Fri 10. Sep 2010, 19:34
Re: Filter setzen, der den Inhalt einer CAN-Nachricht auswer
Die Filtermechanismen im PCAN-Explorer 5 erlauben das Filtern von
- CAN ID
- ACC Code/Mask (SJA1000 based)
- Symboldatei (es werden nur die in der SYM Datei angelegten Daten angezeigt)
- Selektierte Symbole (es werden nur die in der SYM Datei angelegten Daten angezeigt die vorher selektiert wurden)
- Fehler Frames (Errorframes)
- J1939 spezifische Werte Wenn Sie Filtern wollen nach ID und Dateninhalt, so ist dies aber sehr einfach über ein Script möglich. Das kann entweder Signalbasierend oder HEX Datenbasierend gemacht werden.
- CAN ID
- ACC Code/Mask (SJA1000 based)
- Symboldatei (es werden nur die in der SYM Datei angelegten Daten angezeigt)
- Selektierte Symbole (es werden nur die in der SYM Datei angelegten Daten angezeigt die vorher selektiert wurden)
- Fehler Frames (Errorframes)
- J1939 spezifische Werte Wenn Sie Filtern wollen nach ID und Dateninhalt, so ist dies aber sehr einfach über ein Script möglich. Das kann entweder Signalbasierend oder HEX Datenbasierend gemacht werden.
--------------------------------
PEAK-System Technik
Technical Support Team
support[at]peak-system.com
-------------------------------
PEAK-System Technik
Technical Support Team
support[at]peak-system.com
-------------------------------
Re: Filter setzen, der den Inhalt einer CAN-Nachricht auswer
Und wie würde solch ein Script, das HEX-Datenbasierend ist, beispielsweise aussehen?
Jacky
- PEAK-Support
- Sales & Support
- Posts: 1646
- Joined: Fri 10. Sep 2010, 19:34
Re: Filter setzen, der den Inhalt einer CAN-Nachricht auswer
Wenn man im PE5 HEX basierend mit Macros arbeiten möchte, was eigentlich nicht unbedingt Sinn und Zweck dieses Tools ist, dass macht man dann wohl besser mit einem kleinen C++/C# oder Delphi, Python oder Java Programm unter Verwendung der PCAN-Basic API, dann kann das so aussehen wie im Script unten. Sobald eine CAN Nachricht mit DLC >0 und Datenbyte 1 = 0x80 empfangen wird, wird eine Info im Macro Ausgabefenster angezeigt - hier kann dann eine andere Routine aufrufen oder was auch immer machen (z.B. ein Tracer starten, CAN Nachrichten versenden usw.)
Wenn die CAN ID 0x001 empfangen wird beendet sich das Macro, und gibt die Anzahl der CAN Frames aus in denen das erste Byte 0x80 war.
Wenn die CAN ID 0x001 empfangen wird beendet sich das Macro, und gibt die Anzahl der CAN Frames aus in denen das erste Byte 0x80 war.
Code: Select all
'------------------------------------------------------------------------------
'FILE DESCRIPTION:RecvCAN Data
'------------------------------------------------------------------------------
Sub RecvCANData()
'DESCRIPTION: Read CAN Data - see if in a defined CAN Msg data one Bit is set
' To view the output messages of this macro, open the Output Window and
' select the "Macro" tab
Dim Myclient, MyConn
Set MyClient = CreateObject("Pcan3.PCANClient")
MyClient.Name = "RecvCANDataMacro"
If Connections.Count > 0 And Connections(1).Protocol = peProtocolCAN Then
' Connect to the same Net that the first connection in the
' current project uses
Dim obj
Set obj = Connections(1).CommunicationObject
MyClient.Device = obj.Parent.Device
Set MyConn = MyClient.Connections.Add(obj.NetName)
Else
' Connect to the default "TestNet"
Set MyConn = MyClient.Connections.Add("TestNet")
End IF
If MyConn.IsConnected = False Then
MsgBox "Cannot connect to Net"
Exit Sub
End If
' Optinal Filters - reduce workload
' MyConn.RegisterMsg &H000, &H800, False, False
' or
' MyConn.RegisterMsg &H00000000, &H1FFFFFFF, True, True
' or
' MyConn.RegisterMsg &H600, &H1FFFFFFF, True, True
PrintToOutputWindow "Start the Read...."
i = 0
Dim RcvMsg
Set RcvMsg = MyClient.Messages.Add
Do
Do While not RcvMsg.Read
' Wait for a received message
Wait(10) ' Prevent 100% CPU load
Loop
If RcvMsg.LastError = pcanErrorOk Then
If RcvMsg.DLC > 0 Then ' Yes, >0 DLC ist OK
If RcvMsg.Data(0) AND &h80 Then
PrintToOutputWindow "Received CAN ID: " & CStr(RcvMsg.ID)
PrintToOutputWindow "Data0 is set to 0x80"
i = i + 1
End If
End If
End IF
Loop While RcvMsg.ID <> &H001 ' Stop when receiving ID 0x001
PrintToOutputWindow "Finished, " & CStr(i) & " messages 0x80 in Data0 received !"
End Sub
--------------------------------
PEAK-System Technik
Technical Support Team
support[at]peak-system.com
-------------------------------
PEAK-System Technik
Technical Support Team
support[at]peak-system.com
-------------------------------
Re: Filter setzen, der den Inhalt einer CAN-Nachricht auswer
Danke für das Beispiel, werde es bei Gelegenheit ausprobieren.
Jacky
- PEAK-Support
- Sales & Support
- Posts: 1646
- Joined: Fri 10. Sep 2010, 19:34
Re: Filter setzen, der den Inhalt einer CAN-Nachricht auswer
Der PE5 wird mit Bsp. Scripten ausgeliefert. Diese befinden sich im Macros Verzeichnis in der Datei Sample.pem
Dort finde Sie auch Funktionen die ähnlich arbeiten:
Dort finde Sie auch Funktionen die ähnlich arbeiten:
Code: Select all
Sub WaitForID100()
'DESCRIPTION: Waits until CAN-ID 100h is received
' 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")
MyClient.Name = "Macro"
MyClient.Device = UseConn.Device
Set PcanConn = MyClient.Connections.Add(UseConn.CommunicationObject.NetName)
PcanConn.RegisterMsg &H100, &H200, False, False
i = 0
Dim RcvMsg
Set RcvMsg = MyClient.Messages.Add
Do
Do While not RcvMsg.Read
' Wait for a received message
Loop
If RcvMsg.LastError = pcanErrorOk Then
PrintToOutputWindow "Received !"
i = i + 1
End IF
Loop While RcvMsg.ID <> &H100
PrintToOutputWindow "Finished, " & CStr(i) & " messages received !"
End Sub
--------------------------------
PEAK-System Technik
Technical Support Team
support[at]peak-system.com
-------------------------------
PEAK-System Technik
Technical Support Team
support[at]peak-system.com
-------------------------------