星载CAN总线即插即用解决方案

2021-06-28 12:42吕良庆
计算机工程与设计 2021年6期
关键词:子网字节消息

龙 可,吕良庆

(1.国家空间科学中心 中国科学院复杂航天系统电子信息技术重点实验室,北京 100190; 2.中国科学院大学 计算机科学与技术学院,北京 100049)

0 引 言

CAN总线通信协议标准主要规定的是链路层协议,在实际任务中需要根据任务需要设计通信协议。由于任务需求各不相同,因此对应的通信协议也各不相同,这使得任务之间难以通用,对项目合作时异构系统之间的协调工作造成了困难[1]。引入即插即用设计思路有利于解决这一问题。现有的CAN总线即插即用方法多数是基于地面通用即插即用技术[2],对设备信息描述的方法往往是个性化的,这不利于航天架构异构子网的标准化接入。目前,采用电子数据单(electronic data sheet,EDS)技术来管理设备信息已成为一种主流[3]。例如空间数据系统咨询委员会(consultative committee for space data system,CCSDS)提出的航天器接口业务(spacecraft onboard interface services,SOIS)[4],采用SOIS EDS(SEDS)对部件信息进行描述[5];美国空军实验室(air force research laboratory,AFRL)提出的SPA(space PnP avionics)计划,利用xTEDS(XML transducer electronic data sheet)来管理所有设备和服务[6]。在上述架构中,CAN总线作为底层子网之一,需要在总线内部先解决设备级的即插即用[7],然后与上层的应用和业务过程进行衔接。

1 概 述

在CAN总线中增加即插即用特性,可以在不改变各自节点原有通信协议的基础上,建立它们之间的互通性,提高航天器的协调和集成效率。即插即用技术的实现思路一般可以归纳为以下几个步骤:设备编址、设备发现、设备描述、设备控制、设备事件和设备表达[8]。结合星载CAN总线的实际特点,拟定了CAN总线即插即用的整体流程,如图1所示。

图1 CAN PnP整体流程

为方便即插即用的过程描述,将系统主计算机所在的CAN总线节点定义为主节点(master node),其余接入节点为从节点(slave node)。航天任务中CAN总线通信协议对系统中各节点的地址做了固定分配。

用于描述设备信息的EDS可以参考IEEE1451.0[9]的TEDS格式。当主节点收到从节点的EDS消息,对消息内容进行解析、存储,并依据解析结果进行消息的编排,以启动双方的正常通信,这一过程需考虑单从节点、多从节点的接入以及撤出等多种场景。从节点方面只需按照协议约定的格式进行EDS内容的填写,遵循握手协议发送给主节点。

CAN总线只是航天器综合系统架构底层子网的一种,若系统中还有其它异构子网,则需进行异构子网之间的协议同构,即汇聚层的设计。为方便用户填写EDS,还需考虑EDS的生成工具和解析工具的设计,构建EDS工具链,使CAN总线即插即用协议能在实际应用中推广。

因此,CAN总线即插即用解决方案涉及的主要内容包括:①EDS设计;②握手协议设计;③主节点设计(主要是消息调度算法设计);④从节点设计;⑤汇聚层设计;⑥EDS工具链设计。

2 通信协议基础约定

为了实现即插即用,需要在CAN总线技术规范基础上进行必要的约定。①主节点地址固定为0,确保主节点消息的发送优先权,明确从节点发送EDS消息的目标地址;②不支持从节点之间的通信;③消息首帧的数据场前两字节约定为消息类型,可根据任务需要进行约定。细分为消息子类型和子编号,各占一个字节。其中EDS消息类型定义为0xEDXX。

定义CAN总线表的概念来描述总线上消息的运行情况,其作用类似于列车时刻表,它由一个个消息单元顺序组成,每个消息单元包括一条消息的类型、地址、消息时间。由周期性消息组织而成的总线表称为主总线表,突发性的消息编排入插入总线表。

对用于描述即插即用过程的相关时间概念做以下定义(如图2所示):

图2 时间概念说明

(1)消息时间(TMSG):一条消息传输所需的时间与帧间隙之和。CAN总线标准数据帧包含44 bit-108 bit,考虑星上对CAN总线帧间隙Titv的常见要求在0.2 ms-0.6 ms(此处取0.4 ms),以常用通信速率500 Kbps为例计算,即发送1 bit数据耗时2 μs。当从节点接入系统时,单帧数据域为空的消息,TMSG=44 bit×2 μs/bit+400 μs=488 μs,一个字节的数据传输时间为8 bit×2 μs /bit=16 μs,数据域每增加1个字节,消息帧传输时间增加16 μs,带8字节数据的消息帧TMSG为616 μs。

