本文是共包括4部分的技术博客的第一部分。此博客介绍通过kvmlib语言,使用第二代Kvaser Memorator数据记录仪,配置和读取已记录的数据:
技术博客
开始使用kvmlib
这第一部分文章将概述如何使用python配置kvaser设备。此博客的第二部分介绍了更为复杂的配置,而第三部分将更进一步,介绍如何在C API水平上使用kvmlib。最后一部分介绍了如何在只能访问SD卡的情况下,配置设备。GitHub上提供完整的程序列表。
1.1 介绍
较新的Kvaser Memorator设备的配置通常可使用 Kvaser Memomorator Config Tool – 一个Windows GUI工具。但是你也可以使用Kvaser Memorator library (kvmlib) – Kvaser CANlib SDK.1的一部分,来配置这些设备。
我们这里选择的设备是具备3.113固件版本的kvaser Memorator 5xHS2。
我们还将使用python canlib包的v1.6版,和kvaser canlib SDK的v5.23版,最新版本可从www.kvaser.com/downloads下载。
1.2 初始化SD
仅在我们的操作系统的文件管理器中格式化SD卡是不够的,我们还需要使用Kvaser Memorator设备初始化SD卡。将SD卡插入Kvaser Memorator设备后,我们将Kvaser Memorator设备连接到电脑的一个USB端口,并运行第一部分编码来格式化SD卡。
# 01_init_sdcard.py
from canlib import EAN
from canlib.device import Device
from canlib import kvmlib
# 找到已连接上的 Kvaser Memorator Pro 5xHS,其代码为EAN 73-30130-00778-9
ean = EAN('73-30130-00778-9')
dev = Device.find(ean=ean)
# 向该硬件询问一些信息, 并打印出来
print(dev.probe_info())
# 使用我们在Kvaser 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:在一个 Kvaser Memorator 设备上初始化SD卡
当我们运行下面的编码,我们可以确认该设备确实在运行固件版本v3.11, 并且连接到canlib 通道0上。
CANlib Channel: 0
Card Number : 0
Device : Kvaser 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 创建配置
现在我们必须通过编写一段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
# 寻找我们已连接上的 Kvaser 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:把配置下载到 Kvaser 设备上。
现在,我们已准备好,把配置好的设备与电脑断开,并将设备连接到现有的CAN总线,并通过给设备的CAN 1总线连接器接电,来开始数据记录。
1.5 读取已记录的报文
在我们记录了一些报文后,我们再次将这个Kvaser Memorator 设备连接到电脑的USB 接口上,并读取结果。
# 03_read_logged.py
from canlib import EAN, Device
from canlib import kvmlib
# 连接到 Kvaser 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: 读取已记录的报文并打印到标准输出上。
请注意我们并没有运行列表4中的‘# memo.log.delete_all()’行 – 删除已记录文件的命令,因为这样我们不必重新在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 要大概了解所有Kvaser SDK libraries, 请参阅博客,关于怎样 Get more from your hardware with Kvaser SDK libraries(利用Kvaser SDK软件开发包资料库来更充分地发挥Kvaser硬件的作用)。
2 此产品是 Kvaser Memorator Pro 5xHS ,编号为73-30130-00778-9。
3 Kvaser Memorator Pro 5xHS的固件是和 Kvaser Firmware Update Tool (Kvaser固件升级工具)捆绑在一起的,并可在此下载。
4 XML配置格式在下文中有介绍: Specification of Kvaser Memorator Device configuration XML format, 可在此参阅。