技术博客

01/04/2015 作者 Magnus Carlsson

通过Python访问Kvaser CANlib 软件开发包(1/3)

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

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

你知道你可以从 Python 访问 Kvaser CANlib 吗?现在 Kvaser CANlib SDK 中包含的 CANlib 已经支持Python 包装器一段时间了,但是我们最近对其进行了全面改造,如我们这里要提到的,程式库更丰富以及功能更多。目前,包装器仅在 Python v2.7 中进行了测试,不兼容 Python v3。

SDK 最新版见www.kvaser.cn/downloads/ (当前版本为v 5.9 发布日期为2015-03-17)。如果您打算直接编辑示例,请确保将SDK安装到具有写入权限的位置(默认位置 C:\Program Files (x86)\Kvaser\Canlib\ 并不是最理想的保存位置。,如下所示,我选择了C:\temp\.的一个子目录)

下载的 Python 示例目录现在包含 CANlib 和 kvrlib 二者的包装器。要了解如何使用它们,请参阅每个包装器文件的底部。例如:如下所示的 canlib.py。

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

import canlib

cl = canlib.canlib()
print "canlib version: %s" % cl.getVersion()

channel = 0
handle1 = cl.openChannel(channel, canlib.canOPEN_ACCEPT_VIRTUAL)
print "Using channel: %s, EAN: %s" % (handle1.getChannelData_Name(),
handle1.getChannelData_EAN())

handle1.setBusOutputControl(canlib.canDRIVER_NORMAL)
handle1.setBusParams(canlib.canBITRATE_1M)
handle1.busOn()

运行上述代码输出结果为:

canlib version: 8.9
Using channel: Kvaser Ethercan Light HS (Remote) (channel 0), EAN: 73-30130-00713-0

CANlib的老用户都知道,输出的canlib.dll版本号(8.9)与CANlib软件包(v5.9)的版本号不同。

添加变量sys.path(如第2行所示)是通过Python可以访问模块的一种方法,更普遍的方法是在调用脚本之前设置环境变量PYTHONPATH

Python包装器使用ctypes与Kvaser CANlib进行对接。这是Python的外部函数库,它提供可兼容C语言的数据类型,并允许在DLL或共享库中调用函数。这意味着也可以在Linux上使用这些示例(但是由于kvrlib尚未移植到Linux,因此目前仅限于CANlib)。

在下一篇文章中,我们会了解如何使用Python连接到远程设备。

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

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

Author Image

Magnus Carlsson

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