(2)小帧周期(TFRM):主总线表中一个小帧内所有消息的TMSG累加和。为确保主总线表周期的相对稳定,消息在不上线的小帧内仍然占用该消息的TMSG时间。

(3)消息间隔(TITV):同一消息连续两次传输之间的最小间隔,是从节点的期望值。

下面以标准帧格式为例进行说明。

3 CAN总线即插即用解决方案

3.1 EDS格式设计

为了增强协议的通用性,在一定程度上适应不同的CAN总线通信协议,对地址分配、总线占用以及帧类型等方面的不同约定,本文设计了两种形式的EDS:握手EDS(shake-hand EDS,SH EDS)和通信EDS(slave communication EDS,SC EDS)。SH EDS交代节点地址、帧类型、总线占用等信息,解决通信格式的识别问题。SC EDS用以描述从节点的个性化链路层通信需求,说明消息类型、方向、长度、最小期望间隔等信息,解决总线通信的消息编排问题。

3.1.1 SH EDS格式设计

SH EDS为数据帧,帧头仲裁场的11位标识符格式见表1。

表1 SH EDS仲裁场格式

D10~D5:由节点自行定义,以适应不同节点遵循的不同协议。

D4~D0:节点地址,00000代表主节点,其余用于从节点地址。

SH EDS数据场包含8字节,前2字节为消息类型,方便初始握手时节点双方的第一次识别,取值0xED00~0xED03(分别对应单帧SH EDS、多帧SH EDS的起始帧、中间帧和尾帧)。

SH EDS数据场后6字节是正式内容,解释仲裁场D10~D5位的个性化格式约定。如果仲裁场D10~D5位有多个域的划分,则每一个域对应一个字节,最多6个域(扩展帧域的数量可能大于6)。每个字节的格式都见表2。

表2 SH EDS数据场字节格式

D7~D4:标识符类型,具体可根据实际工程需要自定义,例如表3。

表3 标识符类型定义实例

D3~D0:该标识符类型在仲裁场中所占的位数(1~6)。

3.1.2 SC EDS格式设计

主节点在解析完SH EDS后,开始向该从节点发送SC EDS请求消息,该消息为单帧数据帧,仲裁场内容与SH EDS相同,消息类型为0xED04,数据场中的后6字节填0。

从节点收到请求消息后,向主节点发送SC EDS,用以描述其个性化的链路层通信需求,SC EDS消息仲裁场内容与SH EDS相同。数据场的具体格式见表4。

表4 SC EDS数据场格式

表4中,EDS识别符:取值0xED05;EDS长度:消息定义部分的长度;消息定义:描述节点消息,每个消息的定义占用6个字节,分别包括消息类型、消息方向、消息长度和消息最小期望间隔。具体格式见表5。

表5 SC EDS中消息定义格式

①消息方向T/R:指该消息是由从节点发送(1)或接收(0);②消息长度:0~32 767,单位字节;③U/D:默认上下线。指该子地址消息在安排入总线表时,是默认上线(1)还是默认不上线(0),默认上线代表在从第一个运行周期开始该类消息一直周期性传输,直到从节点主动请求其下线(下线消息类型:0xFFFF)或者异常结束,主节点可以通过改变该位的状态对消息实现上下线控制;④间隔:代表从节点期望的该消息传输最小间隔,全0代表该消息非周期性传输,即突发性消息,期望的最小间隔取值0 ms~32 767 ms。

3.2 握手协议设计

CAN总线即插即用握手时序图如图3所示。

图3 CAN PnP握手时序图

具体的握手步骤如下:

(1)从节点接入过程:

步骤1 从节点以500 ms周期性发送SH EDS。

步骤2 主节点收到SH EDS后解析从节点个性化通信格式并进行记录。

步骤3 主节点发送SC EDS请求消息。

步骤4 从节点收到SC EDS请求消息后,停止发送SH EDS,并向主节点发送SC EDS消息。

步骤5 主节点收到SC EDS后解析从节点对于消息的约定情况并进行记录。

步骤6 根据SC EDS解析内容编排新的总线表并调整总线周期:同类型消息按从节点的接入顺序编排;同一节点多次发送EDS按最新EDS定义的消息情况进行编排,原纪录被覆盖。

步骤7 按照SH EDS定义的通信格式,启动总线表运行,正常通信建立。

步骤8 重复以上步骤实现多个从节点的加入。

(2)从节点撤出过程:

步骤1 当某一从节点连续5次出现应答超时,且发送恢复帧和切换总线不能恢复,或从节点发送下线指令,可判定其下线。

步骤2 主节点删除该节点的通信格式和信息记录。

步骤3 重新计算总线周期,调整总线表。

