±¾ÎÄÊǹ²°üÀ¨4²¿·ÖµÄ¼¼Êõ²©¿ÍµÄµÚÈý²¿·Ö¡£´Ë²©¿Í½éÉÜͨ¹ýkvmlib£¬Ê¹Óõڶþ´úÔÆº£ÓÎÏ· MemoratorÊý¾Ý¼Ç¼ÒÇ£¬ÅäÖúͶÁÈ¡ÒѼǼµÄÊý¾Ý:
¼¼Êõ²©¿Í
½øÒ»²½Á˽âkvmlib
ÔÚ±¾²©¿ÍµÄµÚÒ»²¿·ÖÖУ¬ÎÒÃÇ˵Ã÷ÁËÈçºÎʹÓÃ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: ת»»²¢ÏÂÔØÅäÖõ½Ò»¸öÔÆº£ÓÎÏ· É豸ÉÏ¡£
# 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?Á˽â¸ü¶àÐÅÏ¢¡£

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