Re: Logging CAN messages

Kees Zagers <[email protected]> Tue, 3 Nov 2020 20:51:12 +0100
Newsgroups gmane.comp.hardware.bus.can
Organization SI-Kwadraat B.V.
Message-ID <[email protected]>
Hi John,

Nice job. Fully agree with you that you have to do such a job in C and=20
forget Python.

Just one remark about the fake CAN message with the error flag. I guess=20
it would be good to use the so-called "all message mode" of the PIC32=20
controller. In that case you still have the information of the message=20
as it was received (maybe the correct identifier and for sure the=20
timestamp). Just add the error flag into the message on a bit which is=20
not used. This is what I implemented in my CANLOG command.

The PIC32 in my system (PIC32MX795) has 128 kB of RAM of which I can use=20
only 32 kB maximum for buffering, because of the existing firmware. By=20
using FIFO's of both CAN controllers and setting up the circular buffer=20
over these FIFO's it would be possible to store a maximum of 2048=20
messages. Maybe not enough, but it is a low cost solution.

Cheers

Kees

Op 3-11-2020 om 18:43 schreef John Dammeyer:
> Hi Kees,
> To make this project work I used 10Mbps SPI.  The Pi was the master.  Ori=
ginally on the Pi side I started with Python and then threw it into the tra=
sh bin pretty quickly.  Hard to debug and slow as molasses.
> Switching to C made all the difference.
>
> On the PIC32 side the system essentially recorded messages into a FIFO 40=
96 records long with each record 16 bytes in size.  The CAN interrupt routi=
ne just read out four 32 bit words into the record and incremented the queu=
e pointer.  The compiled C code was examined at the assembler level to ensu=
re that the code was as fast as hand coding it in assembler.  Same with rea=
ding it from the FIFO.
>
> At the other end, the SPI data is also blocked into 16 byte records and t=
he hardware set up so the master can do a block transfer of 16 bytes at ful=
l speed.   So if a 500kpbs CAN messages takes about 250 uS on the bus then =
the transfer of the 16 bytes to the Pi takes 1.6uS done purely by the hardw=
are.  An interrupt to the PIC32 when all 16 bytes were transferred.
>
> At the Pi end data written into files and a new file started after 4000 m=
essages were received.  Three IDs were created for GPS information.  Here's=
 a sample.
>
> STU Serial #000025  (Log #106)
> Date: 2018-02-16 16:28:02
> 01575000,16:28:02.893.75,0x18,0x7E,0x17,0x00,0x7F,0x61,0x00,0x00,0x03C
> 01575001,16:28:02.898.75,0x19,0x7E,0x17,0x00,0xA9,0x60,0x00,0x00,0x03C
> . . .
> 01575188,16:28:03.830.25,0xE1,0x69,0x25,0x1F,0x84,0xA3,0xFC,0xFD,0xFFD # =
GPS Pos:  52.2545633,-3.3774716
> 01575189,16:28:03.830.25,0xCA,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0xFFE # =
GPS Alt: 199.4
> 01575190,16:28:03.830.25,0x12,0x02,0x10,0x10,0x1C,0x0D,0x00,0x00,0xFFF # =
GPS Time:2018/28/16-16:28:13.0
> . . .
>
> Post processing etc. all done after the fact since this was purely a logg=
ing application from my perspective.  Other programmers in the team dealt w=
ith sending the files up to the cloud and cleaning up folders.
>
> For my new client my only additional task will be to create 'fake' CAN ID=
s with ERROR flag information.  The client application will need to parse t=
he message files looking for these perhaps other messages and then can back=
 track as far as desired to determine what might have gone wrong.
