OnMessageReceived

Comprehensive CAN monitor for Windows® and its add-ins: Plotter, CANdb Import, Instruments Panel, and J1939
Post Reply
jfbenitez
Posts: 1
Joined: Tue 13. Jan 2015, 09:41

OnMessageReceived

Post by jfbenitez » Tue 13. Jan 2015, 10:26

Hello,

I'm trying to use the "OnMessageReceived" event with J1939 symbols, but this don't work.
My program:

Code: Select all

Sub J1939Node_OnMessageReceived(node, count)
	Dim RcvMsg
	Set RcvMsg = CreateObject("J1939Pcan.PCANJ1939RcvMsg")
	If node.Read(RcvMsg)Then
		PrintToOutputWindow RcvMsg.Timestamp & ">" & count & " ID: " & RcvMsg.ID & " PGN: " & RcvMsg.PGN
		If RcvMsg.PGN = 65304 Then
			Dim dow, dt, mth, ye, h, mn ,s

			Set dow = Signals("DayOfWeek")
			Set dt = Signals("Date")
			Set mth = Signals("Month")
			Set ye = Signals("Year")
			Set h = Signals("Hour")
			Set mn = Signals("Min")
			Set s = Signals("Sec")
			
			PrintToOutputWindow dow.Value & " " & dt.Value & "/" & mth.value & "/" & ye.value & " " & h.value & ":" & mn.value & ":" & s.value
		End If
	Else
		PrintToOutputWindow "last error: " & node.LastError
	End If
End Sub
Can some one help me ?
Thanks,

Jean-Félix

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

Re: OnMessageReceived

Post by K.Wolf » Wed 14. Jan 2015, 11:45

Hello,

at the time when the OnMessageReceived event is triggered, PCAN-Explorer has already read the received message(s) from the J1939Node's queue, since you're accessing the J1939Node object PCAN-Explorer uses internally for its own communication.
Perhaps this code could solve your problem, but it requires to run in a loop:

Code: Select all

  Dim dow, dt, mth, ye, h, mn, s
  Set dow = Signals("DayOfWeek")
  Set dt = Signals("Date")
  Set mth = Signals("Month")
  Set ye = Signals("Year")
  Set h = Signals("Hour")
  Set mn = Signals("Min")
  Set s = Signals("Sec")

  Dim OldValueChangeTime
  OldValueChangeTime = dow.ValueChangeTime
  While True
    ' Wait for PGN 65304 to be received
    Do While dow.ValueChangeTime = OldValueChangeTime
      Wait 50
    Loop
    PrintToOutputWindow dow.Value & " " & dt.Value & "/" & mth.value & "/" & ye.value & " " & h.value & ":" & mn.value & ":" & s.value
    OldValueChangeTime = dow.ValueChangeTime
  Wend

Post Reply