技术博客

29/03/2016 作者 Logan Via

kvmlib入门指南 — 如何使用kvmlib配置Kvaser Memorator Pro 5xHS

这是使用Kvaser Memorator第二代设备通过kvmlib进行配置和读取记录数据4篇系列文章的第一篇:

  1. kvmlib入门指南
  2. 在配置中添加脚本和触发器
  3. 深入了解kvmlib
  4. 使用kvmlib配置SD卡

第一篇文章将概述如何使用Python配置Kvaser设备。第二篇文章在配置上增加了一些复杂性,而第三篇文章将更深入地讲述如何在C API级别使用kvmlib。最后一篇文章讲述在只可访问可移动SD卡的情况下如何配置设备。全部程序列表可在GitHub上获得。

1.1 简介

Kvaser Memorator第二代设的配置备通常使用Kvaser Memomorator配置工具完成,它是一种GUI工具。但是你也可以使用包含在CANlib SDK1开发包中的kvmlib来编程配置这些设备。这里我们将讲述如何使用kvmlib配置Kvaser Memorator Pro 5xHS2

有关Kvaser SDK库的概述,请阅读这篇关于如何使用Kvaser SDK库从硬件中获得更多信息的博文。

我们是在Windows系统上运行,所以首先我们需要下载并安装CANlib SDK。本文将使用Python3来访问kvmlib,因此如果你之前没有看过通过Python访问CANlib的博文,那你可能需要首先阅读下。

为了简洁,本博文中的代码片段省略了以下import语句:4

import datetime

import kvaMemoLibXml
import kvDevice
import kvmlib

列表1:应包含在所有代码片段中的import语句

我们将使用运行固件版本3.0的Kvaser Memorator Pro 5xHS5,如果您的固件版本较旧,请在继续前进行更新。

1.2 初始化SD卡

仅仅在我们的操作系统文件管理器中格式化SD卡是不够的,我们还需要使用我们的Kvaser Memorator设备初始化SD卡。将SD卡插入我们的Kvaser Memorator设备后,我们将Kvaser Memorator设备连接到我们计算机上的空闲的USB端口,并运行我们的代码的第一个位,让我们看到该设备开始运作。

# Connect to our Kvaser Memorator Pro 5xHS with EAN 00778-9
dev = kvDevice.kvDevice(ean="73-30130-00778-9")
print dev

列表2:使用kvDevice模块连接到Kvaser设备

Device: Kvaser Memorator Pro 5xHS (channel 0)
EAN : 73-30130-00778-9
S/N : 1023
FW : v3.0.546
Card : 0
Drv : kcany0a
Card channel : 0
Canlib channel: 0

在这里我们注意到,我们能够连接设备,我们确实使用的是固件版本3.0。现在让我们打开设备并且使用默认值初始化SD卡。

# Open the device
dev.memoOpen()

# Initialize the SD card with default values
dev.memo.deviceFormatDisk()

# Close the device
dev.memoClose()

列表3:在Kvaser设备中初始化SD

1.3 创建配置

现在我们必须通过编写一段XML代码来创建配置6。有关XML格式最新版本的更多信息,见Kvaser Memorator设备配置XML格式规范文档中相关描述。让我们举一个简单的例子,假如我们只使用通道1和2。我们将这两个通道的波特率设置为1Mbps,并在静默模式下记录一切内容。

<?xml version="1.0" ?>
<!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>

列表4:简单的XML配置示例

XML的当前版本是v2.0,我们的设备运行的是v3.0版本固件,而我们期望运行的二进制版本6.0。

在下一篇文章中,我们增加了配置的复杂性,我们将研究如何在尝试下载配置之前将其进行显式验证。现在我们只能确保我们输入的XML没有任何错误。

1.4 下载配置

我们现在将要准备开始记录,我们只需要将配置放在设备上。然后将通过读入我们刚刚创建的XML文件,将此XML配置转换为二进制配置并将二进制配置下载到设备。

xl = kvaMemoLibXml.kvaMemoLibXml()

# Read in the XML configuration file
with open("logall.xml", ’r’) as myfile:
config_xml = myfile.read()

# Convert the XML configuration to a binary configuration
config_lif = xl.kvaXmlToBuffer(config_xml)

