基于循环队列的卫星程控指令维护方法与流程

文档序号:13421354阅读:438来源:国知局
基于循环队列的卫星程控指令维护方法与流程

本发明涉及一种卫星程控指令维护方法,特别是涉及一种基于循环队列的卫星程控指令维护方法。



背景技术:

人造卫星在太空中需要按照预定计划执行特定的任务,比如在星箭分离之后执行太阳帆板展开、对日定向等一系列动作,或者当卫星经过地面接收站时提前开启测控应答机、数传终端机等单机进行星地通信。这些任务通常对动作的执行时间、执行顺序要求高,必须通过星载软件自主完成。星载软件一般通过判定时间、地理位置或者遥测状态等满足相应条件时,发送程控指令给单机,或者电源、姿控以及加热器等相关卫星部件,控制整星工作状态来完成给定任务。

随着卫星应用的日益复杂,程控任务的规模也越来越庞大。另一方面,程控指令对执行时间、执行顺序要求高,指令的错乱、丢失或者执行时间超出预期范围都可能会导致任务的失败,因此迫切需要一种可靠的程控指令维护方法,确保所有指令都能按照预定的时间范围、顺序准确发送。

从程序设计的角度看,可采用fifo(firstinfirstout)队列、链表或者数组等数据结构来对程控指令进行维护,但是这些数据结构存在如下问题:一、安全性问题,动态开辟内存空间的数据结构比如链表极易导致内存泄露问题,会严重损害星载软件的安全性和可靠性;二、星载软件在某个时间段内可能会产生多个程控指令序列,而后产生的指令序列可能因为紧急程度高需要被先执行,采用普通fifo类型的数据结构不能满足应用要求;三、效率问题,采用普通数组等数据结构维护程控指令时,需要轮询才能够获得所有满足发送条件的程控指令,影响指令发送效率;四、星载软件作为嵌入式软件,代码量受到严格的限制,采用链表等复杂的数据结构势必会导致代码量大幅增加,在工程运用中出现困难。



技术实现要素:

本发明所要解决的技术问题是提供一种基于循环队列的卫星程控指令维护方法,其针对程控指令类型建立循环队列用于指令的存储,队列中所有指令基于时间排序,星载软件通过周期性地查询获得满足发送条件的指令并完成发送,或者在指令并发量未超过额定阈值时对指令作延迟处理,确保所有指令能够在合理时间范围内有序发送,由于指令队列采用静态地方式分配内存空间,并且队列操作简单,有利于其在工程实践中实施运用。

本发明是通过下述技术方案来解决上述技术问题的:一种基于循环队列的卫星程控指令维护方法,其包括下列步骤:

步骤一,星载软件通过基于时间排序的循环队列来存储和维护程控指令;

步骤二,各程控任务产生的指令按照发送通道的类别及执行时间顺序插入到相应指令队列中等待执行;

步骤三,星载软件周期性地查询队列;

步骤四,星载软件在指令满足发送条件时完成指令的发送,或者在指令并发量未超过额定阈值时对指令作延迟处理,确保所有指令在合理时间范围内按照其所在指令序列中的顺序完成发送。

优选地,所述指令队列针对各指令发送通道分别建立的程控指令缓存队列,采用静态内存空间分配,并且队列中指令是基于指令的时间码进行排序。

优选地,所述指令队列通过队头指针和队尾指针来对队列元素进行插入、查询、获取操作,并在逻辑上首尾相连,循环利用队列空间。

优选地,所述指令发送通道为程控指令路由到指令接收方的物理传输通道。

优选地,所述程控任务为执行不同程控作业的功能模块或者函数,程控任务产生不同的程控指令序列,并且程控任务因紧急程度不同而具有不同的优先级,通过对优先级的设置,使得任何周期内指令并发量不大于阈值n。

优选地,所述程控指令序列为具有先后执行关系的一系列程控指令,同一序列中指令间的时间间隔不小于p*t(p>=1),其中p为所属程控任务的优先级,t为指令的发送/检查周期。

优选地,所述程控指令包括时间码、目的地址和指令码内容,其中时间码为指令的执行时间;目的地址表示指令的接收执行对象;指令码内容指明具体执行的程控动作,由指令接收方负责解释执行。

优选地,所述检查周期包括下列步骤:

步骤十一,查看队列是否为空,若为空则返回,等待下一周期进行检查,否则进入下一步骤;

