本发明属于飞行器管理系统设计技术,涉及一种基于ARINC659总线的任务同步方法。
背景技术:
目前大多数具有高可靠强实时性要求的计算机控制系统均采用同步运行的多个冗余设备实现容错需求,传统的同步设计是基于先解决不同设备的任务同步,然后再解决消息的同步。然而基于ARINC659数据总线的高可靠强实时性计算机控制系统,以数据总线的时间触发机制将消息窗口的同步放在了第一位,它通过特有的总线级“初始化同步”、“短同步”和“长同步”机制实现总线上各节点的通信窗口同步。这一矛盾对于简单系统来说并不重要,可将任务同步和通信窗口同步合二为一(将周期窗口开始时间作为任务同步完成时间),但对于复杂系统,比如任务需要在多个时间框架内完成(即任务需要在多个周期的通信窗口完成),需要设计一种基于ARINC659总线的任务同步方法,保证复杂系统的任务同步运行。
技术实现要素:
本发明的目的:传统的同步设计是基于先解决不同设备的任务同步,然后再解决消息的同步。不适用与采用时间触发架构的ARINC659总线的复杂系统,本发明设计一种基于ARINC659总线的任务同步方法,解决了该类复杂系统任务同步运行问题,保证复杂系统的任务同步运行。
本发明的技术方案:
一种基于ARINC659总线的任务同步方法,包括以下步骤:
步骤I任务同步初始化,系统上电硬件初始化完成后立即调度,完成任务同步所需软硬件环境准备;
步骤II任务初始同步,任务同步初始化完成后,系统周期任务开始前调度,使需要同步执行的周期任务在同一时间点开始进入周期任务;
步骤III任务正常同步,任务初始同步完成后首次调度,之后在每周期任务执行完成后调度,使需要同步执行的周期任务在同一时间点根据相同的主帧和小帧执行相同的周期任务。
所述的一种基于ARINC659总线的任务同步方法,所述步骤I任务同步初始化包括,屏蔽任务周期开始中断,主帧计数器清0,小帧计数器清0,659消息发送数据区清0。
所述的一种基于ARINC659总线的任务同步方法,所述步骤II任务初始同步具体包括:
步骤A:设置初始同步等待时间;
步骤B:判断初始同步是否超时,如果超时转步骤C;否则转步骤D;
步骤C:记录初始同步失步,结束初始同步任务;
步骤D:本通道659发送区填写初始同步标志;
步骤E:允许任务周期开始中断;
步骤F:判断任务周期中断等待是否超时,如果超时转步骤G;否则转步骤H;
步骤G:进入安全状态、记录总线故障、等待系统复位;
步骤H:判断任务周期开始中断是否到达,如果中断已到转步骤I;否则转步骤F;
步骤I:等待本周期数据交互完成;
步骤J:读取X通道发来的659消息;
步骤K:判断X通道是否有消息?如果有转步骤L;否则转步骤B;
步骤L:判是该消息是否为初始同步消息?如果不是转步骤B;否则初始同步成功,结束初始同步。
所述的一种基于ARINC659总线的任务同步方法,所述步骤III任务正常同步包括:
步骤1:本通道659发送区填写正常同步标志、小帧、主帧、消息负载;
步骤2:小帧数加1;
步骤3:判断小帧数是否到达循环点,如果到达转步骤4;否则转步骤6;
步骤4:小帧数清0;
步骤5:主帧数加1;
步骤6:判断任务周期开始中断等待是否超时,如果超时转步骤7;否则转步骤8;
步骤7:进入安全状态、记录总线故障、等待系统复位;
步骤8:判断任务周期开始中断是否到达,如果中断已到转步骤9;否则转步骤6;
步骤9:等待本周期数据交互完成;
步骤10:读取X通道发来的659消息;
步骤11:判断X通道是否有消息?如果有消息转步骤12;否则转步骤14;
步骤12:判断该消息是否为正常同步消息?如果是转步骤13;否则转步骤14;
步骤13:判断本通道主帧与X通道主帧一致否?如果一致转步骤16,否则转步骤14;
步骤14:本通道主帧等于两通道主帧的大值;
步骤15:记录主帧失步故障;
步骤16:判断本通道小帧与X通道小帧一致否?如果一致结束正常同步,否则转步骤17;
步骤17:本通道小帧等于两通道小帧的大值;
步骤18:记录小帧失步故障。
本发明具有的优点效果:本发明针对基于ARINC659总线的复杂系统,提出相关的任务同步方法,解决了该类复杂系统任务同步运行问题。该方法并不局限于在基于ARINC659总线的系统中使用,可以被其他采用时间触发总线的高可靠嵌入式控制系统所采用。
说明书附图
图1 ARINC659消息数据结构;
图2 任务同步初始化Task_Sync_Init();
图3 任务初始同步Task_Init_Sync();
图4 任务正常同步Task_Sync()。
具体实施方式:
基于ARINC659总线的任务同步方法通过周期窗口开始事件,利用消息内容,启动同步算法,使得不同节点上的应用任务可以在同一时间执行同一系统定义的任务内容。实施内容包括:
1、ARINC659总线窗口定义典型示例
VER 00000001 07 2;版本号、次版本号、机架位置。
COLD SSYNC;第一条命令必须是SSYNC。
INT ;周期窗口开始事件,作为任务周期开始中断
BOW 40;窗口#1,字数=40
TX 2;任务模块2发送消息。
RX 3 4 5;任务模3、4、5块接收消息。
……
BOW 40;窗口#4,字数=40
TX 5;任务模块5发送消息。
RX 2 3 4;任务模块2、3、4接收消息。
……
FREE XXX;等待XXXXus,总线周期计时对齐
在总线窗口定义中,定义了周期窗口开始事件和消息通讯窗口,用于任务同步和任务之间的消息通讯窗口。
2、ARINC659消息数据结构ARINC659_Stru示例(图1)。
◆消息状态字Msg_Stru;
——31位-24位:保留;
——23位-16位:;
10101010:消息有效;
其它:消息无效;
——15位-12位:保留;
——11位-8位:
1111:初始同步标记;
1010:正常同步标记;
其它:维护消息标记;
——7位-0位:小帧内总线帧计数器;
◆小帧计数器Minor_Cnt:应用任务小帧值;
◆消息数据Msg_Load:应用消息负载(小于253个字);
◆校验字Msg_Chk:除消息状态字外所有字的校验和。
3、任务同步初始化
任务调度时间:系统上电硬件初始化完成后立即调度。
任务功能:完成任务同步所需软硬件环境准备。
任务步骤依次包括:屏蔽任务周期开始中断,主帧计数器清0,小帧计数器清0,659消息发送数据区清0。
任务流程如图2所示。
4、任务初始同步
任务调度时间:系统周期任务开始前调度。
任务功能:使需要同步执行的周期任务在同一时间点开始进入周期任务。
任务步骤包括:
步骤M:设置初始同步等待时间;
步骤N:判断初始同步是否超时,如果超时转步骤C;否则转步骤D;
步骤O:记录初始同步失步,结束初始同步任务;
步骤P:本通道659发送区填写初始同步标志;
步骤Q:允许任务周期开始中断;
步骤R:判断任务周期中断等待是否超时,如果超时转步骤G;否则转步骤H;
步骤S:进入安全状态、记录总线故障、等待系统复位;
步骤T:判断任务周期开始中断是否到达,如果中断已到转步骤I;否则转步骤F;
步骤U:等待本周期数据交互完成;
步骤V:读取X通道发来的659消息;
步骤W:判断X通道是否有消息?如果有转步骤L;否则转步骤B;
步骤X:判是该消息是否为初始同步消息?如果不是转步骤B;否则初始同步成功,结束初始同步。
任务流程如图3所示。
4、任务正常同步
任务调度时间:任务初始同步完成首次调度,每周期任务执行完成后调度。
任务功能:使需要同步执行的周期任务在同一时间点根据相同的主帧和小帧执行相同的周期任务。
任务步骤包括:
步骤19:本通道659发送区填写正常同步标志、小帧、主帧、消息负载;
步骤20:小帧数加1;
步骤21:判断小帧数是否到达循环点,如果到达转步骤4;否则转步骤6;
步骤22:小帧数清0;
步骤23:主帧数加1;
步骤24:判断任务周期开始中断等待是否超时,如果超时转步骤7;否则转步骤8;
步骤25:进入安全状态、记录总线故障、等待系统复位;
步骤26:判断任务周期开始中断是否到达,如果中断已到转步骤9;否则转步骤6;
步骤27:等待本周期数据交互完成;
步骤28:读取X通道发来的659消息;
步骤29:判断X通道是否有消息?如果有消息转步骤12;否则转步骤14;
步骤30:判断该消息是否为正常同步消息?如果是转步骤13;否则转步骤14;
步骤31:判断本通道主帧与X通道主帧一致否?如果一致转步骤16,否则转步骤14;
步骤32:本通道主帧等于两通道主帧的大值;
步骤33:记录主帧失步故障;
步骤34:判断本通道小帧与X通道小帧一致否?如果一致结束正常同步,否则转步骤17;
步骤35:本通道小帧等于两通道小帧的大值;
步骤36:记录小帧失步故障。
任务流程如图4所示。