我们的一些分析仪配备了用于自动发送或响应报文的硬件缓冲。它们可以在时序条件严格的情况下使用,并且可能无法在应用程序级别上实现。
通常,由Kvaser单元中的CAN驱动程序接收到的CAN报文必须通过USB或PCI端口传送到计算机。在应用程序处理之前,必须通过操作系统并由驱动程序接收。现在,它并不像传闻中的那么慢,但有时候还不够快。那此时就是Kvaser对象缓冲发挥作用的时候了,它可用来解决这些步骤造成的延迟。
我们有两种类型的对象缓冲:自动响应和自动传送。
- 自动响应是在收到符合条件的报文后立即发送定义的报文。
- 自动传送是定期发送报文,时间精度高于通过驱动程序和操作系统运行的应用程序所能实现的。
/* 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
/* 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
如果您有任何意见,请发送邮件至support@kvaser.com和我们取得联系。