步骤十二,查看队头指令时间是否到达执行时刻,即tcmd<=tnow是否成立,其中tnow为当前时间,若成立则表明指令达到执行时间,进入下一步骤,否则返回,等待下一检查周期重复步骤十一;

步骤十三,查看指令并发量是否大于阈值,即ncmd>n,若小于阈值,则进入下一步骤,否则等待下一检查周期重复步骤十一,其中ncmd为指令的并发量(进入检查前ncmd初始化为0),n为指令并发量阈值;

步骤十四,从队列中获取队头指令;

步骤十五,判断当前指令是否超时,若未超时,即指令执行时间tcmd>=tnow-δt,进入下一步骤进行处理,否则丢弃,返回步骤十一继续检查,其中,tnow表示当前时间,δt为时间裕量;

步骤十六,指令并发量ncmd加1;

步骤十七,判断当前周期内是否已有指令发送,若无指令发送则发送指令,设置本周期已发送指令标志,返回步骤十一继续检查,否则,进入下一步骤;

步骤十八,对指令进行延时处理,即将指令时间码加上δt后重新插入到指令队列中,其中δt为延时时间,返回步骤十一继续检查。

优选地,所述步骤十五中多次超时的指令在后续周期内应完成发送,避免超时而丢弃,要求t<δt<t+(t-δt)*n。

优选地,所述步骤十八中指令做延迟处理后需要在后续周期内被优先检查并尽快完成发送,要求t-t/n<δt<t。

本发明的积极进步效果在于:本发明基于循环队列的卫星程控指令维护方法针对程控指令类型建立循环队列用于指令的存储,队列中所有指令基于时间排序,星载软件通过周期性地查询获得满足发送条件的指令并完成发送,或者在指令并发量未超过额定阈值时对指令作延迟处理,确保所有指令能够在合理时间范围内有序发送,由于指令队列采用静态地方式分配内存空间,并且队列操作简单,有利于其在工程实践中实施运用。

附图说明

图1为本发明的实施例中oc门指令的查询和延迟处理流程图。

图2a至图2d为本发明实施例四个中程控指令格式的示意图。

图3为本发明的实施效果示意图。

具体实施方式

下面结合附图给出本发明较佳实施例,以详细说明本发明的技术方案。

如图1至图3所示,本发明基于循环队列的卫星程控指令维护方法包括下列步骤:

步骤一,星载软件通过基于时间排序的循环队列来存储和维护程控指令;

步骤二,各程控任务产生的指令按照发送通道的类别及执行时间顺序插入到相应指令队列中等待执行;

步骤三,星载软件周期性地查询队列;

步骤四,星载软件在指令满足发送条件时完成指令的发送,或者在指令并发量未超过额定阈值时对指令作延迟处理,确保所有指令在合理时间范围内按照其所在指令序列中的顺序完成发送。

指令队列针对各指令发送通道分别建立的程控指令缓存队列,采用静态内存空间分配,并且队列中指令是基于指令的时间码进行排序。

指令队列通过队头指针和队尾指针来对队列元素进行插入、查询、获取操作,并在逻辑上首尾相连,循环利用队列空间。

指令发送通道为程控指令路由到指令接收方的物理传输通道。

程控任务为执行不同程控作业的功能模块或者函数,程控任务产生不同的程控指令序列,并且程控任务因紧急程度不同而具有不同的优先级,通过对优先级的设置,使得任何周期内指令并发量不大于阈值n。

程控指令序列为具有先后执行关系的一系列程控指令,同一序列中指令间的时间间隔不小于p*t(p>=1),其中p为所属程控任务的优先级,t为指令的发送/检查周期。

程控指令包括时间码、目的地址和指令码内容,其中时间码为指令的执行时间;目的地址表示指令的接收执行对象;指令码内容指明具体执行的程控动作,由指令接收方负责解释执行。

检查周期包括下列步骤:

步骤十一,查看队列是否为空,若为空则返回,等待下一周期进行检查,否则进入下一步骤;

步骤十二,查看队头指令时间是否到达执行时刻,即tcmd<=tnow是否成立,其中tnow为当前时间,若成立则表明指令达到执行时间,进入下一步骤,否则返回,等待下一检查周期重复步骤十一;

步骤十三,查看指令并发量是否大于阈值,即ncmd>n,若小于阈值,则进入下一步骤,否则等待下一检查周期重复步骤十一,其中ncmd为指令的并发量(进入检查前ncmd初始化为0),n为指令并发量阈值;