# Open the device and write the configuration
dev.memoOpen()
dev.memo.kmfWriteConfig(config_lif)

# Close the device
dev.memoClose()

列表5:将配置下载到Kvaser设备

现在我们将我们配置的设备与计算机断开,并且将我们的设备连接到现有的CAN总线,通过给设备的CAN 1总线连接器通电来开始记录。

1.5 读取所记录的报文

在我们记录了一些报文后,我们再次将我们的Kvaser Memorator设备连接到我们计算机上的一个空闲的USB端口,并读出结果。

# Connect to our Kvaser Memorator Pro 5xHS with EAN 00778-9
dev = kvDevice.kvDevice(ean="73-30130-00778-9")
dev.open()
dev.memoOpen()
fileCount = dev.memo.logFileGetCount()
print "Found %d file%s on card:" % (fileCount,
"s" if fileCount > 1 else "")

# Loop through all logfiles and write their contents to stdout
for fileIndx in range(fileCount):
myEvents = dev.memoReadEvents(fileIndx)
for event in myEvents:
print event
print "\n"

# Delete all logfiles
dev.memo.logFileDeleteAll()

# Close device
dev.memoClose()
dev.close()

列表6:读取记录的报文并打印到标准输出(stdout)

Found 1 file on card:
*t:          - EAN:73-30130-00778-9 s/n:1023 FW:v3.0.546 LIO:v0.0
t: 0.249998387 DateTime: 2016-02-23 06:56:04
t: 0.249998387 Log Trigger Event (type: 0x1, trigno: 0x00, pre-trigger: 0, post-trigger: -1)

t: 9.479176975 DateTime: 2016-02-23 06:56:13
t: 13.29719495 ch:0 f: 2 id: 490 dlc: 2 d:5d d6
t: 13.29719495 ch:1 f: 2 id: 490 dlc: 2 d:5d d6
t: 13.298196175 ch:0 f: 2 id: 284 dlc: 2 d:a8 b1
t: 13.298196175 ch:1 f: 2 id: 284 dlc: 2 d:a8 b1
t: 13.299137412 ch:0 f: 2 id: 739 dlc: 2 d:7a 4b
t: 13.299137412 ch:1 f: 2 id: 739 dlc: 2 d:7a 4b
t: 13.300282637 ch:0 f: 2 id: 622 dlc: 6 d:8d b9 69 8a 98 e1
t: 13.300282637 ch:1 f: 2 id: 622 dlc: 6 d:8d b9 69 8a 98 e1
t: 13.301156875 ch:0 f: 2 id: 559 dlc: 1 d:78
t: 13.301156875 ch:1 f: 2 id: 559 dlc: 1 d:78
t:   13.3022261 ch:0 f: 2 id: 33a dlc: 1 d:0d
t:   13.3022261 ch:1 f: 2 id: 33a dlc: 1 d:0d
t: 13.303279325 ch:0 f: 2 id: 463 dlc: 6 d:14 eb d6 ae ed 46
t: 13.303279325 ch:1 f: 2 id: 463 dlc: 6 d:14 eb d6 ae ed 46
t: 13.304230562 ch:0 f: 2 id: 59b dlc: 6 d:7f a9 28 3a f2 5d
t: 13.304230562 ch:1 f: 2 id: 59b dlc: 6 d:7f a9 28 3a f2 5d
t: 13.305248787 ch:0 f: 2 id: 103 dlc: 8 d:4e 0d 1a dd 8d b2 19 ab

这就是此文所有内容。我们现在已经知道如何使用kvmlib进行配置和读回记录的数据。在下一篇文章,我们将分支出来,再添加一些复杂的配置进行讲述。

脚注

1 CANlib SDK可以从www.kvaser.cn/developer/canlib-sdk下载。

2 编码73-30130-00778-9

3 目前,Python包装器仅在Python v2.7下测试。

4 完整的程序列表见github.com/Kvaser/developer-blog

5 Kvaser Memorator Pro 5xHS固件捆绑在Kvaser固件更新工具中,可在这里下载www.kvaser.com/downloads

6 XML格式的最新版本见文档Kvaser Memorator设备配置的XML格式规范相关描述。

Author Image

Logan Via