¼¼Êõ²©¿Í

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

¿ªÊ¼Ê¹ÓÃkvmlib

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

ÕâµÚÒ»²¿·ÖÎÄÕ½«¸ÅÊöÈçºÎʹÓÃpythonÅäÖÃkvaserÉ豸¡£´Ë²©¿ÍµÄµÚ¶þ²¿·Ö½éÉÜÁ˸üΪ¸´ÔÓµÄÅäÖ㬶øµÚÈý²¿·Ö½«¸ü½øÒ»²½£¬½éÉÜÈçºÎÔÚC APIˮƽÉÏʹÓÃkvmlib¡£×îºóÒ»²¿·Ö½éÉÜÁËÈçºÎÔÚÖ»ÄÜ·ÃÎÊSD¿¨µÄÇé¿öÏ£¬ÅäÖÃÉ豸¡£GitHubÉÏÌṩÍêÕûµÄ³ÌÐòÁбí¡£

1.1 ½éÉÜ

½ÏеÄÔÆº£ÓÎÏ· MemoratorÉ豸µÄÅäÖÃͨ³£¿ÉʹÓÃ?ÔÆº£ÓÎÏ· Memomorator Config Tool – Ò»¸öWindows GUI¹¤¾ß¡£µ«ÊÇÄãÒ²¿ÉÒÔʹÓÃÔÆº£ÓÎÏ· Memorator library (kvmlib) – ÔÆº£ÓÎÏ· CANlib SDK.1µÄÒ»²¿·Ö£¬À´ÅäÖÃÕâЩÉ豸¡£

ÎÒÃÇÕâÀïÑ¡ÔñµÄÉ豸ÊǾ߱¸3.113¹Ì¼þ°æ±¾µÄkvaser Memorator 5xHS2¡£

ÎÒÃÇ»¹½«Ê¹ÓÃpython canlib°üµÄv1.6°æ£¬ºÍkvaser canlib SDKµÄv5.23°æ£¬×îа汾¿É´Ówww.kvaser.com/downloadsÏÂÔØ¡£


1.2 ³õʼ»¯SD

½öÔÚÎÒÃǵIJÙ×÷ϵͳµÄÎļþ¹ÜÀíÆ÷Öиñʽ»¯SD¿¨ÊDz»¹»µÄ£¬ÎÒÃÇ»¹ÐèҪʹÓÃÔÆº£ÓÎÏ· MemoratorÉ豸³õʼ»¯SD¿¨¡£½«SD¿¨²åÈëÔÆº£ÓÎÏ· MemoratorÉ豸ºó£¬ÎÒÃǽ«Ôƺ£ÓÎÏ· MemoratorÉ豸Á¬½Óµ½µçÄÔµÄÒ»¸öUSB¶Ë¿Ú£¬²¢ÔËÐеÚÒ»²¿·Ö±àÂëÀ´¸ñʽ»¯SD¿¨¡£

# 01_init_sdcard.py
from canlib import EAN
from canlib.device import Device
from canlib import kvmlib

# ÕÒµ½ÒÑÁ¬½ÓÉÏµÄ ÔÆº£ÓÎÏ· Memorator Pro 5xHS£¬Æä´úÂëΪEAN 73-30130-00778-9
ean = EAN('73-30130-00778-9')
dev = Device.find(ean=ean)

# Ïò¸ÃÓ²¼þѯÎÊһЩÐÅÏ¢, ²¢´òÓ¡³öÀ´
print(dev.probe_info())

# ʹÓÃÎÒÃÇÔÚÔÆº£ÓÎÏ· MemoratorÉÏÕÒµ½µÄ CANlib ͨµÀºÅ£¬´ò¿ª¸ÃÉ豸À´½øÐÐÅäÖá£LED µÆ½«¿ªÊ¼ÂýËÙ"ÔËÐеÆ" £¬ÏÔʾ¸ÃÉ豸ÕýÔÚ´ò¿ª£¬ÒÔ½øÐÐÅäÖá£

