<< 点击显示目录 >> 主页 贝加莱CAN通讯使用例程说明 > 通过编程实现CAN通讯 > 功能块与函数说明 > CAN_Lib > CAN_Lib - CAN Function Blocks and Functions > CANquwr() |
CANquwr()与 CANwrite()是相同的。不同的是,在这个FBK中, status 永远不会被设置为1,也不会检查前一个发送指令是否已经完成。
换句话说,几个发送指令可以快速连续地被设置,直到发送队列满了为止。CAN控制器尽可能快地执行发送指令。如果发送队列已经满了,就 会返回status=8810。
这个功能块只能有条件地 用于冗余。
适用的限制在下面的章节中描述。
其他信息可以在 "冗余 " 部分找到 。
输入/输出 |
参数 |
数据类型 |
说明 |
||||||
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 |
|
CANquwr(enable,us_ident,can_id,adr(data_adr),data_lng,status)
如果CAN功能块在C函数中被本地调用(并且FBK结构在该函数中被本地声明,而不是用_LOCAL/_GLOBAL),那么静态FBK内存必须被初始化为0。
如果发送队列已满,相应的错误号(8810)会在 状态 输出端输出。
发送队列不是由CANquwr()函数管理的。这个任务是由发送中断(CAN驱动)执行的。发送队列在发送中断期间被执行(FIFO="先进先出")。
如果节点不在CAN总线上或网络中没有活动节点,发送队列也会变满。
如果在 使能 输入端遇到一个负边 ,可以从CAN驱动管理中删除一个预定义的COB(通信对象)。在函数本身中,为每个CAN标识符分配一个临时的内部COB(在第一次调用时)。