[[Carmon]]

Carmon

As electronic systems installed in cars are becoming more and more complex these days, the probability of their failure rapidly increases. Due to this complexity aspect, post-mortem analysis of such failure is quite often problematic, sometimes even impossible due to the lack of enough data. To mitigate this problem and simplify identification of the failure root cause, it would be nice if it might be possible to continuously monitor electronic systems in the car, providing for possibility to identify on-the-fly any non-standard patterns in their behavior, as well as collect appropriate set of information which could be later used during post-mortem problem analysis.

Goals

• collecting operational data
• analyzing data on-the-fly
• detecting potential problems on-the-fly
• informing car driver about problems found
• storing collected data in central database
• off-line data analysis

Architecture

Data processor

Display distance between DPF rejuvenations
$grep DPFDIST * | cut -d ',' -f 4 | gawk '{aa = strtonum("0x"$0); if ((aa < 180) && (aa > 5)) print aa; if ((aa >= 180) && (aa < 300)) {print aa / 2; print aa / 2}}' > /tmp/dpfdist
$echo "set terminal x11; set grid; plot '/tmp/dpfdist' with lines" | gnuplot -p Display Injector corrections $ grep ECU01AD * | cut -d ',' -f 3 |
gawk 'BEGIN{prev=""} {curr=substr($0, 35, 8); if (curr != prev) \ {i1=strtonum("0x" substr(curr, 1, 2)); i2=strtonum("0x" substr(curr, 3, 2)); \ i3=strtonum("0x" substr(curr, 5, 2)); i4=strtonum("0x" substr(curr, 7, 2)); \ print i1-64, i2-64, i3-64, i4-64, i1+i2+i3+i4-256; prev=curr} }' > /tmp/injraw$ cut -d ' ' -f 1 /tmp/injraw > /tmp/inj1raw
$cut -d ' ' -f 2 /tmp/injraw > /tmp/inj2raw$ cut -d ' ' -f 3 /tmp/injraw > /tmp/inj3raw
$cut -d ' ' -f 4 /tmp/injraw > /tmp/inj4raw$ grep -v "0 0 0 0 0" /tmp/injraw | cut -d ' ' -f 5 > /tmp/injsumraw
$echo "set terminal x11; set grid; plot '/tmp/inj1raw' with lines" | gnuplot -p$ echo "set terminal x11; set grid; plot '/tmp/inj2raw' with lines" | gnuplot -p
$echo "set terminal x11; set grid; plot '/tmp/inj3raw' with lines" | gnuplot -p$ echo "set terminal x11; set grid; plot '/tmp/inj4raw' with lines" | gnuplot -p
Detect data loss
$find ./ | sort | while read line ; do echo$line; grep ECU $line | cut -d ',' -f 1 | gawk 'BEGIN{pt = -1} {ct = substr($0, 13); if (pt != -1) \
{difft = ct - pt; if (difft < 0) difft += 60000; if ((difft > 30) && (difft < 500)) \
print pt,ct,difft,pts,$0,$0-pts}; pts = \$0; pt = ct}' ; done > /tmp/result