# ÎÒÃǽ«Ê¹ÓÃÒ»¸öÎÄ×Ö¹ÜÀíÆ÷£¬À´È·±£ÔÚÍê³Éʱ£¬ÎÒÃÇÄÜÕýÈ·¹Ø±ÕMemoratorÄÚ²¿´¦Àí¡£
with kvmlib.openDevice(dev.channel_number()) as memo:
    # ÓÃȱʡֵ³õʼ»¯SD ¿¨¡£CAN ͨµÀLEDµÆÔÚÕâ¸ö³õʼ»¯¹ý³ÌÖУ¬»á¿ìËÙÉÁ¶¯¡£
    print('Formatting disk...', end='')
    memo.format_disk()
    print(' done!')

Áбí 1:ÔÚÒ»¸ö ÔÆº£ÓÎÏ· Memorator É豸Éϳõʼ»¯SD¿¨

µ±ÎÒÃÇÔËÐÐÏÂÃæµÄ±àÂ룬ÎÒÃÇ¿ÉÒÔÈ·ÈϸÃÉ豸ȷʵÔÚÔËÐй̼þ°æ±¾v3.11, ²¢ÇÒÁ¬½Óµ½canlib ͨµÀ0ÉÏ¡£

CANlib Channel: 0
Card Number   : 0
Device        : ÔÆº£ÓÎÏ· Memorator Pro 5xHS (channel 0)
Driver Name   : kcany0a
EAN           : 73-30130-00778-9
Firmware      : 3.11.0.557
Serial Number : 1023
Formatting disk... done!

1.3 ´´½¨ÅäÖÃ

ÏÖÔÚÎÒÃDZØÐëͨ¹ý±àдһ¶ÎXML´úÂë4À´´´½¨Ò»¸öÅäÖá£ÈÃÎÒÃǾÙÒ»¸ö¼òµ¥µÄÀý×Ó£¬Ö»Ê¹ÓÃͨµÀ0ºÍ1¡£ÎÒÃǽ«°ÑÕâÁ½¸öͨµÀµÄ±ÈÌØÂÊÉèÖÃΪ1 Mbit/s£¬²¢ÔÚ°²¾²Ä£Ê½Ï¼Ç¼ËùÓÐÄÚÈÝ¡£

<?xml version="1.0" ?>
<!-- loggall.xml -->
<!DOCTYPE KVASER>
<KVASER>
  <VERSION>2.0</VERSION>
  <BINARY_VERSION>6.0</BINARY_VERSION>
  <SETTINGS>
    <MODE fifo_mode="NO" log_all="YES"/>
  </SETTINGS>
  <CAN_BUS>
    <PARAMETERS bitrate="1000000" channel="0" silent="YES" sjw="1"
       tseg1="5" tseg2="2"/>
    <PARAMETERS bitrate="1000000" channel="1" silent="YES" sjw="1"
       tseg1="5" tseg2="2"/>
  </CAN_BUS>
  <TRIGGERBLOCK/>
  <SCRIPTS/>
</KVASER>

Áбí 2: ¼òµ¥ XML ÅäÖ÷¶Àý.

µ±Ç°XMLÅäÖð汾ÊÇv2.0£¬ÎÒÃǵÄÉ豸ʹÓù̼þ°æ±¾v3.11, Ô¤ÆÚ¶þ½øÖÆ£¨ÅäÖã©°æ±¾6.0¡£

ÔÚÏÂһƪÎÄÕÂÖУ¬ÎÒÃǽ«Ôö¼ÓÅäÖõĸ´Ôӳ̶ȣ¬½éÉÜÈçºÎÔÚÏÂÔØÅäÖÃ֮ǰ£¬Ã÷È·ÑéÖ¤ÅäÖá£ÏÖÔÚ£¬ÎÒÃÇÖ»ÐèÈ·±£ÕýÈ·ÎÞÎóµØÊ¹ÓÃXML¡£


1.4 ÏÂÔØÅäÖÃ

ÎÒÃÇÏÖÔÚ¼¸ºõ¿ÉÒÔ¿ªÊ¼Êý¾Ý¼Ç¼ÁË£¬Ö»ÊÇÐèÒª°ÑÅäÖüӵ½É豸ÉÏ¡£ÎÒÃǽ«¶ÁÈ¡ÎÒÃǸմ´½¨µÄXMLÎļþ£¬À´ÊµÏÖÕâÒ»²Ù×÷£¬½«´ËXMLÅäÖÃת»»Îª¶þ½øÖÆÅäÖ㬲¢½«¶þ½øÖÆÅäÖÃÏÂÔØµ½É豸ÉÏ¡£

