这段程序用于创建 CANopen 接口,并读取 CANopen CAN 帧消息。以下是详细的解读:
左侧部分
- node-ID (U8): 指定节点 ID,用于标识 CANopen 网络中的设备。
- CANopen interface (U32): 指定 CANopen 接口。
- baud rate (U32): 设置波特率,用于 CAN 通信的速率。
创建 CANopen 接口
- Interface Create:
- 创建一个 CANopen 接口,并使远程设备进入 NMT 预操作状态(Pre-operational state)。
- 输入参数包括
node-ID
、CANopen interface
和baud rate
。 - 这一步完成后,CANopen 网络已经初始化,设备处于预操作状态,可以开始通信。
读取 CAN 帧消息
-
CAN Frame Read Create:
- 创建一个 CAN 帧读取对象。
buffer size (U16)
设置为 0,表示默认的缓冲区大小。
-
CAN Frame Read Start:
- 启动 CAN 帧读取。
- 如果不使用这个 VI,CAN 帧读取对象会自动启动。但第一次读取操作可能不是实时安全的,因为启动 CAN 帧读取对象需要一些时间。
读取 CANopen CAN 帧消息(右侧部分)
-
Loop (While Loop):
- 使用一个定时器控制循环的执行间隔(
period (ms)
),确保定时读取 CAN 消息。
- 使用一个定时器控制循环的执行间隔(
-
CAN Frame Read:
- 读取 CANopen CAN 帧消息。
- 输出包括
CAN message data
(CAN 消息数据)、RTR?
(远程传输请求标志)、COB-ID
(通信对象标识符)、New Data?
(新数据标志)和timestamp
(时间戳)。
-
状态判断:
- 判断是否有新数据(
New Data?
),如果有新数据,则更新状态(status
)。
- 判断是否有新数据(
-
停止条件:
- 判断是否满足停止条件(
stop
),如果满足则退出循环。
- 判断是否满足停止条件(
关闭 CANopen 接口
-
stop remote node:
- 关闭远程节点。
-
Interface Close:
- 关闭 CANopen 接口,完成所有通信操作。
提示信息
- 将 CANopen CAN frame Read VI 放入循环:
- National Instruments 建议将 CANopen CAN frame Read VI 放入循环中,并设置超时为 0。
- 当超时为 0 时,CANopen CAN frame Read VI 会立即返回最新的状态或紧急消息。
- 这种设置可以最大化资源利用率和减少抖动。
总结
这段程序首先创建并初始化一个 CANopen 接口,使得 CANopen 网络中的设备进入预操作状态。然后,它启动一个 CAN 帧读取对象,并在循环中不断读取 CANopen CAN 帧消息。如果有新数据,则更新状态。当满足停止条件时,关闭远程节点并关闭 CANopen 接口。