<< 点击显示目录 >> 主页 贝加莱CAN通讯使用例程说明 > 通过编程实现CAN通讯 > 功能块与函数说明 > CAN_Lib > CAN_Lib - CMS Function Blocks and Functions > CAN_Lib - CMSmain() > CMS data object for client and server |
该数据对象可以在Automation Studio中定义,并包含所有可以在CAN网络中使用的CMS对象。这个数据对象既可以用于客户端,也可以用于服务器。客户端和服务器之间的区别是通过 函数 CMSinit() 的 输入参数 user_type来实现的 。
如果多个CMS服务器节点需要不同的数据对象,那么它们也可以通过 CMSinit()在CMS客户节点上指定 。在定义客户端和服务器的标识符时,注意这些标识符的COB在每个节点上只能定义一次。
一个具有不同复用器的CAN标识(COB)只允许在一个CMS数据对象中使用。
在CMS数据对象的参数 "info "中,位1=1为CAN数据的每个副本(最大8字节)设置中断锁,以用于CAN驱动任务中的过程变量,而不考虑数据类型(对于基本变量、阵列变量和结构变量)。这也保证了TC#1中整个结构的一致性。如果位1=0,在CAN驱动任务(xxx_CanEventHandler)中复制CAN数据时,由于TC#1的优先级较高,可以被打断。然后,一个不一致的结构就会出现在TC#1中使用。然而,由于CAN驱动任务在系统中具有更高的优先级,所以数组和结构变量的一致性在TC#2-TC#8中得到保证。对于基本数据类型来说,通过位1的锁定是没有必要的,因为它们总是被处理器一致地复制。
CMS数据对象的格式。
|
名称 |
数据类型 |
长度 |
描述 |
||||||||
start_str |
STRING[3]。 |
3 |
新的CMS条目的标记("%P")。 |
||||||||
client_id |
UDINT |
4 |
客户端CAN标识符 |
||||||||
server_id |
UDINT |
4 |
服务器CAN标识符 |
||||||||
访问_typ |
USINT |
1 |
对对象的访问。 "R"... 只读 "W"...只写 "A"...读/写 |
||||||||
对象类型 |
USINT |
1 |
对象的类型。 "B"... 基本变量 "M"...复用变量 "U"...不受控制的事件 |
||||||||
mul |
USINT |
1 |
复用变量的复用器(0 - 127)。 |
||||||||
len |
UDINT |
4 |
用于设置CAN RTR帧中DLS位的只读基本变量的数据长度 Bit 31 = 0: 正常模式下RTR请求的DLC=0或len=0 Bit 31 = 1: 只读基本变量的DLC长度从位0-位3开始应用。 |
||||||||
信息 |
UDINT |
4 |
附加信息。
|
||||||||
pv_name |
STRING |
|
过程变量的名称。 参见 "过程变量的名称"。 |
||||||||
ev_pv_name |
STRING |
|
事件PV的名称。 参见 "过程变量的名称"。 |
在参数 "info "中设置位1=1,可以锁定接收到的CAN数据,使其不被应用于CanEventHandler IRQ。只有当CMS数据模块的变量被用于任务类Cyclic#1,并且它们没有使用模块化的数据类型,即数组或结构,设置该位才是必要的。位1对于任务类Cyclic#2-Cyclic#8没有意义,因为CanEventHandler在系统中的优先级更高。如果在任务类Cyclic#2-Cyclic#8中使用了数组或结构变量,那么用户任务中的数据一致性可以通过函数块CMSattach()和CMSdetach()来保证。
任务优先级
对象优先级 |
|
循环#1 |
230 |
IFx_CanEventHandler |
224 |
循环 #2 |
218 |
循环 #3 |
200 |
循环 #4 |
198 |
循环 #5 |
196 |
循环 #6 |
194 |
循环 #7 |
192 |
循环 #8 |
190 |
案例1: 当把收到的CAN数据复制到一个结构变量时,Cyclic#1中断了CanEventHandler。因此,在Cyclic#1用户任务的背景下,结构变量的数据可以是不一致的。
案例2: 如果在参数 "info "中设置了位1=1,那么CanEventHandler IRQ中的CAN数据的应用被锁定。因此,结构变量的数据在Cyclic#1用户任务的背景下是一致的。
中断CAN |
当接收CAN数据时,CAN中断处理程序会触发CanEventHandler。 |
循环#1用户任务 |
使用CMS数据模块变量的用户任务 |
IFx_CanEventHandler |
CanEventHandler将收到的CAN数据复制到CMS数据模块中指定的变量。 |