步骤十四,从队列中获取队头指令;

步骤十五,判断当前指令是否超时,若未超时,即指令执行时间tcmd>=tnow-δt,进入下一步骤进行处理,否则丢弃,返回步骤十一继续检查,其中,tnow表示当前时间,δt为时间裕量;

步骤十六,指令并发量ncmd加1;

步骤十七,判断当前周期内是否已有指令发送,若无指令发送则发送指令,设置本周期已发送指令标志,返回步骤十一继续检查,否则,进入下一步骤;

步骤十八,对指令进行延时处理,即将指令时间码加上δt后重新插入到指令队列中,其中δt为延时时间,返回步骤十一继续检查。

步骤十五中多次超时的指令在后续周期内应完成发送,避免超时而丢弃,要求t<δt<t+(t-δt)*n。

步骤十八中指令做延迟处理后需要在后续周期内被优先检查并尽快完成发送,要求t-t/n<δt<t。

卫星程控指令队列针对各类指令发送通道分别建立的程控指令缓存队列。指令队列采用静态内存空间分配,并且队列中指令是基于指令的时间码进行排序的。指令队列通过队头指针和队尾指针来对队列元素进行存取访问,并在逻辑上首尾相连,循环利用队列空间。队列的具体操作包括指令的插入、查询、获取等操作。其中:插入时首先要根据指令时间码在队列中查找插入位置,并更新队尾指针;查询主要是查看队头指令的时间码信息;指令的获取是指从指令队列中取出队头指令,并更新队头指针。

程控指令发送通道,是指程控指令路由到指令接收方的物理传输通道,比如1553b总线或者rs-422串行数据链路。

程控任务是执行不同程控作业的功能模块,比如进行加热器开关的热控模块;执行星箭分离的飞行程序模块;执行数传开关机以及记录回放操作的数传程控模块;控制卫星姿态等操作的姿控程控模块等。不同程控任务产生不同的指令序列。由于各程控任务的紧急程度不同,因此具有不同的优先级。优先级越高,程控任务就越紧急。

程控指令序列,即具有先后执行关系的一系列程控指令。由于同一指令序列中某些指令的执行依赖于前面指令的完成,因此指令序列执行具有严格的顺序,在队列缓存过程中必须保持不变。本发明中要求同一序列中指令间的时间间隔不小于p*t(p>=1)。其中p为所属程控任务的优先级,p值越小,表明任务优先级越高,指令需要尽快执行。相反,p值越大,表明任务优先级越低,则指令的紧急程度也就越低。t为指令的发送(或检查)周期。

程控指令包括时间码、目的地址和指令码内容,其中时间码为指令的执行时间,指令在队列中的位置由它们的时间码决定;目的地址表示指令的接收执行对象。指令发送通道不同,也会导致程控指令在格式上的差异,比如通过1553b总线传输的指令需要通过远程终端地址表示目的地址,而通过rs-422数据线传输的指令可能不需要目的地址信息。指令码内容指明具体执行的程控动作,由指令接收方负责解释执行。

指令并发,是指某个指令发送周期内存在多条满足发送条件的指令。因为程控任务产生的指令序列中要求指令间隔不小于p*t(p>=1),所以存在指令并发是由于多个程控任务产生不同的程控指令序列,各指令序列在发送时间上发生重叠。因此会存在某个发送周期内有多条待发送指令的情况。通过对程控任务优先级p的设置,使得任何周期内指令并发量不大于阈值n,否则会出现指令丢失。

在具体实施例中,星载软件运行于星载计算机中,星载计算机通过1553b总线、rs-422等数据链路与星上其它单机或者部件进行通信。星载计算机使用5个外部中断,优先级由高到底依次为:(1)500毫秒周期的遥测中断;(2)200毫秒周期的oc门指令发送中断;(3)遥控注数中断;(4)ad采样中断;(5)1553b总线通讯中断。

所述的星载软件响应五种外部中断信号来完成遥测、oc门指令发送、遥控处理、ad采样和总线通信等多种星务管理任务。对于实时性要求不高的中断,例如遥控注数中断和1553b总线通讯中断,星载软件以轮询的方式处理,不打断处理器运行。而500毫秒周期的遥测中断、ad采样中断、200毫秒周期的oc门指令发送中断采用中断任务的方式实现,确保这些处理的实时性。