>
> That's if they decide to go in this direction.
> John Dammeyer
>
>
>> -----Original Message-----
>> From: [email protected] [mailto:canlist-owner@vector-i=
nformatik.com] On Behalf Of Kees Zagers
>> Sent: November-03-20 2:25 AM
>> To: [email protected]
>> Subject: Re: [CANLIST] Logging CAN messages
>>
>> Hi John,
>>
>> Looks like a great product. The PIC32 is a nice controller for a CAN
>> front end system. Mainly the flexibility in the CAN controller makes it
>> very suitable.
>>
>> BTW I also added the multiple FIFO buffers (1024 messages) to the
>> firmware, to use it as front end for an RPi. The prototype worked,
>> unfortunately the customer did not get the order for production. For the
>> interface to the Pi we used the I2C, which is better standardized than
>> the SPI in my opinion. For the new CAN FD and upcoming XL however I2C
>> will not be fast enough.
>>
>> Kees
>>
>>
>> Op 1-11-2020 om 17:43 schreef John Dammeyer:
>>> Thanks Kees,
>>> I've passed on the information for your product to my client.  It looks=
 like I'm also going to be able to get one of these.  I've put a
>> photo on my web site since I don't remember if attachments work with thi=
s forum.
>>> http://www.autoartisans.com/CAN/STU-2.jpg
>>>
>>> It's got a PIC32 front end and connects via SPI to a PiZeroW and has GP=
S and RTC.  Starts logging c/w RTC based time stamps on
>> power up and once the Pi is alive and GPS TOD information is there it tr=
ansfers the files onto the Pi SD card.  Each file holds 4000
>> messages which include TOD, Lat/Long/Altitude once per second.
>>> The only change to the PIC32 firmware will be info 'faked' CAN messages=
 reporting bus error conditions mixed in with the regular
