Kvaser CANlib SDK中OpenChannel的参数说明

文章讲述了客户从使用致远科技的CAN盒转向KvaserLeafLightv2设备的转变,并详细解析了CANlib库中canOpenChannel()函数的参数,包括canOPEN_EXCLUSIVE、canOPEN_CAN_FD等标志的含义。作者还分享了GitHub上的一个基于CANlib.dll的WPF演示项目,并提出可提供集成DbcParser处理数据的版本。
摘要由CSDN通过智能技术生成

最近客户突然买了一个新设备,之前一直用的致远科技的CAN盒,今天买了一个Kvaser Leaf Light v2,设备到手的时候一脸懵。查阅了官方资料后发现它不像USBCANFD-200U那样需要打开设备这个前置动作,直接开通道就行了。

表中为

Canlib.canOpenChannel()

第二个参数的说明。默认使用 canOPEN_ACCEPT_VIRTUAL 就可以了

flags
canOPEN_EXCLUSIVE不允许共享CANlib Channel频道。简而言之就是这个通道只能在当前打开的线程中访问,不允许其他线程或应用访问。
canOPEN_REQUIRE_EXTENDED默认使用拓展帧。如果指定的电路不允许拓展帧则调用失败;在写入数据时,如果没有指定帧类型,默认发送拓展帧。
canOPEN_ACCEPT_VIRTUAL允许打开虚拟通道和物理通道。
canOPEN_OVERRIDE_EXCLUSIVE打开通道,即便这个通道是单独访问的。应该和canOPEN_EXCLUSIVE是相对的
canOPEN_REQUIRE_INIT_ACCESS需要配合通道初始化一起使用,否则会失败,但失败的返回结果也是CANOK
canOPEN_NO_INIT_ACCESS不需要初始化打开设备
canOPEN_ACCEPT_LARGE_DLC支持发送DLC大于8字节的内容,否则将截断为8字节
canOPEN_CAN_FD该通道将使用CAN FD协议,ISO兼容。这也意味着现在可以使用带有canFDMSG_xxx标志的消息。
canOPEN_CAN_FD_NONISO通道将使用CAN FD NON-ISO协议
canOPEN_INTERNAL_L不要用!内部使用的。

CANlib.dll 说明文档下载链接:

KvaserCANlibAPI资源-CSDN文库https://download.csdn.net/download/m0_60850934/87818897

在github上找到了一个大佬写的CANlib的WPF demo,下载地址:

基于CANlib.dll编写的wpfdemo资源-CSDN文库icon-default.png?t=N4N7https://download.csdn.net/download/m0_60850934/87818911 

这个DEMO里面的数据是没有进行换算处理的,如果晦涩的话可以在评论区留言,我弄一个集成了DbcPaser的给你们。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个使用Kvaser Canlib SDK读取DBC文件的示例代码: ```java import java.util.List; import com.kvaser.canlib.canlib; import j1939dbc.DBC; import j1939dbc.Signal; public class DBCReader { public static void main(String[] args) { // 初始化Canlib库 int result = canlib.canInitializeLibrary(); if (result != canlib.canOK) { System.err.println("Can't initialize Canlib library!"); return; } // 打开CAN设备 int channel = 0; // 通道号 int bitrate = 500000; // 波特率 int flags = canlib.canOPEN_ACCEPT_VIRTUAL; int handle = canlib.canOpenChannel(channel, flags); if (handle < 0) { System.err.println("Can't open CAN channel!"); return; } // 设置CAN设备的波特率 result = canlib.canSetBusParams(handle, canlib.canBITRATE_500K, 0, 0, 0, 0, 0); if (result != canlib.canOK) { System.err.println("Can't set bus parameters!"); return; } // 读取DBC文件 DBC dbc = new DBC("example.dbc"); // 获取所有信号 List<Signal> signals = dbc.getSignals(); // 输出信号信息 for (Signal signal : signals) { System.out.println("Name: " + signal.getName()); System.out.println("Offset: " + signal.getOffset()); System.out.println("Length: " + signal.getLength()); System.out.println("Factor: " + signal.getFactor()); System.out.println("Offset: " + signal.getOffset()); System.out.println("Minimum: " + signal.getMinimum()); System.out.println("Maximum: " + signal.getMaximum()); System.out.println("Unit: " + signal.getUnit()); System.out.println("Type: " + signal.getType()); System.out.println("Comment: " + signal.getComment()); System.out.println(); } // 接收CAN数据 while (true) { int id = 0; // CAN ID byte[] data = new byte[8]; // CAN数据 int flags1 = 0; // CAN标志1 int flags2 = 0; // CAN标志2 int time = 0; // 时间戳 result = canlib.canReadWait(handle, id, data, flags1, flags2, time, 100); // 等待CAN数据 if (result == canlib.canOK) { // 解析CAN数据的信号 for (Signal signal : signals) { double value = signal.getValue(data); System.out.println(signal.getName() + ": " + value); } } } } } ``` 这个示例代码使用了Kvaser Canlib SDK来打开CAN设备并接收CAN数据。同时,它也使用了j1939dbc库来读取DBC文件,并解析CAN数据的信号。你需要先安装Kvaser Canlib SDK,并将其Java库添加到你的项目。然后,你可以根据自己的需求修改示例代码来读取和使用DBC文件的信号信息。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值