NI-XNET系列CAN、LIN和FlexRay接口是加速CAN、LIN和FlexRay接口与NI-XNET驱动程序软件的组合。与系列2 PCI/PXI/PCMCIA接口等传统NI-CAN产品相比,NI-XNET接口具有许多性能、易用性和长期支持的优势。
为了在NI-XNET CAN、LIN和FlexRay接口中提供下一代性能和易用性,NI为NI-XNET产品设计了一个新的API。NI认识到使用旧版NI-CAN API编写的应用程序的安装基础庞大,需要长期维护这些应用程序。
为便于为NI-CAN编写的应用程序向NI-XNET过渡,并帮助您受益于NI-XNET接口的新功能,NI-XNET驱动程序包含NI-CAN兼容层,可在驱动程序级别仿真NI-CAN函数调用。由于该功能安装在驱动程序级别,大多数使用NI-CAN编写的应用程序只需稍作改动即可使用NI-XNET。开始使用NI-XNET接口时,请注意两个驱动程序之间的一些显著差异。
本文介绍了如何使用NI-CAN兼容库使用新的NI-XNET硬件实现NI-CAN应用程序。同时还探讨了潜在的兼容性问题,以及如何将熟悉的NI-CAN概念转换为NI-XNET API。
关于NI-CAN通道API的基础知识,见NI-CAN通道API。
开始使用NI-XNET编写新应用程序时,无需使用兼容层。仅当需要将现有NI-CAN应用程序与NI-XNET设备配合使用时,才需要该选项。
兼容库支持CAN和LIN接口设备和模块。不支持需要收发器电缆的车载多协议接口设备和模块,例如PCIe-8510、PXIe-8510和NI 9860。它也不支持C系列LIN模块,因为没有基于NI-CAN的等效模块。
要使现有应用程序正常运行,必须同时安装NI-XNET和NI-CAN驱动程序。NI-XNET安装程序包包含兼容库运行所需的所有组件。详细说明见为NI-CAN安装NI-XNET兼容库。
一般来说,NI-CAN API与包括系列2 CAN接口在内的传统CAN硬件有关。NI-XNET是下一代NI-XNET CAN、LIN和FlexRay接口的主要驱动程序。NI-XNET接口的新应用程序使用NI-XNET驱动程序和API。
如已有使用NI-CAN的应用程序,NI将提供一个兼容性库,以帮助您在更新的NI-XNET CAN C系列、PCI和PXI接口中重用该代码。兼容性库的功能适用于NI-CAN API,不适用于NI-XNET。 关于兼容库功能的更多信息,见NI-CAN硬件和软件手册。
如现有应用程序使用NI-CAN,且今后仅使用NI-XNET CAN C系列、PCI和PXI硬件,可将代码转换为NI-XNET。NI-XNET统一了早期NI-CAN API的许多概念,但主要功能相似。下表交叉引用了NI-CAN术语和类似NI-XNET术语。
注意: 详细信息见USB-8472/73/76 CAN接口的迁移选项。
| NI-CAN终端 | NI-XNET术语 | 备注 |
|---|---|---|
| CANdb文件 | 数据库 | NI-XNET支持的数据库文件格式比NI-CAN Channel API、FIBEX、.DBC和.NCD更多。 |
| 消息 | 帧 | “帧”是工业术语,指在总线上传输的位。该术语用于CAN和FlexRay等标准。 |
| 信道 | 信号 | “信号”是FIBEX等标准中使用的行业术语。 |
| 通道API任务 | 会话(信号I/O) | 与NI-CAN不同,NI-XNET支持同时使用通道(信号)I/O和帧I/O。 |
| 帧API CAN 对象(队列) 长度零) | 会话(帧I/O单点) | NI-CAN CAN对象在一个对象中提供输入(读取)和输出(写入)。为了更好的控制,NI-XNET为每个方向提供了不同的对象。如方向的NI-CAN队列长度为0,类似于NI-XNET帧I/O单点。 |
| 帧API CAN 对象(队列) 长度非零) | 会话(帧I/O已排队) | 如方向的NI-CAN队列长度不为零,类似于NI-XNET帧I/O队列。 |
| 帧API 网络接口 对象 | 会话(帧I/O流) | NI-CAN网络接口对象在一个对象中提供输入(读取)和输出(写入)。为了更好的控制,NI-XNET为每个方向提供了不同的对象。 |
| 接口* | 接口 | NI-CAN以CAN0开头,但NI-XNET以CAN1(或FlexRay1)开头。 |
| 周期 | 循环 | NI-CAN使用术语“周期”,但NI-XNET Database Editor和NI-XNET属性节点使用术语“周期”。 |
表1.NI-CAN术语和类似NI-XNET术语
下图显示了NI-XNET和NI-CAN之间的编号差异。顶部的"CAN0"对应于使用PCI-8513板卡第一个端口的NI-CAN端口名称。该端口可与使用CAN1的NI-XNET API配合使用。可将NI-CAN端口重命名为与NI-XNET端口相同-这不会产生任何问题。
图1.NI-XNET和NI-CAN编号的区别
注: 如果安装了NI-CAN兼容层,NI-XNET接口将在NI Measurement & Automation Explorer (MAX)中显示两次。这是正常的,因为两个驱动程序都会向MAX报告板卡的存在,一个用于NI-CAN驱动,另一个用于NI-XNET。
下图显示了类似的情况,但使用的是实时(RT)终端。NI-XNET设备在MAX的RT终端下显示,但NI-CAN通过兼容层使用的NI-XNET设备仅在NI-CAN RT硬件配置工具下显示。可以看到,NI-XNET中的CAN1与NI-CAN中的CAN0是同一个端口。
图2. 查看与NI-XNET和兼容性层配合使用的CAN接口具有不同的视图。
要打开NI-CAN RT硬件配置窗口,打开MAX并选择工具»NI-CAN » RT硬件配置,然后提供RT终端的IP地址。
虽然用于NI-CAN的NI-XNET兼容库努力确保基本功能,但由于NI-XNET平台中硬件的特性或核心差异,无法始终将库完全从NI-CAN映射到NI-XNET。
以下是一些主要的不兼容函数及其解决方法。更完整的列表见2.7或更高版本的NI-CAN软硬件手册。
该组件在NI-XNET硬件上可用,但新的架构无法保证兼容性。如应用程序需要该功能,需升级代码以使用NI-XNET API。关于如何使用NI-XNET API处理远程帧的更多信息,见NI-XNET硬件和软件手册。
该功能在某些NI-XNET硬件上可用。PCI-8513和PXI-8513型号是可选择使用外部收发器的XNET硬件范例。
NI-XNET接口自动检测时钟输入频率并同步,无需用户提供任何参数。由于该过程是自动的,因此无法更改主时基频率。NI-XNET接口支持不同的同步时钟频率(1 MHz、10 MHz和20 MHz),无需显式更改主时基。1 MHz和10 MHz速率也可导出。
NI-XNET提供了记录总线错误的新方法。无需使用总线状态编码器记录CAN帧,现在只需读取总线状态:
图3. 通过观察总线状态可查看总线错误。
该组件为NI-XNET API自带;无法兼容NI-CAN。
NI-XNET现仅使用绝对时间标识格式。但函数可用于获取特定事件的时间标识。通过这些时间标识,您可以从不同的引用计算“相对”时间,而无需以其他格式重新捕捉数据。
图4. NI-XNET使用绝对时间标识,但仍有获取相对时间标识的方法。
如需该功能,需修改代码以使用NI-XNET API。
该功能在NI-XNET 1.0中不可用,但在NI-XNET 1.1中引入。该组件现称为“CAN重放”。
图5. 配置CAN重放可通过帧输出流完成。
NI-XNET具有用于同步时基和开始触发的RTSI功能。但是,无法在RTSI脉冲上配置事件(即传输CAN帧)。也无法根据CAN事件配置RTSI事件。
由于各种原因,可能需要修改应用程序以使用NI-XNET API。下一节介绍如何更改NI-CAN代码以使用NI-XNET API。
下列信息旨在帮助您将熟悉的概念从NI-CAN翻译为NI-XNET,以帮助进行代码转换。它并未涵盖所有可能的应用。如需帮助转换代码的任何部分,请联系NI。
打开NI-CAN接口前需进行配置。在NI-XNET中,首先在接口上创建会话,然后使用属性节点更改会话的属性。其他NI API(包括NI-DAQmx)也使用相同的模型。
图6. NI-XNET和NI-CAN配置总线属性的方式不同。
读取帧与NI-CAN和NI-XNET类似:
图7. 读取两个API中的帧所需的代码非常相似。
随着性能的提高和新的NI设备驱动DMA引擎架构,您无需查询NI-XNET设备即可查看可用帧的数量。出于性能原因,NI-CAN需要该选项。该功能在NI-XNET中仍然可用,但不再需要用于读取所有可用帧。(nxRead函数的-1输入返回所有可用帧。)
图8. 使用NI-XNET可更方便地查询可用的帧数量。
NI-CAN和NI-XNET中的帧格式信息类似,但显示方式略有不同:
图9. NI-CAN和NI-XNET的每个簇中都包含类似的帧数据。
NI-XNET中的nxWrite (Frame CAN).vi使用帧数组作为输入。因此,如需发送单个帧,必须创建包含单个帧的数组。
图10. 在NI-XNET中发送帧数据需要数据数组作为输入。
NI-XNET通过数组长度确定要写入的帧的数量。
图11. NI-CAN和NI-XNET中也有类似的函数调用用于发送帧。
在NI-CAN中,使用帧API写入周期性帧需要为每个帧配置发送或接收的对象。NI Series 2 CAN接口限制为49个对象。
图12. 在NI-CAN中发送周期帧需要配置具有单独函数调用的对象。
在NI-XNET中配置单个周期性帧略有不同。NI-XNET与信号和帧数据库紧密集成,利用NI-XNET周期性帧的最简单方法是使用FIBEX数据库文件描述网络使用的帧。使用FIBEX数据库时,NI-XNET驱动程序会自动配置和处理周期性帧,无需与应用程序进行额外的交互。
例如,考虑使用仲裁ID、载荷长度和周期在数据库中配置周期性(在NI-XNET中称为“循环”)帧。配置并保存后,应用程序可使用单点会话传输或接收该帧。I/O控件动态加载数据库中的所有帧,便于在应用程序中选择帧。必须配置一个别名,告知NI-XNET使用该数据库实现该功能,详情见下一节。
图13. 在NI-XNET中发送周期性帧可大大简化。
打开会话时,NI-XNET驱动程序将从数据库中读取所有设置。然后在驱动程序和NI-XNET Firmware中配置循环传输和/或接收。在应用程序中,只需更新值,NI-XNET将在下一个周期自动传输最新值。NI-XNET还具有队列会话功能,可将多个值加入队列。
使用信号数据库的主要优点是代码的可维护性。更新数据库将自动更新代码,无需更改代码即可跟踪仲裁ID、传输速率、位定义等的更改。如需更改参数,只需更改数据库文件即可。无需更改代码。
NI-XNET提供了通过编程更改从数据库文件加载的值的函数。这不会改变写入数据库文件的实际值,仅影响NI-XNET驱动程序在运行时加载的值。
图14. 底层函数可用于配置NI-XNET中周期性帧的发送。
如不需要数据库文件,且要在运行时设置所有内容,也可创建“内存中”数据库。这样,就可以通过编程开发整个网络配置并在应用程序中使用。可查看位于硬件输入和输出»CAN»NI-XNET»数据库(编辑和管理)下的帮助»查找范例下的CAN Dynamic Database Creation.vi范例。
许多NI-CAN帧API范例都有类似的NI-XNET范例。
有两种编辑数据库文件的主要方法可供选择:运行前或运行期间。要在NI-CAN中执行前编辑数据库文件,需要在MAX中使用数据库编辑器。NI-XNET在独立的数据库编辑器中移动所有数据库编辑。可通过开始»所有程序»National Instruments»NI-XNET Database Editor打开数据库编辑器。
图15. NI-XNET Database Editor是用于编辑CAN数据库的独立工具。
关于NI-XNET数据库编辑器的更多信息,见FIBEX介绍和NI-XNET数据库编辑器白皮书。
NI-XNET包含通过编程编辑FIBEX数据库文件的函数。可使用这些函数在应用程序中创建自定义数据库操作工具。要查看NI LabVIEW软件随附的范例,请选择帮助»查找范例,浏览硬件输入和输出»CAN»NI-XNET»数据库(编辑和管理)。
在NI-CAN中,必须将应用程序指向硬盘上的.DBC或.NCL文件。在NI-XNET中,运行应用程序前必须先向数据库文件(.DBC、.NCL或FIBEX .xml)添加别名。可通过几种不同方式实现。可打开名为CAN Signal Input Single Point.vi的范例,位于硬件输入和输出»CAN»NI-XNET»会话介绍»信号会话。右键单击信号列表,选择浏览数据库文件,选择磁盘上的数据库文件。NI-XNET驱动程序将自动为该数据库创建别名,以便再次选择。
图16。 在NI-XNET中选择数据库可在应用程序中引用。
NI-XNET I/O控件将自动读取数据库文件并填充所有信号名称。这使得在应用中选择使用何种信号变得非常容易。
图17. 控件根据数据库中的可用信号自动更新。
下图比较了NI-CAN和NI-XNET单点通道/信号写入的程序框图。读取类似,两个驱动程序的功能范例。
图18. 发送单点数据在NI-CAN和NI-XNET中类似。
读取和写入波形数据在NI-CAN和NI-XNET中也很相似,每个驱动程序都有用于比较的范例。
图19. 两个API的波形读取和写入类似。
不同之处在于,NI-XNET使用默认的采样率1000。使用属性节点可轻松更改采样率。
图20. 可使用属性配置波形的重采样率。
NI-CAN模式 | NI-CAN采样率 | NI-XNET模式 | 备注 |
|---|---|---|---|
| 输入 | 0 | 信号输入单点模式 | N/A(无附加属性) |
| 输入 | >0 | 信号输入波形模式 | 使用NI-CAN采样率设置会话>重采样率属性。 |
| 输出 | 0 | 信号输出,XY | 对于每一帧,使用NI-XNET Database API将CAN > 定时类型设置为事件数据,将CAN > 传输时间设置为0(无回弹)。 |
| 输出 | >0 | 信号输出波形 | 对于每个帧,使用NI-XNET Database API将CAN > 定时类型设置为周期数据,并将CAN > 传输时间设置为NI-CAN 1/SampleRate |
| 输出/最近 | >0 | 信号输出单点 | 对于每一帧,使用NI-XNET数据库API将CAN > 定时类型设置为周期数据,并将CAN > 传输时间设置为NI-CAN 1/采样率。 |
| 时间标识输入 | N/A | 信号输入,XY | N/A(无附加属性) |
表2. 下表显示了用于CAN通信的NI-CAN和NI-XNET采样率之间的根本区别。
在NI-CAN中,可直接在磁盘上使用数据库。 在NI-XNET中,通常手动创建该文件的别名,以便在应用程序中使用NI-XNET I/O控件。但是,如要发布应用程序或仿真NI-CAN行为,可通过编程为磁盘上的文件创建数据库别名。为此,请查看硬件输入和输出»CAN»NI-XNET»数据库(编辑和管理)下的Managing Local Databases.vi范例。
用于NI-CAN的NI-XNET兼容层大大简化了NI-CAN代码的过渡,以利用下一代NI-XNET CAN和FlexRay接口。与兼容层配合使用时,大多数NI-CAN应用程序在NI-XNET硬件上几乎没有改动。