# 02_config_device.py
from canlib import EAN, Device
from canlib import kvamemolibxml
from canlib import kvmlib

# ѰÕÒÎÒÃÇÒÑÁ¬½ÓÉÏµÄ ÔÆº£ÓÎÏ· Memorator Pro 5xHS
# Òªµã: Ö»ÒªÊäÈë×îºó6λÊý¾Í¿ÉÒÔÁË¡£
dev = Device.find(ean=EAN('00778-9'))

# ¶ÁÈ¡ XML ÅäÖÃÎļþ
with open("logall.xml", 'r') as myfile:
    config_xml = myfile.read()

# °Ñ XML ÅäÖÃת»»Îª¶þ½øÎ»ÅäÖÃ
config_lif = kvamemolibxml.kvaXmlToBuffer(config_xml)

# ´ò¿ªmemorator É豸£¬²¢Êéд´Ë¶þ½øÎ»ÅäÖÃ
with kvmlib.openDevice(dev.channel_number()) as memo:
    memo.write_config(config_lif)

Áбí 3:°ÑÅäÖÃÏÂÔØµ½ ÔÆº£ÓÎÏ· É豸ÉÏ¡£

ÏÖÔÚ£¬ÎÒÃÇÒÑ×¼±¸ºÃ£¬°ÑÅäÖúõÄÉ豸ÓëµçÄÔ¶Ï¿ª£¬²¢½«É豸Á¬½Óµ½ÏÖÓеÄCAN×ÜÏߣ¬²¢Í¨¹ý¸øÉ豸µÄCAN 1×ÜÏßÁ¬½ÓÆ÷½Óµç£¬À´¿ªÊ¼Êý¾Ý¼Ç¼¡£


1.5 ¶ÁÈ¡ÒѼǼµÄ±¨ÎÄ

ÔÚÎÒÃǼǼÁËһЩ±¨Îĺó£¬ÎÒÃÇÔٴν«Õâ¸öÔÆº£ÓÎÏ· Memorator É豸Á¬½Óµ½µçÄÔµÄUSB ½Ó¿ÚÉÏ£¬²¢¶ÁÈ¡½á¹û¡£

# 03_read_logged.py
from canlib import EAN, Device
from canlib import kvmlib

# Á¬½Óµ½ ÔÆº£ÓÎÏ· Memorator Pro 5xHSÉ豸ÉÏ£¬±àÂëEAN 73-30130-00778-9
# µÇÈëÊý¾Ý¼ÇÂ¼Çø
dev = Device.find(ean=EAN('00778-9'))
memo = kvmlib.openDevice(dev.channel_number(), mount=True)

fileCount = len(memo.log)
print('Found {} file{} on card.'.format(
    fileCount,
    "s" if fileCount > 1 else "")
)

# Á¬½ÓËùÓÐÈÕÖ¾Îļþ£¬²¢°ÑËüÃǵÄÄÚÈÝÊéдµ½±ê×¼Êä³öÉÏ
for i, logfile in enumerate(memo.log):
    print('Reading file {}:'.format(i))
    print("Logging started at", logfile.start_time.isoformat(' '))

    for event in logfile:
        print(event)

# memo.log.delete_all()   # ¿ÉÑ¡Ïî, ɾ³ýËùÓÐÈÕÖ¾Îļþ

# ¹Ø±ÕmemoratorÉ豸
memo.close()

Áбí 4: ¶ÁÈ¡ÒѼǼµÄ±¨ÎIJ¢´òÓ¡µ½±ê×¼Êä³öÉÏ¡£

Çë×¢ÒâÎÒÃDz¢Ã»ÓÐÔËÐÐÁбí4Öеġ®# memo.log.delete_all()¡¯ÐÐ ¨C ɾ³ýÒѼǼÎļþµÄÃüÁÒòΪÕâÑùÎÒÃDz»±ØÖØÐÂÔÚCAN×ÜÏßÉϼǼ£¬¿ÉÒÔ¶à´ÎÔËÐÐÕâ¸ö½Å±¾¡£

