¼¼Êõ²©¿Í

    18/09/2018 ×÷Õß ÔÆº£ÓÎÏ·

    ½øÒ»²½Á˽âkvmlib

    ±¾ÎÄÊǹ²°üÀ¨4²¿·ÖµÄ¼¼Êõ²©¿ÍµÄµÚÈý²¿·Ö¡£´Ë²©¿Í½éÉÜͨ¹ýkvmlib£¬Ê¹Óõڶþ´úÔÆº£ÓÎÏ· MemoratorÊý¾Ý¼Ç¼ÒÇ£¬ÅäÖúͶÁÈ¡ÒѼǼµÄÊý¾Ý:

    ÔÚ±¾²©¿ÍµÄµÚÒ»²¿·ÖÖУ¬ÎÒÃÇ˵Ã÷ÁËÈçºÎʹÓÃkvmlibÅäÖÃÉ豸£¬²¢¶ÁÈ¡ÓÃpythonÅäÖõı¨ÎÄ¡£ÔÚÕâÒ»²¿·ÖÖУ¬ÎÒÃǽ«ÔÙÈ¥¿´Ò»ÏÂÎÒÃÇÔÚµÚ¶þ²¿·ÖÖÐËù×öµÄÅäÖ㬽éÉÜÔõÑùʹÓÃkvmlib×ö¸ü¶à²Ù×÷£¬°üÀ¨±£´æºÍ»Ö¸´ÄãÔÚÔÆº£ÓÎÏ· MemoratorµÄSD¿¨ÉϵÄÅäÖá£Äã¿ÉÄܶÔÏÂÃæÓÐÒ»¸ö²©¿ÍϵÁиÐÐËȤ£ºSetting Up CANlib for Visual Studio£¨ÎªÊÓ¾õ¹¤×÷ÊÒÉèÖÃCANlib£©¡£

    3.1 ´ò¿ªÉ豸

    ʹÓÃkvmlib´ò¿ªÉ豸ÐèÒªµÄ²»½öÊÇEAN±àºÅ¡£µ±Ê¹ÓÃPython canlibÉ豸Ä£¿éÁ¬½Óµ½Ò»¸öÉ豸ʱ£¬´Ë´úÂë»áÔÚÄÚ²¿²éÕÒÁ¬½Óµ½¼ÆËã»úÉϵÄËùÓÐÉ豸£¬²¢¸ø³öµÚÒ»¸ö·ûºÏËÑË÷Ìõ¼þµÄÉ豸£¬ÔÚ±¾ÀýÖеÄÌõ¼þÊÇEAN±àºÅ¡£

    # 05_±¨¸æ_É豸.py
    from canlib import Device, EAN
    
    
    #ͨ¹ý×îºó6λÊý×Ö£¬ÎªÎÒÃǵÄÉ豸Éú³ÉÒ»¸öEANÄ¿±ê
    ean = EAN('00819-9')
    print('Full EAN: {}\n'.format(ean))
    
    # ѰÕÒÎÒÃÇµÄ ÔÆº£ÓÎÏ· Memorator Pro 2xHS £¬ÏµÁкÅEAN 00819-9
    dev = Device.find(ean=ean, serial=None)
    
    # ´òÓ¡ÓйØÕâ¸öÉ豸µÄÐÅÏ¢
    print(dev.probe_info())
    Full EAN: 73-30130-00819-9
    
    CANlib Channel: 0
    Card Number   : 0
    Device        : ÔÆº£ÓÎÏ· Memorator Pro 2xHS v2 (channel 0)
    Driver Name   : kcany0a
    EAN           : 73-30130-00819-9
    Firmware      : 3.11.0.557
    Serial Number : 11573

    Áбí 8: ´òÓ¡Ò»¸öÒÑÁ¬½ÓÉϵÄÔÆº£ÓÎÏ·É豸µÄÐÅÏ¢¡£


    ÏÖÔÚÄã¿ÉÒÔ×¢Òâµ½£¬ÎÒÃǵÄÉ豸Á¬½Óµ½CANlibͨµÀ0£¬Õâ¸öCANlibͨµÀºÅÓÃÀ´´ÓCANlib1´ò¿ª´ËÉ豸¡£Èç¹ûÎÒÃÇ´ò¿ªµÄÊǵڶþ¸öÉ豸£¬µÚ¶þ¸öÉ豸ÉϵÄÄÇЩ±àºÅ½«²»Í¬¡£

    µ±Ê¹ÓÃkvmlib´ò¿ªÎÒÃǵÄÉ豸£¬³ýÁËÖ¸¶¨Õâ¸öCANlibͨµÀºÅ£¬ÎÒÃÇ»¹¿ÉÒÔÖ¸¶¨Ò»¸öÉ豸ÀàÐÍ¡£Õâ¸öÉ豸ÀàÐÍÓÃÀ´È·¶¨¸ÃÉ豸ÔÚʹÓÃʲô°æ±¾µÄLIOÊý¾Ý¸ñʽ2/a>¡£¹Ì¼þ°æ±¾v3.0ʹÓà É豸ÐͺÅ?kvmDEVICE_MHYDRA_EXT, ÕâÊÇv1.7°æ±¾python canlibÄ£¿éµÄȱʡÉèÖá£kvmlib.openDeviceµÄ×îºóÒ»¸ö×Ô±äÁ¿ÊÇmount£¬Ëü±íÃ÷MemoratorµÄ´æ´¢ÇøÊÇ·ñÒÑ×°ÉÏ£¨È±Ê¡ÊÇFalse£©¡£

    ÈÃÎÒÃÇÀ´¿´Ò»ÏÂÔõÑùÓÃkvmlibÅäÖôËÉ豸¡£

    # 06_ÉèÖÃ_ʱÖÓ.py
    from canlib import kvmlib
    import datetime
    
    
    # ÎÒÃÇÖªµÀÎÒÃǵÄÉ豸ÒÑÁ¬½Óµ½CANlib ͨµÀ0
    channel = 0
    
    # ÎÒÃÇ»¹ÖªµÀÎÒÃǵÄÉ豸µÄÀàÐÍÊÇkvmDEVICE_MHYDRA_EXT
    with kvmlib.openDevice(
            channel_number=channel,
            device_type=kvmlib.Device.MHYDRA_EXT) as device:
        # ÎÒÃÇÒѾ­»ñµÃÁË´ËÉ豸, ±ÈÈç˵£¬ÏÖÔÚÎÒÃÇ¿ÉÒԲ鿴ϵÁкÅ
    
        print("Serial number:", device.serial_number)
    
        # ¶ÁÈ¡É豸ʱ¼ä
        print("Current device time is", device.rtc)
    
        # ÉèÖøÃÉ豸µÄʵʱÖÓ
        device.rtc = datetime.datetime.now()
    
        # ¶ÁÈ¡É豸ʱ¼ä
        print("New device time is", device.rtc)

    Áбí 9: ÓÃkvmlibΪһ¸öÔÆº£ÓÎÏ·É豸ÉèÖÃʵʱÖÓ¡£

    Serial number: 11573
    Current device time is 2018-08-10 07:47:46
    New device time is 2018-08-10 07:52:48

    ÔËÐÐÉÏÃæµÄ´úÂë¿É»ñµÃÏÂÃæµÄ½á¹û:

    3.2 ³õʼ»¯SD¿¨

    ÈçǰËùÊö£¬ÔÚ´ò¿ªÒ»¸öÉ豸ʱ£¬Ê¹ÓÃÕýÈ·µÄÉ豸ÀàÐÍÊǷdz£ÖØÒªµÄ¡£Èç¹ûÎÒÃÇʹÓôíÎóµÄLIOÊý¾Ý¸ñʽ£¨ÈçʹÓÃÉ豸ÀàÐ͹涨µÄÄÇÑù£©´ò¿ªÒ»¸öÉ豸£¬ÔÚ¶ÁÈ¡Êý¾Ýʱ£¬ÎÒÃǽ«ÎÞ·¨¿´µ½ÈκμǼµÄ±¨ÎÄ¡£ÔÚ³õʼ»¯SD¿¨Ê±£¬Ê¹ÓÃÕýÈ·µÄÉ豸ÀàÐ͸üÎªÖØÒª£¬ÒòΪÈç¹ûʹÓò»ÕýÈ·µÄLIOÊý¾Ý¸ñʽ³õʼ»¯SD¿¨£¬¹Ì¼þ½«ÎÞ·¨·ÃÎʸÿ¨¡£

    ΪÁ˳õʼ»¯´ËSD¿¨£¬ÎÒÃÇÐèÒªÉ豸ÀàÐÍ¡£ÎÒÃÇÓÃkvmlib.openDeviceÀ´´ò¿ªÉ豸£¬ÔÚÒ»¸öÔÆº£ÓÎÏ· Memorator¶þ´úÉ豸£¨ÔËÐй̼þ°æ±¾v3.0£©ÉϵÄÉ豸ÀàÐÍÊÇ?kvmDEVICE_MHYDRA_EXT?3¡£

    È»ºóÎÒÃǵ÷ÓÃ?format_disk³õʼ»¯SD¿¨¡£ÔÚ³õʼ»¯µ±ÖУ¬SDµÄ´ó²¿·Ö¿Õ¼äÊÇÓÃÀ´´æ´¢¼Ç¼±¨Îĵ쬵«ÊÇÎÒÃÇ¿ÉÒÔͨ¹ý¸ø³õʼ»¯ÃüÁîÌí¼ÓÁ½¸ö²»Í¬µÄ×Ô±äÁ¿£¬Ó°ÏìÁ½¸ö²¿·ÖµÄ´æ´¢¿Õ¼ä´óС¡£

    µÚÒ»¸ö×Ô±äÁ¿ÊÇÖ¸¶¨¡°ÎªÓû§Îļþ±£Áô¿Õ¼ä¡±£¬ÕâÒâζ×ÅSD¿¨µÄÕⲿ·Ö¿Õ¼ä½«¹©Óû§Ö§ÅäʹÓá£ÎÒÃÇ¿ÉÒÔÔÚ¸ÃÉ豸ÖÐÔËÐÐÒ»¸ö?t³ÌÐò£¬Éú³ÉÎı¾Îļþ£¬»òÕßÎÒÃÇ¿ÉÄÜÓÐÆäËûÓû§ÎļþÒª¸´ÖƵ½SD¿¨ÉÏ¡£

    µÚ¶þ¸ö×Ô±äÁ¿ÄÜÓ°ÏìÒ»¸ö½Ð×öDATABASE.BIN?µÄÎļþ´óС£¬?ÔÆº£ÓÎÏ· Memorator Config ToolÔÚʹÓÃËü£¬ÁíÍâËü¿ÉÄÜ»¹°üº¬ÉèÖúÍÊý¾Ý¿âÎļþ£¬Óû§¿ÉÒÔÑ¡Ôñ°ÑÕâÀàÎļþ´æ´¢ÔÚSD¿¨ÉÏ¡£

    ÔÚ×°ÉÏMemoratorиñʽ»¯µÄ¼ÇÂ¼ÇøÒÔºó£¬ÎÒÃǼì²éÊÇ·ñ»ñµÃÁËÔ¤ÆÚµÄLIOÊý¾Ý¸ñʽ£¬´Ó¶øÑéÖ¤ÎÒÃÇÌṩÁËÕýÈ·µÄÉ豸ÀàÐÍ¡£

    # 07_ÑéÖ¤_lio_³õʼ»¯_sdcard.py
    from canlib import kvmlib
    from canlib import VersionNumber
    
    # ֮ǰÎÒÃÇ¿´µ½¸ÃÉ豸ÒÑÁ¬½Óµ½CANlib ͨµÀ 0
    channel = 0
    
    # ÎÒÃÇ»¹ÖªµÀ´ËÉ豸ÀàÐÍÊÇkvmDEVICE_MHYDRA_EXT
    device_type = kvmlib.kvmDEVICE_MHYDRA_EXT
    
    # ´ò¿ªÉ豸
    with kvmlib.openDevice(channel_number=channel,
                           device_type=device_type,
                           mount=False) as memorator:
    
        # ¸ñʽ»¯ SD ¿¨²¢¸øÅäÖÃÎļþ±£Áô 10 MB 
        # (i.e. DATABASE.BIN) ºÍ 10000 MB ¸øÎÒÃÇ×Ô¼ºµÄÎļþ¡£
        print('Initializing SD card...')
        memorator.format_disk(reserved_space=10000,
                              database_space=10)
    
        # ×°ÉÏ´æ´¢Çø
        memorator.mount()
    
        # ¶ÁÈ¡LIOÊý¾Ý¸ñʽ°æ±¾
        lio_data_format = memorator.log.ldf_version
    
        # ÑéÖ¤SD¿¨µÄLIOÊý¾Ý¸ñʽºÍ´ËÉ豸µÄÀàÐÍÏà·û - ÎÒÃÇÓÃÕâ¸öÀàÐÍÀ´´ò¿ªÉ豸
     
        if lio_data_format != VersionNumber(major=5, minor=0):
            if lio_data_format == VersionNumber(major=3, minor=0):
                raise ValueError('This log file can be read if you reopen the'
                                 ' device as kvmDEVICE_MHYDRA.')
            raise ValueError('Unexpected Lio Data Format: ' +
                             str(lio_data_format))
    
        # ±¨¸æ´Ë¿¨ÉÏ·ÖÅ䏸Êý¾Ý´æ´¢ÇøµÄÐÅÏ¢ 
        print('Disk size: {disk:.0f} MB\n'
              '  Log size: {log:.0f} MB. Used: {used:.0f} MB'.
              format(disk=memorator.disk_size,
                     log=memorator.disk_usage.total,
                     used=memorator.disk_usage.used))

    Áбí10: ÑéÖ¤ LIOÊý¾Ý¸ñʽºÍ³õʼ»¯Ò»¸öÔÆº£ÓÎÏ·É豸µÄSD¿¨¡£

    Initializing SD card...
    Disk size: 15932 MB
      Log size: 5895 MB. Used: 0 MB

    ÎÒÃǵÄÔÆº£ÓÎÏ· MemoratorÉ豸ÓÐÒ»¸ö16 GBµÄSD¿¨£¬µ±ÎÒÃÇÏÖÔÚΪDATABASE.BIN±£Áô10 MB£¬ºÍ·ÖÅä10 GBµ½ÏÐÓà¿Õ¼äʱ£¬ÎÒÃÇֻʣÏÂ5895 MBÓÃÓڼǼ´æ´¢¡£ÒòΪÎÒÃǸոճõʼ»¯ÁËSD¿¨£¬ËùÒÔÎÒÃǼǼÁË0 MB£¨ÒÑÓã©Êý¾Ý¡£

    ´ËÉ豸¼°ÆäSD¿¨ÏÖÔÚÒѳõʼ»¯²¢ÎªÅäÖÃ×öºÃ×¼±¸¡£


    3.3 ±£´æÅäÖÃ

    ΪÁ˽«ÅäÖñ£´æµ½É豸µÄSD¿¨£¬ÎÒÃǽ«ÑéÖ¤¹ýµÄXMLÅäÖÃת»»Îª¶þ½øÖÆÅäÖ㬲¢½«´Ë¶þ½øÖÆÅäÖÃÏÂÔØµ½É豸ÉÏ£¨¾ÍÏñÎÒÃÇÔÚÕâ¸ö²©¿ÍϵÁеĵÚÒ»²¿·ÖÖÐËù×öµÄÄÇÑù£©¡£

    # 08_±£´æ_ÉèÖÃ.py
    from canlib import kvamemolibxml
    from canlib import kvmlib
    
    
    # ÎÒÃÇ֮ǰ¿´µ½´ËÉ豸Á¬½Óµ½ÁËCANlib ͨµÀ 0
    channel = 0
    # ¶ÁÈ¡ XML ÉèÖÃÎļþ
    with open("config.xml", 'r') as myfile:
        print('Reading xml')
        config_xml = myfile.read()
    
    # °ÑXMLÉèÖÃת»»Îª¶þ½øÖÆÉèÖÃ
    config_lif = kvamemolibxml.kvaXmlToBuffer(config_xml)
    
    # ´ò¿ªmemorator É豸²¢Êéд¸ÃÉèÖÃ
    # É豸ÀàÐÍ kvmDEVICE_MHYDRA_EXT ÊÇȱʡÉèÖÃ
    with kvmlib.openDevice(channel_number=channel) as memorator:
        print('Writing config')
        memorator.write_config(config_lif)

    Áбí 11: ת»»²¢ÏÂÔØÅäÖõ½Ò»¸öÔÆº£ÓÎÏ· É豸ÉÏ¡£

    ΪÁËÔÚÖ®ºóÒÔÃ÷È·ÎÄ×ÖÐÎʽÕÒ»ØÅäÖà , ÎÒÃǰÑÎÒÃÇÓùýµÄÎļþ±ä³ÉÒ»¸öѹËõÎļþ(config.zip)ÏÂÔØµ½É豸ÉÏ4?¡£ÒòΪÎÒÃÇ֮ǰÔÚ±àÖÆt?³ÌÐò5ʱʹÓùý×Ô±äÁ¿?-addsrc?, ÎÒÃÇÖ»ÐèÒªÕâ¸ö±àÖÆºÃµÄ?.txe?ÎļþºÍÎÒÃǵÄXMLÅäÖá£Èç¹ûÎÒÃÇʹÓÃÁËÈκÎÊý¾Ý¿â, ÎÒÃÇÒ²½«°ÑÄÇЩÊý¾Ý¿âÌí¼Óµ½Ñ¹ËõÎļþ´æµµ¡£

    # 09_¸´ÖÆ_Îļþ_µ½_É豸.py
    import zipfile
    from canlib import canlib
    
    # Éú³ÉѹËõÎĵµ
    with zipfile.ZipFile("config.zip", mode='w',
                         compression=zipfile.ZIP_DEFLATED) as zipf:
        # Ìí¼ÓÎļþµ½Ñ¹ËõÎĵµÖÐ
        zipf.write("config.xml")
        zipf.write("myCanGenerator.txe")
    
    # ÎÒÃÇÖªµÀ´ËÉ豸ÒÑÁ¬½Óµ½CANlibͨµÀ0
    channel = 0
    
    # ´ò¿ªÉ豸²¢ÊéдѹËõÎĵµ 
    with canlib.openChannel(channel=channel) as ch:
        # ÒòΪSD¿¨ÊÇÓÃFAT¸ñʽ»¯µÄ, ÎÒÃÇÓ¦¸ÃʹÓÃÒ»¸ö8.3¸ñʽµÄÎļþÃû×÷ΪĿ±êÎļþÃû
        ch.fileCopyToDevice("config.zip", "config.zip")

    Áбí 12:ÓÃѹËõÎĵµÏÂÔØÃ÷È·ÎÄ×ÖÅäÖá£


    3.4¶ÁÈ¡½á¹û²¢±£´æµ½ÎļþÉÏ

    µ±´ËÉ豸½øÈëÏÖ³¡ÔËÐк󣨼´ÎÒÃÇͨ¹ýCAN½Óͷͨµç²¢ÔËÐнű¾£©£¬ÎÒÃÇ¿ÉÒÔÔٴν«É豸Á¬½Óµ½¼ÆËã»úÉϲ¢¶ÁÈ¡ÒѼǼµÄÊý¾Ý6?¡£

    ΪÁ˽«À´±£´æÊý¾Ý£¬ÎÒÃÇÏÖÔÚʹÓÃkme50¸ñʽ½«Êý¾ÝдÈëÎļþ¡£´Ë¸ñʽ¿ÉÔÚÖ®ºóʹÓÃת»»Æ÷ – °üÀ¨ÔÚÔÆº£ÓÎÏ· Memorator Config ToolÖÐ – ת»»Îª¶àÖÖ¸ñʽ¡£

    ËùÓмǼÎļþÖеĵÚÒ»¸öÌõÄ¿¶¼°üº¬Óйش洢É豸µÄÐÅÏ¢¡£ÎÒÃÇÔÚÕâÀïÀûÓÃÕâ¸öÌØµã£¬½«²¿·ÖEANºÍÐòÁкżӵ½Éú³ÉµÄ.kme50ÎļþµÄÃû³ÆÖС£

    µ±´ÓÉ豸ÖжÁÈ¡µ½ËùÓмǼÎļþºó£¬ÎÒÃǽ«É¾³ýÉ豸ÉϵļǼÎļþ£¬ÒÔ±ãΪеļǼ²Ù×÷×öºÃ×¼±¸£¨Öظ´Ê¹ÓÃÏàͬµÄÅäÖã©¡£

    # 10_¶ÁÈ¡_ÒѼǼµÄ_Êý¾Ý.py
    import glob
    import os
    
    from canlib import EAN, VersionNumber
    from canlib import kvmlib
    
    # ÎÒÃÇ֮ǰ¿´µ½ÎÒÃǵÄÉ豸Á¬½Óµ½ CANlib ͨµÀ 0
    channel = 0
    
    # ½«´æ·Å½á¹ûÎļþµÄĿ¼
    resultDir = "result"
    
    # È·ÈϽá¹ûĿ¼´æÔÚ¶øÇÒÊÇ¿ÕÏеÄ
    if os.path.isdir(resultDir):
        files = glob.glob(os.path.join(resultDir, "*"))
        for f in files:
            os.remove(f)
    else:
        os.mkdir(resultDir)
    os.chdir(resultDir)
    
    # ´ò¿ªÉ豸²¢×°ÉÏ´æ´¢ÇøÅäÖà 
    # É豸ÀàÐÍ kvmDEVICE_MHYDRA_EXT ÊÇȱʡÉèÖÃ
    # ×¢Òâ openDevice() ¿ÉÄܻῴµ½KvmDiskNotFormated
    with kvmlib.openDevice(channel_number=channel, mount=True) as memorator:
        lio_data_format = memorator.log.ldf_version
        # È·ÈÏSD¿¨µÄLIO Êý¾Ý¸ñʽ·ûºÏÉ豸ÀàÐÍ£¬ÎÒÃÇÓôËÀàÐÍÀ´´ò¿ª¸ÃÉ豸
        if lio_data_format != VersionNumber(major=5, minor=0):
            if lio_data_format == VersionNumber(major=3, minor=0):
                raise ValueError('This log file can be read if you reopen the'
                                 ' device as kvmDEVICE_MHYDRA.')
            raise ValueError('Unexpected Lio Data Format: ' + str(lio_data_format))
    
        # ¶ÁÈ¡¼Ç¼ÏÂÀ´µÄ¼Ç¼ÎļþÊýÁ¿
        num_log_files = len(memorator.log)
        print("Found {num} file(s) on card: ".format(num=num_log_files))
    
        # Ñ¡ÔñËùÓмǼÎļþ²¢½«ËüÃǵÄÄÚÈÝÊéдµ½.kme50 Îļþ
        for i, log_file in enumerate(memorator.log):
            print("\n==== File {index}: {start} - {end}, approx {num} events".
                  format(index=i,
                         start=log_file.start_time,
                         end=log_file.end_time,
                         num=log_file.event_count_estimation()))
            # µÚÒ»¸ö¼Ç¼Ê¼þ°üÀ¨É豸ÐÅÏ¢
            event_iterator = iter(log_file)
            first_event = next(event_iterator)
            ean = EAN.from_hilo([first_event.eanHi, first_event.eanLo])
            serial = first_event.serialNumber
            # °ÑEANºÍϵÁкÅÌí¼Óµ½ÎļþÃûÉÏ
            logfile_name = ('log_{ean}_{sn}_{index:03}.kme50'.
                            format(ean=str(ean), sn=serial, index=i))
            print('Saving to:', logfile_name)
            with kvmlib.createKme(logfile_name) as kme:
                print(first_event)
                kme.write_event(first_event)
                for event in event_iterator:
                    # °ÑʼþÊéдµ½stdoutÉÏ
                    print(event)
                    kme.write_event(event)
    
        # ɾ³ýËùÓмǼÎļþ
        # memorator.log.ɾ³ýËùÓÐÎļþ()

    Áбí 13:¶ÁÈ¡ÒѼǼµÄÊý¾Ý²¢±£´æµ½.kme50ÎļþÉÏ¡£

    ÔËÐÐÉÏÃæµÄ³ÌÐò£¬Ôڴ˼ǼÀï³öÏÖµÄÿ¸öͨµÀÉÏ£¬ÎÒÃÇÄÜ¿´µ½6¸ö±¨ÎÄ¡£

    Found 1 file on card: 
    
    ==== File 0: 2018-08-09 15:19:45 - 2018-08-09 15:19:51, approx 20 events
    Saving to: log_73-30130-00819-9_11573_000.kme50
    *t:             - EAN:73-30130-00819-9  s/n:11573  FW:v3.11.557  LIO:v5.0
     t:   2.824746112  DateTime: 2018-08-09 15:19:45
     t:   2.824746112 Log Trigger Event (type: 0x2, trigno: 0x01, pre-trigger: 0, post-trigger: 0)
    
     t:   2.824746112  ch:1 f:    2 id:   3 dlc: 8 d:12 21 13 31 22 34 41 15
     t:   2.824746137 Log Trigger Event (type: 0x2, trigno: 0x01, pre-trigger: 0, post-trigger: 0)
    
     t:   2.824746137  ch:0 f:   42 id:   3 dlc: 8 d:12 21 13 31 22 34 41 15
     t:   3.824770237  ch:1 f:    2 id:   4 dlc: 8 d:12 21 13 31 22 34 41 15
     t:   3.824770262  ch:0 f:   42 id:   4 dlc: 8 d:12 21 13 31 22 34 41 15
     t:   4.824788362  ch:1 f:    2 id:   5 dlc: 8 d:12 21 13 31 22 34 41 15
     t:   4.824788387  ch:0 f:   42 id:   5 dlc: 8 d:12 21 13 31 22 34 41 15
     t:   5.824810487 Log Trigger Event (type: 0x2, trigno: 0x01, pre-trigger: 0, post-trigger: 2500)
    
     t:   5.824810487  ch:1 f:    2 id:   6 dlc: 8 d:12 21 13 31 22 34 41 15
     t:   5.824810512  ch:0 f:   42 id:   6 dlc: 8 d:12 21 13 31 22 34 41 15
     t:   6.824826612  ch:1 f:    2 id:   7 dlc: 8 d:12 21 13 31 22 34 41 15
     t:   6.824826637  ch:0 f:   42 id:   7 dlc: 8 d:12 21 13 31 22 34 41 15
     t:   7.824851737  ch:1 f:    2 id:   8 dlc: 8 d:12 21 13 31 22 34 41 15
     t:   7.824851762  ch:0 f:   42 id:   8 dlc: 8 d:12 21 13 31 22 34 41 15

    ²ÎÔIJ©¿Í?Examining logged data with kvmlib and Python?ÉϵÄÁíÒ»¸ö·¶Àý ¨C ÓйØÔõÑùʹÓÃkvmlib¶Áȡһ¸öÉ豸µÄÊý¾Ý¡£


    3.5 ´ÓÉ豸É϶ÁÈ¡ÅäÖá£

    ֮ǰ£¬ÎÒÃǽ«ÅäÖõĸ±±¾·ÅÔÚSD¿¨µÄconfig.zipÎļþÖУ¬ÏÖÔÚ¿ÉÒÔʹÓÃCANlib¶ÁÈ¡ËùÓÐÓû§Îļþ£¬È»ºó¿ÉÒÔʹÓÃ7-zip7´ò¿ª½á¹ûÎļþ¡£

    # 11_¶ÁÈ¡_ÅäÖÃ_´Ó_É豸.py
    import os
    
    from canlib import canlib
    
    # ÎÒÃǵÄÉ豸ÊÇÁ¬½Óµ½ CANlib ͨµÀ 0
    channel = 0
    
    # ´ò¿ªÉ豸
    with canlib.openChannel(channel=channel) as ch:
        # ÁгöÉ豸ÉϵÄÎļþ
        numFiles = ch.fileGetCount()
    
        if numFiles:
            for i in range(numFiles):
                name = ch.fileGetName(i)
                # Ìø¹ýÒÑÖªÎļþ
                if (os.path.splitext(name)[1].lower() == '.kmf'
                        or name.lower() == 'param.lif'
                        or name.lower() == 'database.bin'):
                    print('Skipping', name)
                else:
                    # ¸´ÖÆÓû§Îļþµ½µçÄÔ
                    print('Copying: ', name)
                    ch.fileCopyFromDevice(name, name)

    Áбí 14: ´Ó ÔÆº£ÓÎÏ·É豸Éϸ´ÖÆÓû§Îļþ¡£

    ÖÁ´Ë±¾ÎÄÌÖÂÛÁËÓÃkvmlibÉèÖÃʱ¼äºÍÅäÖÃÎÒÃǵÄÔÆº£ÓÎÏ· MemoratorÉ豸¡£ÎÒÃǽ«ÔÚÏÂÒ»²¿·Ö£¬Ò²ÊDZ¾ÏµÁв©¿ÍµÄ×îºóÒ»²¿·Ö£¬½éÉܵ±ÎÒÃÇÖ»ÄÜ´¦ÀíSD¿¨Ê±£¬ÔõÑù½øÐвÙ×÷£¬Ö®ºó½«Ëü²åÈëÔÆº£ÓÎÏ· Memorator É豸ÖС£


    ×¢ÊÍ

    1 Read more in the post Was that the CANlib channel number or Card Number?

    2 The LIO data format is the specification on how to store data on the SD card. The latest LIO data format, v5.0, is capable of handling the larger data frames that can be generated by CAN FD.

    3?Firmware earlier than 3.0 should use device type kvmDEVICE.MHYDRA.

    4?µ±Äãµã»÷¡°Save?Configuration and Databases on the Disk£¨±£´æÅäÖúÍÊý¾Ý¿âµ½¿¨ÉÏ£©¡±Ê±£¬ÕâºÍ?ÔÆº£ÓÎÏ· Memorator Config Tool?µÄ¹¦ÄÜÏàËÆ¡£´Ë¹¤¾ßÈ»ºó½«°ÑʹÓùýµÄÅäÖúÍÊý¾Ý¿âÎļþ·ÅÈë?DATABASE.BINÎļþ¡£

    5?ÔÚ±¾²©¿ÍµÄµÚ¶þ²¿·Ö,?Adding script and triggers to a configuration.£¨ÎªÅäÖÃÌí¼Ó½Å±¾ºÍ´¥·¢µã
    £©¡£

    6?ÎÒÃǺܿÉÄÜ»¹Ó¦¸ÃÔÚÕâÀï¼ì²éLIOÊý¾Ý¸ñʽ°æ±¾, ²ÎÕÕÎÒÃÇ֮ǰµÄ³õʼ»¯´úÂëÀ´Á˽âÔõÑù²Ù×÷¡£

    7?7-zipÊÇÒ»¸ö¿ª·Å×ÊÔ´Windowsµµ°¸´¦ÀíʹÓù¦ÄÜ, Çë¼û?www.7-zip.org?Á˽â¸ü¶àÐÅÏ¢¡£



    ±¾ÎÄÒѸüС£ Òª²é¿´Ô­¼þ£¬Çëµ¥»÷ÏÂÃæµÄ¿ò¡£

    Author Image

    Magnus Carlsson

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

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