技术博客

14/04/2015 作者 Magnus Carlsson

通过Python访问Kvaser设备面向对象程度更高的方法(3/3)

本文是通过 Python 使用 Kvaser 产品三篇系列文章的最后一篇:

  1. 通过 Python 访问 Kvaser CANlib
  2. 通过 Python 连接到远程设备
  3. 通过 Python 访问 Kvaser 设备的面向对象程度更高的方法

以前我们已经见识到如何在 Python 中使用 canlib.py 和 kvrlib.py 包装器(目前为v2.7)。然而,这些主要只是“包装器”,并没有考虑到使用面向对象语言(Python)的灵活性(对于像C#这样的其它包装器也是如此)。

在测试期间,我们的注意力常常放在特定设备上,而不是以通道为中心的 CANlib。当您处理远程设备时更是如此,如 Kvaser BlackBird v2 和 Ethercan,在远程连接时会启动新的 CANlib 通道。此时通过新的 Python 模块 kvDevice 来处理。

要打开特定设备,请提供 EAN 和序列号,如下所示。

import os
import sys
sys.path.append("C:/temp/Canlib_SDK_v5.9/Samples/Python")

import kvDevice

device = kvDevice.kvDevice(ean="73-30130-00778-9", serial=1023)
print "\n", device

如果有匹配该EAN和序列号的设备,我们会得到以下输出:

Device: Kvaser Memorator Pro 5xHS (channel 0)
EAN           : 73-30130-00778-9
S/N           : 1023
FW            : v2.5.287
Card          : 1
Drv           : kcany1a
Canlib channel: 3

如果我们不指定序列号,我们将获得与EAN匹配的第一个设备。也可以直接指定CANlib通道。

device = kvDevice.kvDevice(ean="73-30130-00778-9")
print "\n", device

device = kvDevice.kvDevice(ch=6)
print "\n", device
Device: Kvaser Memorator Pro 5xHS (channel 0)
EAN           : 73-30130-00778-9
S/N           : 1023
FW            : v2.5.287
Card          : 1
Drv           : kcany1a
Canlib channel: 2

Device: Kvaser Memorator Pro 5xHS (channel 4)
EAN           : 73-30130-00778-9
S/N           : 1023
FW            : v2.5.287
Card          : 1
Drv           : kcany1e
Canlib channel: 6

我们举最后一个例子,如果没有找到指定的设备,我们仍然会收到一个返回的设备,但是不会有任何相关信息。

devices = kvDevice.kvDevice.allDevices()
print "List all %d devices" % (len(devices))
for dev in devices:
print "\n", dev

print "\n---\nTry and find a non-existing device."
device = kvDevice.kvDevice(ean="73-30130-00778-9", serial=100)
print "\n", device
List all 2 devices

Device: Kvaser Eagle (channel 0)
EAN           : 73-30130-00567-9
S/N           : 71
FW            : v2.5.261
Card          : 0
Drv           : kcany0a
Canlib channel: 0

Device: Kvaser Memorator Pro 5xHS (channel 0)
EAN           : 73-30130-00778-9
S/N           : 1023
FW            : v2.5.287
Card          : 1
Drv           : kcany1a
Canlib channel: 2
---
Try and find a non-existing device.

Device: None
EAN           : 73-30130-00778-9
S/N           : 100
FW            : None
Card          : None
Drv           : None
Canlib channel: None

如果您查看模块 kvDevice.py,就会注意到,大多数属性存储在以下划线(_driver, _channel等)开头的名称中。这预示着这些值是已使用过的已知值。 (在 Python 中,开头用下划线通常是一个弱的“内部使用”指标)。也就是说,设备现在可以被删除或者重新插入,这样会重新编号,但是设备最后一次是通过 kvDevice.py 打开,会发现那些值在被使用。 (该设备位于 CANlib 通道 _channel上,驱动程序名 _driver.)

希望本概述——通过Python用来帮助管理Kvaser设备,将有助于您在开发人员角色中获得更高的效率。

2015-05-22编辑:申明当前的包装器是为Python v2.7所编写。

若有任何评论,请直接通过support@kvaser.com与我们联系。

Author Image

Magnus Carlsson

Margus Carlsson是Kvaser AB公司的软件开发人员,从2007年以来深度参与了Kvaser固件和软件的开发。他还为Kvaser的技术博客撰写了许多用流行的Python语言编写应用程序的文章。