在500毫秒周期的遥测主任务中,星载软件完成飞行程控、轨道计算与数传程控、锂电池程控、热控、应急程控、总线通信(包含总线指令发送)等多个功能。ad采样任务用来采集模拟量遥测,软件通过启动-获取数据的模式与底层fpga交互完成模拟量遥测采集。200毫秒周期的任务是专门处理oc门指令发送,单个周期内只能发送1条oc门指令。

星载软件在运行周期内,可能会产生多个程控指令序列,比如飞行程控和热控等。本例中根据各程控任务的紧急程度设置不同的优先级,比如:飞行程控对指令的实时性要求最高,因此其优先级最高,p设置为1;热控任务对指令的实时性要求最低,设置为2。

程控任务产生各类程控指令,具体分为两类:通过rs-422链路传输的oc门指令和通过1553b总线传输的总线指令。指令在传输形式上有不同,oc门指令为30字节长的一串pcm码(图2a),总线指令为2字节的指令码(图2b),如图2所示。

本实施例针对oc门指令和总线指令建立两种指令队列来维护所有程控指令。由于本实施例中星载软件为多任务形式,oc门指令队列和总线指令队列作为公共资源,可被软件的多个任务同时访问,为确保指令队列内容的一致性和完整性,本实施例中对队列的存取访问采用了互斥锁保护机制。指令队列中的oc门指令(图2c)和总线指令(图2d),其格式与指令在通道上传输的格式不同,由软件在指令发送时进行格式的转换,生成能在指令通道上传输的有效指令格式,完成指令的发送。

如图1所示,为本发明实施例中oc门指令的查询和延迟处理流程图。oc门指令发送周期t为200毫秒,所以星载软件会以200毫秒为周期定期执行该流程。其中,指令并发量阈值n设置为16,延时时间δt设置为198毫秒,时间裕量δt为230毫秒。

如图3所示,为本发明实施效果示意图。例中飞行程控指令序列含有3条oc门指令(oc1,oc2,oc3),时间间隔为200ms(p=1)。热控指令序列含有3条oc门指令(oc4,oc5,oc6),时间间隔为400ms(p=2)。每个检查周期内将满足发送条件的指令进行发送或者延迟处理,直至完成所有指令的正确发送。例如:检查时刻0,没有满足发送条件的指令,不作任何处理;在检查时刻1,oc1和oc4同时满足发送条件,根据指令执行时间顺序,发送oc1,并将oc4做延迟处理(延迟198ms后生成oc4-1);在检查时刻2,根据指令执行时间顺序,发送oc2,并将oc4-1再次做延迟处理,依次类推。在整个指令发送过程中,oc4延迟3次,oc5延迟2次,oc6延迟1次。可见,在执行时间上出现重叠的指令序列,被延迟处理的可能性最大,因此在软件设计时,需要充分考虑程控任务优先级p值和并发量阈值n的设置,从而避免指令在队列中的过度延迟而导致丢弃。值得注意的是,延迟处理不对指令序列中指令的发送顺序造成影响,比如热控指令序列的执行顺序仍然是oc4,oc5,oc6。

与现有技术相比,本发明具有如下有益效果:

一,采用静态分配内存空间的方式实现程控指令的维护和管理,避免了动态分配内存及其相关的内存泄漏等程序安全性问题,有利于星载软件的可靠性和安全性;

二,程控指令队列基于时间排序,软件在检查周期内只需查看队头指令而无需轮询整个队列,指令发送效率高;

三,在指令的查询及发送过程中,通过查询时间裕量设计和延迟处理设计,确保所有指令在规定时间范围内按照其所在指令序列中的顺序完成发送,避免了指令丢失和发送顺序错乱的问题;

四,基于时间排序的程控指令队列维护方法简单,包括指令的插入、查询、获取等基本操作,使得该方法在实现上简洁高效,不会造成庞大的代码量。

综上所述,本发明基于循环队列的卫星程控指令维护方法针对程控指令类型建立循环队列用于指令的存储,队列中所有指令基于时间排序,星载软件通过周期性地查询获得满足发送条件的指令并完成发送,或者在指令并发量未超过额定阈值时对指令作延迟处理,确保所有指令能够在合理时间范围内有序发送,由于指令队列采用静态地方式分配内存空间,并且队列操作简单,有利于其在工程实践中实施运用。

以上所述的具体实施例,对本发明的解决的技术问题、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1