CANwrite()

<< 点击显示目录 >>

主页  贝加莱CAN通讯使用例程说明 > 通过编程实现CAN通讯 > 功能块与函数说明 > CAN_Lib > CAN_Lib - CAN Function Blocks and Functions >

CANwrite()

CANwrite()函数将一个带有给定的CAN标识符(can_id 输入参数)的CAN报文 发送到CAN控制器进行传输。

该函数的状态(status 参数)只有在该CAN报文被成功发送后才会被设置为0。

该函数必须被用户循环调用,以便可以通过 状态 输出 监测缓冲区的成功传输  。只有当 状态 输出为0 时,才会发送一个消息  。

 

这个功能块只能有条件地 用于冗余

适用的限制在下面的章节中描述。

 

手柄必须被初始化

不活动的CPU上的特殊错误代码

隐藏指针的使用

 

其他信息可以在 "冗余 " 部分找到

参数

输入/输出

参数

数据类型

说明

IN

enable

BOOL

启用的含义 。

位置边缘(0->1)。

定义CAN标识符的COB(COB=通信对象)。

负边(1->0)。

删除COB。

enable = 1。

向控制器传输数据。

IN

us_ident

UDINT

来自 CANopen() 函数的用户识别号  。

IN

can_id

UDINT

CAN标识符

IN

data_adr

UDINT

(given as a pointer)

CAN数据的地址(最大8个字节)。

IN

data_lng

USINT

数据的长度(最大8个字节)。

OUT

status

UINT

状态

描述

0

数据被成功发送。

1

功能仍然有效。数据尚未被发送。

xxxx

错误号码也会输出到 状态 输出。

调用语法(自动化基础)

CANwrite(enable,us_ident,can_id,adr(data_adr),data_lng,status)

 

注意事项

如果CAN功能块在C函数中被本地调用(并且FBK结构在该函数中被本地声明,而不是用_LOCAL/_GLOBAL),那么静态FBK存储器必须被初始化为0。

 

如果CAN控制器的写缓冲区是 "忙 "的,后续的消息就会被放在发送队列中。如果发送队列已满,相应的错误号(8810)将在 状态 输出端输出。

canwrite

发送队列不是由CANwrite()函数管理的。这个任务是由发送中断(CAN驱动)执行的。发送队列在发送中断期间被执行(FIFO="先进先出")。

send-interrupt

如果节点不在CAN总线上或网络中没有活动节点,发送队列也会变满。

如果在 使能 输入端遇到一个负边  ,可以从CAN驱动管理中删除一个预定义的COB(通信对象)。在函数本身中,为每个CAN标识符分配一个临时的内部COB(在第一次调用时)。

例子

Automation Basic

ANSI C

Structured Text