>> received CAN messages.  But that too will cost the customer so when I me=
et with them next week I'll know more.
>>> John Dammeyer
>>>
>>>
>>>
>>>> -----Original Message-----
>>>> From: [email protected] [mailto:canlist-owner@vector=
-informatik.com] On Behalf Of [email protected]
>>>> Sent: November-01-20 1:12 AM
>>>> To: [email protected]
>>>> Subject: RE: [CANLIST] Logging CAN messages
>>>>
>>>> Hello John,
>>>>
>>>> Just one remark. I was not suggesting that you (or your customer) woul=
d
>>>> make the change in the firmware. It would be an upgrade of the existin=
g
>>>> software and done by myself.
>>>>
>>>> Kees
>>>>
>>>>
>>>> John Dammeyer schreef op 31.10.2020 21:45:
>>>>> Hi Kees,
>>>>>
>>>>> That product is close to what they need.  Nicely done!
>>>>>
>>>>> Although when I had the scope on their system last Thursday it looks
>>>>> like the messages were running at least every 10mS.  I think they sai=
d
>>>>> 100Hz, 50Hz and 20Hz intervals.  I'd say I'd have to have the ability
>>>>> to store at least 5,000 messages at 500kbps.
>>>>>
>>>>> A few years ago I did do a similar logging project.  They wanted the
>>>>> data stored on a Raspberry PiZeroW and then upload to the cloud via
>>>>> WiFi when available.
>>>>>
>>>>> We found that no matter what we did the Pi still took about 12 second=
s
>>>>> to boot.  Ultimately what I did was design and build a PIC32 front en=
d
>>>>> to timestamp and queue all messages.  Once the Pi was awake the PIC32
>>>>> became an SPI slave to the Pi which then pulled up the stored
>>>>> messages.
>>>>>
>>>>> Unfortunately I don't have access to the hardware or legally the
>>>>> software.  I was hoping that there might be something that uses a
>>>>> KVaser or Port or some other USB dongle and a PC application that
>>>>> would do this.
>>>>>
>>>>> I'll talk to the client and mention your product.  Not that intereste=
d
>>>>> in making changes in Basic though.
>>>>>
>>>>> Thanks again
>>>>>
>>>>> John Dammeyer
>>>>>
>>>>> FROM: [email protected]
>>>>> [mailto:[email protected]] ON BEHALF OF Kees Zagers
>>>>> SENT: October-31-20 11:53 AM
>>>>> TO: [email protected]
>>>>> SUBJECT: Re: [CANLIST] Logging CAN messages
>>>>>
>>>>> Hi John,
>>>>>
>>>>> In principle I created this functionality in my SI2CBB
>>>>> (www.unicanner.com [1]). The embedded hardware has all the CAN
>>>>> functionality in this case. The CANLOG command I created has the even=
t
>>>>> logging possibility. Button (connected to one of the Arduino pins),
>>>>> specific message and error event can be defined by the user. The only
>>>>> restriction is the fact that I used the standard circular FIFO buffer
>>>>> of the built-in CAN controller of the Microchip PIC32. This buffer
>>>>> only contains 32 messages. So the pre-trigger information is 32
>>>>> messages, which probably will be a fraction of the messages during th=
e
>>>>> last five seconds. The post-trigger information can be as long as you
>>>>> want. The PIC32 has the possibility to create 32 of these FIFO buffer=
s
>>>>> in RAM, where every FIFO can be linked to one or more filters and
>>>>> masks. If all FIFO's are linked to the same filter and mask, they can
>>>>> be cascaded, which gives us a buffer of 1024 messages. The problem
>>>>> however in this case it is not circular; if the last FIFO is full it
>>>>> stops. I have to check, but it should be possible to detect the buffe=
r
>>>>> full interrupt of the last FIFO and return to the first FIFO again. I=
n
>>>>> that case we can have at least 1 second of the pre-trigger messages i=
n
>>>>> a normal CANbus system.
>>>>>
>>>>> Anyway it is difficult to say how large the circular buffer should be
>>>>> to contain the information of 5 or 10 seconds, because it depends of
>>>>> course on the bus speed and bus load.
>>>>>
>>>>> The result of the logging can be directly uploaded to a PC through th=
e
>>>>> USB interface or locally stored on an SD flash card.
>>>>>
>>>>> So far my input.
>>>>>
>>>>> Cheers
>>>>>
>>>>> Kees
>>>>>
>>>>> Op 30-10-2020 om 06:50 schreef John Dammeyer:
>>>>>
>>>>>> I haven't kept up to date with newer developments over the last few
>>>>>> years. My Lawicel CANUSB, RM CANUSB and monitor program plus
>>>>>> whatever I've written has been adequate for the tasks I do.
>>>>>>
>>>>>> I've been asked to determine if a tool exists that can log CAN
>>>>>> messages in a circular buffer. Say 10 seconds worth and when a
>>>>>> trigger like either a message or say an error flag occurs the
>>>>>> logging to the circular buffer goes for 5 seconds and then is
>>>>>> stopped and saved.
>>>>>>
>>>>>> Essentially the system shows random faults and they'd like to know
>>>>>> what happened for 5 seconds on either side of the event.
>>>>>>
>>>>>> The even can be: a contact closure like a button pressed by an
>>>>>> operator; a specific message, Bus error as signaled by an error
>>>>>> flag.
>>>>>>
>>>>>> Does a tool like that exist?
>>>>>>
>>>>>> Thanks
>>>>>>
>>>>>> John Dammeyer
>>>>>>
>>>>>> "ELS! Nothing else works as well for your Lathe"
>>>>>>
>>>>>> Automation Artisans Inc.
>>>>>>
>>>>>> www dot autoartisans dot com
>>>>> --
>>>>>
>>>>> Kees Zagers
>>>>>
>>>>> SI-KWADRAAT B.V.
>>>>>
>>>>> Van Kemenadelaan 13
>>>>>
>>>>> 5674 PP  NUENEN
>>>>>
>>>>> Tel. +31(0)40-2839582
>>>>>
>>>>> [email protected]
>>>>>
>>>>>
>>>>> Links:
>>>>> ------
>>>>> [1] http://www.unicanner.com
>>>> --
>>>> Archives and useful links: http://groups.yahoo.com/group/CANbus
>>>> Subscribe and unsubscribe at www.vector.com/canlist/
>>>> Report any problems to <[email protected]>
>>> --
>>> Archives and useful links: http://groups.yahoo.com/group/CANbus
>>> Subscribe and unsubscribe at www.vector.com/canlist/
>>> Report any problems to <[email protected]>
>> --
>> Archives and useful links: http://groups.yahoo.com/group/CANbus
>> Subscribe and unsubscribe at www.vector.com/canlist/
>> Report any problems to <[email protected]>
> --
> Archives and useful links: http://groups.yahoo.com/group/CANbus
> Subscribe and unsubscribe at www.vector.com/canlist/
> Report any problems to <[email protected]>

--
Archives and useful links: http://groups.yahoo.com/group/CANbus
Subscribe and unsubscribe at www.vector.com/canlist/
Report any problems to <[email protected]>