如何在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进行处理:
  1. 使用网络接口对象
  2. 使用CAN对象

使用网络接口对象,您可以通过下列的方法对此ID进行读写:

  1. 欲通过网络接口在总线上写一个帧,您必须在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。


  2. 欲对扩展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)


附件:


extendedArb.vi


报告日期: 12/15/2006
最近更新: 03/10/2010
文档编号: 1SQ7F6RM