NI-CAN应用迁移NI-XNET

概述

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

一般来说,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软硬件手册。 

1. 自动响应远程帧

该组件在NI-XNET硬件上可用,但新的架构无法保证兼容性。如应用程序需要该功能,需升级代码以使用NI-XNET API。关于如何使用NI-XNET API处理远程帧的更多信息,见NI-XNET硬件和软件手册。 

2. 外部发器

该功能在某些NI-XNET硬件上可用。PCI-8513和PXI-8513型号是可选择使用外部收发器的XNET硬件范例。

3.速率

NI-XNET接口自动检测时钟输入频率并同步,无需用户提供任何参数。由于该过程是自动的,因此无法更改主时基频率。NI-XNET接口支持不同的同步时钟频率(1 MHz、10 MHz和20 MHz),无需显式更改主时基。1 MHz和10 MHz速率也可导出。 

 4. 记录通信错误警告

NI-XNET提供了记录总线错误的新方法。无需使用总线状态编码器记录CAN帧,现在只需读取总线状态:


图3. 通过观察总线状态可查看总线错误。

该组件为NI-XNET API自带;无法兼容NI-CAN。

5. 时间标识格式

NI-XNET现仅使用绝对时间标识格式。但函数可用于获取特定事件的时间标识。通过这些时间标识,您可以从不同的引用计算“相对”时间,而无需以其他格式重新捕捉数据。


图4. NI-XNET使用绝对时间标识,但仍有获取相对时间标识的方法。

如需该功能,需修改代码以使用NI-XNET API。

6. 时间标识传输时间线恢复

该功能在NI-XNET 1.0中不可用,但在NI-XNET 1.1中引入。该组件现称为“CAN重放”。

图5. 配置CAN重放可通过帧输出流完成。

7. RTSI事件

NI-XNET具有用于同步时基和开始触发的RTSI功能。但是,无法在RTSI脉冲上配置事件(即传输CAN帧)。也无法根据CAN事件配置RTSI事件。

NI-CAN更改NI-XNET

由于各种原因,可能需要修改应用程序以使用NI-XNET API。下一节介绍如何更改NI-CAN代码以使用NI-XNET API。

下列信息旨在帮助您将熟悉的概念从NI-CAN翻译为NI-XNET,以帮助进行代码转换。它并未涵盖所有可能的应用。如需帮助转换代码的任何部分,请联系NI

API

打开接口

打开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范例。

其他API函数

许多NI-CAN帧API范例都有类似的NI-XNET范例。 

通道API 

编辑数据文件

有两种编辑数据库文件的主要方法可供选择:运行前或运行期间。要在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信号输入,XYN/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-XNET兼容简化过渡

用于NI-CAN的NI-XNET兼容层大大简化了NI-CAN代码的过渡,以利用下一代NI-XNET CAN和FlexRay接口。与兼容层配合使用时,大多数NI-CAN应用程序在NI-XNET硬件上几乎没有改动。 

Was this information helpful?

Yes

No