½ñÌìÎÒÃÇÀ´¿´¿´ÈçºÎ¶ÁÈ¡¼Ç¼µÄÊý¾Ý£¬ÒÔ¼°ÈçºÎʹÓÃkvmlib½«Êý¾ÝÓë¼àÊÓÆ÷¹ØÁªÆðÀ´¡£ÎÒÃÇͨ¹ý¼Ç¼һЩÑù±¾Êý¾Ý£¬È»ºóʹÓÃPython°ü×°Æ÷³¢ÊÔ·ÖÎöËü¡£
¼¼Êõ²©¿Í
ʹÓÃkvmlibºÍPython¼ì²é¼Ç¼µÄÊý¾Ý
ÈÃÎÒÃÇ¿ªÊ¼Éú³ÉһЩÊý¾Ý¡£ÎÒÃÇʹÓÃtÑù±¾³ÌÐòhistogram_stimuli.t£¬Ëü°üº¬ÔÚCANlib SDK(Samples\tScript\histogram\histogram_stimuli.t).ÖС£Õâ¸ö³ÌÐòʹÓÃËĸö±¨ÎÄ; ECM_001£¬ECM_003£¬ECM_004ºÍLIM_002¡£ÕâЩ±¨Îİüº¬ÁËEngineSpeed£¬EngineTemp£¬FuelºÍLoadµÈÐźš£
±í1£ºÊ¹ÓõÄÐźż°ÆäÖ÷ÒªÊôÐÔ
t³ÌÐòÔÚ±¨ÎÄÖ®¼äÉú³ÉËæ»úÊýÖµºÍÑÓ³Ù£¨ÔÚinit_stimuli_ctrl()
ÖÐÉèÖõķ¶Î§ÄÚ£©¡£ÏÖÔÚÅäÖÃEagleÓÃÀ´¡°¼Ç¼ËùÓС±£¬Æô¶¯t³ÌÐò²¢ÈÃËü¼Ç¼¼¸·ÖÖÓ¡£
1.2 ·¢¶¯»úζȺÎʱԼΪ161¡ãC£¿
ÎÒÃÇÏë»Ø´ðµÄµÚÒ»¸öÎÊÌâÊÇ¡°·¢¶¯»úζȺÎʱΪ161¡ãC£¿¡±¡£ £¨Õâ¿ÉÄܲ»ÊÇÏÖʵÊÀ½çÖÐ×î¾ß¹¤³ÌѧµÄÎÊÌ⣬µ«ÊÇÓÉÓÚÎÒÃǵÄÊý¾ÝÊÇÍêÈ«Ëæ»úµÄ£¬ËùÒÔÎÒÏàÐÅ¿ÉÒÔÖ±¹ÛµØ¿´³öÎÒÃÇÈçºÎÔÚ¶ÁÈ¡ÈÕÖ¾Îļþʱ»ñµÃ¾ø¶ÔµÄʱ¼ä¡££©
Èç¹ûÎÒÃÇ´ÓÒ»¿ªÊ¼¾ÍÖªµÀÕâ¸öÎÊÌ⣬ÎÒÃÇ¿ÉÒÔÌí¼Ó¼¸¸ö´¥·¢Æ÷£¬Ö»Òª·¢¶¯»úζȽéÓÚ159¡ãCµ½163¡ãCÖ®¼ä£¬¾Í»á¿ªÊ¼¼Ç¼£¨µ±³¬³ö´Ë·¶Î§Ê±Í£Ö¹¼Ç¼£©¡£µ«ÏÖÔÚÈÃÎÒÃǶÁ³öËùÓмǼµÄÊý¾Ý£¬²¢ÔÚ·¢¶¯»úζÈÔÚ159¡ãCºÍ163¡ãCÖ®¼äʱÊä³öÊý¾Ý¡£
ÔÚÔËÐгÌÐò1֮ǰ£¬ÈÃÎÒÃÇÏÈÀ´¿´¿´Ö÷Òª²¿·Ö¡£ÎÒÃÇÊ×Ïȶ¨ÒåÒ»¸öº¯Êý£¬ÕÒµ½ÎÒÃǽøÐлỰµÄÉ豸£¬È»ºó´ò¿ªËüÀ´»ñȡһЩ¾ä±ú¡£
def readEventsFromDevice(ean, channel, msgId):
# Read all events from device matching ean, channel and msgId
print "Open device..."
# Create a device with the selected EAN number
dev = kvDevice.kvDevice(ean=ean)
# Open a device that matches our criteria (EAN)
dev.memoOpen()
# Mount the log files so we can acces them
dev.memo.deviceMountKmf()
# Read out how many log files that are availible on the card
fileCount = dev.memo.logFileGetCount()
print "Found %d file%s on card:" % (fileCount, "s" if fileCount > 1 else "")
´ÓÉÏÃæµÄ´úÂëÆ¬¶ÎÖпÉÒÔ¿´³ö£¬ÎÒÃÇÊ×ÏÈʹÓÃkvDevice
°ïÖú³ÌÐòÄ£¿éÀ´¶¨ÒåÎÒÃǵÄÉ豸²¢´ò¿ªÒ»¸ö¾ä±ú¡£È»ºóÎÒÃÇ´ò¿ªÉ豸µÄkvmhandle
?£¨Ê¹ÓÃmemoOpen()
£©£¬È»ºóÎÒÃÇͨ¹ýdeviceMountKmf()
»ñÈ¡É豸ÉϵÄÈÕÖ¾Îļþ¡£È»ºóÎÒÃǶÁ³ö¿¨ÉϵÄÈÕÖ¾ÎļþÊý¡£2
# Now we read all events from each file found on the card.
for fileIndx in range (fileCount):
# When mounting the logfile, we get an aproximate value back
eventCount = dev.memo.logFileMount(fileIndx)
print "File %3d: Contains less than %d events" % (fileIndx, eventCount)
# We read out when the logging was started
startTime = dev.memo.logFileGetStartTime()
print "Logging started at %s\n" % startTime
while True:
# Read events from the log file, when no more events are availible,
# 'None' will be returned
event = dev.memo.logReadEventEx()
if event is None:
break
ÎÒÃÇÏÖÔÚÔÚÒ»¸öÑ»·ÖÐÖð¸ö¶Á³öʼþ£¬Ö±µ½Ã»ÓÐʼþ¿É¶Á¡£
# We are only interested in events that are log messages
if type(event) is kvmlib.logMsg:
# Also filter on message id and channel number
if event.id == msgId and event.channel == channel:
# We know the message data is a float, so convert it to a
# more usable format
value = raw2float(event.data)
# Now filter on the value
if value > 159 and value < 163:
# Get the time of the event
eventTime = getEventTime(startTime, event)
print "%s, Msg id %d value %f on channel %d:" % (eventTime, msgId, value, channel)
#print event
ÎÒÃǽ«Ôʼֵת»»Îªº¯Êýraw2float()
ÖеÄfloat¡£²é¿´Êý¾Ý¿â£¬ÎÒÃÇ¿´µ½ÕâÊÇÒ»¸öÖ±½ÓÓ³É䣨ÀàÐÍfloat£¬¸ñʽIntel£¬¿ªÊ¼Î»0£¬³¤¶È32£¬Òò×Ó1Æ«ÒÆÁ¿0£©¡£Èç¹ûÖµÔÚ159ºÍ163Ö®¼ä£¬ÎÒÃÇÔÚº¯ÊýgetEventTime()
ÖмÆËãʼþµÄ¾ø¶Ôʱ¼ä£¬²¢×îÖÕÊä³öÊý¾Ý¡£
print "n"
# Dismount to free up resources
dev.memo.logFileDismount()
# We are done, close the kvmlib handle to device
dev.memoClose()
µ±¶ÁÈ¡ËùÓÐʼþºó£¬ÎÒÃÇÐ¶ÔØÈÕÖ¾Îļþ²¢¼ÌÐø¶ÁÈ¡ÏÂÒ»¸ö¡£ÔÚ¶ÁÈ¡ËùÓÐÈÕÖ¾Îļþºó£¬ÎÒÃǹرÕÉ豸µÄ¾ä±ú¡£
ͨ¹ý½«ÈÕÖ¾ÎļþµÄ¿ªÊ¼Ê±¼äÌí¼Óµ½Ê¼þµÄʱ¼ä´Á£¬ÔÚº¯ÊýgetEventTime()
ÖмÆËãʼþµÄ¾ø¶Ôʱ¼ä¡£
def getEventTime(startTime, event):
# The event timestamp is given in nanoseconds. This function converts it to
# seconds, and returns the sum of startTime and event time (as a Python
# datetime object).
offsetInSeconds = event.timeStamp/1000000000.0
return startTime + datetime.timedelta(seconds=offsetInSeconds)
Çë×¢Ò⣬ʱ¼ä´ÁÒÔÄÉÃëΪµ¥Î»£¬Òò´ËÎÒÃÇÐèÒª½«Æäת»»ÎªÃ룬ȻºóÔÙʹÓÃPython datetime°ü½«ÆäÌí¼Óµ½ÈÕÖ¾ÎļþµÄ¿ªÊ¼Ê±¼ä¡£
# Read all events with message id 503, on the first channel, from the first
# device with EAN 73-30130-00567-9.
readEventsFromDevice(ean="73-30130-00567-9", channel=0, msgId=503)
ÈçÉÏÃæ´úÂëËùʾµ÷ÓÃÎÒÃǵĺ¯Êý»á²úÉúÒÔÏÂÊä³ö£º
Open device... Found 1 file on card: File 0: Contains less than 960 events Logging started at 2015-05-17 12:48:26 2015-05-17 12:49:07.510234, Msg id 503 value 160.418518 on channel 0: 2015-05-17 12:49:39.647368, Msg id 503 value 159.750595 on channel 0: 2015-05-17 12:49:44.642380, Msg id 503 value 161.818268 on channel 0: 2015-05-17 12:49:59.753440, Msg id 503 value 160.477036 on channel 0: 2015-05-17 12:50:10.433490, Msg id 503 value 162.389267 on channel 0: 2015-05-17 12:50:16.684522, Msg id 503 value 159.377579 on channel 0: 2015-05-17 12:50:53.411675, Msg id 503 value 160.748947 on channel 0: 2015-05-17 12:51:00.961706, Msg id 503 value 159.282867 on channel 0:
ÔÚ´òÓ¡Êä³öÖУ¬ÎÒÃÇ¿ÉÒÔ¿´µ½£¬ÔÚ2015-05-17 12£º49£º59.753440ÖÐÒÑʶ±ðµ½160.477¡ãC¡£
Èç¹ûÎÒÃÇûÓÐÌ«¶àµÄÊý¾Ý£¬ÁíÒ»ÖÖ·½Ê½ÊÇÌáÈ¡µ½.csv²¢¶ÔÁнøÐÐÅÅÐòÒÔÕÒµ½ÕýÈ·Öµ¡£ÏÖÔÚÈÃÎÒÃǾÍÕâÑù×ö£¬ÒòΪÕ⽫ʹÎÒÃÇÔÚʱ¼äÁìÓòÖж´²ì¸ü¶à
- ½«MemoratorÁ¬½Óµ½PC¡£
- Æô¶¯ÏàÓ¦µÄÔÆº£ÓÎÏ· MemoratorÅäÖù¤¾ß£¨ÀýÈçʹÓÃEagle¿ì½Ý·½Ê½£©²¢Á¬½Óµ½ÄãµÄÉ豸¡£
- תµ½Ñ¡ÏÈÕÖ¾Îļþ¡£
- µ¥»÷¡°ÁгöÎļþ¡±£¨List files£©ÒÔË¢ÐÂÁÐ±í¡£
- µ¥»÷¡°ÌáÈ¡Îļþ…¡±£¨Extract files¡£©¡£
- ÉèÖÃÎļþ´æ´¢Î»ÖúÍÎļþÃûÑ¡Ïµ¥»÷¡°ÏÂÒ»²½¡±¡£
- ½«ÌáÈ¡µÄÎļþ¸ñʽÉèÖÃΪ¡°CSV¸ñʽѡ¶¨Ðźš±£¨Selected signals in CSV format£©£¬µ¥»÷¡°ÏÂÒ»²½¡±¡£
- µ¥»÷Ìí¼ÓÊý¾Ý¿â£¨Add Database£©²¢Ñ¡Ôñhistogram.dbc£¨ÔÚSamplestScript histogramhistogram.dbcÖÐÕÒµ½£©¡£
- Ë«»÷Ðźš°EngineTemp¡±£¬µ¥»÷ÏÂÒ»²½¡£
- È·±£¡°Ê±¼ä´ÁÆ«ÒÆÁ¿¡±£¨Time stamp offset£©ÉèÖÃΪ¡°¿ªÊ¼²âÁ¿¡±£¨Start of measurement£©£¬²¢Ñ¡ÖС°¸ß·Ö±æÂÊAbsTime¡±£¨High resolution AbsTime£©£¨ÔÚCSVÎļþÑ¡ÏîÏ£¬²Î¼ûͼ1£©¡£Èç¹ûÄãÏñÎÒÒ»ÑùʹÓ÷ÇÓ¢Óï°æ±¾µÄMS Excel£¬Çë¸ù¾ÝÐèÒªµ÷Õû¡°·Ö¸ô·û¡±(;)ºÍ¡°Ê®½øÖÆ·Ö¸ô·û¡±(,)£¬ÒÔ±ãµç×Ó±í¸ñ³ÌÐò½«ÊýÖµÊÓΪÊý×Ö£¨¶ø²»ÊÇÎı¾£©¡£µ¥»÷¡°Íê³É¡±¡£
# Filter out log messages that are outside of our time range
time = startTime + datetime.timedelta(seconds=event.timeStamp/1000000000.0)
if time >= firstTime and time <= lastTime: #
msgId = event.id
# We know the message data is a float, so convert it to a
# more usable format
value = raw2float(event.data)
# Get the time of the event
eventTime = getEventTime(startTime, event)
print "%s, Msg id %d value %f on channel %d:" % (eventTime, msgId, value, channel)
Õâ´ÎÎÒÃÇÃüÃûº¯ÊýreadTimedEventsFromDevice()
²¢µ÷ÓÃËü£¬ÈçÏÂËùʾ¡£
# Read all events with message id 503, on the first channel, from the first
# device with EAN 73-30130-00567-9 that was recorded between 2015-05-17 12:49:10
# and 2015-05-17 12:49:20.
startTime = datetime.datetime.strptime("2015-05-17 12:49:10", "%Y-%m-%d %H:%M:%S")
endTime = datetime.datetime.strptime("2015-05-17 12:49:20", "%Y-%m-%d %H:%M:%S")
print "nLooking at %s - %s" % (startTime,endTime)
readTimedEventsFromDevice(ean="73-30130-00567-9", channel=0, msgId=503, firstTime=startTime, lastTime=endTime)
µ÷Óøú¯Êý½«²úÉúÒÔÏÂÊä³ö£º
Looking at 2015-05-17 12:49:10 - 2015-05-17 12:49:20 Open device... Found 1 file on card: File 0: Contains less than 960 events Logging started at 2015-05-17 12:48:26 2015-05-17 12:49:10.189224, Msg id 503 value 8.356499 on channel 0: 2015-05-17 12:49:10.425245, Msg id 503 value 148.579849 on channel 0: 2015-05-17 12:49:10.683234, Msg id 503 value -21.685257 on channel 0: 2015-05-17 12:49:10.853234, Msg id 503 value 33.064117 on channel 0: 2015-05-17 12:49:10.935236, Msg id 503 value -29.684952 on channel 0: 2015-05-17 12:49:11.320254, Msg id 503 value 54.329140 on channel 0: 2015-05-17 12:49:11.692243, Msg id 503 value -28.083881 on channel 0: 2015-05-17 12:49:11.770270, Msg id 503 value -48.805271 on channel 0: 2015-05-17 12:49:12.234247, Msg id 503 value 117.977112 on channel 0: 2015-05-17 12:49:12.294250, Msg id 503 value 72.071869 on channel 0: 2015-05-17 12:49:12.690248, Msg id 503 value 26.443817 on channel 0: 2015-05-17 12:49:13.132250, Msg id 503 value 74.562210 on channel 0: 2015-05-17 12:49:13.146244, Msg id 503 value 84.493378 on channel 0: 2015-05-17 12:49:13.184243, Msg id 503 value -30.005280 on channel 0: 2015-05-17 12:49:13.375251, Msg id 503 value -10.720951 on channel 0: 2015-05-17 12:49:13.821248, Msg id 503 value 58.475220 on channel 0: 2015-05-17 12:49:14.184254, Msg id 503 value 176.979965 on channel 0: 2015-05-17 12:49:14.427251, Msg id 503 value -37.418663 on channel 0: 2015-05-17 12:49:14.624254, Msg id 503 value 197.064117 on channel 0: 2015-05-17 12:49:14.646256, Msg id 503 value 175.246704 on channel 0: 2015-05-17 12:49:14.715250, Msg id 503 value -54.334503 on channel 0: 2015-05-17 12:49:15.017257, Msg id 503 value 18.197182 on channel 0: 2015-05-17 12:49:15.303258, Msg id 503 value 110.723022 on channel 0: 2015-05-17 12:49:15.337259, Msg id 503 value 86.609604 on channel 0: 2015-05-17 12:49:15.758269, Msg id 503 value 40.770157 on channel 0: 2015-05-17 12:49:15.975262, Msg id 503 value 71.019363 on channel 0: 2015-05-17 12:49:16.342263, Msg id 503 value 95.364639 on channel 0: 2015-05-17 12:49:16.475266, Msg id 503 value 124.447952 on channel 0: 2015-05-17 12:49:16.740282, Msg id 503 value 81.019073 on channel 0: 2015-05-17 12:49:16.796267, Msg id 503 value 171.284988 on channel 0: 2015-05-17 12:49:16.911271, Msg id 503 value 189.340149 on channel 0: 2015-05-17 12:49:16.984273, Msg id 503 value 163.904785 on channel 0: 2015-05-17 12:49:17.276268, Msg id 503 value -33.255932 on channel 0: 2015-05-17 12:49:17.434269, Msg id 503 value -52.797394 on channel 0: 2015-05-17 12:49:17.470280, Msg id 503 value -10.525452 on channel 0: 2015-05-17 12:49:17.929274, Msg id 503 value 49.282883 on channel 0: 2015-05-17 12:49:17.973638, Msg id 503 value 184.748627 on channel 0: 2015-05-17 12:49:18.109271, Msg id 503 value 36.713226 on channel 0: 2015-05-17 12:49:18.543270, Msg id 503 value -41.598648 on channel 0: 2015-05-17 12:49:18.617276, Msg id 503 value 172.797897 on channel 0: 2015-05-17 12:49:18.686271, Msg id 503 value 19.661766 on channel 0: 2015-05-17 12:49:18.974271, Msg id 503 value 187.943726 on channel 0: 2015-05-17 12:49:19.374277, Msg id 503 value 39.316628 on channel 0: 2015-05-17 12:49:19.657277, Msg id 503 value 79.659393 on channel 0:
ËùÒÔ£¬ÎÒÃǵõ½£¬EngineTempµÄËùÓÐÖµÔÚ12:49:10ºÍ12:49:20Ö®¼ä¡£
ͼ1£ºÔƺ£ÓÎÏ· MemoratorÅäÖù¤¾ßÖÐÌáÈ¡Ïòµ¼µÄ×îºóÒ»²½
ÔÚµç×Ó±í¸ñ³ÌÐòÖдò¿ªµ¼³öµÄ.csv£¬¶Ô°üº¬EngineTempµÄÁнøÐÐÅÅÐò£¬²¢ÏòϹö¶¯µ½EngineTempΪ160¡ãCʱ£¬²Î¼ûͼ2¡£¶ÁÈ¡AbsTimeÁУ¬ÎÒÃÇÏÖÔÚ¿ÉÒÔ¿´µ½EngineTempΪÀýÈç160.477¡ãC at 2015-05-17T11:49:59.6651¡£
ͼ2£ºÊ¹Ó᰸߷ֱæÂÊAbsTime¡±½âѹËõºóÉú³ÉµÄ.csvÎļþµÄÒ»²¿·Ö
µ«ÊÇ£¬Python³ÌÐò²»ÊÇÒѾÏÔʾ¡°12£º49£º59.753440¡±£¿ Êǵģ¬Äã·¢Ïֵúã¬ÕâÊÇÕýÈ·µÄ¡£
Ê×ÏÈ£¬11:49ºÍ12:49ʱ¼ä²îÊÇ»ùÓÚUnixʱ¼äºÍµ±µØÊ±¼äµÄ²îÒì¡£ Unixʱ¼äÊÇ¡°´ÓÊÀ½çе÷ʱ¼ä£¨UTC£©1970Äê1ÔÂ1ÈÕÐÇÆÚËÄ00:00:00ÆðÒѾ¹ýÈ¥µÄÃëÊý¡±¡£7?ÕâÒâζ×ÅÔÚ½«Unixʱ¼äת»»µ½±¾µØÊ±¼äʱӦ¿¼ÂÇÊ±ÇøºÍÏÄÁîʱ¡£ MemoratorÖеÄʵʱʱÖÓÊÇÒÔUnixʱ¼äÉèÖõģ¬PythonÏà¶Ô¶øÑԱȽϷ½±ã£¬ÊDZ¾µØÊ±¼ä¡£ .csv±íÒ²ÊÇ»ùÓÚUTCʱ¼ä£¬µ«ÕâµãûÓÐÏòµç×Ó±í¸ñ³ÌÐò˵Ã÷£¬Òò´ËÕâÆäÖоÍÓÐÒ»¸öСʱµÄ²îÒì¡£
ÄÇôʣϵÄ883 msµÄ²îÒìÄØ£¿ÕâÊÇÓÉÓÚʱ¼ä´ÁÆ«ÒÆµ¼Öµġ£ÈÃÎÒÃÇͨ¹ýÌáÈ¡µ½¡°´¿Îı¾¸ñʽµÄCANÖ¡¡±À´²é¿´ÎļþÖеĵÚÒ»¸öÔʼֵ£¬²¢½«¡°Ê±¼ä´ÁÆ«ÒÆÁ¿¡±ÉèÖÃΪ¡°¿ªÊ¼²âÁ¿¡±¡£ÎÒÃÇÏÖÔڵõ½ÒÔÏÂÄÚÈÝ£º
ÔÆº£ÓÎÏ· Memorator Log ==================== Converted from Memorator Binary format at: 5/19/2015 07:41:03 Settings: Format of data field: DEC Format of id field: DEC Timestamp Offset: 0,000000 s CAN channel: 1 2 Time CAN Identifier Flags DLC Data Counter ===================================================================================== DateTime: 2015-05-17 11:48:26 0,088284 Trigger (type=0x1, active=0x00, pre-trigger=0, post-trigger=-1) 18,323147 1 503 Rx 8 8 206 37 66 0 0 0 0 1 18,430094 1 501 Rx 8 202 19 0 0 0 0 0 0 2 18,516129 1 503 Rx 8 206 208 2 67 0 0 0 0 3 18,529129 1 503 Rx 8 60 184 254 66 0 0 0 0 4
Çë×¢Ò⣬µÚÒ»¸ö´¥·¢Ê¼þÔÚ883 msÖ®ºóµ½´ï¡£ÏÖÔÚ£¬Í¨¹ýÔÙ´ÎÌáÈ¡µ½¡°´¿Îı¾¸ñʽµÄCANÖ¡¡±²¢½«¡°Ê±¼ä´ÁÆ«ÒÆÁ¿¡±ÉèÖÃΪ¡°µÚÒ»´¥·¢Æ÷¡±À´²¹³¥¡£ÎÒÃÇÏÖÔڵõ½ÒÔÏÂÄÚÈÝ£º
ÔÆº£ÓÎÏ· Memorator Log ==================== Converted from Memorator Binary format at: 5/19/2015 07:40:51 Settings: Format of data field: DEC Format of id field: DEC Timestamp Offset: -0,088284 s CAN channel: 1 2 Time CAN Identifier Flags DLC Data Counter ===================================================================================== DateTime: 2015-05-17 11:48:26 0,000000 Trigger (type=0x1, active=0x00, pre-trigger=0, post-trigger=-1) 18,234863 1 503 Rx 8 8 206 37 66 0 0 0 0 1 18,341810 1 501 Rx 8 202 19 0 0 0 0 0 0 2 18,427845 1 503 Rx 8 206 208 2 67 0 0 0 0 3 18,440845 1 503 Rx 8 60 184 254 66 0 0 0 0 4
ÏÖÔÚ¡°Ê±¼ä´ÁÆ«ÒÆ¡±-883ms£¬ËùÓеÄʱ¼ä´Á¶¼±»µ÷ÕûÁËÕâô¶à¡£ÄÇôΪʲôÎÒÃDz»ÄÜÔÚPython³ÌÐòÖв¹³¥ÕâÒ»µãÄØ£¿ÊµÊ±Ê±ÖÓ¾ßÓÐ2 s£¨¡À1 s£©µÄ¾«¶È£¬Òò´ËÔÚÕâÖÖÇé¿öÏ£¬Êµ¼ÊÉÏ¿ÉÄÜ»á¹ý¶ÈÃÖ²¹¼¸Ê®Ãë¡£
1.3 ÔÚ12:49:15ʱ¼ä¶ÔÓ¦µÄÖµÊǶàÉÙ£¿
¼ÙÉèÓÐÈË˵£º¡°µ±Ê±ÖÓÏÔʾ12:49:15£¬Çý¶¯³ÌÐò±ê¼Çµ½Ò»¸öÉùÒô£¬ÄÇÕâ¸öʱ¿ÌµÄEngineTempµÄÖµÊÇʲô£¿¡±ÔٴΣ¬Èç¹ûÎÒÃÇÔç¾ÍÖªµÀÇý¶¯³ÌÐòÐèÒª±ê¼ÇһЩ¶«Î÷£¬ÄÇÎÒÃÇ»á¸øËûÌṩһ¸ö°´Å¥È¥µã»÷¡£´Ë°´Å¥½«±»Á¬½Óµ½MemoratorµÄ´¥·¢Æ÷ÊäÈ룬Èçͼ2Ëùʾ£¬ÔÚÈκÎʱºò°´Å¥±»µã»÷ºó£¬»áÌṩ¸øÎÒÃǷdz£ÈÝÒ×ÕÒµ½µÄ´¥·¢Æ÷¡£
ͼ3£ºÈçºÎ½«°´Å¥Á¬½Óµ½MemoratorµÄÍⲿ´¥·¢ÊäÈëµÄʾÀý
ÔÚÎÒÃÇÉîÈëµ½ÈÕÖ¾Îļþ֮ǰ£¬ÎÒÃDZØÐ뿼ÂÇÇý¶¯³ÌÐò×¢Òâµ½µÄʱ¼ä£¬12:49:15¡£ÒòΪËû˵Ëû¿´×ÅʱÖÓ£¬ÕâÊDZ¾µØÊ±¼ä²¢ÖªµÀPython kvmlib°ü×°Æ÷¿É½«Ê±¼ä´Áת»»Îª±¾µØÊ±¼ä£¬ÈÃÎÒÃÇдһ¸öС³ÌÐòÀ´Êä³öÏà¹ØµÄÊý¾Ý¡£ÎÒÃÇÒ²ÖªµÀ¾«¶ÈÊÇ2Ã룬ËùÒÔÈÃÎÒÃÇ¿´¿´12:49:10 – 12:49:20Õâ¸ö¼ä¸ô¡£¸Ã³ÌÐò·Ç³£ÏñÒÔǰµÄ³ÌÐò£¬³ýÁËÎÒÃǶÔʱ¼ä´Á¶ø²»ÊǼǼֵ½øÐйýÂË¡£
½Å×¢£º
1 ÍêÕûµÄ³ÌÐòÁбí¼û?http://github.com/ÔÆº£ÓÎÏ·/developer-blog
2 ÈÕÖ¾ÎļþÊýÓë.kmfÈÝÆ÷ÊýÁ¿²»Í¬£¨log000000.kmf£¬log000001.kmfµÈ£©£¬Èç¹ûÎÒÃǽ«SD¿¨·Åµ½SD¿¨¶Á¿¨Æ÷ÄÚ²¢Í¨¹ýµçÄԲ鿴ÄÚÈÝ£¬Ôò¿ÉÒÔ¿´µ½ÕâЩSD¿¨ÉϵÄÊýÁ¿¡£Ã¿´Î´¥·¢Æ÷¿ªÊ¼¼Ç¼ʱ¶¼»á´´½¨Ò»¸öеÄÈÕÖ¾Îļþ¡£ÔÚÎÒÃǵÄʾÀýÖУ¬ÓÉÓÚÎÒÃÇʹÓÃÅäÖÃÑ¡Ïî¡°¼Ç¼ËùÓС±£¨Log everything£©£¬µ±ÎÒÃǸøCAN×ÜÏß¹©µçʱ£¨Í¬Ê±¶Ï¿ªUSBÁ¬½Ó£©£¬½«´´½¨Ò»¸öеÄÈÕÖ¾Îļþ¡£
3 Çë×¢Ò⣬kvmlibÖеĺ¯ÊýµÄÃüÃûÔÚ×îа汾ÖÐÒѽøÐÐÁ˱ä¸ü£¬ÒÔʹËüÃǸü¼Óͳһ£¬¸üÈÝÒ×Àí½â¡£ Python kvmlib°ü×°Æ÷ÖеÄÃüÃûÉÐδÍêÈ«±ä¸ü¡£
4 ÎÒÃÇʵ¼Ê¶ÁÈ¡µÄÊǸÃÈÕÖ¾ÎļþÔÚ´ÅÅÌÉÏʹÓõÄÉÈÇøÊý£¬²¢ÖªµÀÔÚÒ»¸öÉÈÇøÖпÉÓµÓÐʼþµÄÊýÁ¿²¢½«Æä×÷ΪһϵÁÐʼþ½øÐзµ»Ø¡£
5 ÔÚÎÒÃǵÄʾÀýÖУ¬ÎÒÃǶԱ¨Îıêʶ 503½øÐйýÂË£¬ÒòΪÕâÊÇÎÒÃǵÄÐźÅEngineTemp±£´æµÄλÖᣱäÁ¿msgId
ʵ¼ÊÉÏÊÇÔÚÖ÷´úÂëÖÐÉèÖò¢×÷Ϊ²ÎÊý´«µÝ¡£
6 ͨ³£ÔÚÎҵIJâÊÔÉèÖÃÖÐÁ¬½Óµ½Í¬Ò»CAN×ÜÏßµÄÉ豸ÉÏÓÐÁ½¸öͨµÀ£¬²¢ÇÒ¶ÔͨµÀºÅµÄ¹ýÂ˽«¼õÉټǼCAN±¨ÎĵÄÈßÓà¡£
7 ÓйØUnixʱ¼äµÄ¸ü¶àÐÅÏ¢£¬Çë²ÎÔÄhttp://en.wikipedia.org/wiki/Unix_time

Magnus Carlsson
Margus CarlssonÊÇÔÆº£ÓÎÏ· AB¹«Ë¾µÄÈí¼þ¿ª·¢ÈËÔ±£¬´Ó2007ÄêÒÔÀ´Éî¶È²ÎÓëÁËÔÆº£ÓÎÏ·¹Ì¼þºÍÈí¼þµÄ¿ª·¢¡£Ëû»¹ÎªÔƺ£ÓÎÏ·µÄ¼¼Êõ²©¿Í׫дÁËÐí¶àÓÃÁ÷ÐеÄPythonÓïÑÔ±àдӦÓóÌÐòµÄÎÄÕ¡£