技术博客

03/10/2016 作者 Mikkel

在Linux上运行Python开发包

今天我们来看看如何使用Kvaser的新版Python开发包canlib来设置和发送CAN报文。本例子中我们使用Kvaser USBcan Pro 2xHS v2,但可以使用任何Kvaser分析仪产品。

第一步是下载并安装Kvaser Linux驱动程序和开发包(CANlib当前版本v5.18):

$ cd ~
$ wget http://www.kvaser.com/software/7330130980754/V5_18_0/linuxcan.tar.gz
$ tar xf linuxcan.tar.gz
$ cd linuxcan
$ make
$ sudo make install

现在我们将Kvaser分析仪插入USB端口并运行`listChannels’实例程序,以验证驱动程序是否正确加载以及设备是否被识别:

$ cd canlib/examples
$ ./listChannels
Found 2 channel(s).
channel  0 = Kvaser USBcan Pro 2xHS v2, 73-30130-00752-9, 1012, 3.4.0.822
channel  1 = Kvaser USBcan Pro 2xHS v2, 73-30130-00752-9, 1012, 3.4.0.822

下一步是下载并安装Python canlib开发包(当前版本是v1.1.23):

$ cd ~
$ wget http://www.kvaser.com/software/7330130981911/V1_1_23/canlib-1.1.23.zip
$ pip install canlib-1.1.23.zip

如果你使用Python v3,为了Python开发包安装在正确的地方,你可能会使用 pip3而不是pip

现在我们可以编写一个小的Python程序,sendReceiveSingleCanMsg.py,用于在通道1上发送CAN报文,并在通道0上接收相同的CAN报文:

import canlib.canlib as canlib


def setUpChannel(channel=0,
                 openFlags=canlib.canOPEN_ACCEPT_VIRTUAL,
                 bitrate=canlib.canBITRATE_500K,
                 bitrateFlags=canlib.canDRIVER_NORMAL):
    cl = canlib.canlib()
    ch = cl.openChannel(channel, openFlags)
    print("Using channel: %s, EAN: %s" % (ch.getChannelData_Name(),
                                          ch.getChannelData_EAN()))
    ch.setBusOutputControl(bitrateFlags)
    ch.setBusParams(bitrate)
    ch.busOn()
    return ch


def tearDownChannel(ch):
    ch.busOff()
    ch.close()

运行上面的Python程序会产生以下结果:

$ python sendReceiveSingleCanMsg.py
canlib version: 5.18
Using channel: Kvaser USBcan Pro 2xHS v2 (channel 0), EAN: 73-30130-00752-9
Using channel: Kvaser USBcan Pro 2xHS v2 (channel 1), EAN: 73-30130-00752-9
time:  2819710 id:      100  flag:0x04  dlc:4  data:01020304

如果你使用Python v3,你很可能会使用python3而不是python

因此,我们已经使用Python canlib开发包成功地发送和接收了一条CAN报文。

我们非常感谢您能通过电子邮件发送到support@kvaser.com提供错误报告、贡献、改进建议以及其他类似方面。

Author Image

Mikkel Gerdes