当与CANlib交互时,许多功能需要通道的句柄支持。这个通道通常被称为“CANlib通道”,因为这是其在Kvaser硬件中的标签。
技术博客
CANlib通道号还是卡号?
![devicesInKvaserHardware](https://www.kvaser.cn/wp-content/uploads/2015/03/devicesinkvaserhardware.png)
如果要从Eagle设备上的第一个通道发送CAN报文,我们应该打开CANlib通道3 canopenChannel(3, canOPEN_EXCLUSIVE)
。 CANlib中的某些功能与设备上的实际通道无关,因此你可以使用任何设备通道都同样成功。例如,要打开或关闭设备LED,可以调用kvFlashLeds(hnd, kvLED_ACTION_ALL_LEDS_ON)
,其中hnd
可以是CANlib通道3或4的句柄。那么为什么需要卡号?从历史的角度来看,没有通过Kvaser CANlib与Kvaser设备的所有交互都直接指向驱动程序。在这种情况下,不能使用CANlib通道号,因此需要新的数字来指示,例如“第二个设备”使用驱动程序kcany
。这个新号码被称为“卡号”,并在选择设备通道时显示在Kvaser硬件中。
![cardNumberInKvaserHardware](https://www.kvaser.cn/wp-content/uploads/2015/03/cardnumberinkvaserhardware.png)
在上图中,我们可以看到,作为通道设备5的Kvaser Memorator Pro 5xHS连接到CANlib通道6和卡号2。 CANlib通道和卡号都是从零开始(正如程序员通常所做的那样),但是因随机生成机制,卡号在Kvaser硬件中显示(仅在Kvaser硬件中)得看起来像是从1开始。所以我们的设备实际上连接到了CANlib通道6卡号1,这意味着我们需要发出命令hydra_flash.exe -C1 imagefile.img
以升级此设备的固件。如今,其已成为历史,因为我们通过调用CANlib (canGetChannelData(channel, canCHANNELDATA_CARD_NUMBER, buffer, bufsize)
)函数可获得索引卡号0。这也是Python模块kvDevice的工作内容,其可在使用卡号的其它库(如kvmlib)进行交互时位你提供协助。不过,了解了其工作原理会很有意思。