《第13讲——第5章 CAN总线应用1-应用层协议》由会员分享,可在线阅读,更多相关《第13讲——第5章 CAN总线应用1-应用层协议(46页珍藏版)》请在金锄头文库上搜索。
1、第第5章章 CAN总线应用(总线应用(1)15.1 CAN总线应用层协议的制定 CAN协议本身只定义了物理层和数据链路层的规范。 好处好处:适应性强; 缺点缺点:具体使用CAN时可能带来不便。 用户在应用CAN协议时,应根据实际需求自行定义CAN高层协议。 为方便应用并满足产品兼容性和互操作性,国际上已形成诸多基于CAN的高层应用协议,如 CAL、CANopen、DeviceNet、SDS、CAN Kingdom、SAE J1939等(PPT第9讲)。这些协议主要应用在工业控制、汽车、仪器仪表等行业中。2 本节参考基于CAN的工业应用层协议,结合温室控制系统的实际情况,介绍适合于温室环境控制的
2、一个简易的CAN高层应用协议,以方便基于CAN的应用系统开发时参考。 基于具体应用的一个CAN应用协议主要规定以下几方面的内容: 信息标识符分配; 过程数据交换方法; 点对点通信实现; 报文滤波机制的使用方法等。35.1.1 信息标识符分配方案 在CAN系统中,可以用信息标识符ID来标识数据的含义。ID决定了信息的优先权,同时也影响信息滤波的适用性。因而,合理、高效的ID分配方案是充分发挥CAN总线性能的前提条件。4 1.信息标识符结构 所制定的协议中,信息标识符采用静态分配的策略,采用BasicCAN模式。 11位标识符结构如下: 信息功能码 节点号 数据场格式 (2位) (6位) (3位)
3、 (1)信息功能码(11位标识符的最高2位) 信息功能码字段表征信息的如下四种情况(每种情况都可以有远程帧和数据帧两类)。5 00网络传感器信息帧:该类信息的远程帧用于请求节点发送其传感器信息(ID中间6位节点号应取相关联节点的节点号),数据帧用于发送节点(节点号取本节点号)的传感器信息。 01输入变量信息帧:该类信息的远程帧用于请求节点发送其输入变量,数据帧用于发送节点的输入变量信息。 10输出控制信息帧:该类信息的远程帧用于请求节点发送其输出变量,数据帧用于发送节点的输出变量信息。 11点对点信息帧:该类信息主要用于节点参数(如通信参数等)配置,或者是发送超过8个字节的数据块。6 (2)节
4、点号( 11位标识符的中间6位) 节点号字段共6位,总线上最多可以接64个节点。 (3)数据场格式信息( 11位标识符的最后3位) 说明数据场中数据的格式。在不同功能的信息帧中,该字段的含义有所不同。分4种情况分述如下。 对于网络传感器信息帧(信息功能码00) 不同的传感器给予不同的编码: 000温度传感器信息; 001光照传感器信息;7 010湿度传感器信息; 011二氧化碳浓度传感器信息; 100土壤电导率传感器信息; 101、110、111未用(今后扩展用)。 对于输入变量信息帧(信息功能码01) 000位型(开关量)输入,数据场:每字节代表8通道,每帧可发送64个位型变量(8位8字节)
5、 ; 001字节型(8位A/D)输入,数据场:每字节代表1通道,每帧可发送8路8位A/D输入; 010字节型(8位频率量)输入,数据场:每字节代表1通道,每帧可发送8路8位频率量输入;8 011字型(16位A/D)输入(916位均可),数据场:每二字代表1通道,每帧最多可发送4路16位A/D输入; 100字型(16位频率量)输入(916位均可),数据场:每二字节代表1通道,每帧最多可发送4路16位频率量输入; 111请求输入变量错误(节点无此输入变量); 101、110 未用。 对于输出信息帧(信息功能码10) 000 开关量输出,数据场:目标节点号(第一字节)+通道号(第二字节)+通道值(通
6、道值仅能为0、1),占用一个字节; 9 00116位脉冲量输出,数据场:目标节点号+通道号+通道值(通道值表示脉冲个数),占用两个字节; 010 字节型(8位D/A)输出,数据场:目标节点号+通道号+通道值(通道值占用一个字节); 011字型(16位D/A)输出(包括916位),数据场:目标节点号+通道号+通道值(通道值占用两个字节); 111请求输出变量错误(节点无此输出变量); 100、101、110 未用。10 对于点对点信息帧(信息功能码11) 000读、写通信波特率参数BTR0,BTR1; 001读、写报文滤波器设置ACR,AMR; 010读、写输出控制寄存器OCR; 011读、写时
7、钟分频寄存器CDR; 100用于发送超过8个字节的数据块; 101、110、111目前未用(保留)。 注:由于信息标识符的高7位不能全为1,所以111110、111111号节点不允许发送点对点帧,在节点号设置时应尽量避开;或者不用其作为具有管理功能的节点的编号。11 综上所述: 标识符分配采用面向节点的原则,系统总共可容纳26(=64)个节点。 每个节点可以有4组不同类型的信息标识符:第一组用作传感器信息的传输(00);第二组用作输入变量的传输(01),每个节点可以有8种不同类型的输入变量,每类变量的通道数视变量类型有所不同,位型可达64通道,字型仅有4通道;第三组用作输出控制信息的传输(10
8、),每个节点可有8种类型的输出控制信息;第四组信息主要用于设备配置或者长数据块的传输(11)。12 2.信息优先权分配 按上述的信息标识符(ID)分配方案,在CAN的仲裁机制作用下,信息优先权遵循以下原则。 (1)发送网络传感器信息的帧具有最高的优先权(因为11位标识符的最高位为00),发送输入变量信息的帧的优先权次之(01),发送输出控制信息的帧的优先权再次之(10),点对点信息帧的优先权最低(11)。 (2)在同类信息帧中,节点号小的帧具有较高的优先权。 (3)具有相同标识符的帧,数据帧优先权高于远程帧。13 假设有如下4组帧信息同时发送: ID RTR(1)1XXXXXXXXXX X (
9、输出控制信息帧)(2)01101101XXX X (节点号为101101的输入变 量信息帧)(3)01101100XXX 1 (节点号为101100的输入变 量信息帧远程帧)(4)01101100XXX 0 (节点号为101100的输入变 量信息帧数据帧) 假设(3)和(4)两种帧的ID号相同,则可用下图说明仲裁过程。1401101101t1时刻发送输出控制信息帧的节点失去仲裁t2时刻发送输入变量信息帧的节点中节点号较大的101101号节点失去仲裁(101100继续发送)t3时刻:在ID相同情况下发送远程帧的节点(RTR=1)失去仲裁155.1.2 应用信息帧格式 应用层信息帧是应用层与CAN
10、基本通信部分之间数据交换的纽带,有两个方面的作用: (1)应用层将接收的信息帧解析后,输出给用户程序; (2)应用层将用户程序需要发送的信息通过应用层装配成帧后供CAN基本通信部分发送。 在前面介绍了信息标识符结构的基础上,应用层要处理的信息帧格式如下表所示(即如何确定下面各部分的值,然后写入相应的CAN协议芯片的寄存器中)。 2位 6位 3位16 1. 应用层信息帧的组装(发送时) 用户数据需要在应用层按照上面所示的应用层信息帧的固定格式组装起来,以供CAN基本通信程序发送时使用。 (1)在应用层中,CAN信息帧封装函数依据用户程序提供的待发送信息,判断待发送数据的功能和具体数据类型,形成仲
11、裁场中的信息功能段信息功能段、信息格式段信息格式段和RTR位。比如要发送开关量输入变量数据,则信息功能码为01、信息格式码为000、RTR=0。 然后依据RTR的值设置节点号字段节点号字段,若RTR=1,则节点号应取相关联节点的节点号,反之就取本节点号。17 至此,11位标识符的各个位均已确定。 对于使用SJA1000的节点而言,可以向其CAN地址为17和18的寄存器写入相关信息。 SFF标准帧;X不影响CAN地址帧格式位BIT7BIT6BIT5BIT4BIT3BIT2BITlB1T017SFFID.28ID.27ID.26ID.25ID.24ID.23ID.22ID.21EFFID.28ID
12、.27ID.26ID.25ID.24ID.23ID.22ID.2l18SFFID.20ID.19ID.18XlX2X2X2X2EFFID.20ID.19ID.18ID.17ID.16ID.15ID.14ID.1319SFF未使用(数据字节1)EFFID.12ID.1lID.10ID.9ID.8ID.7ID.6ID.520SFF未使用(数据字节2)EFFID.4ID.3ID.2ID.1ID.0X1X2X218 在介绍SJA1000的寄存器时,其“10. 发送缓冲器”部分介绍了如下内容: 发送缓冲器分为描述符区和数据区。描述符区的第一个字节是帧信息,它说明了帧格式(标准帧SFF或扩展帧EFF)、远
13、程或数据帧及数据长度。SFF有2个字节的识别码占用CAN地址17和18(其格式如前表所示,按格式填写)。数据区最长为8个数据字节,占用CAN地址为1926。19 (2)接着设置数据长度码 若RTR=0,则为数据帧,数据长度码的值通过计算待发送的用户数据取得。 若RTR=1,则为远程帧,它没有数据场 ,数据长度码不设置(数据长度代码的数值可标注为容许范围内08中的任意值)。此时,默认为请求对方节点的该类型所有通道的数据。 对于使用SJA1000的节点而言,如何来设置这些相关的信息?需要确定的相关信息有: 确定是标准帧; 确定是数据帧还是远程帧; 数据帧时确定数据长度码。20 通过对CAN地址16
14、(TX帧信息字节,见前图)进行配置来实现。该字节如下表所示: 注: 1帧格式,1=EFF(扩展帧),0=SFF(标准帧标准帧)。 2远程发送请求位,1=远程帧,远程帧,0=数据帧数据帧。 3不影响。推荐在使用自接收设备(自检测)时和接收缓冲器(0)兼容。 4数据长度码位,数据长度码位,编码范围为18。BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0FF1RTR2X3X3DLC.34DLC.24DLC.14DLC.0421 (3)数据场的信息 在RTR=0时(数据帧),数据场的信息就是待发送的数据实体。 在RTR=1时(远程帧),这部分不设置。 对于使用SJA1000的节点而言,
15、如何来设置数据帧中要发送的? 根据数据字节的长度,往前图所示的TX数据字节1(CAN地址19)至TX数据字节8(CAN地址26)写入要发送的数据字节。 至此,较为完整地介绍了发送时要进行的主要工作。22 2. 应用层信息帧的解析(接收时) 接收到的CAN信息帧在应用层中解析出来,供用户程序使用。 在应用层中,CAN信息解析函数按如下步骤完成接收信息的解析。 首先判断RTR位的值。 对于使用SJA1000的节点而言,如何获取RTR位的值? 在介绍SJA1000的寄存器时,其“11. 接收缓冲器RXB ”部分介绍了如下内容: 23 接收缓冲器与发送缓冲器很相似,每条信息也都分为描述符区和数据区。接
16、收缓冲器(共13个字节)是RXFIFO(64B)的可访问部分,也位于CAN地址的1628(对这些CAN地址,读操作访问的是接收缓冲器;写操作则访问发送缓冲器)。接收缓冲器的地址列表如下表所示。24CAN地址工作模式复位模式读写读写16RX帧信息SFF3RX帧信息EFF4TX帧信息SFF3TX帧信息EFF4验收代码0验收代码017RX识别码1RX识别码1TX识别码1TX识别码1验收代码1验收代码118RX识别码2RX识别码2TX识别码2TX识别码2验收代码2验收代码219RX数据1RX识别码3TX数据1TX识别码3验收代码3验收代码320RX数据2RX识别码4TX数据2TX识别码4验收屏蔽0验收
17、屏蔽021RX数据3RX数据1TX数据3TX数据1验收屏蔽1验收屏蔽122RX数据4RX数据2TX数据4TX数据2验收屏蔽2验收屏蔽223RX数据5RX数据3TX数据5TX数据3验收屏蔽3验收屏蔽324RX数据6RX数据4TX数据6TX数据4保留(00H)25RX数据7RX数据5TX数据7TX数据5保留(00H)26RX数据8RX数据6TX数据8TX数据6保留(00H)25 通过对CAN地址16进行读操作就可了解RX帧信息。具体格式与前面提到的TX帧信息格式一致,如下表所示: 1帧格式,1=EFF(扩展帧),0=SFF(标准帧标准帧)。 2远程发送请求位,1=远程帧,远程帧,0=数据帧数据帧。
18、 3不影响。推荐在使用自接收设备(自检测)时和接收缓冲器(0)兼容。 4数据长度码位,数据长度码位,编码范围为18。 显然,通过识别该字节的最高位为0即可判别是标准帧,该字节的次高位为即为RTR位。BIT7BIT6BIT5BIT4BIT3BIT2BIT1BIT0FF1RTR2X3X3DLC.34DLC.24DLC.14DLC.0426 若RTR=1,则为请求发送的远程帧,依据信息帧中的信息功能码和信息格式码判断其所请求的数据类型,通知给信息帧封装函数。 由前表所示,只要读取CAN地址17和18,即可获取ID信息,从而提取信息功能码和信息格式码。 若RTR=0,则为数据帧,将根据从读取的ID信息
19、中提取的节点号判断是否是本节点的相关联节点,不是就不继续处理,是则根据信息功能码(从获取的ID中分离得到)确定是输入变量信息还是输出控制信息。27 若是输入变量信息,则依据信息格式码(可从读取的ID中分离出来)读取数据(读取前表中CAN地址1926范围内相关寄存器中的数据),然后转存至相关节点数据缓冲区,以供用户程序使用。 若是输出控制信息,则读取数据场中第一字节(前面已定义该字节为目标节点号),判断是否是本节点的控制信息,不是则退出处理;是则读取数据场中第二字节(前面已定义该字节为通道号),并按照ID中信息格式码确定通道值的字节数而读取通道输出值,将输出值存入本节点的输出数据缓冲区,由用户程
20、序写入输出通道。285.1.3 数据交换方法 CAN现场总线系统中,设备间需交换过程数据(控制系统中的输入输出数据)。在本例制定的应用层协议中,除CAN协议本身可实现的生产/消费方式外,还有两种交换过程数据的方式。 1. 生产/消费方式 生产/消费方式,顾名思义,信息的发送者像生产商一样是产品(信息)的提供者,信息接收者如同产品消费者一样是信息的接收者。 每个节点发送的信息可以为众多的节点所接收;每个节点可以接收众多节点发送的信息;接收节点接收哪个(些)节点的信息由其根据需要自主选择。 29 这种方式得到CAN协议的支持,不必有额外的软硬件支出。按这种方式交换数据时无须应答也无须连接。节点通过
21、信息ID识别来理解信息。信息的产生者和使用者被假设拥有使用数据的知识或明白数据的含义。 具有输入功能的节点具有输入功能的节点将输入变量信息以特定的标识符发送到总线上,任何相关联节点均可接收。输入节点定期地或者在输入变量状态变化时,主动向总线发送其输入变量信息。30 具有控制决策权的节点具有控制决策权的节点,在做出控制决策后立即将决策信息(也就是输出控制信息)按照协议规定的格式发送到总线上,所有感兴趣的节点均可接收。节点在接收到控制信息帧后需进一步解析信息帧,根据信息帧的具体内容做出相应的响应。 生产/消费方式可以有效地处理数据报警,因为节点在数据发生变化时有权及时、主动地发送信息,这使得具有控
22、制决策权的节点可以及早获得数据,然后做出判断,若超限则进一步做出报警显示和启动处理措施。31 2.远程请求方式 在本协议中,直接利用CAN机制为过程数据交换提供了另一种方式,即远程请求方式。 当某节点需要其他节点的数据时,可以发送与所需信息具有相同标识符的远程帧来请求数据,具有该标识符所表示的数据帧发送权的节点收到远程帧之后,将启动相应的发送过程。 远程请求方式可用于请求网络传感器信息和输入变量信息,远程帧的构造在应用层信息帧部分已作介绍。具体应用举例如下: 32 例:当某节点需要011011号节点的开关量输入信息时,则发送ID=01 011011 000的远程帧,011011号节点收到该远程
23、帧后就将自己的开关量输入数据冠以ID(01011011000)进行封装,然后发送至总线上,便完成了一次输入变量交换过程。其数据场每字节代表8通道,每帧可发送64个位型变量。 3. 点对点通信 点对点通信主要用于对智能节点参数和配置信息进行读/写、传输多于8字节的数据块等。这种通信方式的特点是:通信过程由主叫方发这种通信方式的特点是:通信过程由主叫方发起,被叫方需要应答。起,被叫方需要应答。33 在协议中,专门为点对点通信提供了标识符段(最高两位为11),智能节点通过标识符的功能信息字段可识别点对点信息帧,做出应答。对于不同的任务,点对点通信的过程有所不同,介绍如下。 XXXXXX代表源节点号,
24、也就是发起通信节点的节点号; YYYYYY代表目标节点号,也就是应答节点的节点号。 读、写通信波特率参数 信息标识符:11XXXXXX00034 RTR=1时,为远程帧,用于读波特率参数。 RTR=0时,为数据帧,用于写波特率参数。此时,数据长度码DLC=3;数据场格式为:目标节点号(占1字节)+BTR0(1字节,总线定时寄存器0 )+BTR1(1字节,总线定时寄存器1 )。 应答时,ID为11YYYYYY000,RTR=0,DLC=2,数据场格式为:BTR0+BTR1。 (BTR0为写入总线定时寄存器0的数值,BTR1为写入总线定时寄存器1的数值)35 读、写报文滤波器参数 信息标识符:11
25、XXXXXX001 RTR=1时,为远程帧,用于读报文滤波器参数。 RTR=0时,为数据帧,用于写报文滤波器参数,此时,DLC=3;数据场格式为:目标节点号(占1字节)+ACR(1字节)+AMR(1字节)。 ( ACR验收代码寄存器,AMR验收屏蔽寄存器) 应答时,ID为11YYYYYY001,RTR=0,DLC=2,数据场格式为:ACR+AMR。 36 读、写输出控制寄存器参数 信息标识符:11XXXXXX010 RTR=1时,为远程帧,用于读取输出控制寄存器参数。 RTR=0时,为数据帧,用于写输出控制寄存器参数,数据场格式为:目标节点号(占1字节)+OCR(1字节)。 应答时,ID为11
26、YYYYYY010,RTR=0,DLC=1,数据场格式为:OCR的值(1字节)。37 读、写时钟分频寄存器参数 信息标识符:11XXXXXX011 RTR=1时,为远程帧,用于读取时钟分频寄存器参数。 RTR=0时,为数据帧,用于写时钟分频寄存器参数,数据场格式为:目标节点号(占1字节)+CDR(1字节)。 ( CDR时钟分频寄存器,CAN地址31) 应答时,ID为11YYYYYY011,RTR=0,DLC=1,数据场格式为:CDR的值(1字节)。 38 特别说明:通信参数(如波特率)的配置是一个特别的任务。 读通信参数得到的是在目标节点通信参数缓冲区中的值,而不是直接从CAN协议控制器的相应
27、寄存器中读,因为CAN协议控制器的CDR寄存器在工作模式下不支持读写操作。 写通信参数也是暂时写到EEPROM中,应答的值只是用于说明本节点接收到数据,供发起修改的节点检验是否正确。要修改通信参数,CAN协议控制器必须进入复位模式,而且修改以后,原来的通信状态无法维持,需要重新对总线进行初始化。 39 即对这类任务应采用有条件支持的方法:若节点中有非易失性数据存储器,则支持通信参数的更改,在参数更改后,节点重新启动,以采取新的参数进行设置;对于没有非易失性数据存储器的节点,通信参数一般不更改。 传输长于8字节的数据块 信息标识符:11XXXXXX100,RTR必须为0(数据帧)。 此时数据场有
28、两种格式。由于数据块长于8个字节,同时每个数据帧还要加上一定的控制信息,因此必须分多次发送,每次发送6个字节。40 第一帧,DLC=8,数据场格式为:目标节点号(1字节)+数据块总帧数(1字节)+6个字节数据; 第二帧,DLC的值根据数据场的实际长度设置,不会小于2。数据场格式为:目标节点号(1字节) +帧编号(1字节) +有效数据(非最后一帧时为6字节,最后一帧时为16字节) 。 应答时,ID为11YYYYYY100,RTR=0,DLC=1,数据场格式为:帧编号(第一帧时应答1)。 41 注:数据块总帧数是指整个数据块按6字节一帧可以分成的帧数。帧编号是指当前要发送的帧在整个数据块分割后所占
29、的次序,从1开始编号。第二帧有可能是最后一帧,该帧有效数据可能不足6字节,所以DLC的值声要根据数据场的实际长度来设置。425.1.4 报文滤波机制的利用 报文滤波是CAN总线技术最有用的特色之一,通过报文滤波,可以很容易地实现点对点、一点对多点的通信。如何利用好这一机制来为系统通信提供方便,也是CAN应用协议的一个重要部分。 在实际通信中,通过CAN协议控制器的验收代码寄存器和验收屏蔽寄存器控制报文滤波机制。在BasicCAN模式下,只有当验收代码寄存器的位(ACR.7ACR.0)与信息标识符的高8位(ID.10ID.3)相等,或与验收屏蔽寄存器的相应位(AMR.7AMR.0)相“或”为1,
30、即满足下述方程时,信息才被接收。43 (ID.10-ID.3)(ACR.7-ACR.0)V(AMR.7-AMR.0) 11111111 本协议中,主要以节点号(ID.9ID.3)作为滤波依据,将AMR.7AMR.6设为“1”,节点可以接收到相关联节点的全部信息(4种功能信息)。AMR.5AMR.0严格限制了节点之间相互通信的范围,也是相关联节点的范围,应根据温室规模和温室系统的具体拓扑结构进行设定。温室规模较小时,用的节点较少,可以增加AMR.5AMR.0中为“0”的位,以更有效地阻止无关报文。44 对于温室群控系统,可以将节点号分为组号和组内号两段,同组号的节点位于同一温室中,它们之间的联系也必然更紧密,通信也更频繁。通过将组号段所对应的验收屏蔽寄存器的位设置为“0”,即可以将节点所能接收的ID范围限制在本组内的节点,而不接收其他温室的报文,这样可以有效地减少节点间无效通信次数。下表中的ACR和AMR的设置表明该节点可以接收节点号为000111的全部4种功能信息。454种功能信息节点号为00011146