Found 1 file on card.
Reading file 0:
Logging started at 2018-05-22 11:08:56
*t:             - EAN:73-30130-00778-9  s/n:1023  FW:v3.11.557  LIO:v5.0
 t:   0.236734012  DateTime: 2018-05-22 11:08:56
 t:   0.236734012 Log Trigger Event (type: 0x1, trigno: 0x00, pre-trigger: 0, post-trigger: -1)

 t:   4.453331987  ch:0 f:    2 id: 490 dlc: 2 d:5d d6
 t:   4.453332025  ch:1 f:    2 id: 490 dlc: 2 d:5d d6
 t:   4.453731112  ch:0 f:    2 id: 284 dlc: 2 d:a8 b1
 t:    4.45373115  ch:1 f:    2 id: 284 dlc: 2 d:a8 b1
 t:   4.454201237  ch:0 f:    2 id: 739 dlc: 2 d:7a 4b
 t:   4.454201275  ch:1 f:    2 id: 739 dlc: 2 d:7a 4b
 t:   4.454729362  ch:0 f:    2 id: 622 dlc: 6 d:8d b9 69 8a 98 e1
 t:     4.4547294  ch:1 f:    2 id: 622 dlc: 6 d:8d b9 69 8a 98 e1
 t:   4.455189487  ch:0 f:    2 id: 559 dlc: 1 d:78
 t:   4.455189525  ch:1 f:    2 id: 559 dlc: 1 d:78
 t:   4.455685612  ch:0 f:    2 id: 33a dlc: 1 d:0d
 t:    4.45568565  ch:1 f:    2 id: 33a dlc: 1 d:0d
 t:   4.456254737  ch:0 f:    2 id: 463 dlc: 6 d:14 eb d6 ae ed 46
 t:   4.456254775  ch:1 f:    2 id: 463 dlc: 6 d:14 eb d6 ae ed 46
 t:   4.456754862  ch:0 f:    2 id: 59b dlc: 6 d:7f a9 28 3a f2 5d
 t:     4.4567549  ch:1 f:    2 id: 59b dlc: 6 d:7f a9 28 3a f2 5d
 t:   4.457269987  ch:0 f:    2 id: 103 dlc: 8 d:4e 0d 1a dd 8d b2 19 ab
 t:   4.457270025  ch:1 f:    2 id: 103 dlc: 8 d:4e 0d 1a dd 8d b2 19 ab
 t:  10.220507812  DateTime: 2018-05-22 11:09:06

±¾ÎļòÊöÖÁ´Ë¡£ÎÒÃÇÏÖÔÚÖªµÀÁËÔõÑùÓÃkvmlibÅäÖúͶÁÈ¡ÒѼǼµÄÊý¾Ý¡£ÔÚϸö²¿·Ö£¬ÎÒÃǽ«×ÅÖØÌÖÂ۽ϸ´ÔÓµÄÅäÖá£


×¢ÊÍ£º

1?Òª´ó¸ÅÁ˽âËùÓÐÔÆº£ÓÎÏ· SDK libraries, Çë²ÎÔIJ©¿Í£¬¹ØÓÚÔõÑù?Get more from your hardware with ÔÆº£ÓÎÏ· SDK libraries£¨ÀûÓÃÔÆº£ÓÎÏ· SDKÈí¼þ¿ª·¢°ü×ÊÁÏ¿âÀ´¸ü³ä·ÖµØ·¢»ÓÔÆº£ÓÎÏ·Ó²¼þµÄ×÷Óã©¡£

2?´Ë²úÆ·ÊÇ?ÔÆº£ÓÎÏ· Memorator Pro 5xHS?£¬±àºÅΪ73-30130-00778-9¡£

3?ÔÆº£ÓÎÏ· Memorator Pro 5xHSµÄ¹Ì¼þÊǺÍ?ÔÆº£ÓÎÏ· Firmware Update Tool?£¨Ôƺ£ÓÎÏ·¹Ì¼þÉý¼¶¹¤¾ß£©À¦°óÔÚÒ»ÆðµÄ£¬²¢¿ÉÔÚ´ËÏÂÔØ¡£

4??XMLÅäÖøñʽÔÚÏÂÎÄÖÐÓнéÉÜ£º?Specification of ÔÆº£ÓÎÏ· Memorator Device configuration XML format, ¿ÉÔڴ˲ÎÔÄ¡£



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

Author Image

Magnus Carlsson

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

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