使用对象缓冲

Jerry Thorsén
Wed, 22 Apr 2015 18:01:11 +0000

我们的一些分析仪配备了用于自动发送或响应报文的硬件缓冲。它们可以在时序条件严格的情况下使用，并且可能无法在应用程序级别上实现。

通常，由云海游戏单元中的CAN驱动程序接收到的CAN报文必须通过USB或PCI端口传送到计算机。在应用程序处理之前，必须通过操作系统并由驱动程序接收。现在，它并不像传闻中的那么慢，但有时候还不够快。那此时就是云海游戏对象缓冲发挥作用的时候了，它可用来解决这些步骤造成的延迟。

我们有两种类型的对象缓冲：自动响应和自动传送。

自动响应是在收到符合条件的报文后立即发送定义的报文。

自动传送是定期发送报文，时间精度高于通过驱动程序和操作系统运行的应用程序所能实现的。

使用对象缓冲

情况1：自动响应

要使用对象缓冲，首先要分配一个调用canObjBufAllocate()的缓冲。

对于自动响应缓冲，你可以通过canObjBufSetFilter()函数定义要响应的报文，并使用canObjBufWrite()函数设置响应的内容。

要启用缓冲，请调用canObjBufEnable()函数，并调用canObjBufDisable()函数来禁用它。

canObjBufSetFilter()中的过滤器是掩码和代码类型，这意味着你可以设置缓冲以响应一系列CAN标识。更多信息，请查看此帮助文档。

示例代码：

此代码段设置一个响应CAN ID100的缓冲，其带有ID为200的报文。

 /* Set up an auto response buffer */


byte[] msg = { 1, 2, 3, 4, 5, 6 }; //define message
int autoBufIndex = (int)(canObjBufAllocate(handle, canOBJBUF_TYPE_AUTO_RESPONSE)); //Allocate buffer
int status;
status = canObjBufWrite(handle, autoBufIndex, 200, msg, 0, 0); //Write to buffer
status=  canObjBufSetFilter(handle, autoBufIndex, 100, 0xFFFF); //Only match message with id 100, match on all bits.
status = canlibCLSNET.Canlib.canObjBufEnable(handle, autoBufIndex); //activate the buffer

情况2：自动传送

再次，要使用对象缓冲，首先从调用canObjBufAllocate()函数分配一个缓冲。

对于自动传送缓冲，调用canObjBufSetPeriod()函数来设置报文的频率，调用canObjBufSetMsgCount()函数来设置从缓冲发送的报文数，并调用canObjBufWrite()函数定义报文的内容。

示例代码：

该代码段设置一个自动发送缓冲，发送ID为300的报文，间隔为1ms。

/* Set up an auto transmit buffer */

byte[] msg = { 1, 2, 3, 4, 5, 6 }; //define message
int autoBufIndex = (int)(canObjBufAllocate(handle, canOBJBUF_TYPE_AUTO_TRANSMIT)); //Allocate buffer
int status;
status = canObjBufWrite(handle, autoBufIndex, 300, msg, 0, 0); //Write to buffer
status = canObjBufSetPeriod(handle, autoBufIndex, 1000); //Set period to 1000 microseconds
status = canlibCLSNET.Canlib.canObjBufEnable(handle, autoBufIndex); //activate the buffer

哪些分析仪有对象缓冲功能？

我们的Professional专业系列产品里有硬件对象缓冲功能，通常有8个缓冲区可用。

搜索Professional专业系列产品 >>

如果您有任何意见，请发送邮件至support@kvaser.com和我们取得联系。