' ' CAN Datenlogger "mc5.txt" Rev 5 (c) Avisaro AG, 04.07.2010 ' ' ---------------- ' List of CAN-IDs to be logged. All = -2. Last element of list = -1. Enter IDs as decimal values. ' Example 1: data 100 , 200 , -1 ' Example 2: data -2 , -1 data -2 , -1 '------------------------- ' max filesize in MByte let size = 10 '------------------------- ' One (=1) or two (=2) CAN Ports let ports = 2 '------------------------- ' Define 2nd CAN Port auxopen -8, 125000, 0, 536870910, 0, 0 ' inmode -3 outmode -2 let size = size * 1000000 ' Save and restore config let valid = 0 load 0, valid if valid <> 73 then save 0, #73 save 10, size save 20, ports else 'optional restore of config 'load 10, size 'load 20, ports end if if ports = 1 then let green = -203 let inkey = -204 else let green = -207 let inkey = -208 end if let red = -202 dim A(28) ' data transmitte let t = time let id = 0 let bus$ = "C1" let in = 0 let file = 0 sleep 100 ' Version for web site let x$ = "CAN Logger (mc5-5) ," let x$ = x$ + str$(ports) put -100, x$, len(x$) BEGIN: put green, #1 let n$ = date$ let f$ = "logs/" let f$ = f$ + mid$(date$, 3 , 2) + mid$(date$, 6 , 2) + mid$(date$, 9 , 2) let f$ = f$ + hex$(file, 2) + ".txt" ' FIfo leer lesen get -3, A get -8, A ' Tasten entprellen get inkey, in if in = 0 then goto BEGIN end if sleep 500 if lof(0) = 0 then goto BEGIN end if exec "mkdir logs" open "AB", 1, f$ if LASTERR <> 0 then close 1 open "WB", 1, f$ if LASTERR <> 0 then close 1 goto BEGIN end if 'Headerzeile in File: 'let out$ = "Dual CAN Logger (mc7-7)" 'put 1, out$ 'put 1, #13 'put 1, #10 'let out$ = "List of CAN-IDs to be logged. All" 'put 1, out$ 'put 1, #13 'put 1, #10 'let out$ = "Begin Triggerblock " 'put 1, out$ 'put 1, date$ 'put 1, #13 'put 1, #10 end if if lof(1) > size then file = file + 1 if file < 254 then close 1 goto BEGIN end if end if put red, #1 do REM Neue Datei ? if n$ <> date$ then close 1 goto BEGIN end if ' Daten von CAN lesen und auf Karte schreiben get -7, A if BYTESREAD = 28 then let bus$ = "C1" gosub STORE_CAN end if get -8, A if BYTESREAD = 28 then let bus$ = "C2" gosub STORE_CAN end if if lof(0) = 0 or status(1) <> 2 then close 1 put red, #0 goto BEGIN end if if lof(1) > size then file = file + 1 close 1 put red, #0 goto BEGIN end if ' Periodische Aufgaben if t <= time then put red, #1 put green, #1 let t = time + 1 end if REM Beenden oder Marker setzen get inkey, in if in = 0 then 'Dies einkommentieren für Taste = Stop close 1 goto FIN_KEY 'Dies einkommentieren für Taste = Marker 'let bus$ = "XX" 'gosub STORE_MARKER end if loop FIN_KEY: put red, #0 REM Warten bis Taste nicht gedrückt get inkey, in if in = 0 then close 1 goto FIN_KEY end if FINISH: put red, #0 REM Warten bis Karte entnommen oder Taste gedrückt let x = lof(0) get inkey, in if (x < 10) or (in = 0) then goto BEGIN else goto FINISH end if goto BEGIN ' CAN auf Karte schreiben STORE_CAN: ' Filterliste read id while (id <> -1) if (id = -2) or (id = CANINFO(1)) then put red, #1 ' LED on let t = time + 1 put 1, bus$ put 1, #44 put 1, date$ put 1, #44 put 1, time$ put 1, #44 let x$ = CANCSV$ put 1, x$ REM put 1, #13 put 1, #10 put red, #0 ' LED off let id = -1 else read id end if wend restore return ' store_can ' Marker setzen STORE_MARKER: put green, #0 put 1, bus$ put 1, #44 put 1, date$ put 1, #44 put 1, time$ put 1, #44 REM put 1, #13 put 1, #10 put red, #0 ' LED off return ' store_marker ' +++