' ' CAN Datenlogger "mc5-9.txt" (c) Avisaro AG, 04.06.2014 ' ' ------------------------------------------------ ' Every Day a new File (1= yes, 0 = no) ? let new_file = 0 ' ------------------------------------------------ ' One (=1) or two (=2) CAN Ports let ports = 1 ' ------------------------------------------------ ' max filesize in MByte let size = 10 ' ------------------------------------------------ ' Portbelegung der LED's bei CAN if ports = 2 then let green = -207 let inkey = -208 ' --------------------------------------------- ' Define 2nd CAN Port auxopen -8, 125000, 0, 536870910, 0, 0 else let green = -203 let inkey = -204 end if let red = -202 ' ------------------------------------------------ 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 ' ------------------------------------------------ ' 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 ' ------------------------------------------------ dim A(28) ' data transmitte let t = time let id = 0 let bus$ = "C1" let komma$ = chr$(44) let crlf$ = chr$(13) + chr$(10) let in = 0 let file = 0 sleep 100 ' Version for web site let x$ = "CAN Logger (mc5-8) ," let x$ = x$ + str$(ports) put -100, x$, len(x$) BEGIN: put green, #1 let n$ = date$ gosub Datei_erzeugen if LASTERR <> 0 then close 1 close 2 goto BEGIN end if ' FIfo leer lesen get -7, A get -8, A ' Tasten entprellen get inkey, in if in = 0 then goto BEGIN end if sleep 500 if lof(0) = 0 then sleep 0 goto BEGIN 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 if ports = 2 then get -8, A if BYTESREAD = 28 then let bus$ = "C2" gosub STORE_CAN end if end if ' Periodische Aufgaben if t <= time then put red, #1 put green, #1 let t = time + 1 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 end if ' 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 Datei_erzeugen: if new_file = 1 then exec "mkdir logs" 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" else ' wenn einmal ein Datei gefordert let f$ = "log1_" let f$ = f$ + hex$(file, 2) + ".txt" end if sleep 1 open "AB", 1, f$ if LASTERR <> 0 then open "WB", 1, f$ if LASTERR <> 0 then return end if end if if ports = 2 then if new_file = 1 then exec "mkdir logs_2" let f$ = "logs_2/" let f$ = f$ + mid$(date$, 3 , 2) + mid$(date$, 6 , 2) + mid$(date$, 9 , 2) let f$ = f$ + hex$(file, 2) + ".txt" else let f$ = "log2_" let f$ = f$ + hex$(file, 2) + ".txt" end if sleep 1 open "AB", 2, f$ if LASTERR <> 0 then open "WB", 2, f$ if LASTERR <> 0 then return end if end if end if return 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 ' LED on put red, #1 let t = time + 1 let temp$ = bus$ + komma$ let temp$ = temp$ + date$ + komma$ let temp$ = temp$ + time$ + komma$ let x$ = CANCSV$ let temp$ = temp$ + X$ + crlf$ repeat_put: put 1, temp$ if LASTERR <> 0 then sleep 0 if status(1) <> 2 then close 1 put red, #0 goto BEGIN end if goto repeat_put end if ' LED off put red, #0 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 ' +++