Zynq平台的TTP/C总线控制器容错算法设计

2016-03-20 09:14陈飞张天宏
单片机与嵌入式系统应用 2016年11期
关键词:发送数据时间段列表

陈飞,张天宏

(南京航空航天大学江苏省航空动力系统重点实验室,南京210016)

Zynq平台的TTP/C总线控制器容错算法设计

陈飞,张天宏

(南京航空航天大学江苏省航空动力系统重点实验室,南京210016)

在自主设计的TTP/C总线控制器中,充分利用Zynq芯片的可编程逻辑单元和程序处理单元,设计了一种基于成员关系协议(GMP)的容错算法,以快速检测与隔离总线集群中的故障节点。试验表明,所设计的容错算法能有效检测并隔离总线集群中的故障节点。

容错算法;Zynq;TTP/C;GMP

引 言

目前,实时嵌入式系统中采用的串行通信协议普遍都是基于事件触发的。大量研究表明:对高可靠性系统而言,时间触发架构(TTA)具有更大的优势[1]。1993年,在TTA架构的基础上,TTP/C(Time-Triggered Protocol/ Automotive Class C,时间触发协议C类标准)被首次提出,其是一种用于互联电子模块的、分布式容错实时系统的通信协议,最大的特点是具有严格的时间确定性和高度的通信可靠性,主要面向对象是航空航天应用[2]。

容错能力是总线技术的基本要求,尤其是节点发生故障时,须快速探测并隔离故障节点,防止其影响总线上其他正常节点的信息发送[3]。在故障模式下,集群中的每个正常节点都必须对其他节点的运行状态有相同的判断,以便采取和其他正常节点协调的容错行动,这就是集群的一致性。GMP是TTA架构下的一种分布式多机容错策略,它的主要作用是通过快速探测和隔离故障节点来维持整个集群的一致性。GMP中规定:每个节点内部都有一个实时更新的成员列表,用来表征节点对集群运行状态的认知,GMP成功实现的基础就是成员列表。

为保证TTP/C集群各个节点之间工作状态的一致性,本文设计了一种基于GMP策略的容错算法,以此检测集群中各节点的工作状态,实现快速检测和隔离故障节点的目的,保证TTP/C总线集群的通信可靠性。

1 容错算法的原理

TTP/C是一种集成的时间触发协议,采用静态时分多路复用(TDMA)策略控制节点对传输介质的访问,每一个节点都只能在指定的时间段内发送数据。在每个TDMA周期内,各个节点在预先设定的时间段内以已知的延时在总线上广播,多个不同长度的时间段构成一个TDMA周期,多个等长的TDMA周期构成一个集群周期。

节点传输的数据帧有两种类型:初始化帧和正常帧。正常帧不包含成员列表,但其CRC校验码是结合发送节点成员列表计算得到的,因此接收节点需要用自身的成员列表来对接收到的正常帧进行CRC解码,以此判断两个节点的成员列表是否相同。由于所采用的TTP/C总线控制器并未实现正常帧的发送,因此本文的容错算法针对初始化帧设计,各节点的成员列表直接包含在数据帧中,容错原理与正常帧的相同,但实现简单,无需进行多次CRC解码。

1.1 故障假设

TTP/C协议的故障假设如下[2]:①节点的故障类型分为接收故障和发送故障,暂不考虑非对称故障;②节点只能在指定时间段内发送消息,并且在每个TDMA周期内,只能发送一次消息;③在每个TDMA周期内最多一个节点发生故障;④传输通道不能自发产生正确消息。

TTP/C协议通过派系避免算法(CA)和隐式确认算法(IA)的交互实现容错GMP策略。

1.2 派系避免算法

除了成员列表外,节点内部还定义了两个计数器,确认计数器AC和失败计数器FC。两个计数器在运行中遵循累加原则:①当前节点发送数据后,本地AC+1,并将自身添加到本地成员列表中;②若节点判定当前时间段接收的数据帧错误,那么FC+1,并在本地成员列表中删除对应接收节点;③若节点判断当前时间段接收的数据帧正确,则本地AC+1,并在本地成员列表中增加对应节点;④若节点判断当前时间段为空,则本地AC和FC维持原值不变,但与当前时间段对应的节点将从本地成员列表删除。

每一个节点发送数据前都会执行派系避免算法,判断本地AC是否大于FC,如果为真,节点将数据发出并清零两个计数器;否则节点进入冻结状态,不发送数据。

