如何在NI-CAN的CAN帧中使用扩展仲裁ID

更新 Nov 28, 2022

环境

硬件

  • USB-8473

软件

  • LabVIEW

驱动

  • NI-CAN

为什么我的29位扩展仲裁ID在写入USB-CAN设备时会出现错误?即便只是使用总线监视器检查仲裁ID时,这种情况也会发生。

在写入和读取扩展仲裁ID之前,必须将其进行转换。在使用ncWriteNet.vincWriteNetMult.vi写入仲裁ID之前,必须使用十六进制数0x20000000对扩展仲裁ID进行运算。若使用ncReadNet.vincReadNetMult.vi对该扩展仲裁ID进行读取,则必须使用相同的十六进制数0x20000000进行异或运算,这样才能读取到正确的仲裁ID。

这样做的原因在于:仲裁ID由32位比特数表示,而其中第30位则被用于标识扩展或标准仲裁ID。第30位为高表示该仲裁ID为扩展仲裁ID,使用29位比特数。当第30位为低时,则表示该仲裁ID为标准仲裁ID,使用11位比特数表示。

注意:大多数范例并不包含该逻辑,因此它们不支持扩展仲裁ID。其中一个支持扩展仲裁ID的范例是“ Transmit Receive same Port.vi ”,您可以在NI范例查找器中找到这个NI-CAN的范例。
该范例的前面板如图1所示 ,您可以手动设置是否使用扩展ID。
图1