步骤4 主节点与其余从节点正常通信。

3.3 主节点设计

主节点设计主要考虑对从节点的EDS的传输、读取和解析等过程的控制,并根据EDS进行总线表的编排,以实现后续的正常通信。

3.3.1 总线表构建算法

总线表构建算法主要解决在从节点从无到有加入以及从一到多加入过程中,主节点进行总线表编排时对各从节点消息的合理调度问题,在满足各节点消息传输需求的前提下,尽量减小接入和撤出节点时对系统稳定性的影响。总线表的编排遵循以下步骤:

(1) 第一个节点加入主总线表:

步骤1 主节点收到第一个SC EDS后,将其中所有TITV非零的消息按顺序编入主总线表。

步骤2 累加其中所有消息的消息时间TMSG作为TFRM,若TFRM满足TFRM≥max{TITV1…TITVn},说明小帧周期能满足所有消息对最小间隔的要求,否则,应调整TFRM,拉长最后一条消息的TMSG,拉长的长度为max{TITV1…TITVn}-TFRM。

(2)第N个节点加入主总线表:

步骤1 记录当前小帧周期为Tbase。

步骤3 若m=0或1,小帧不做复制,新接入节点的所有消息依次加入到该小帧中。

步骤5 所有消息插入完成后,计算新TFRM,若满足TFRM≥max{TITV1…TITVn},编排结束,否则应调整TFRM,拉长最后一条消息的TMSG。

步骤6 若无后续节点的接入,该小帧即作为最终主总线表。

SC EDS中TITV为零的突发性消息顺序编入插入总线表,将突发性消息与其触发条件进行关联。

(3)节点撤出时总线表的编排:

步骤1 从主总线表和插入总线表中撤出该节点的所有消息。

步骤2 消息撤出完成后,计算新TFRM,若满足TFRM≥max{TITV1…TITVn},编排结束,否则应调整TFRM。

3.3.2 管理数据结构设计

设计了3种管理数据结构来描述即插即用通信过程:通信特征表(FEATAB)、消息表(MSGTAB)和节点信息表(NODEINFOTAB)。

首先,通信特征表(FEATAB)用于记录初始握手时从节点SH EDS中对其标识符段的分配使用情况,按SH EDS中标识符定义顺序依次记录其长度和相对位置。

其次,消息表(MSGTAB)对SC EDS中定义的节点消息进行记录,包括消息地址、消息类型、消息长度和消息间隔等,是系统建立的消息索引表,能在需要某条消息时快速查询。

第三,节点信息表(NODEINFOTAB)中记录每个节点的地址信息、FEATAB指针、消息数和MSGTAB指针,包含了一个节点的所有个性化信息,方便在节点加入撤出时的索引及消息的上下线控制。

3.3.3 基础功能模块设计

根据CAN总线即插即用握手协议,对其中每一个步骤涉及的交互对象、交互数据进行了分析,绘制了图4所示的CAN PnP主节点数据流。

图4 CAN PnP主节点数据流

为完成CAN总线即插即用主节点的软件设计,主要需实现的功能包括:总线运行控制、数据读写、数据解析、总线表编排等。根据功能编写了如表6所示的基础模块。

表6 CAN PnP主节点基础功能模块

用户可根据需求对基础功能模块进行编写、扩充,并与自定义系统进行衔接,其中每个模块可包括多个程序函数。

3.4 从节点设计

从节点的软件只需按照CAN PnP协议,将个性化的SH EDS和SC EDS发送给主节点即可,建立握手后的通信过程按照从节点原有协议进行。

3.5 汇聚层设计

如果在一个系统中存在多个具有即插即用能力的异构子网,则需要在它们之上设计汇聚层协议以解决系统上层业务和应用的衔接和标准化访问问题。参考CCSDS.850.0-G-2[4]对汇聚层的设计,给出了汇聚层设计思路,如图5所示。

图5 汇聚层设计思路

汇聚层在链路协议子层可以采用冗余模型,即除了统一的路由功能和寻址功能外,其余功能都是平行设计。

路由功能旨在为上层应用确定通信路径,通过对子网的静态数据和动态数据进行分析获得。静态数据指从上层应用到下层子网和设备之间的逻辑地址与物理地址的转换对应关系,以及一些固定的通信特征,如最大通信速率、设置的通信速率、最小传输单元和最大传输单元等。动态数据主要是指新接入设备的信息,主要体现在EDS上。系统内部的管理信息库(management information base,MIB),用于保存静态、动态数据和设备EDS信息。

