如何在NI-CAN中对仲裁ID进行处理?
主要软件: Driver Software>>NI-CAN
主要软件版本: 2.2
主要软件修正版本: N/A
次要软件: N/A
问题: 我希望通过NI-CAN使用扩展仲裁ID(Arbitration ID),但是我不确信如何指定一个扩展ID。我如何在程序中指明我在使用一个扩展ID?
解答: NI-CAN支持标准(11位)和扩展(29位)仲裁ID。
可以通过下面的方法对这些ID进行处理:
- 使用网络接口对象
- 使用CAN对象
使用网络接口对象,您可以通过下列的方法对此ID进行读写:
- 欲通过网络接口在总线上写一个帧,您必须在NCTYPE_CAN_FRAME结构中指明您希望传送的ID号码。如果您希望传送一个标准ID,那此ID用其本身(十进制)或者0x十六进制表示即可。如果此ID为扩展ID,则它必须与NC_FL_CAN_ARBID_XTD(0x20000000)进行按位或操作。
例如:
Frame.ArbitrationId = (0x20000000 | 0x1C800388);
其中,Frame即为NCTYPE_CAN_FRAME类型的结构体,并且待传送的ID是0x1C800388。
- 欲对扩展ID解码,您必须将ID与NC_FL_CAN_ARBID_XTD(0x20000000)按位与。
例如:
if (Transmit.ArbitrationId & NC_FL_CAN_ARBID_XTD)
printf("Xtd%08lx\n", Transmit.ArbitrationId);
else
printf("Std%03lx\n", Transmit.ArbitrationId);
使用CAN对象,不存在解码的问题,因为CAN对象是通过XTD标签来配置和打开的。请参照NI-CAN 程序员参考手册中,关于ncOpenObject函数的代码实例中提到的技巧。
附件中是一个LabVIEW的例子程序,用来举例说明如何在帧API中使用扩展仲裁ID。
相关链接: Product Manuals: NI-CAN Hardware and Software Manual (NI-CAN 2.2)
附件:
报告日期: 12/15/2006
最近更新: 03/10/2010
文档编号: 1SQ7F6RM
Other Support Options
Ask the NI Community
Collaborate with other users in our discussion forums
Request Support from an Engineer
A valid service agreement may be required, and support options vary by country.