1.3 隐式确认算法

所谓隐式确认是指接收节点无需专门的应答帧来通知发送节点数据帧的发送正确与否,这既满足了故障假设②,又节省了带宽。隐式确认算法引入了第1确认节点和第2确认节点的概念。当节点发送数据后累加确认计数器,需等待确认节点确定自身发送数据是否正确。如果在下一次发送时仍未确认自身发送数据是否正确,则认为发生了发送故障,进入冻结状态。

当节点A发送数据后,等待下一节点B在预期时间内发送正确数据。如果A和B的成员列表在不考虑是否包含A的情形下其他各项均相同,则B是A的第1成功节点,否则A认为B节点故障,将其从成员列表删除。在B是A的第1确认节点情形下,如果B的成员列表包含A,则A被确认,AC+1,隐式确认算法结束。否则A和B中必有一个发生了故障,需等待第2确认节点。

在A找到其第1确认节点B,但又不能确认的情况下,需等待第2确认节点C,节点C的数据帧是在预期时间内正确接收的,其成员列表包含且只包含A和B中的一个,而且与A成员列表中除A、B外其他各项均相同[4-5]。如果C的成员列表中包含A,则A被确认,在A的成员列表中删除B并累加AC;否则A被C否认,B是正确的,A进入冻结状态,隐式确认算法结束。

2 容错算法的实现

本文利用Zynq的程序处理单元实现基于GMP策略的容错算法,而TTP/C总线的其他模块在可编程逻辑单元实现,主要包括集群启动模块、时钟同步模块、数据收发模块和BG模块。总线控制器原理如图1所示。

图1 总线控制器原理

在正常运行时,时钟同步模块负责将本地时钟与全局时钟进行同步,BG模块负责限制发送时间在指定时间段内,数据收发模块负责数据帧的发送和接收,包括CRC解码也在此部分实现。CPU0作为主机处理器负责运行应用程序,CPU1为协议处理器。当发送时间到后,时间触发器向协议处理器发送一个中断信号,协议处理器将应用程序中要发送的数据送入冗余总线收发器发送。非发送时间BG模块控制485驱动,使得冗余总线收发器只能接收数据帧。当冗余总线收发器接收到一个数据帧并进行CRC校验之后,向协议处理器发送一个中断信号,协议处理器立即读取接收到的数据帧和CRC校验结果。容错算法在协议处理器中实现,交叉在发送程序和接收程序中。

2.1 空帧检测算法

TTP/C总线协议并未指明如何实现空帧的检查,但协议中的容错原理明确指明了出现空帧时如何累加两个计数器,因此本文设计了一种空帧检测算法,该算法实现简单,无需时刻读取节点的本地时间以确认当前时间段是否接收到数据帧。空帧检测算法的原理如图2所示。

每次执行接收程序时,节点依据本地时间获得当前接收数据帧所处TDMA周期内时间段的编号node_rec (TTP/C协议规定每个TDMA周期可以包含4~64个时间段,在这里规定每个TDMA周期开始的时间段编号为1,并以此类推),并与上一接收数据帧的时间段编号node_rec_ old比较。如果node_rec大于node_rec_old,说明当前比较的两个数据帧处在同一TDMA周期内,只需比较两者是否差1,就可检测是否有空帧现象;如果node_rec小于node_rec_old,说明当前比较的两个数据帧处在两个TDMA周期内,此时为检测空帧现象,需将node_rec加上TDMA周期内时间段的个数MAX再做检测,检测方式与处在同一TDMA周期内的情形相同。注意:空帧检测程序执行完毕后需更新node_rec_old。

图2 空帧检测算法流程图

需特别注意,两次接收程序中间可能需要执行发送程序,发送程序中首先利用自身节点所处时间段编号Node_ Info和node_rec_old判断是否出现空帧,判断方式与接收程序类似,之后需将node_rec_old更新成Node_Info,以便下一时刻执行接收程序时,空帧检测算法能够有效执行。

2.2 容错算法的实现

容错算法由派系避免、隐式确认和空帧检查3部分组成,交叉在发送程序和接收程序中实现。发送程序中容错算法流程图如图3所示。

图3 发送程序中容错算法流程图

在发送程序中,先执行空帧检测算法,再以此判断AC与FC、隐式确认结果,如果两次判断都通过,则说明节点正常,否则节点故障进入冻结状态。