寻址功能在路由功能的基础上,进一步为上层应用提供可访问地址的服务。提供的方式有两种,一种是提供固定的设备、子网与应用程序之间的地址对应关系。另外一种是设备、子网与应用程序之间的对应关系事先不确定,这种情况下可以通过设计专门的应用EDS,来描述应用程序可以提供的服务以及所需的输入服务信息。当子网上传的消息到达汇聚层时,寻址功能根据该消息的信息在MIB中检索应用EDS,如果发现消息与某个应用EDS的服务信息能够匹配,就可以建立设备、子网与应用程序之间的地址连接和通信关系,表现为应用程序的即插即用。

3.6 EDS工具链设计

从节点用户需按照CAN PnP协议规定的格式编辑个性化的SH EDS和SC EDS。EDS采用XML(extensible markup language)进行描述,以便使用相应的语言生成工具和解析工具,从而扩大它的应用范围和使用的便利。图6为EDS的生成转换过程。

图6 EDS的生成转换过程

数据表单通过工具或者手工编写,然后通过EDS生成工具转换成XML格式。接收方通过EDS解析工具,将XML文件转换成系统可以识别的个性化二进制格式。

3.6.1 EDS生成工具

在互联网上可以找到的XML编辑器有很多,本项目选用了XML Validator Buddy[10],它是一个可在浏览器上直接编辑或阅读XML源码的编辑器,用于进行CAN总线SH EDS、SC EDS的XML文件的编辑生成。在这个工具中输入手工编辑的符合本文SH EDS、SC EDS格式的文件,就可以生成个性化的EDS编辑界面,供用户进行内容的填写和修改,如图7所示。

图7 SH EDS、SC EDS生成工具

由此生成的SH EDS和SC EDS的XML文件如图8和图9所示。

图8 SH EDS XML文件实例

图9 SC EDS XML文件实例

3.6.2 EDS解析工具

EDS解析工具的目的是将XML格式的EDS,转换成二进制格式。存储与解析XML文档的方法之一是使用万维网联盟(world wide web consortium,W3C)推荐的文档对象模型(document object model,DOM)[11]。DOM通过提取XML文件中的元素和属性值,组成树状结构,通过对树的操作实现信息的存储、更新和访问。图10以SC EDS为例分析解析过程。

图10 SC EDS的解析设计

文档树中保留了XML文件中元素名之间以及元素名与属性值之间的层次归属关系。从根节点出发,一级子节点为节点地址和SC EDS定义项(见表4),二级子节点为SC EDS消息定义详情(见表5)。采用深度优先的遍历方法,遍历完成之后,将数据进行组合,形成系统可识别的二进制EDS文件。

4 实验验证

本节设计了实验来验证CAN总线即插即用协议的合理性。实验基于CAN总线仿真卡USBCAN-2E-U,共使用三路CAN接口模拟一主两从。编写了主节点软件及界面CANPnP和从节点测试软件CANTest。在此基础上进行实验验证,结果如图11所示。

图11 即插即用节点接入及撤出过程演示

过程详情和结果分析如下:①从节点1发送SH EDS;②主节点向从节点1发送SC EDS请求消息;③从节点1发送SC EDS;④主节点与从节点1交换数据,消息的帧头、类型、长度等信息符合预期定义,说明EDS格式的设计是合理的,总线表的构建算法能满足单节点的加入情况;⑤从节点2发送SH EDS;⑥主节点向从节点2发送SC EDS请求消息;⑦从节点2发送SC EDS;⑧主节点与从节点1、节点2交换数据,观察先前加入的从节点1消息的收发情况没有受到影响,说明总线表的构建算法能满足多节点的加入情况;⑨从节点2发送下线指令;⑩从节点2相关消息全部下线,只剩从节点1的消息,说明总线表的构建算法能满足节点的撤出情况。

5 结束语

设备级即插即用需要在它接入的子网内部解决识别和接入的问题,而这一点需要按照异构子网的不同特点进行设计。本文按照CAN总线的特点设计了两次EDS的交换过程,第一次解决了消息格式的识别问题,第二次解决了总线通信的消息编排问题,实现了接入设备的自动识别和正常通信。这种两次交换EDS的方式有利于适应按照不同CAN总线通信协议设计的节点接入同一子网。但是仲裁场中地址的定义决定了物理层通信的特征,这限制了SH EDS对不同协议地址定义的适应性。在CAN总线即插即用协议基础上进行了汇聚层和工具链的设计,增强了协议的通用性和使用的便利性。

猜你喜欢
子网字节消息
一种简单子网划分方法及教学案例*
No.8 字节跳动将推出独立出口电商APP
一张图看5G消息
No.10 “字节跳动手机”要来了?
子网划分问题研究及应用
简谈MC7字节码
子网划分的简易方法
消息
消息
消息