Record Function for CAN Monitor

It would be very handy to have the CAN Monitor be able to record to a file, with time stamps for each entry. Right now, I have to hook up a separate CAN analyzer tool, run its own separate software, to record a file, so that I can look for items in the data. If RealDash can already show the data live, it would seem to be a small leap to give an option record the data as it comes in. Use system time to build a time stamp on each line or entry. Is this a possibility?

Recording to a csv text file could be done (without playback option). Give an example of what the content of the file should look like.

Maybe something like this?

time, id, b1, b2,, b3, b4, b5, b6, b7, b8
6.1.2021, 12:31:26.365, 0x1234, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
6.1.2021, 12:31:26.465, 0x1235, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
6.1.2021, 12:31:26.565, 0x1236, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
...
 id   b1  b2   b3   b4   b5   b6   b7   b8  count    time

Without “,”, since they interfere with the perception of information, only spaces and a timer with a date at the end of the line and not at the beginning!

Edit:

If id = 11 Bit, the zeros outside the transition “x” can be reduced …

0х453

It would not be easily readable in for example excel, as it is not a csv (comma separated values).

Yes, exactly! A CSV is my preferred output, as it imports into other software easily. Here is an example output from CANalyst II software, including a header it outputs:

Index	System Time	Time Stamp	Channel	Direction	Frame ID	Type	Format	DLC	Data
0	20:51:46.779	0x575960	ch2	Receive	0x0410	Data	Standard	0x04	x| 00 0D FF FF 
1	20:51:46.779	0x57597E	ch2	Receive	0x0312	Data	Standard	0x08	x| 07 04 09 CA 09 CA 09 24 
2	20:51:46.779	0x575980	ch2	Receive	0x0308	Data	Standard	0x08	x| 00 00 00 02 00 51 BB 3F 
3	20:51:46.779	0x575983	ch2	Receive	0x0210	Data	Standard	0x08	x| 02 00 00 00 40 00 82 00 
4	20:51:46.779	0x575985	ch2	Receive	0x0212	Data	Standard	0x08	x| 03 F3 49 24 69 24 A9 24 
5	20:51:46.779	0x57598E	ch2	Receive	0x0230	Data	Standard	0x01	x| 08 
6	20:51:46.808	0x5759BF	ch2	Receive	0x0338	Data	Standard	0x08	x| FF FF 1F FF FF FF FF FF 
7	20:51:46.808	0x5759C1	ch2	Receive	0x0218	Data	Standard	0x08	x| 80 00 DD 48 23 80 3E 72 
8	20:51:46.808	0x5759C4	ch2	Receive	0x0418	Data	Standard	0x08	x| 50 53 63 04 DD 00 C0 00 
9	20:51:46.808	0x5759E2	ch2	Receive	0x0312	Data	Standard	0x08	x| 07 04 09 CA 09 CA 09 24 
10	20:51:46.808	0x5759E5	ch2	Receive	0x0308	Data	Standard	0x08	x| 00 00 00 02 00 51 BB 3F 
11	20:51:46.808	0x5759EE	ch2	Receive	0x0200	Data	Standard	0x08	x| 00 74 00 00 00 00 00 00 
12	20:51:46.808	0x5759F1	ch2	Receive	0x0208	Data	Standard	0x08	x| 00 20 00 00 00 00 00 00 
13	20:51:46.808	0x5759F4	ch2	Receive	0x0300	Data	Standard	0x08	x| 02 10 00 00 00 00 80 05 
14	20:51:46.808	0x5759F6	ch2	Receive	0x0328	Data	Standard	0x08	x| FF FF 7D 03 00 FF 00 00 
15	20:51:46.808	0x5759F7	ch2	Receive	0x0230	Data	Standard	0x01	x| 08 
16	20:51:46.808	0x5759FA	ch2	Receive	0x0238	Data	Standard	0x08	x| 00 00 78 0F 00 00 00 00 
17	20:51:46.808	0x575A29	ch2	Receive	0x0410	Data	Standard	0x04	x| 00 0D FF FF 
18	20:51:46.808	0x575A46	ch2	Receive	0x0312	Data	Standard	0x08	x| 07 04 09 CA 09 CA 09 24 
19	20:51:46.808	0x575A48	ch2	Receive	0x0308	Data	Standard	0x08	x| 00 00 00 02 00 51 BB 3F 
20	20:51:46.808	0x575A4B	ch2	Receive	0x0210	Data	Standard	0x08	x| 02 00 00 00 40 00 82 00 
21	20:51:46.808	0x575A4D	ch2	Receive	0x0212	Data	Standard	0x08	x| 03 F3 49 24 69 24 A9 24 
22	20:51:46.808	0x575A5D	ch2	Receive	0x0230	Data	Standard	0x01	x| 08 
23	20:51:46.808	0x575A87	ch2	Receive	0x0338	Data	Standard	0x08	x| FF FF 1F FF FF FF FF FF 
24	20:51:46.808	0x575A89	ch2	Receive	0x0218	Data	Standard	0x08	x| 00 00 DD 48 23 00 D4 73 
25	20:51:46.808	0x575A8C	ch2	Receive	0x0418	Data	Standard	0x08	x| 50 53 63 04 DD 00 00 00 
26	20:51:46.808	0x575AAB	ch2	Receive	0x0312	Data	Standard	0x08	x| 07 04 09 CA 09 CA 09 24 
27	20:51:46.808	0x575AAD	ch2	Receive	0x0308	Data	Standard	0x08	x| 00 00 00 02 00 51 BB 3F 
28	20:51:46.808	0x575AC4	ch2	Receive	0x0230	Data	Standard	0x01	x| 08 
29	20:51:46.808	0x575AD7	ch2	Receive	0x0200	Data	Standard	0x08	x| 00 78 00 00 00 00 00 00 
30	20:51:46.839	0x575AD9	ch2	Receive	0x0208	Data	Standard	0x08	x| 00 20 00 00 00 00 00 00 
31	20:51:46.839	0x575ADC	ch2	Receive	0x0300	Data	Standard	0x08	x| 02 10 00 00 00 00 80 05 
32	20:51:46.839	0x575ADE	ch2	Receive	0x0328	Data	Standard	0x08	x| FF FF 7D 03 00 FF 00 00 
33	20:51:46.839	0x575AE0	ch2	Receive	0x0238	Data	Standard	0x08	x| 00 00 78 0F 00 00 00 00 
34	20:51:46.839	0x575AF1	ch2	Receive	0x0410	Data	Standard	0x04	x| 00 0D FF FF 
35	20:51:46.839	0x575B0E	ch2	Receive	0x0312	Data	Standard	0x08	x| 07 04 09 CA 09 CA 09 24 
36	20:51:46.839	0x575B10	ch2	Receive	0x0608	Data	Standard	0x08	x| 59 53 A5 08 FA 00 00 FF 
37	20:51:46.839	0x575B12	ch2	Receive	0x0308	Data	Standard	0x08	x| 00 00 00 02 00 51 BB 3F 
38	20:51:46.839	0x575B15	ch2	Receive	0x0210	Data	Standard	0x08	x| 02 00 00 00 40 00 82 00 
39	20:51:46.839	0x575B17	ch2	Receive	0x0212	Data	Standard	0x08	x| 03 F3 49 24 69 24 A9 24 
40	20:51:46.839	0x575B18	ch2	Receive	0x0230	Data	Standard	0x01	x| 08 
41	20:51:46.839	0x575B1B	ch2	Receive	0x0580	Data	Standard	0x08	x| 64 64 64 FF 96 00 00 00 
42	20:51:46.839	0x575B52	ch2	Receive	0x0338	Data	Standard	0x08	x| FF FF 1F FF FF FF FF FF 
43	20:51:46.839	0x575B54	ch2	Receive	0x0218	Data	Standard	0x08	x| 00 00 DD 48 23 00 00 60 
44	20:51:46.839	0x575B57	ch2	Receive	0x0418	Data	Standard	0x08	x| 50 53 63 04 DD 00 00 00 
45	20:51:46.839	0x575B73	ch2	Receive	0x0312	Data	Standard	0x08	x| 07 04 09 CA 09 CA 09 24 
46	20:51:46.839	0x575B75	ch2	Receive	0x0308	Data	Standard	0x08	x| 00 00 00 02 00 51 BB 3F 
47	20:51:46.839	0x575B79	ch2	Receive	0x0230	Data	Standard	0x01	x| 08 
48	20:51:46.839	0x575BBA	ch2	Receive	0x0410	Data	Standard	0x04	x| 00 0D FF FF 
49	20:51:46.839	0x575BBF	ch2	Receive	0x0200	Data	Standard	0x08	x| 00 3C 00 00 00 00 00 00 
50	20:51:46.839	0x575BC1	ch2	Receive	0x0208	Data	Standard	0x08	x| 00 20 00 00 00 00 00 00 
51	20:51:46.839	0x575BC4	ch2	Receive	0x0300	Data	Standard	0x08	x| 82 90 80 00 80 00 80 08 
52	20:51:46.839	0x575BC6	ch2	Receive	0x0328	Data	Standard	0x08	x| FF FF 7D 03 00 FF 00 00 
53	20:51:46.839	0x575BC9	ch2	Receive	0x0238	Data	Standard	0x08	x| 00 00 78 0F 00 00 00 00 
54	20:51:46.839	0x575BD6	ch2	Receive	0x0312	Data	Standard	0x08	x| 07 04 09 CA 09 CA 09 24 
55	20:51:46.839	0x575BD8	ch2	Receive	0x0308	Data	Standard	0x08	x| 00 00 00 02 00 51 BB 3F 
56	20:51:46.839	0x575BDA	ch2	Receive	0x0210	Data	Standard	0x08	x| 02 00 00 00 40 00 82 00 
57	20:51:46.839	0x575BDD	ch2	Receive	0x0212	Data	Standard	0x08	x| 03 F3 49 24 69 24 A9 24 
58	20:51:46.839	0x575BE2	ch2	Receive	0x0230	Data	Standard	0x01	x| 08 
59	20:51:46.839	0x575BE5	ch2	Receive	0x0631	Data	Standard	0x08	x| FE 00 A4 03 00 00 00 00 
60	20:51:46.869	0x575C19	ch2	Receive	0x0338	Data	Standard	0x08	x| FF FF 1F FF FF FF FF FF 
61	20:51:46.869	0x575C1C	ch2	Receive	0x0218	Data	Standard	0x08	x| 80 00 DD 48 23 80 00 21 
62	20:51:46.869	0x575C1E	ch2	Receive	0x0418	Data	Standard	0x08	x| 50 53 63 04 DD 00 C0 00 
63	20:51:46.869	0x575C3A	ch2	Receive	0x0312	Data	Standard	0x08	x| 07 04 09 CA 09 CA 09 24 
64	20:51:46.869	0x575C3D	ch2	Receive	0x0308	Data	Standard	0x08	x| 00 00 00 02 00 51 BB 3F 
65	20:51:46.869	0x575C49	ch2	Receive	0x0230	Data	Standard	0x01	x| 08 
66	20:51:46.869	0x575C83	ch2	Receive	0x0410	Data	Standard	0x04	x| 00 0D FF FF 
67	20:51:46.869	0x575C9D	ch2	Receive	0x0312	Data	Standard	0x08	x| 07 04 09 CA 09 CA 09 24 
68	20:51:46.869	0x575CA0	ch2	Receive	0x0308	Data	Standard	0x08	x| 00 00 00 02 00 51 BB 3F 
69	20:51:46.869	0x575CA2	ch2	Receive	0x0210	Data	Standard	0x08	x| 02 00 00 00 40 00 82 00 
70	20:51:46.869	0x575CA5	ch2	Receive	0x0212	Data	Standard	0x08	x| 03 F3 49 24 69 24 A9 24 
71	20:51:46.869	0x575CA7	ch2	Receive	0x0200	Data	Standard	0x08	x| 00 00 00 00 00 00 00 00 
72	20:51:46.869	0x575CAA	ch2	Receive	0x0208	Data	Standard	0x08	x| 00 20 00 00 00 00 00 00 
73	20:51:46.869	0x575CAC	ch2	Receive	0x0300	Data	Standard	0x08	x| 82 90 80 00 80 00 80 05 
74	20:51:46.869	0x575CAF	ch2	Receive	0x0328	Data	Standard	0x08	x| FF FF 7D 03 00 FF 00 00 
75	20:51:46.869	0x575CB1	ch2	Receive	0x0238	Data	Standard	0x08	x| 00 00 78 0F 00 00 00 00 
76	20:51:46.869	0x575CB3	ch2	Receive	0x0408	Data	Standard	0x08	x| FF 3A 87 00 2D 78 9A FF 
77	20:51:46.869	0x575CB5	ch2	Receive	0x0230	Data	Standard	0x01	x| 08 
78	20:51:46.869	0x575CDE	ch2	Receive	0x0338	Data	Standard	0x08	x| FF FF 1F FF FF FF FF FF 
79	20:51:46.869	0x575CE1	ch2	Receive	0x0218	Data	Standard	0x08	x| 80 00 DD 48 23 80 00 22 
80	20:51:46.869	0x575CE3	ch2	Receive	0x0418	Data	Standard	0x08	x| 50 53 63 04 DD 00 C0 00 
81	20:51:46.869	0x575D02	ch2	Receive	0x0312	Data	Standard	0x08	x| 07 04 09 CA 09 CA 09 24 
82	20:51:46.869	0x575D05	ch2	Receive	0x0308	Data	Standard	0x08	x| 00 00 00 02 00 51 BB 3F 
83	20:51:46.869	0x575D16	ch2	Receive	0x0230	Data	Standard	0x01	x| 08 
84	20:51:46.899	0x575D4C	ch2	Receive	0x0410	Data	Standard	0x04	x| 00 0D FF FF 
85	20:51:46.899	0x575D65	ch2	Receive	0x0312	Data	Standard	0x08	x| 07 04 09 CA 09 CA 09 24 
86	20:51:46.899	0x575D68	ch2	Receive	0x0308	Data	Standard	0x08	x| 00 00 00 02 00 51 BB 3F 
87	20:51:46.899	0x575D6A	ch2	Receive	0x0210	Data	Standard	0x08	x| 02 00 00 00 40 00 82 00 
88	20:51:46.899	0x575D6C	ch2	Receive	0x0212	Data	Standard	0x08	x| 03 F3 49 24 69 24 A9 24 
89	20:51:46.899	0x575D7D	ch2	Receive	0x0230	Data	Standard	0x01	x| 08 
90	20:51:46.899	0x575D8F	ch2	Receive	0x0200	Data	Standard	0x08	x| 00 44 00 00 00 00 00 00 
91	20:51:46.899	0x575D91	ch2	Receive	0x0208	Data	Standard	0x08	x| 00 20 00 00 00 00 00 00 
92	20:51:46.899	0x575D94	ch2	Receive	0x0300	Data	Standard	0x08	x| 02 10 00 00 00 00 80 02 
93	20:51:46.899	0x575D96	ch2	Receive	0x0328	Data	Standard	0x08	x| FF FF 7D 03 00 FF 00 00 
94	20:51:46.899	0x575D99	ch2	Receive	0x0238	Data	Standard	0x08	x| 00 00 78 0F 00 00 00 00 
95	20:51:46.899	0x575DA9	ch2	Receive	0x0338	Data	Standard	0x08	x| FF FF 1F FF FF FF FF FF 
96	20:51:46.899	0x575DAC	ch2	Receive	0x0218	Data	Standard	0x08	x| 00 00 DD 48 23 00 00 63 
97	20:51:46.899	0x575DAE	ch2	Receive	0x0418	Data	Standard	0x08	x| 50 53 63 04 DD 00 00 00 
98	20:51:46.899	0x575DCA	ch2	Receive	0x0312	Data	Standard	0x08	x| 07 04 09 CA 09 CA 09 24 
99	20:51:46.899	0x575DCD	ch2	Receive	0x0308	Data	Standard	0x08	x| 00 00 00 02 00 51 BB 3F 
100	20:51:46.899	0x575DD1	ch2	Receive	0x0230	Data	Standard	0x01	x| 08 
101	20:51:46.899	0x575E15	ch2	Receive	0x0410	Data	Standard	0x04	x| 00 0D FF FF 
102	20:51:46.899	0x575E2D	ch2	Receive	0x0312	Data	Standard	0x08	x| 07 04 09 CA 09 CA 09 24 
103	20:51:46.899	0x575E30	ch2	Receive	0x0308	Data	Standard	0x08	x| 00 00 00 02 00 51 BB 3F 
104	20:51:46.899	0x575E32	ch2	Receive	0x0210	Data	Standard	0x08	x| 02 00 00 00 40 00 82 00 
105	20:51:46.899	0x575E34	ch2	Receive	0x0212	Data	Standard	0x08	x| 03 F3 49 24 69 24 A9 24 
106	20:51:46.899	0x575E36	ch2	Receive	0x0230	Data	Standard	0x01	x| 08 
107	20:51:46.928	0x575E6E	ch2	Receive	0x0338	Data	Standard	0x08	x| FF FF 1F FF FF FF FF FF 
108	20:51:46.928	0x575E71	ch2	Receive	0x0218	Data	Standard	0x08	x| 00 00 DD 48 23 00 00 24 
109	20:51:46.928	0x575E73	ch2	Receive	0x0418	Data	Standard	0x08	x| 50 53 63 04 DD 00 00 00 
110	20:51:46.928	0x575E77	ch2	Receive	0x0200	Data	Standard	0x08	x| 00 48 00 00 00 00 00 00 
111	20:51:46.928	0x575E79	ch2	Receive	0x0208	Data	Standard	0x08	x| 00 20 00 00 00 00 00 00 
112	20:51:46.928	0x575E7C	ch2	Receive	0x0300	Data	Standard	0x08	x| 02 10 00 00 00 00 7F FF 
113	20:51:46.928	0x575E7E	ch2	Receive	0x0328	Data	Standard	0x08	x| FF FF 7D 03 00 FF 00 00 
114	20:51:46.928	0x575E81	ch2	Receive	0x0238	Data	Standard	0x08	x| 00 00 78 0F 00 00 00 00 
115	20:51:46.928	0x575E92	ch2	Receive	0x0312	Data	Standard	0x08	x| 07 04 09 CA 09 CA 09 24 
116	20:51:46.928	0x575E94	ch2	Receive	0x0308	Data	Standard	0x08	x| 00 00 00 02 00 51 BB 3F

