¼¼Êõ²©¿Í

29/05/2015 ×÷Õß ÔÆº£ÓÎÏ·

ʹÓÃkvmlibºÍPython¼ì²é¼Ç¼µÄÊý¾Ý

½ñÌìÎÒÃÇÀ´¿´¿´ÈçºÎ¶ÁÈ¡¼Ç¼µÄÊý¾Ý£¬ÒÔ¼°ÈçºÎʹÓÃkvmlib½«Êý¾ÝÓë¼àÊÓÆ÷¹ØÁªÆðÀ´¡£ÎÒÃÇͨ¹ý¼Ç¼һЩÑù±¾Êý¾Ý£¬È»ºóʹÓÃPython°ü×°Æ÷³¢ÊÔ·ÖÎöËü¡£

1.1 Éú³ÉºÍ¼Ç¼Êý¾Ý

ÈÃÎÒÃÇ¿ªÊ¼Éú³ÉһЩÊý¾Ý¡£ÎÒÃÇʹÓÃtÑù±¾³ÌÐòhistogram_stimuli.t£¬Ëü°üº¬ÔÚCANlib SDK(Samples\tScript\histogram\histogram_stimuli.t).ÖС£Õâ¸ö³ÌÐòʹÓÃËĸö±¨ÎÄ; ECM_001£¬ECM_003£¬ECM_004ºÍLIM_002¡£ÕâЩ±¨Îİüº¬ÁËEngineSpeed£¬EngineTemp£¬FuelºÍLoadµÈÐźÅ¡£

used-signals-and-their-main-attributes

±í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

ÎÒÃÇÒÀ´Îͨ¹ýÿ¸öÈÕÖ¾Îļþ²¢¹ÒÔØËü¡£3?¹ÒÔØÈÕÖ¾Îļþ»¹»á·µ»ØÒ»¸öʼþ¼ÆÊý£¬ÆäÖаüº¬¡°ÈÕÖ¾ÎļþÖеĴó¸ÅʼþÊý¡±¡£4?È»ºó£¬ÎÒÃǶÁ³öÈÕÖ¾ÎļþÆô¶¯µÄʱ¼ä£¬¼ÇסÕâµãÒÔ±ãºóÀ´Ê¹Óá£

           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:

ÒòΪÎÒÃÇÖ»¶ÔÒ»ÖÖÀàÐ͵ÄÈÕÖ¾±¨ÎĸÐÐËȤ£¬ÎÒÃǽ«ÆäËü±¨Îͼ¹ýÂ˵ô¡£5 ÎÒÃÇ»¹¿É¹ýÂ˵ôÎÒÃǸÐÐËȤµÄ¿¨ÉϵÄͨµÀºÅ¡£6

                       # 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²¢¶ÔÁнøÐÐÅÅÐòÒÔÕÒµ½ÕýÈ·Öµ¡£ÏÖÔÚÈÃÎÒÃǾÍÕâÑù×ö£¬ÒòΪÕ⽫ʹÎÒÃÇÔÚʱ¼äÁìÓòÖж´²ì¸ü¶à

  1. ½«MemoratorÁ¬½Óµ½PC¡£
  2. Æô¶¯ÏàÓ¦µÄÔÆº£ÓÎÏ· MemoratorÅäÖù¤¾ß£¨ÀýÈçʹÓÃEagle¿ì½Ý·½Ê½£©²¢Á¬½Óµ½ÄãµÄÉ豸¡£
  3. תµ½Ñ¡ÏÈÕÖ¾Îļþ¡£
  4. µ¥»÷¡°ÁгöÎļþ¡±£¨List files£©ÒÔË¢ÐÂÁбí¡£
  5. µ¥»÷¡°ÌáÈ¡Îļþ…¡±£¨Extract files¡­£©¡£
  6. ÉèÖÃÎļþ´æ´¢Î»ÖúÍÎļþÃûÑ¡Ïµ¥»÷¡°ÏÂÒ»²½¡±¡£
  7. ½«ÌáÈ¡µÄÎļþ¸ñʽÉèÖÃΪ¡°CSV¸ñʽѡ¶¨Ðźš±£¨Selected signals in CSV format£©£¬µ¥»÷¡°ÏÂÒ»²½¡±¡£
  8. µ¥»÷Ìí¼ÓÊý¾Ý¿â£¨Add Database£©²¢Ñ¡Ôñhistogram.dbc£¨ÔÚSamplestScript histogramhistogram.dbcÖÐÕÒµ½£©¡£
  9. Ë«»÷Ðźš°EngineTemp¡±£¬µ¥»÷ÏÂÒ»²½¡£
  10. È·±£¡°Ê±¼ä´ÁÆ«ÒÆÁ¿¡±£¨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

Author Image

Magnus Carlsson

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

¡¾ÍøÕ¾µØÍ¼¡¿¡¾sitemap¡¿