<< 点击显示目录 >> 主页 贝加莱CAN通讯使用例程说明 > 通过编程实现CAN通讯 > 功能块与函数说明 > CAN_Lib > CAN_Lib - CAN Function Blocks and Functions > CANdftab() |
这个功能块为用户定义的变量列表(变量表)提供关于CAN总线的数据。
这些数据既可以被读也可以被写。用户可以通过一个事件变量(事件PV)来检查发送或读取操作。
当发送(WRITE)时,只有当事件变量被设置为1时才会发送变量数据。在发送之前,事件变量暂时被设置为40美元。当CAN报文发送完毕后,事件变量再次被设置为0。同样地,当一个给定的CAN标识符的数据被读取(READ)时,事件变量的值被设置为1。
为了避免循环时间问题,CANdftab()函数在软件对象的INIT-SP(初始化子程序)中只被调用一次。数据的循环发送或读取是由 CANrwtab() 函数处理 的 。
这个功能块只能有条件 地用于冗余。
适用的限制在下面的章节中描述。
其他信息可以在 "冗余 " 部分找到 。
输入/输出 |
参数 |
数据类型 |
说明 |
IN |
enable |
BOOL |
启用的含义 。 •位置边缘(0->1)。 定义CAN标识符的COB(COB=通信对象)。 •负边(1->0)。 删除COB。 |
IN |
us_ident |
UDINT |
用户识别号,用于函数 CANopen()。 |
IN |
table_addr |
UDINT (given as a pointer) |
变量表的地址。变量表也可以采取结构数组或数据对象的形式。 |
IN |
tab_num |
UINT |
变量表中的条目数。 |
OUT |
tab_id |
UDINT |
CANrwtab()的表标识符 。 |
OUT |
status |
UINT |
错误编号 (0=无错误)。 |
CANdftab(enable,us_ident,adr(table_adr), tab_num,tab_ident, status)
table_addr 参数向CANdftab()函数发送变量表的地址。
变量表可以被定义在一个 结构数组 或一个 数据对象中 。这意味着 table_adr 是结构数组的地址(每个过程变量有一个数组元素)或数据对象的起始地址(每个过程变量有一个数据对象条目)。数据对象的起始地址可以用DA_Objinfo()函数确定(见 DataObj库)。
变量表的格式。
元素 |
数据类型 |
描述 |
can_id |
UDINT |
CAN标识符 |
pv_name |
STRING[31] |
过程变量的名称(PV) 参见 "过程变量的名称"。 |
event_pv |
STRING[31] |
要触发的事件PV的名称(事件PV的数据类型:USINT) 参见 "过程变量的名称"。 |
info |
UDINT |
Bit 0 = 0: READ (读数据) Bit 0 = 1: WRITE (发送数据) |
数据对象格式(用于变量表):
; | ------------------------------------------------------------------------------> 1
; | | ----------------------------------------------------------------------> 2
; | | | -----------------------------------> 3
; | | | | ---> 4
$00000100,"<taskname:>var_1 ","<taskname:>ev_var_1 ",$0000001
$00000101,"<taskname:>var_2 ","<taskname:>ev_var_2 ",$0000001
$00000102,"<taskname:>var_3 ","<taskname:>ev_var_3 ",$0000000
$00000103,"<taskname:>var_4 ","<taskname:>ev_var_4 ",$0000000
1.CAN标识符。
此条目的数据类型。UDINT
2.过程变量的名称(零结尾的字符串,31个字符+空字节)
3.要触发的事件PV的名称(零结尾的字符串,31个字符+空字节)
4.读取数据(位0=0)/发送数据(位0=1)。
该条目的数据类型。UDINT
在变量表中,每个变量最多可以读取或发送8个字节的数据。 通过CAN中断处理来 保证循环资源 Cyclic #X的数据一致性 。当在定时器资源 Timer #X中 使用时,事件变量(event PV)可以用来设置一致性锁 。该事件变量必须被设置为$FE值。在复制了CAN数据后,事件变量被设置为$FF,不能再接受任何CAN数据。在接受了应用程序中的数据后,应用程序的事件变量必须重置为$FE。在应用程序RAM中需要22个字节的内存来管理变量表中的每个变量。
如果CAN功能块在C函数中被本地调用(并且FB结构在该函数中被本地声明,而不是用_LOCAL/_GLOBAL),那么静态FB内存必须被初始化为0。
用READ定义的变量在接收帧时被CAN驱动覆盖(中断控制的),除非事件PV被设置为$FF。必须至少定义一个CAN标识符,以便在CAN网络中有一个节点处于活动状态。