在接收程序中,节点首先判断是否需要进行隐式确认。如果不需要进行隐式确认,说明本身发送正确,只需依据接收方的成员列表判断对方是否正确;如果需要进行隐式确认,则需判断要等待哪一个确认节点,并依据隐式确认原理进行判断,同时累加AC和FC,流程如图4所示。

具体代码如下:

3 试验结果与分析

试验集群包含4个节点,每个TDMA周期分配4个时间段,并通过串口将本地成员列表和接收到的其他节点成员列表一起发送给串口助手进行显示,以此判断节点当前是否处在正常工作状态以及集群中的故障节点是哪一个。串口通信协议如下所示:

0 1 2 3~7 7 8 9 0x55 0x AA本地成员列表节点1~4的成员列表count fault校验

图4 接收程序中容错算法流程图

count表示一个TDMA周期内发送节点接收到的数据帧的个数,fault为1,表示检测到当前TDMA周期内存在节点未发送数据。成员列表采用一个8位无符号整形数表示,低4位从第0位开始分别表示1~4号节点的状态,1表示节点正常,0表示节点故障,高4位暂时未启用,默认为1。

图5所示是1号节点发送给串口助手的成员列表信息,由于1号节点不能接收到自身发送的数据帧,因此所有串口助手接收的数据中第3个数据(1号节点成员列表)为零,但是可以从第2个数据看到本地成员列表。图中方框区域是节点检测到集群故障后发送的第一组信息。由于1号节点只能在其他节点发送数据帧之后更新其各节点的成员列表,这会导致串口助手中显式的各节点成员列表存在滞后,才会出现图5中存在3个节点的成员列表不同的现象,但这并不会影响容错算法的有效性,最终3个正常节点的成员列表一致,有效判断出故障的编号,并且故障节点进入冻结状态,不再发送数据帧。如2号节点故障后,其余3个节点的成员列表变为FD,第1位数据变为0,对应的是2号节点故障,此时2号节点进入冻结状态,1号节点不再接收到2号节点发送的数据帧,count等于2,fault等于1。

图5 节点发生接收故障时容错算法效果图

结 语

本文基于Zynq平台在自主设计的TTP/C总线控制器上实现了一种基于GMP策略的容错算法,并实现了协议中未指明的空帧检测算法。试验验证表明所设计的容错算法可以有效检测并隔离集群中的故障节点,保证集群的正常运行。

[1]魏婷,张喜民,陈益,等.一种基于TTP/C协议的容错策略研究[J].航空计算技术,2008,38(3):90-93.

[2]Time-Triggered Protocol TTP/C High-Level Specification Document Protocol Version 1.1.Specification edition 1.4.3, 2003.

[3]杨福宇.TTP/C组籍算法存在的问题[J].单片机与嵌入式系统应用,2014(10):1-4.

[4]刘双与,郭丽娟,张激,等.TTP/C协议的一致性机制研究[J].计算机工程,2006,32(5):119-121.

[5]刘冬冬,张天宏,陈建,等.TTP/C协议的关键特性研究[J].计算机测量与控制,2012,20(10):69-72.

陈飞(硕士研究生),主要从事航空发动机控制系统设计与仿真;张天宏(教授),研究方向为嵌入式控制系统、系统控制与仿真。

Fault Tolerant Algorithm for TTP/C Bus Controller Based on Zynq

Chen Fei,Zhang Tianhong
(Jiangsu Province Key Laboratory of Aerospace Power System,Nanjing University of Aeronautics and Astronautics,Nanjing 210016,China)

The fault tolerant algorithm is the basis of the TTP/C bus,which is a kind of time-triggered data bus with the characteristics of strict time certainty and high reliability.A fault tolerant algorithm based on group member protocol is realized on the self-designed TTP/C bus controller for the rapid detection and isolation of the fault nodes in the TTP/C cluster.The experiment results show that the designed fault tolerant algorithm can effectively detect and isolate the fault nodes in the cluster.

fault tolerant algorithm;Zynq;TTP/C;GMP

V233.7

:A

薛士然

2016-05-11)

猜你喜欢
发送数据时间段列表
学习运用列表法
夏天晒太阳防病要注意时间段
扩列吧
一种车载自组织网络的媒体接入控制协议
带标记方式的CRDSA++协议性能分析*
发朋友圈没人看是一种怎样的体验
使用IPSec安全传输数据
测试软件简介
列表画树状图各有所长
不同时间段颅骨修补对脑血流动力学变化的影响