CMS data object for client and server

<< 点击显示目录 >>

主页  贝加莱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数据对象的格式。

;str|client-ID|server-ID|acc|obj|mul|len | info | pv_name | event_pv_name
;---|---------|---------|---|---|---|--------|---------|--------------------|---------------------
"%P",$00000300,$00000000,'R','B',000,00000000,$00000000,"<taskname:>bvar_re","<taskname:>ebvar_re"
"%P",$00000105,$00000201,'R','M',001,00000000,$00000000,"<taskname:>mvar_re","<taskname:>emvar_re"
"%P",$00000103,$00000202,'W','B',000,00000000,$00000000,"<taskname:>bvar_wr","<taskname:>ebvar_wr"
"%P",$00000104,$00000203,'R','M',002,00000000,$00000000,"<taskname:>mvar_wr","<taskname:>emvar_wr"

 

名称

数据类型

长度

描述

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

附加信息。

Bit 0 = 0

根据CiA/DS202-3的CMS格式

Bit 0 = 1

B&R格式。没有根据CiA进行转换 - 为数组和结构提供更好的中断处理性能。这种格式可用于两个B&R 2000 CPU之间的通信("信息"=1)。

位1=0

没有中断锁定

Bit 1 = 1

当从CAN总线上应用CAN数据时,在CAN驱动中进行中断锁定("info"=2,见下面的描述)。

pv_name

STRING

 

过程变量的名称。

参见 "过程变量的名称"。

请注意关于使用应用模块的说明

ev_pv_name

STRING

 

事件PV的名称。

参见 "过程变量的名称"。

请注意应用模块的使用说明

 

参数 "info "中位1的含义

在参数 "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用户任务的背景下,结构变量的数据可以是不一致的。

case1

 

案例2: 如果在参数 "info "中设置了位1=1,那么CanEventHandler IRQ中的CAN数据的应用被锁定。因此,结构变量的数据在Cyclic#1用户任务的背景下是一致的。

case2

中断CAN

当接收CAN数据时,CAN中断处理程序会触发CanEventHandler。

循环#1用户任务

使用CMS数据模块变量的用户任务

IFx_CanEventHandler

CanEventHandler将收到的CAN数据复制到CMS数据模块中指定的变量。