As you can see, it stamps down to milliseconds, and I think we would need the same here, to keep the packets straight. These packets came in at 500k. The device is a two channel device, so it has a column indicating which channel, and it can also transmit, so it is showing that the packet is something received. So, obviously that begs a follow on request to make the CAN monitor capable of sending a message, as it would round out the whole thing into a very robust tool, at that point.

BTW, CANalyst outputs CSV files.

Could you upload here a short example of CANalyst csv file?

Attached.
Short 500k Dump.csv (53.6 KB)

Thanks. I will follow this same format and develop a prototype. It will take some time, as for performance reasons, the file rows must be stored in ram and streamed to a file on separate thread.

Sounds good, thank you!

I do have a working prototype now. Only downside is that files will grow quite large on fast connections (~500kb per minute).

Do you think that all columns are required in CSV file? For example the Time Stamp, as I’m not sure what it is used for as you have system time to a millisecond right before it. There also others, like Type, as RealDash CAN monitor will only receive the data frames anyways.

If there is a specific tool that you want to use that requires all those rows, I will keep them in. Otherwise I think its better to leave them out as each row will just duplicate the same data in log file.

I agree with you. Eliminate the columns that are not in use. The one column on channels is the only one I am not sure of for RD. Does RD support multiple CAN input channels? If so, then identifying which channel the data came in from would be obviously useful.

For reference, I use the multiple channels when trying to identify messages sent from one device to the other. For instance, if I wanted to see how a scan tool communicated with the ECU, I would put the CANalyst in series with the tool and the ECU, allowing the CANalyst to operate in a “bridge” mode, passing messages seamlessly across it. The Scan Tool will be hooked up to the physical connections for Channel 1, and the ECU will be hooked up to Channel 2. As it records data, it will tag the packets from the scan tool as being on Channel 1, and the responses from the ECU on Channel 2. In this way, you can analyze the data and plainly see what messages are coming from where. Very useful!

However, I understand if that is beyond the context of RD. If it is, then eliminating the Channel column also makes sense, further condensing the file size.

I will remove the unsupported columns and upload a beta later today.

Awesome! Thank you for being so responsive to this request!

This is now in 1.8.7-BETA1:
http://realdash.net/forum/viewtopic.php?f=2&t=1122&sid=035582737a8ee22674290f076bab1502