CAN输出
- 更新时间2025-10-09
- 阅读时长7分钟
写入待传输的CAN帧。
按照下列步骤使用CAN输出写入CAN端口。
- 使用添加终端和设备对话框在CompactRIO配置中添加CAN模块。在项目浏览器窗口中右键单击CAN模块,选择属性以指定该模块的配置属性。
- 右键单击我的电脑下的FPGA目标,在项目浏览器窗口中选择新建»FPGA I/O,然后将CAN»NI 9852»CAN0(或CAN»NI 9853»CAN0)和/或CAN»NI 9852»CAN1(或CAN»NI 9853»CAN1)添加到FPGA I/O列表,为CAN创建FPGA I/O项。有关在CompactRIO配置中创建和添加FPGA I/O的详细信息,请参阅新建FPGA I/O对话框(FPGA模块)。
- 从FPGA I/O选板中选择I/O节点并放置到到FPGA VI程序框图。
- 右键单击I/O节点,选择选择FPGA I/O»CAN»NI 9852»CAN0(或选择FPGA I/O»CAN»NI 9853»CAN0)或选择FPGA I/O»CAN»NI 9852»CAN1(或选择FPGA I/O»CAN»NI 9853»CAN1)。
- 右键单击I/O节点,然后选择转换为写入将I/O节点用于CAN写入。
- 右键单击I/O节点,选择属性来选择数据类型。
使用CAN输出之前需先在CAN端口上启动通信。要启动通信,请在模块配置中启用自动开始,或调用开始方法。
从LabVIEW FPGA到模块CAN端口的通信路径以FIFO方式实现。CAN输出节点等待FIFO中出现可用元素,然后将帧写入FIFO。如果FIFO中不存在其他CAN帧,则CAN帧将立即开始传输。
CAN输出不会等待请求的传输在网络上完成(确认)。如果要一次传输一个CAN帧,请先调用CAN输出,然后调用等待传输完成(I/O方法)。
如果要尽快传输所有CAN帧,可将多个帧写入输出FIFO。CAN模块会尽快将这些帧提交给SJA1000控制器,因此会产生接近100%的总线负载。
输出FIFO满时,CAN输出节点等待出现可用元素,然后将帧写入FIFO。CAN高级端口配置对话框中的输出超时(毫秒)指定等待新元素变为可用的时间,该元素在先前CAN输出的帧成功传输到网络后即变为可用。如果将输出超时(毫秒)设置为0,当没有新元素可用时,CAN输出节点将返回错误状态TRUE(错误)(非阻塞)。返回错误时,请稍后再次尝试发送该CAN帧。
属性对话框
选择写入CAN输入节点的CAN帧的数据类型。可用的值为Cluster(默认)和Array of 6 U32。
使用簇数据类型的好处有:
- 简化程序框图(易于使用)
- 如果只使用程序框图(不用前面板),可更快速高效。
使用Array of 6 U32数据类型,并一次将一个整数握手发送到主机VI,其优势包括:
- 更快地与主机VI交互数据
- 需要较少的FPGA门
有关簇和数组使用的详细信息,请参阅Using Clusters and Arrays in LabVIEW FPGA Application Note。
节点输入
| 数据类型 | 元素 | 说明 |
|---|---|---|
|
|
时间标识(高) | 忽略。传输请求总是尽快发生(不定时)。 |
|
|
时间标识(低) | 忽略。传输请求总是尽快发生(不定时)。 |
|
|
标识符 |
仲裁ID。 如果清除了位29(十六进制的20000000),则该ID使用标准格式(11位)。 如果设置了位29,则该ID使用扩展格式(29位)。 此CAN标识符的表示法与NI-CAN相同。 |
|
|
类型 | 帧类型。
|
|
|
信息A | 保留以备后用。 |
|
|
信息B | 保留以备后用。 |
|
|
数据长度 |
对于数据帧,表示数据中的字节数(0–8)。 对于远程帧,表示请求的字节数。 |
|
|
数据 |
对于数据帧,提供数据字节。数组使用8字节固定大小。 如果数据类型定义为6个U32的数组,则CAN帧表示为6个U32值的数组,如下表所示。 |
| 最高有效字节 | ... | ... | 最低有效字节 |
|---|---|---|---|
| 时间戳(高U32) | |||
| 时间戳(低U32) | |||
| 标识符 | |||
| 类型 | 信息A | 信息B | 数据长度 |
| 数据[0] | Data[1] | Data[2] | Data[3] |
| Data[4] | Data[5] | Data[6] | Data[7] |
上表中每个元素的含义与簇数据类型中的相同。