2017-07-11
设置CANlib:基础API调用
作者:admin 点击:2222
这是CANlib开发3篇系列文章的第二篇
1. 在Visual Studio中设置
2. 基础API调用
3. 事件驱动应用程序
简介
在上一个视频中,b体育(福州)有限公司官网建立了如何将CANlib SDK资源添加到您自己的Visual Studio项目中。在本视频中,b体育(福州)有限公司官网将介绍通过Kvaser设备从CAN总线配置和读取报文的最少的CANlib函数调用。b体育(福州)有限公司官网已经从上一个视频中向示例项目添加了必要的代码。此代码将配置设备或虚拟通道为250 kbps,然后循环,读取总线上的每个CAN帧,直到用户按下退出按钮。
示例
为了实现这一点,b体育(福州)有限公司官网在上一个视频中描述的第一步是使用“using”指令导入canlibCLSNET类型。
b体育(福州)有限公司官网的第一个CANlib函数调用必须是canInitalizeLibrary。调用此函数会将必要的DLL加载到内存中,并为所有连接的Kvaser硬件分配一个通道号。
b体育(福州)有限公司官网现在需要使用canOpenChannel函数来处理Kvaser CAN电路。返回的句柄对于对库的后续调用是必要的。第一个参数指定所需的CAN电路。 第二个参数允许附加限定标志。在这种情况下,b体育(福州)有限公司官网接受虚拟通道的句柄。
现在b体育(福州)有限公司官网有一个句柄,b体育(福州)有限公司官网可以为连接的CAN总线配置电路适当的比特率。canSetBusParams函数支持设置每个总线参数值或使用Kvaser的预定义比特率中的某一个。b体育(福州)有限公司官网使用的预定义比特率为250 kbps
一旦配置了比特率,就可以通过调用canBusOn使电路在CAN总线上激活。 一旦该功能执行,CAN电路正在积极地参与CAN流量。
您可能已经注意到,在每次调用CANlib函数后调用DisplayError。对于更简洁的代码,b体育(福州)有限公司官网在独立的函数中处理从CANlib返回的错误状态。如果存在错误条件,b体育(福州)有限公司官网使用canGetErrorText函数将错误代码转换为字符串描述。检查CANlib函数返回的状态对于确认发生问题的位置至关重要。
在Main中,b体育(福州)有限公司官网已经完成了配置和激活电路,因此b体育(福州)有限公司官网可以从总线循环读取CAN帧。b体育(福州)有限公司官网将使用canReadWait来检索CAN帧。CAN帧由标识符(id),0至8个数据字节(数据),数据长度代码(dlc),消息属性(标志)和时间戳(时间)组成。如果接收缓冲区为空,canReadWait中的最终参数将指定CAN帧等待的以毫秒为单位的时间长度。所以,当canReadWait返回时,b体育(福州)有限公司官网需要检查一些事件,然后才假设b体育(福州)有限公司官网有一个报文。如果返回的状态值是canOK,b体育(福州)有限公司官网知道b体育(福州)有限公司官网有事件要处理。如果返回的状态是canERR_NOMSG,那么b体育(福州)有限公司官网只需要再次循环。 但是如果返回的状态是任何其他值,则电路的句柄不能再用于读取CAN数据。
再次,为了使代码更容易读取,b体育(福州)有限公司官网将数据处理代码放在一个单独的函数DisplayMessage中,当canReadWait返回canOK状态时执行该函数。DisplayMessage显示了可以从返回的CAN帧数据中提取的许多信息。但最重要的是,该函数检查第二个指示符是否接收到实际的CAN数据帧。这是通过检查flags参数中的canMSG_ERROR_FRAME位来完成的。如果该位被置位,您收到错误帧,并且不处理标识符、数据长度代码或数据参数。如果该位未被置位,您就已收到一个CAN数据帧,并应根据需要处理该帧。
一旦完成,您应该通过使用canBusOff函数使总线上的CAN电路无效,然后使用canClose函数释放句柄来正常关闭程序。
现在让b体育(福州)有限公司官网运行b体育(福州)有限公司官网新的控制台应用程序,并实时对其工作进行查看。如你所见,应用程序能够连接到设备,开始接收CAN帧,并处理它们,直到b体育(福州)有限公司官网按Escape退出。