±¾ÎÄÊǹ²°üÀ¨4²¿·ÖµÄ¼¼Êõ²©¿ÍµÄµÚÒ»²¿·Ö¡£´Ë²©¿Í½éÉÜͨ¹ýkvmlibÓïÑÔ£¬Ê¹Óõڶþ´úÔÆº£ÓÎÏ· MemoratorÊý¾Ý¼Ç¼ÒÇ£¬ÅäÖúͶÁÈ¡ÒѼǼµÄÊý¾Ý:
¼¼Êõ²©¿Í
¿ªÊ¼Ê¹ÓÃkvmlib
ÕâµÚÒ»²¿·ÖÎÄÕ½«¸ÅÊöÈçºÎʹÓÃ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, ¿ÉÔڴ˲ÎÔÄ¡£

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